You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by ms...@apache.org on 2020/02/25 23:08:59 UTC
[incubator-teaclave] 04/04: [legacy] Delete the legacy directory
This is an automated email from the ASF dual-hosted git repository.
mssun pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git
commit 744e9a1371b8b2d571b94f1c46d39b8068412244
Author: Mingshen Sun <bo...@mssun.me>
AuthorDate: Tue Feb 25 14:58:13 2020 -0800
[legacy] Delete the legacy directory
---
legacy/cli/Cargo.toml | 20 -
legacy/cli/README.md | 107 -
legacy/cli/src/main.rs | 188 -
legacy/docs/api.md | 1116 --
legacy/docs/case_study.md | 135 -
legacy/docs/design.md | 67 -
legacy/docs/faq.md | 13 -
legacy/docs/hms_and_nbsp.md | 74 -
legacy/docs/how_to_add_your_function.md | 214 -
legacy/docs/how_to_build.md | 99 -
legacy/docs/how_to_run.md | 35 -
legacy/docs/images/ai_demo_snapshot.png | Bin 176072 -> 0 bytes
legacy/docs/images/basic-task-workflow.png | Bin 66900 -> 0 bytes
legacy/docs/images/blockchain.png | Bin 1240469 -> 0 bytes
legacy/docs/images/client-read-workflow.png | Bin 49438 -> 0 bytes
legacy/docs/images/client-write-workflow.png | Bin 52627 -> 0 bytes
legacy/docs/images/faas_cloud.png | Bin 672203 -> 0 bytes
legacy/docs/images/five_levels.png | Bin 106279 -> 0 bytes
legacy/docs/images/logo.png | Bin 152586 -> 0 bytes
legacy/docs/images/multiparty-task-workflow.png | Bin 219777 -> 0 bytes
legacy/docs/images/overview.png | Bin 437024 -> 0 bytes
legacy/docs/images/pai.png | Bin 333563 -> 0 bytes
legacy/docs/images/performance_ai.png | Bin 1792695 -> 0 bytes
legacy/docs/images/performance_psi.png | Bin 731427 -> 0 bytes
legacy/docs/images/performance_spark.png | Bin 450932 -> 0 bytes
legacy/docs/images/platforms.png | Bin 676545 -> 0 bytes
legacy/docs/images/psi.png | Bin 307369 -> 0 bytes
legacy/docs/images/raft.png | Bin 349498 -> 0 bytes
legacy/docs/images/task-rw-workflow.png | Bin 84852 -> 0 bytes
legacy/docs/images/worker-read-workflow.png | Bin 51354 -> 0 bytes
legacy/docs/images/worker-write-workflow.png | Bin 58534 -> 0 bytes
legacy/docs/mutual_attestation.md | 43 -
legacy/docs/repo_structure.md | 35 -
legacy/docs/rust_guideline.md | 42 -
legacy/docs/threat_model.md | 40 -
legacy/docs/workflow.md | 28 -
legacy/examples/README.md | 74 -
legacy/examples/dbscan/Cargo.toml | 12 -
legacy/examples/dbscan/dbscan_demo.sh | 31 -
legacy/examples/dbscan/expected_result.txt | 7 -
legacy/examples/dbscan/input.txt | 6 -
legacy/examples/dbscan/src/main.rs | 101 -
legacy/examples/gaussian_mixture_model/Cargo.toml | 12 -
.../gaussian_mixture_model/expected_result.txt | 7 -
.../gaussian_mixture_model_demo.sh | 32 -
legacy/examples/gaussian_mixture_model/input.txt | 4 -
legacy/examples/gaussian_mixture_model/src/main.rs | 110 -
legacy/examples/gaussian_mixture_model/test.txt | 3 -
legacy/examples/gaussian_processes/Cargo.toml | 12 -
.../gaussian_processes/expected_result.txt | 6 -
.../gaussian_processes/gaussian_processes_demo.sh | 31 -
legacy/examples/gaussian_processes/input.txt | 10 -
legacy/examples/gaussian_processes/src/main.rs | 117 -
legacy/examples/gaussian_processes/target.txt | 10 -
legacy/examples/gaussian_processes/test.txt | 5 -
legacy/examples/gbdt/Cargo.toml | 14 -
legacy/examples/gbdt/expected_result.txt | 31 -
legacy/examples/gbdt/gbdt_demo.sh | 53 -
legacy/examples/gbdt/src/main.rs | 229 -
legacy/examples/gbdt/test.txt | 30 -
legacy/examples/gbdt/train.txt | 120 -
legacy/examples/gen_linear_model/Cargo.toml | 12 -
.../examples/gen_linear_model/expected_result.txt | 2 -
.../gen_linear_model/gen_linear_model_demo.sh | 32 -
legacy/examples/gen_linear_model/input.txt | 4 -
legacy/examples/gen_linear_model/src/main.rs | 117 -
legacy/examples/gen_linear_model/target.txt | 4 -
legacy/examples/gen_linear_model/test.txt | 1 -
legacy/examples/image_resizing/Cargo.toml | 15 -
legacy/examples/image_resizing/expected_result.txt | 1 -
.../examples/image_resizing/image_resize_demo.sh | 37 -
legacy/examples/image_resizing/logo.png | Bin 21765 -> 0 bytes
legacy/examples/image_resizing/src/main.rs | 110 -
legacy/examples/kmeans/Cargo.toml | 13 -
legacy/examples/kmeans/expected_result.txt | 3 -
legacy/examples/kmeans/kmeans_demo.sh | 33 -
legacy/examples/kmeans/src/main.rs | 103 -
legacy/examples/kmeans/test_data.txt | 9 -
legacy/examples/lin_reg/Cargo.toml | 12 -
legacy/examples/lin_reg/expected_result.txt | 2 -
legacy/examples/lin_reg/input.txt | 270 -
legacy/examples/lin_reg/lin_reg_demo.sh | 31 -
legacy/examples/lin_reg/src/main.rs | 117 -
legacy/examples/lin_reg/target.txt | 270 -
legacy/examples/lin_reg/test.txt | 1 -
legacy/examples/logistic_reg/Cargo.toml | 12 -
legacy/examples/logistic_reg/expected_result.txt | 1 -
legacy/examples/logistic_reg/logistic_reg_demo.sh | 42 -
legacy/examples/logistic_reg/src/main.rs | 194 -
legacy/examples/logistic_reg/target.txt | 270 -
legacy/examples/logistic_reg/test.txt | 1 -
legacy/examples/logistic_reg/train.txt | 270 -
legacy/examples/naive_bayes/Cargo.toml | 12 -
legacy/examples/naive_bayes/expected_result.txt | 6 -
legacy/examples/naive_bayes/input.txt | 7 -
legacy/examples/naive_bayes/naive_bayes_demo.sh | 31 -
legacy/examples/naive_bayes/src/main.rs | 109 -
legacy/examples/naive_bayes/target.txt | 6 -
legacy/examples/neural_net/Cargo.toml | 12 -
legacy/examples/neural_net/input.txt | 5 -
legacy/examples/neural_net/neural_net_demo.sh | 31 -
legacy/examples/neural_net/src/main.rs | 116 -
legacy/examples/neural_net/target.txt | 5 -
legacy/examples/neural_net/test.txt | 2 -
legacy/examples/online_decrypt/Cargo.toml | 16 -
.../examples/online_decrypt/online_decrypt_demo.sh | 37 -
legacy/examples/online_decrypt/src/main.rs | 197 -
legacy/examples/online_decrypt/test.txt | 1 -
.../examples/private_join_and_compute/Cargo.toml | 11 -
legacy/examples/private_join_and_compute/data.csv | 20002 -------------------
.../private_join_and_compute/four_party_bench.sh | 56 -
.../four_party_data/bank_a.txt | 6000 ------
.../four_party_data/bank_b.txt | 6000 ------
.../four_party_data/bank_c.txt | 6000 ------
.../four_party_data/bank_d.txt | 6000 ------
.../private_join_and_compute/four_party_demo.sh | 62 -
.../four_party_results/result1.txt | 198 -
.../four_party_results/result2.txt | 198 -
.../four_party_results/result3.txt | 198 -
.../four_party_results/result4.txt | 198 -
.../examples/private_join_and_compute/src/main.rs | 197 -
.../three_party_data/bank_a.txt | 5 -
.../three_party_data/bank_b.txt | 5 -
.../three_party_data/bank_c.txt | 5 -
.../private_join_and_compute/three_party_demo.sh | 51 -
.../three_party_results/result1.txt | 6 -
.../three_party_results/result2.txt | 6 -
.../three_party_results/result3.txt | 6 -
legacy/examples/py_file/Cargo.toml | 12 -
legacy/examples/py_file/data/1.txt | 53 -
legacy/examples/py_file/payload.py | 35 -
legacy/examples/py_file/py_file.sh | 21 -
legacy/examples/py_file/py_result.txt | 1 -
legacy/examples/py_file/src/main.rs | 69 -
legacy/examples/py_logistic_reg/Cargo.toml | 12 -
legacy/examples/py_logistic_reg/data/predict.txt | 5 -
legacy/examples/py_logistic_reg/data/train.txt | 100 -
legacy/examples/py_logistic_reg/payload.py | 141 -
legacy/examples/py_logistic_reg/py_logistic_reg.sh | 23 -
legacy/examples/py_logistic_reg/py_result.txt | 1 -
legacy/examples/py_logistic_reg/src/main.rs | 75 -
legacy/examples/py_matrix_multiply/Cargo.toml | 12 -
legacy/examples/py_matrix_multiply/payload.py | 16 -
.../py_matrix_multiply/py_matrix_multiply.sh | 21 -
legacy/examples/py_matrix_multiply/py_result.txt | 1 -
legacy/examples/py_matrix_multiply/src/main.rs | 64 -
legacy/examples/quickstart/Cargo.toml | 13 -
legacy/examples/quickstart/run.sh | 18 -
legacy/examples/quickstart/src/main.rs | 141 -
legacy/examples/quickstart_c/main.c | 83 -
legacy/examples/quickstart_c/run.sh | 18 -
legacy/examples/rsa_sign/Cargo.toml | 12 -
legacy/examples/rsa_sign/README.md | 16 -
legacy/examples/rsa_sign/data.sig | Bin 256 -> 0 bytes
legacy/examples/rsa_sign/data.txt | 1 -
legacy/examples/rsa_sign/key.der | Bin 1191 -> 0 bytes
legacy/examples/rsa_sign/rsa_sign.sh | 26 -
legacy/examples/rsa_sign/src/main.rs | 108 -
legacy/examples/svm/Cargo.toml | 12 -
legacy/examples/svm/expected_result.txt | 2 -
legacy/examples/svm/input.txt | 4 -
legacy/examples/svm/src/main.rs | 117 -
legacy/examples/svm/svm_demo.sh | 32 -
legacy/examples/svm/target.txt | 4 -
legacy/examples/svm/test.txt | 1 -
legacy/mesatee_core/Cargo.toml | 50 -
legacy/mesatee_core/ipc_attribute/Cargo.toml | 12 -
legacy/mesatee_core/ipc_attribute/src/lib.rs | 76 -
legacy/mesatee_core/src/config/external.rs | 61 -
legacy/mesatee_core/src/config/internal.rs | 82 -
legacy/mesatee_core/src/config/mod.rs | 123 -
legacy/mesatee_core/src/db.rs | 62 -
legacy/mesatee_core/src/error.rs | 551 -
legacy/mesatee_core/src/ipc/channel/app_dep.rs | 147 -
legacy/mesatee_core/src/ipc/channel/mod.rs | 21 -
legacy/mesatee_core/src/ipc/channel/tee_dep.rs | 52 -
legacy/mesatee_core/src/ipc/macros.rs | 129 -
legacy/mesatee_core/src/ipc/mod.rs | 65 -
legacy/mesatee_core/src/ipc/protos/command.rs | 54 -
legacy/mesatee_core/src/ipc/protos/ecall.rs | 77 -
legacy/mesatee_core/src/ipc/protos/mod.rs | 21 -
legacy/mesatee_core/src/ipc/sgx.rs | 20 -
legacy/mesatee_core/src/lib.rs | 77 -
legacy/mesatee_core/src/prelude.rs | 61 -
legacy/mesatee_core/src/rpc/channel.rs | 66 -
legacy/mesatee_core/src/rpc/mod.rs | 135 -
legacy/mesatee_core/src/rpc/sendrecv.rs | 73 -
legacy/mesatee_core/src/rpc/server.rs | 69 -
legacy/mesatee_core/src/rpc/sgx/client.rs | 120 -
legacy/mesatee_core/src/rpc/sgx/mod.rs | 170 -
legacy/mesatee_core/src/rpc/sgx/ra.rs | 179 -
legacy/mesatee_core/src/rpc/sgx/server.rs | 93 -
legacy/mesatee_core/src/rpc/unix/mod.rs | 175 -
legacy/mesatee_sdk/Cargo.toml | 15 -
legacy/mesatee_sdk/c_sdk/Cargo.toml | 19 -
legacy/mesatee_sdk/c_sdk/include/mesatee/mesatee.h | 80 -
.../mesatee_sdk/c_sdk/include/mesatee/visibility.h | 32 -
legacy/mesatee_sdk/c_sdk/src/auditor_set.rs | 85 -
legacy/mesatee_sdk/c_sdk/src/context.rs | 160 -
legacy/mesatee_sdk/c_sdk/src/enclave_info.rs | 79 -
legacy/mesatee_sdk/c_sdk/src/lib.rs | 82 -
legacy/mesatee_sdk/c_sdk/src/task.rs | 112 -
legacy/mesatee_sdk/src/lib.rs | 735 -
legacy/mesatee_services/acs/client/Cargo.toml | 22 -
.../mesatee_services/acs/client/src/acs_client.rs | 136 -
legacy/mesatee_services/acs/client/src/lib.rs | 24 -
legacy/mesatee_services/acs/model.conf | 32 -
legacy/mesatee_services/acs/proto/Cargo.toml | 23 -
legacy/mesatee_services/acs/proto/src/lib.rs | 22 -
legacy/mesatee_services/acs/proto/src/proto.rs | 78 -
legacy/mesatee_services/acs/python/acs_engine.py | 631 -
.../mesatee_services/acs/python/acs_engine_test.py | 82 -
legacy/mesatee_services/acs/python/ffi.py | 15 -
legacy/mesatee_services/acs/sgx_app/Cargo.toml | 23 -
legacy/mesatee_services/acs/sgx_app/build.rs | 51 -
legacy/mesatee_services/acs/sgx_app/src/main.rs | 89 -
.../acs/sgx_trusted_lib/Cargo.toml | 31 -
.../acs/sgx_trusted_lib/Enclave.config.xml | 12 -
.../acs/sgx_trusted_lib/src/acs.rs | 234 -
.../acs/sgx_trusted_lib/src/lib.rs | 33 -
.../acs/sgx_trusted_lib/src/sgx.rs | 92 -
legacy/mesatee_services/fns/client/Cargo.toml | 12 -
.../mesatee_services/fns/client/src/fns_client.rs | 55 -
legacy/mesatee_services/fns/client/src/lib.rs | 24 -
legacy/mesatee_services/fns/proto/Cargo.toml | 20 -
legacy/mesatee_services/fns/proto/src/lib.rs | 31 -
legacy/mesatee_services/fns/proto/src/proto.rs | 59 -
legacy/mesatee_services/fns/sgx_app/Cargo.toml | 24 -
legacy/mesatee_services/fns/sgx_app/build.rs | 51 -
legacy/mesatee_services/fns/sgx_app/src/main.rs | 88 -
.../fns/sgx_trusted_lib/Cargo.toml | 46 -
.../fns/sgx_trusted_lib/Enclave.config.xml | 12 -
.../fns/sgx_trusted_lib/src/fns.rs | 97 -
.../fns/sgx_trusted_lib/src/global.rs | 313 -
.../fns/sgx_trusted_lib/src/lib.rs | 37 -
.../fns/sgx_trusted_lib/src/running_task.rs | 267 -
.../fns/sgx_trusted_lib/src/sgx/mod.rs | 76 -
.../sgx_trusted_lib/src/trusted_worker/dbscan.rs | 163 -
.../src/trusted_worker/demo_func.rs | 357 -
.../src/trusted_worker/gaussian_mixture_model.rs | 165 -
.../src/trusted_worker/gaussian_processes.rs | 174 -
.../src/trusted_worker/gbdt_worker.rs | 294 -
.../src/trusted_worker/gen_linear_model.rs | 175 -
.../src/trusted_worker/image_resize.rs | 128 -
.../sgx_trusted_lib/src/trusted_worker/kmeans.rs | 148 -
.../sgx_trusted_lib/src/trusted_worker/lin_reg.rs | 177 -
.../src/trusted_worker/logistic_reg.rs | 338 -
.../sgx_trusted_lib/src/trusted_worker/mesapy.rs | 139 -
.../fns/sgx_trusted_lib/src/trusted_worker/mod.rs | 56 -
.../src/trusted_worker/naive_bayes.rs | 158 -
.../src/trusted_worker/neural_net.rs | 173 -
.../src/trusted_worker/online_decrypt.rs | 146 -
.../src/trusted_worker/private_join_and_compute.rs | 137 -
.../src/trusted_worker/psi/basic.rs | 124 -
.../src/trusted_worker/psi/compute.rs | 83 -
.../sgx_trusted_lib/src/trusted_worker/psi/mod.rs | 102 -
.../fns/sgx_trusted_lib/src/trusted_worker/rsa.rs | 99 -
.../fns/sgx_trusted_lib/src/trusted_worker/svm.rs | 175 -
.../sgx_trusted_lib/src/trusted_worker/wasm/mod.rs | 100 -
.../src/trusted_worker/wasm/sgxwasm.rs | 412 -
.../src/trusted_worker/wasm/sgxwasm_compute.rs | 153 -
.../fns/sgx_trusted_lib/src/worker.rs | 134 -
legacy/mesatee_services/kms/proto/Cargo.toml | 28 -
legacy/mesatee_services/kms/proto/build.rs | 48 -
legacy/mesatee_services/kms/proto/src/kms.proto | 54 -
legacy/mesatee_services/kms/proto/src/kms.rs | 207 -
legacy/mesatee_services/kms/proto/src/lib.rs | 32 -
legacy/mesatee_services/kms/sgx_app/Cargo.toml | 26 -
legacy/mesatee_services/kms/sgx_app/build.rs | 51 -
legacy/mesatee_services/kms/sgx_app/src/main.rs | 89 -
.../kms/sgx_trusted_lib/Cargo.toml | 32 -
.../kms/sgx_trusted_lib/Enclave.config.xml | 12 -
.../kms/sgx_trusted_lib/src/kms.rs | 97 -
.../kms/sgx_trusted_lib/src/lib.rs | 33 -
.../kms/sgx_trusted_lib/src/sgx.rs | 74 -
legacy/mesatee_services/proto_gen/Cargo.toml | 17 -
legacy/mesatee_services/proto_gen/main.rs | 238 -
.../tdfs/external/client/Cargo.toml | 17 -
.../tdfs/external/client/src/file_util.rs | 18 -
.../tdfs/external/client/src/lib.rs | 26 -
.../tdfs/external/client/src/tdfs_client.rs | 143 -
.../tdfs/external/proto/Cargo.toml | 26 -
.../tdfs/external/proto/src/key.rs | 25 -
.../tdfs/external/proto/src/lib.rs | 31 -
.../tdfs/external/proto/src/proto.rs | 181 -
.../tdfs/internal/client/Cargo.toml | 26 -
.../tdfs/internal/client/src/file_util.rs | 105 -
.../tdfs/internal/client/src/lib.rs | 26 -
.../tdfs/internal/client/src/tdfs_client.rs | 182 -
.../tdfs/internal/proto/Cargo.toml | 26 -
.../tdfs/internal/proto/src/lib.rs | 22 -
.../tdfs/internal/proto/src/proto.rs | 120 -
legacy/mesatee_services/tdfs/sgx_app/Cargo.toml | 23 -
legacy/mesatee_services/tdfs/sgx_app/build.rs | 51 -
legacy/mesatee_services/tdfs/sgx_app/src/main.rs | 120 -
.../tdfs/sgx_trusted_lib/Cargo.toml | 33 -
.../tdfs/sgx_trusted_lib/Enclave.config.xml | 12 -
.../tdfs/sgx_trusted_lib/src/data_store.rs | 186 -
.../tdfs/sgx_trusted_lib/src/lib.rs | 35 -
.../tdfs/sgx_trusted_lib/src/sgx.rs | 94 -
.../tdfs/sgx_trusted_lib/src/tdfs_external.rs | 221 -
.../tdfs/sgx_trusted_lib/src/tdfs_internal.rs | 122 -
.../mesatee_services/tms/common/proto/Cargo.toml | 21 -
.../mesatee_services/tms/common/proto/src/lib.rs | 23 -
.../mesatee_services/tms/common/proto/src/proto.rs | 65 -
.../tms/external/client/Cargo.toml | 21 -
.../tms/external/client/src/lib.rs | 24 -
.../tms/external/client/src/tms_client.rs | 110 -
.../mesatee_services/tms/external/proto/Cargo.toml | 23 -
.../mesatee_services/tms/external/proto/src/lib.rs | 24 -
.../tms/external/proto/src/proto.rs | 198 -
.../tms/internal/client/Cargo.toml | 28 -
.../tms/internal/client/src/lib.rs | 24 -
.../tms/internal/client/src/tms_client.rs | 71 -
.../mesatee_services/tms/internal/proto/Cargo.toml | 23 -
.../mesatee_services/tms/internal/proto/src/lib.rs | 22 -
.../tms/internal/proto/src/proto.rs | 100 -
legacy/mesatee_services/tms/sgx_app/Cargo.toml | 21 -
legacy/mesatee_services/tms/sgx_app/build.rs | 64 -
legacy/mesatee_services/tms/sgx_app/src/main.rs | 121 -
.../tms/sgx_trusted_lib/Cargo.toml | 36 -
.../tms/sgx_trusted_lib/Enclave.config.xml | 12 -
.../tms/sgx_trusted_lib/src/data_store.rs | 146 -
.../tms/sgx_trusted_lib/src/lib.rs | 35 -
.../tms/sgx_trusted_lib/src/sgx.rs | 104 -
.../tms/sgx_trusted_lib/src/tms_external.rs | 329 -
.../tms/sgx_trusted_lib/src/tms_internal.rs | 95 -
legacy/service.sh | 100 -
legacy/tests/README.md | 4 -
legacy/tests/failure_tests.sh | 15 -
legacy/tests/failure_tests_with_param.sh | 81 -
legacy/tests/functional_test.sh | 70 -
legacy/tests/functional_test/sgx_app/Cargo.toml | 24 -
legacy/tests/functional_test/sgx_app/build.rs | 51 -
legacy/tests/functional_test/sgx_app/src/main.rs | 103 -
.../sgx_app/src/tests/common_setup.rs | 107 -
.../functional_test/sgx_app/src/tests/fns_test.rs | 131 -
.../tests/functional_test/sgx_app/src/tests/mod.rs | 20 -
.../functional_test/sgx_app/src/tests/tdfs_test.rs | 123 -
.../functional_test/sgx_app/src/tests/tms_test.rs | 212 -
.../tests/functional_test/sgx_app/src/unittest.rs | 82 -
.../functional_test/sgx_trusted_lib/Cargo.toml | 36 -
.../sgx_trusted_lib/Enclave.config.xml | 12 -
.../functional_test/sgx_trusted_lib/src/lib.rs | 33 -
.../functional_test/sgx_trusted_lib/src/sgx.rs | 71 -
.../sgx_trusted_lib/src/tests/acs_test.rs | 275 -
.../sgx_trusted_lib/src/tests/common_setup.rs | 41 -
.../sgx_trusted_lib/src/tests/kms_test.rs | 42 -
.../sgx_trusted_lib/src/tests/leveldb_test.rs | 61 -
.../sgx_trusted_lib/src/tests/mod.rs | 24 -
.../sgx_trusted_lib/src/tests/protected_fs_test.rs | 61 -
.../sgx_trusted_lib/src/tests/tdfs_test.rs | 128 -
.../sgx_trusted_lib/src/tests/tms_test.rs | 98 -
legacy/tests/integration_test.sh | 112 -
legacy/tests/integration_test/Cargo.toml | 31 -
legacy/tests/integration_test/src/common.rs | 201 -
legacy/tests/integration_test/src/config.rs | 31 -
legacy/tests/integration_test/src/main.rs | 66 -
legacy/tests/integration_test/src/mesapy.rs | 39 -
.../tests/integration_test/src/multiparty_task.rs | 68 -
legacy/tests/integration_test/src/psi.rs | 43 -
legacy/tests/integration_test/src/sendrecv.rs | 46 -
legacy/tests/integration_test/src/single_task.rs | 51 -
legacy/tests/integration_test/src/test.rs | 159 -
legacy/tests/integration_test/src/wasm/mod.rs | 121 -
.../tests/integration_test/src/wasm/wasmi_basic.rs | 346 -
.../tests/integration_test/src/wasm/wasmi_faas.rs | 239 -
legacy/tests/integration_test/test_data/file1.txt | 1 -
legacy/tests/integration_test/test_data/file2.txt | 1 -
legacy/tests/integration_test/test_data/psi1.txt | 1 -
legacy/tests/integration_test/test_data/psi2.txt | 1 -
legacy/tests/integration_test/test_data/test.toml | 77 -
legacy/tests/module_test.sh | 6 -
373 files changed, 72045 deletions(-)
diff --git a/legacy/cli/Cargo.toml b/legacy/cli/Cargo.toml
deleted file mode 100644
index 3674279..0000000
--- a/legacy/cli/Cargo.toml
+++ /dev/null
@@ -1,20 +0,0 @@
-[package]
-name = "teaclave_cli"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-description = "Teclave comand line tool"
-license = "Apache-2.0"
-edition = "2018"
-
-[dependencies]
-mesatee_core = "0.1.0"
-serde_derive = "1.0.92"
-serde = "1.0.92"
-failure = "0.1.5"
-exitfailure = "0.5"
-structopt = "0.2"
-serde_json = "1.0.39"
-tms_external_proto = { path = "../mesatee_services/tms/external/proto" }
-tdfs_external_proto = { path = "../mesatee_services/tdfs/external/proto" }
-fns_proto = { path = "../mesatee_services/fns/proto" }
-teaclave_test_utils = { path = "../teaclave_test_utils" }
diff --git a/legacy/cli/README.md b/legacy/cli/README.md
deleted file mode 100644
index 4d01976..0000000
--- a/legacy/cli/README.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Teaclave Command Line Tool
-
-`teaclave_cli` is a command-line tool to communicate with Teaclave's services.
-
-## Usage
-
-There are two sub-commands: `teaclave_cli audit` is for auditing enclave info
-with auditors' public keys and signatures and `teaclave_cli connect` is for
-communicating with Teclave's services.
-
-Here are details of the arguments for `teaclave_cli audit`:
-
-```
-$ ./teaclave_cli audit --help
-teaclave_cli-audit 0.1.0
-MesaTEE Authors <de...@mesatee.org>
-Audit enclave info with auditors' public keys and signatures.
-
-USAGE:
- teaclave_cli audit --enclave_info <ENCLAVE_INFO_FILE> --auditor_public_keys <auditor_public_keys>... --auditor_signatures <auditor_signatures>...
-
-FLAGS:
- -h, --help Prints help information
- -V, --version Prints version information
-
-OPTIONS:
- -c, --enclave_info <ENCLAVE_INFO_FILE> Path to Enclave info file.
- -k, --auditor_public_keys <auditor_public_keys>... SPACE separated paths of Teaclave auditor public keys
- -s, --auditor_signatures <auditor_signatures>...
- SPACE separated paths of Teaclave auditor endorsement signatures.
-```
-
-Here are details of the arguments for `teaclave_cli connect`:
-
-```
-./teaclave_cli connect --help
-teaclave_cli-connect 0.1.0
-MesaTEE Authors <de...@mesatee.org>
-Connect and send messages to Teaclave services
-
-USAGE:
- teaclave_cli connect [OPTIONS] <IP_ADDRESS:PORT> --enclave_info <ENCLAVE_INFO_FILE> --endpoint <endpoint>
-
-FLAGS:
- -h, --help Prints help information
- -V, --version Prints version information
-
-OPTIONS:
- -c, --enclave_info <ENCLAVE_INFO_FILE> Path to Enclave info file.
- -o, --output <INPUT_FILE> Write to FILE instead of stdout.
- -i, --input <OUTPUT_FILE> Read from FILE instead of stdin.
- -e, --endpoint <endpoint> Teaclave endpoint to connect to. Possible values are: tms, tdfs, fns.
-
-ARGS:
- <IP_ADDRESS:PORT> Address and port of the Teaclave endpoint.
-```
-
-## Example
-
-The following is an example of verifying the enclave info with auditors' public
-keys and signatures.
-
-```
-$ ./teaclave_cli audit \
- -c enclave_info.toml \
- -k auditors/albus_dumbledore/albus_dumbledore.public.der \
- auditors/godzilla/godzilla.public.der \
- auditors/optimus_prime/optimus_prime.public.der \
- -s auditors/albus_dumbledore/albus_dumbledore.sign.sha256 \
- auditors/godzilla/godzilla.sign.sha256 \
- auditors/optimus_prime/optimus_prime.sign.sha256
-Enclave info is successfully verified.
-```
-
-This example is to create a task and invoke the "echo" function.
-
-```
-# create a task
-$ cat create_task.json
-{
- "type":"Create",
- "function_name":"echo",
- "collaborator_list":[],
- "files":[],
- "user_id":"user1",
- "user_token":"token1"
-}
-$ cat create_task.json | ./teaclave_cli connect 127.0.0.1:5554 -c enclave_info.toml -e tms
-{"type":"Create","task_id":"20937006-2718-4f33-bae2-567933807436","task_token":"d20ce53ab743d69320712fd98555f5e5","ip":"127.0.0.1","port":3444}
-```
-
-Compose a invoke task request with `task_id`, `task_token`, `ip` and `port` in
-the previous response.
-
-```
-# invoke the "echo" function
-$ cat invoke_task.json
-{
- "task_id":"20937006-2718-4f33-bae2-567933807436",
- "function_name":"echo",
- "task_token":"d20ce53ab743d69320712fd98555f5e5",
- "payload":"Hello, World!"
-}
-
-$ cat invoke_task.json | ./teaclave_cli connect 127.0.0.1:3444 -c enclave_info.toml -e fns
-{"result":"Hello, World!"}
-```
diff --git a/legacy/cli/src/main.rs b/legacy/cli/src/main.rs
deleted file mode 100644
index a8e7128..0000000
--- a/legacy/cli/src/main.rs
+++ /dev/null
@@ -1,188 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use exitfailure::ExitFailure;
-use structopt::StructOpt;
-
-use std::fs;
-use std::io::{self, Read, Write};
-use std::{net, path};
-
-use fns_proto::{InvokeTaskRequest, InvokeTaskResponse};
-use mesatee_core::config::{OutboundDesc, TargetDesc};
-use mesatee_core::rpc::channel;
-use tdfs_external_proto::{DFSRequest, DFSResponse};
-use teaclave_utils;
-use teaclave_utils::EnclaveMeasurement;
-use tms_external_proto::{TaskRequest, TaskResponse};
-
-type EnclaveInfo = std::collections::HashMap<String, EnclaveMeasurement>;
-type CliResult = Result<(), ExitFailure>;
-
-#[derive(Debug, PartialEq)]
-enum Endpoint {
- TMS,
- TDFS,
- FNS,
-}
-
-impl std::str::FromStr for Endpoint {
- type Err = String;
-
- fn from_str(s: &str) -> Result<Endpoint, String> {
- match s {
- "tms" => Ok(Endpoint::TMS),
- "tdfs" => Ok(Endpoint::TDFS),
- "fns" => Ok(Endpoint::FNS),
- _ => Err("Invalid endpoint specified".into()),
- }
- }
-}
-
-#[derive(Debug, StructOpt)]
-struct AuditOpt {
- #[structopt(short = "k", long, required = true)]
- /// SPACE separated paths of Teaclave auditor public keys
- auditor_public_keys: Vec<path::PathBuf>,
-
- #[structopt(short = "s", long, required = true)]
- /// SPACE separated paths of Teaclave auditor endorsement signatures.
- auditor_signatures: Vec<path::PathBuf>,
-
- #[structopt(short = "c", long, required = true, name = "ENCLAVE_INFO_FILE")]
- /// Path to Enclave info file.
- enclave_info: path::PathBuf,
-}
-
-#[derive(Debug, StructOpt)]
-struct ConnectOpt {
- #[structopt(short = "o", long, name = "INPUT_FILE", parse(from_os_str))]
- /// Write to FILE instead of stdout.
- output: Option<path::PathBuf>,
-
- #[structopt(short = "i", long, name = "OUTPUT_FILE", parse(from_os_str))]
- /// Read from FILE instead of stdin.
- input: Option<path::PathBuf>,
-
- #[structopt(short = "e", long, required = true)]
- /// Teaclave endpoint to connect to. Possible values are: tms, tdfs, fns.
- endpoint: Endpoint,
-
- #[structopt(name = "IP_ADDRESS:PORT", required = true)]
- /// Address and port of the Teaclave endpoint.
- addr: net::SocketAddr,
-
- #[structopt(short = "c", long, required = true, name = "ENCLAVE_INFO_FILE")]
- /// Path to Enclave info file.
- enclave_info: path::PathBuf,
-}
-
-#[derive(Debug, StructOpt)]
-enum Command {
- /// Audit enclave info with auditors' public keys and signatures.
- #[structopt(name = "audit")]
- Audit(AuditOpt),
- /// Connect and send messages to Teaclave services
- #[structopt(name = "connect")]
- Connect(ConnectOpt),
-}
-
-#[derive(Debug, StructOpt)]
-/// Teaclave command line tool
-struct Cli {
- #[structopt(subcommand)]
- command: Command,
-}
-
-macro_rules! generate_runner_for {
- ($endpoint:ident, $request_type: tt, $response_type: tt) => {
- fn $endpoint<R: Read, W: Write>(
- enclave_info: &EnclaveInfo,
- addr: net::SocketAddr,
- reader: R,
- writer: W,
- ) -> Result<(), failure::Error> {
- let outbound_desc =
- OutboundDesc::new(*enclave_info.get(stringify!($endpoint)).unwrap());
- let target_desc = TargetDesc::new(addr, outbound_desc);
-
- let mut channel = match &target_desc.desc {
- OutboundDesc::Sgx(enclave_attrs) => channel::SgxTrustedChannel::<
- $request_type,
- $response_type,
- >::new(addr, enclave_attrs.clone()),
- }?;
- let request = serde_json::from_reader(reader)?;
- let response = channel.invoke(request)?;
- serde_json::to_writer(writer, &response)?;
- Ok(())
- }
- };
-}
-
-generate_runner_for!(tms, TaskRequest, TaskResponse);
-generate_runner_for!(tdfs, DFSRequest, DFSResponse);
-generate_runner_for!(fns, InvokeTaskRequest, InvokeTaskResponse);
-
-fn connect(args: ConnectOpt) -> Result<(), failure::Error> {
- let enclave_info_content = fs::read_to_string(&args.enclave_info)?;
- let enclave_info = teaclave_utils::load_enclave_info(&enclave_info_content);
-
- let reader: Box<dyn Read> = match args.input {
- Some(i) => Box::new(io::BufReader::new(fs::File::open(i)?)),
- None => Box::new(io::stdin()),
- };
- let writer: Box<dyn Write> = match args.output {
- Some(o) => Box::new(io::BufWriter::new(fs::File::create(o)?)),
- None => Box::new(io::stdout()),
- };
-
- match args.endpoint {
- Endpoint::TMS => tms(&enclave_info, args.addr, reader, writer),
- Endpoint::TDFS => tdfs(&enclave_info, args.addr, reader, writer),
- Endpoint::FNS => fns(&enclave_info, args.addr, reader, writer),
- }
-}
-
-fn audit(args: AuditOpt) -> Result<(), failure::Error> {
- let enclave_info_content = fs::read_to_string(&args.enclave_info)?;
- let mut keys: Vec<Vec<u8>> = vec![];
- for key_path in args.auditor_public_keys.iter() {
- let buf = fs::read(key_path)?;
- keys.push(buf);
- }
- let mut signatures: Vec<Vec<u8>> = vec![];
- for path in &args.auditor_signatures {
- let signature = fs::read(path)?;
- signatures.push(signature);
- }
-
- if teaclave_utils::verify_enclave_info(enclave_info_content.as_bytes(), &keys, &signatures) {
- println!("Enclave info is successfully verified.");
- Ok(())
- } else {
- Err(failure::err_msg("Cannot verify the enclave info."))
- }
-}
-
-fn main() -> CliResult {
- let args = Cli::from_args();
- match args.command {
- Command::Audit(audit_args) => Ok(audit(audit_args)?),
- Command::Connect(connect_args) => Ok(connect(connect_args)?),
- }
-}
diff --git a/legacy/docs/api.md b/legacy/docs/api.md
deleted file mode 100644
index ac0b495..0000000
--- a/legacy/docs/api.md
+++ /dev/null
@@ -1,1116 +0,0 @@
-# Task Management Service
-
-## External API (port: 5554)
-
-### Create Task
-#### Create Task request data structure.
-```rust
-#[derive(Serialize)]
-pub struct CreateTaskRequest {
- pub function_name: String,
- pub collaborator_list: Vec<String>,
- pub files: Vec<String>,
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum TaskRequest {
- Create(CreateTaskRequest),
-}
-```
-#### Request examples
-
-echo :
-```json
-{
- "type":"Create",
- "function_name":"echo",
- "collaborator_list":[],
- "files":[],
- "user_id":"user1",
- "user_token":"token1"
-}
-```
-psi:
-``` json
-{
- "type":"Create",
- "function_name":"psi",
- "collaborator_list":["user2"],
- "files":["0a9ca5ac-2150-4bdd-ab63-c2c12252e747"],
- "user_id":"user1",
- "user_token":"token1"
-}
-```
-#### Create Task response data structure
-``` rust
-#[derive(Deserialize)]
-pub struct CreateTaskResponse {
- pub task_id: String,
- pub task_token: String,
- pub ip: IpAddr,
- pub port: u16,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum TaskResponse {
- Create(CreateTaskResponse),
-}
-```
-#### Response examples:
-
-echo:
-``` json
-{
- "type":"Create",
- "task_id":"b77f124b-f790-4af5-93de-cd1ec8946c25",
- "task_token":"53c5a8c6e26e4df83987070d3c865318",
- "ip":"127.0.0.1",
- "port":3444
-}
-```
-psi:
-``` json
-{
- "type":"Create",
- "task_id":"5ef0cfc7-11e9-445a-8c46-23790ea86819",
- "task_token":"70a58efaa0dc3a567f1c2bc3555d95b8",
- "ip":"127.0.0.1",
- "port":3444
-}
-```
-
-### Get Task
-#### Get Task request data structure:
-```rust
-#[derive(Serialize)]
-pub struct GetTaskRequest {
- pub task_id: String,
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum TaskRequest {
- Get(GetTaskRequest),
-}
-```
-
-
-
-#### Request examples:
-```json
-{
- "type":"Get",
- "task_id":"f1b0e2a2-865f-11e9-8003-010203040506",
- "user_id":"bbbb",
- "user_token":"xxxx"
-}
-```
-
-#### Get Task response data structure
-```rust
-#[derive(Deserialize)]
-pub enum FunctionType {
- Single,
- Multiparty,
-}
-#[derive(Deserialize)]
-pub enum TaskStatus {
- Created,
- Ready,
- Running,
- Finished,
- Failed,
-}
-#[derive(Deserialize)]
-pub struct CollaboratorStatus {
- pub user_id: String,
- pub approved: bool,
-}
-#[derive(Deserialize)]
-pub struct TaskInfo {
- pub user_id: String,
- pub function_name: String,
- pub function_type: FunctionType,
- pub status: TaskStatus,
- pub ip: IpAddr,
- pub port: u16,
- pub task_token: String,
- pub collaborator_list: Vec<CollaboratorStatus>,
- pub task_result_file_id: Option<String>,
- pub user_private_result_file_id: Vec<String>,
-}
-#[derive(Deserialize)]
-pub struct GetTaskResponse {
- pub task_info: TaskInfo,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum TaskResponse {
- Get(GetTaskResponse),
-}
-```
-#### Response examples:
-
-echo task:
-``` json
-{
- "type":"Get",
- "task_info":
- {
- "user_id":"user1",
- "function_name":"echo",
- "function_type":"Single",
- "status":"Ready",
- "ip":"127.0.0.1",
- "port":3444,
- "task_token":"3328ce7d42c1f5ebe2660926397ac934",
- "collaborator_list":[],
- "task_result_file_id":null,
- "user_private_result_file_id":[]
- }
-}
-```
-psi task
-``` json
-{
- "type":"Get",
- "task_info":{
- "user_id":"user1",
- "function_name":"psi",
- "function_type":"Multiparty",
- "status":"Created",
- "ip":"127.0.0.1",
- "port":3444,
- "task_token":"70a58efaa0dc3a567f1c2b3555d95b8",
- "collaborator_list":[{"user_id":"user2","approved":false}],
- "task_result_file_id":null,
- "user_private_result_file_id":[]
- }
-}
-```
-
-### UpdateTask (Collaborator approves task and provides files)
-#### Update Task Request
-```rust
-#[derive(Serialize)]
-pub struct UpdateTaskRequest {
- pub task_id: String,
- pub files: Vec<String>,
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum TaskRequest {
- Update(UpdateTaskRequest),
-}
-```
-#### Request example:
-
-```json
-{
- "type":"Update",
- "task_id":"5ef0cfc7-11e9-445a-8c46-23790ea86819",
- "files":["b76f9ee2-63d2-43bd-a722-466792af7035"],
- "user_id":"user2","user_token":"token2"
-}
-```
-#### Update Task Response
-```rust
-#[derive(Deserialize)]
-pub enum TaskStatus {
- Created,
- Ready,
- Running,
- Finished,
- Failed,
-}
-#[derive(Deserialize)]
-pub struct UpdateTaskResponse {
- pub success: bool,
- pub status: TaskStatus,
- pub ip: IpAddr,
- pub port: u16,
- pub task_token: String,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum TaskResponse {
- Update(UpdateTaskResponse),
-}
-```
-#### Response example:
-```json
-{
- "type":"Update",
- "success":true,
- "status":"Ready",
- "ip":"127.0.0.1",
- "port":3444,
- "task_token":"70a58efaa0dc3a567f1c2bc3555d95b8"
-}
-```
-### List Task
-#### List Task request data structure:
-```rust
-#[derive(Serialize)]
-pub struct ListTaskRequest {
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum TaskRequest {
- List(ListTaskRequest),
-}
-```
-#### Request examples:
-```json
-{
- "type":"List",
- "user_id":"bbbb",
- "user_token":"xxxx"
-}
-```
-
-#### List Task response data structure
-```rust
-#[derive(Deserialize)]
-pub struct ListTaskResponse {
- pub list: Vec<String>,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum TaskResponse {
- List(ListTaskResponse),
-}
-```
-#### Response examples:
-``` json
-{
- "type":"List",
- "list": ["88a6b759-8662-11e9-8001-010203040506", "88a6b759-8662-11e9-8002-010203040506"]
-}
-```
-## Internal API (port: 5555)
-
-### Get Task
-#### Get Task request data structure
-```rust
-#[derive(Serialize)]
-pub struct GetTaskRequest {
- pub task_id: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum TaskRequest {
- Get(GetTaskRequest),
-}
-```
-
-
-
-#### Request examples:
-```json
-{
- "type":"Get",
- "task_id":"88a6b759-8662-11e9-8001-010203040506"
-}
-```
-
-#### Get Task response data structure
-```rust
-#[derive(Deserialize)]
-pub enum FunctionType {
- Single,
- Multiparty,
-}
-#[derive(Deserialize)]
-pub enum TaskStatus {
- Created,
- Ready,
- Running,
- Finished,
- Failed,
-}
-#[derive(Deserialize)]
-pub struct CollaboratorStatus {
- pub user_id: String,
- pub approved: bool,
-}
-#[derive(Deserialize)]
-pub struct TaskInfo {
- pub user_id: String,
- pub collaborator_list: Vec<CollaboratorStatus>,
- pub approved_user_number: usize,
- pub function_name: String,
- pub function_type: FunctionType,
- pub status: TaskStatus,
- pub ip: IpAddr,
- pub port: u16,
- pub task_token: String,
- pub input_files: Vec<TaskFile>,
- pub output_files: Vec<TaskFile>,
- pub task_result_file_id: Option<String>,
-}
-#[derive(Deserialize)]
-pub struct GetTaskResponse {
- pub task_info: TaskInfo,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum TaskResponse {
- Get(GetTaskResponse),
-}
-```
-#### Response examples:
-```json
-{
- "type":"Get",
- "task_info":{
- "user_id":"user1",
- "collaborator_list":[{"user_id":"user2","approved":true}],
- "approved_user_number":1,
- "function_name":"psi",
- "function_type":"Multiparty",
- "status":"Ready",
- "ip":"127.0.0.1",
- "port":3444,
- "task_token":"70a58efaa0dc3a567f1c2bc3555d95b8",
- "input_files":[{"user_id":"user1","file_id":"0a9ca5ac-2150-4bdd-ab63-c2c12252e747"},
- {"user_id":"user2","file_id":"b76f9ee2-63d2-43bd-a722-466792af7035"}],
- "output_files":[],
- "task_result_file_id":null
- }
-}
-```
-### Update Task
-#### Update Task request data structure:
-```rust
-#[derive(Deserialize)]
-pub enum TaskStatus {
- Created,
- Ready,
- Running,
- Finished,
- Failed,
-}
-#[derive(Serialize)]
-pub struct UpdateTaskRequest {
- pub task_id: String,
- pub task_result_file_id: Option<String>,
- pub output_files: Vec<TaskFile>,
- pub status: Option<TaskStatus>,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum TaskRequest {
- Update(UpdateTaskRequest),
-}
-```
-#### Request examples:
-```json
-{
- "type":"Update",
- "task_id":"5ef0cfc7-11e9-445a-8c4623790ea86819",
- "task_result_file_id":null,
- "output_files":[{"user_id":"user1","file_id":"d18fb288-8fef-48c3-b800-201b2734882e"},
- {"user_id":"user2","file_id":"0e8446d1-6fa5-49db-b828-8087a0141370"}],
- "status":"Finished"
-}
-```
-#### Update Task response data structure
-```rust
-#[derive(Deserialize)]
-pub struct UpdateTaskResponse {
- pub success: bool,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum TaskResponse {
- Update(UpdateTaskResponse),
-}
-```
-#### Response examples:
-```json
-{
- "type":"Update",
- "success":true
-}
-```
-
-# Function Node Service
-
-## External API (port:3444)
-
-### Invoke Task
-
-#### Invoke Task request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct InvokeTaskRequest {
- pub task_id: String,
- pub function_name: String,
- pub task_token: String,
- pub payload: Option<String>,
-}
-```
-
-#### Invoke Task request examples
-
-```json
-{
- "task_id":"b77f124b-f790-4af5-93de-cd1ec8946c25",
- "function_name":"echo",
- "task_token":"53c5a8c6e26e4df83987070d3c865318",
- "payload":"echo_payload"
-}
-```
-
-####
-
-#### Invoke Task response data structure
-
-```rust
-#[derive(Deserialize)]
-pub struct InvokeTaskResponse {
- pub result: String,
-}
-```
-
-#### Response examples:
-
-```json
-{
- "result":"echo_payload"
-}
-```
-
-# KMS
-
-## Enclave API (port: 6016)
-
-### Create Key
-
-#### Create Key request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct CreateKeyRequest {}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum KMSRequest {
- Create(CreateKeyRequest),
-}
-```
-
-#### Create key request examples
-
-```json
-{
- "type": "Create"
-}
-```
-
-#### Create key response data structure
-
-```rust
-#[derive(Clone, Deserialize)]
-pub struct AEADKeyConfig {
- #[serde(with = "base64_decoder")]
- pub key: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub nonce: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub ad: Vec<u8>,
-}
-#[derive(Deserialize)]
-pub struct CreateKeyResponse {
- pub key_id: String,
- pub config: AEADKeyConfig,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum KMSResponse {
- Create(CreateKeyResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Create",
- "key_id":"cfbe341e-cf3c-463e-a493-6b22c57f51d4",
- "config":{
- "key":"E99iifHZ16dDY0IocaGFyD3v2j/kvHsn6wRqFZWGeDA=",
- "nonce":"jcqPUkPIqgYeLe9B",
- "ad":"V/gZjZY="
- }
-}
-```
-
-### Get Key
-
-#### Get Key request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct GetKeyRequest {
- pub key_id: String,
-}
-
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum KMSRequest {
- Get(GetKeyRequest),
-}
-```
-
-#### Get key request examples
-
-```json
-{
- "type":"Get",
- "key_id":"c26ada76-8557-11e9-8002-020203040506"
-}
-```
-
-#### Get key response data structure
-
-```rust
-#[derive(Clone, Deserialize)]
-pub struct AEADKeyConfig {
- #[serde(with = "base64_decoder")]
- pub key: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub nonce: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub ad: Vec<u8>,
-}
-#[derive(Deserialize)]
-pub struct GetKeyResponse {
- pub config: AEADKeyConfig,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum KMSResponse {
- Get(GetKeyResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Get",
- "config":{
- "key":"CvEH2KdKLyTRaycAbx28oU5FSUxTEaA9q8gGC6/IwS4=",
- "nonce":"NygUVqPwxJDffni3",
- "ad":"IFx5qXQ="
- }
-}
-```
-
-### Delete Key
-
-#### Delete Key request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct DeleteKeyRequest {
- pub key_id: String,
-}
-
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum KMSRequest {
- Delete(DeleteKeyRequest),
-}
-```
-
-#### Delete key request examples
-
-```json
-{
- "type":"Delete",
- "key_id":"c26ada76-8557-11e9-8002-020203040506"
-}
-```
-
-#### Delete key response data structure
-
-```rust
-#[derive(Clone, Deserialize)]
-pub struct AEADKeyConfig {
- #[serde(with = "base64_decoder")]
- pub key: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub nonce: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub ad: Vec<u8>,
-}
-#[derive(Deserialize)]
-pub struct DeleteKeyResponse {
- pub config: AEADKeyConfig,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum KMSResponse {
- Delete(DeleteKeyResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Delete",
- "config":{
- "key":"CvEH2KdKLyTRaycAbx28oU5FSUxTEaA9q8gGC6/IwS4=",
- "nonce":"NygUVqPwxJDffni3",
- "ad":"IFx5qXQ="
- }
-}
-```
-
-#Trusted DFS
-
-## External API (port: 5065)
-
-### Create File
-
-#### Create File request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct CreateFileRequest {
- pub file_name: String,
- pub sha256: String,
- pub file_size: u32,
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum DFSRequest {
- Create(CreateFileRequest),
-}
-```
-
-#### Create File request examples
-
-```json
-{
- "type":"Create",
- "file_name":"file",
- "sha256":"233b51fc70dcc0c0ecb4e6ed9dc32d4c421a54859d069ec87fa836cf8c8aeb44",
- "file_size":128,
- "user_id":"user1",
- "user_token":"token1"
-}
-```
-
-#### Create File response data structure
-
-```rust
-#[derive(Clone, Deserialize)]
-pub struct AEADKeyConfig {
- #[serde(with = "base64_decoder")]
- pub key: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub nonce: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub ad: Vec<u8>,
-}
-#[derive(Deserialize)]
-pub struct CreateFileResponse {
- pub file_id: String,
- pub access_path: String,
- pub key_config: AEADKeyConfig,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum DFSResponse {
- Create(CreateFileResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Create",
- "file_id":"0a9ca5ac-2150-4bdd-ab63-c2c12252e747",
- "access_path":"/tmp/0a9ca5ac-2150-4bdd-ab63-c2c12252e747",
- "key_config":{
- "key":"cPGcaSWCGDxGshC9FSvOdW/5zal9FmtoNojlxL8Hfqs=",
- "nonce":"cdfFk73Xv9x6YUL8",
- "ad":"IpDKtR4="
- }
-}
-```
-
-### Get File
-
-#### Get File request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct GetFileRequest {
- pub file_id: String,
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum DFSRequest {
- Get(GetFileRequest),
-}
-```
-
-#### Get File request examples
-
-```json
-{
- "type":"Get",
- "file_id":"d18fb288-8fef-48c3-b800-201b2734882e",
- "user_id":"user1",
- "user_token":"token1"
-}
-```
-
-#### Get File response data structure
-
-```rust
-#[derive(Clone, Deserialize)]
-pub struct AEADKeyConfig {
- #[serde(with = "base64_decoder")]
- pub key: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub nonce: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub ad: Vec<u8>,
-}
-#[derive(Deserialize)]
-pub struct FileInfo {
- pub user_id: String,
- pub file_name: String,
- pub sha256: String,
- pub file_size: u32,
- pub access_path: String,
- pub task_id: Option<String>,
- pub collaborator_list: Vec<String>,
- pub key_config: AEADKeyConfig,
-}
-#[derive(Deserialize)]
-pub struct GetFileResponse {
- pub file_info: FileInfo,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum DFSResponse {
- Get(GetFileResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Get",
- "file_info":{
- "user_id":"user1",
- "file_name":"5ef0cfc7-11e9-445a-8c46-23790ea86819",
- "sha256":"d5e2d2ac07b741be58f6b9e50ede5fdcf16f3e8053ecef9350e7744b0d8bd90c",
- "file_size":4,
- "access_path":"/tmp/d18fb288-8fef-48c3-b800-201b2734882e",
- "task_id":"5ef0cfc7-11e9-445a-8c46-23790ea86819",
- "collaborator_list":[],
- "key_config":{
- "key":"E99iifHZ16dDY0IocaGFyD3v2j/kvHsn6wRqFZWGeDA=",
- "nonce":"jcqPUkPIqgYeLe9B",
- "ad":"V/gZjZY="
- }
- }
-}
-```
-
-### List File
-#### List File request data structure:
-```rust
-#[derive(Serialize)]
-pub struct ListFileRequest {
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum DFSRequest {
- List(ListFileRequest),
-}
-```
-#### Request examples:
-```json
-{
- "type":"List",
- "user_id":"bbbb",
- "user_token":"xxxx"
-}
-```
-
-#### List File response data structure
-```rust
-#[derive(Deserialize)]
-pub struct ListFileResponse {
- pub list: Vec<String>,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum DFSResponse {
- List(ListFileResponse),
-}
-```
-#### Response examples:
-``` json
-{
- "type":"List",
- "list": ["0e8446d1-6fa5-49db-b828-8087a0141370", "b76f9ee2-63d2-43bd-a722-466792af7035"]
-}
-```
-
-### Delete File
-Delete file meta information in the TDFS and related key in the KMS. Client should delete the encrypted file in the file system.
-#### Delete File request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct DeleteFileRequest {
- pub file_id: String,
- pub user_id: String,
- pub user_token: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum DFSRequest {
- Delete(DeleteFileRequest),
-}
-```
-
-#### Delete File request examples
-
-```json
-{
- "type":"Delete",
- "file_id":"d18fb288-8fef-48c3-b800-201b2734882e",
- "user_id":"user1",
- "user_token":"token1"
-}
-```
-
-#### Delete File response data structure
-
-```rust
-#[derive(Clone, Deserialize)]
-pub struct AEADKeyConfig {
- #[serde(with = "base64_decoder")]
- pub key: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub nonce: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub ad: Vec<u8>,
-}
-#[derive(Deserialize)]
-pub struct FileInfo {
- pub user_id: String,
- pub file_name: String,
- pub sha256: String,
- pub file_size: u32,
- pub access_path: String,
- pub task_id: Option<String>,
- pub collaborator_list: Vec<String>,
- pub key_config: AEADKeyConfig,
-}
-#[derive(Deserialize)]
-pub struct DeleteFileResponse {
- pub file_info: FileInfo,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum DFSResponse {
- Delete(DeleteFileResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Delete",
- "file_info":{
- "user_id":"user1",
- "file_name":"5ef0cfc7-11e9-445a-8c46-23790ea86819",
- "sha256":"d5e2d2ac07b741be58f6b9e50ede5fdcf16f3e8053ecef9350e7744b0d8bd90c",
- "file_size":4,
- "access_path":"/tmp/d18fb288-8fef-48c3-b800-201b2734882e",
- "task_id":"5ef0cfc7-11e9-445a-8c46-23790ea86819",
- "collaborator_list":[],
- "key_config":{
- "key":"E99iifHZ16dDY0IocaGFyD3v2j/kvHsn6wRqFZWGeDA=",
- "nonce":"jcqPUkPIqgYeLe9B",
- "ad":"V/gZjZY="
- }
- }
-}
-```
-
-## Internal API (port: 5066)
-
-### Create File
-
-#### Create File request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct CreateFileRequest {
- pub sha256: String,
- pub file_size: u32,
- pub user_id: String,
- pub task_id: String,
- pub collaborator_list: Vec<String>,
- pub allow_policy: u32,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum DFSRequest {
- Create(CreateFileRequest),
-}
-```
-
-#### Create File request examples
-
-```json
-{
- "type":"Create",
- "sha256":"85f90dfea1d8027e1463e5ca971a250110a20df0119d204a74220bc63516d15b",
- "file_size":3,
- "user_id":"user2",
- "task_id":"5ef0cfc7-11e9-445a-8c46-23790ea86819",
- "collaborator_list":[],
- "allow_policy":0
-}
-```
-
-#### Create File response data structure
-
-```rust
-#[derive(Clone, Deserialize)]
-pub struct AEADKeyConfig {
- #[serde(with = "base64_decoder")]
- pub key: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub nonce: Vec<u8>,
- #[serde(with = "base64_decoder")]
- pub ad: Vec<u8>,
-}
-#[derive(Deserialize)]
-pub struct CreateFileResponse {
- pub file_id: String,
- pub access_path: String,
- pub key_config: AEADKeyConfig,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum DFSResponse {
- Create(CreateFileResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Create",
- "file_id":"0e8446d1-6fa5-49db-b828-8087a0141370",
- "access_path":"/tmp/0e8446d1-6fa5-49db-b828-8087a0141370",
- "key_config":{
- "key":"UKGHBJyhOCKHjbbHFOpo+WNJymG8KcmnrfyL/zs8IOY=",
- "nonce":"5fahqAqvPrhYg0l9",
- "ad":"unSzGpc="
- }
-}
-```
-
-### Get File
-
-#### Get File request data structure
-
-```rust
-#[derive(Serialize)]
-pub struct GetFileRequest {
- pub file_id: String,
-}
-#[derive(Serialize)]
-#[serde(tag = "type")]
-pub enum DFSRequest {
- Get(GetFileRequest),
-}
-```
-
-#### Get File request examples
-
-```json
-{
- "type":"Get",
- "file_id":"b76f9ee2-63d2-43bd-a722-466792af7035"
-}
-```
-
-#### Get File response data structure
-
-```rust
-#[derive(Deserialize)]
-pub struct FileInfo {
- pub user_id: String,
- pub file_name: String,
- pub sha256: String,
- pub file_size: u32,
- pub access_path: String,
- pub task_id: Option<String>,
- pub collaborator_list: Vec<String>,
- pub allow_policy: u32,
- pub key_id: String,
-}
-#[derive(Deserialize)]
-pub struct GetFileResponse {
- pub file_info: FileInfo,
-}
-#[derive(Deserialize)]
-#[serde(tag = "type")]
-pub enum DFSResponse {
- Get(GetFileResponse),
-}
-```
-
-#### response example
-
-```json
-{
- "type":"Get",
- "file_info":{
- "user_id":"user2",
- "file_name":"file",
- "sha256":"89103c535523c3ecf9b298de94a74283cc04ee0e4072e51d02c565afb79fabaa",
- "file_size":96,
- "access_path":"/tmp/b76f9ee2-63d2-43bd-a722-466792af7035",
- "task_id":null,
- "collaborator_list":[],
- "allow_policy":0,"
- key_id":"4c9fceee-7e35-4dbb-b9e9-c35e453e1636"
- }
-}
-```
diff --git a/legacy/docs/case_study.md b/legacy/docs/case_study.md
deleted file mode 100644
index 517ee07..0000000
--- a/legacy/docs/case_study.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# Case Studies
-
-## Blockchain Applications
-
-### Blockchain Based Privacy-preserving Computing
-
-<p align="center"><img src="images/blockchain.png" width="600"/></p>
-<p align="center"><i>Figure 1: Universal secure computing over cloud, blockchain, and edge computing</i></p>
-
-The applications of MesaTEE stack can range from single-instance trusted
-computing to large scale distributed networks. In this sense, MesaTEE stack is
-the best fit for the computing backends of privacy-preserving blockchains -- as
-shown in Figure 1, wherever the data/code flow to, whenever the data/code get
-processed, and regardless of the underlying platform, the data/code owner can
-always be assured about the confidentiality and integrity protection.
-
-### Trusted Consensus with Extreme Performance
-
-<p align="center"><img src="images/raft.png" width="600"/></p>
-<p align="center"><i>Figure 2: MesaTEE for blockchain services</i></p>
-
-Figure 2 demonstrates an example blockchain consensus system based on MesaTEE
-SGX (Level 5). Not only blockchain, other distributed computing scenarios
-requiring consensus or fault-tolerance can also leverage MesaTEE. Specifically,
-we utilize Raft over the mutually trusted TLS channels to establish consensus,
-and committed logs are written to each local database as the transactions are
-appended to the “chain”. In this case, the confidentiality and integrity of the
-records on chain are well protected from the platforms, and the remote
-attestation during the TLS communications guarantees that the consensus logic
-is as honest as expected. The overall blockchain can survive from data lost or
-unavailability as long as the majority of the participating nodes are still
-healthy (in Figure 2, the blockchain can tolerate one node’s failure).
-This is way more efficient and faster than other Proof-of-Work (PoW) based
-consensus solutions.
-
-## Sensitive Data Computing over Public Cloud
-
-<p align="center"><img src="images/faas_cloud.png" width="500"/></p>
-<p align="center"><i>Figure 3: MesaTEE for public cloud services</i></p>
-
-Losing data confidentiality and integrity has been a major concern for public
-cloud users. MesaTEE can effectively solve this problem by establishing
-remotely-attestable trusted secure computing environments.
-
-Figure 3 depicts MesaTEE’s deployment for public cloud services. Multiple TEE
-server nodes are grouped together to serve as a cloud cluster, which can be
-scheduled by orchestration framework like Kubernetes.
-
-## Secure Multi-party Computation
-
-<p align="center"><img src="images/psi.png" width="700"/></p>
-<p align="center"><i>Figure 4: Traditional SMC compared to MesaTEE based SMC</i></p>
-
-When cross-department or cross-company data collaboration happens, privacy
-concerns arise. Thus secure multi-party computation (SMC) has become more and
-more important nowadays to enable joint big data analyses. However, traditional
-crypto-based SMC has quite a few limitations, and MesaTEE can solve them
-effectively, as shown in Figure 4:
-
-1. once pre-computed for a given collaborative analyses, the confidential
- information can only be utilized by the targeted peers, and it’s difficult
-to add dynamic collaborators; however MesaTEE allows trusted and secure
-computing upon plaintext, thus does not impose such restriction.
-2. once pre-computed for a given computation scheme, the confidential
- information can only perform determined algorithms, without the flexibility
-to add arbitrary follow-up computations; again MesaTEE’s trusted and secure
-computing upon plaintext does not impose such restriction.
-3. once pre-computed for a given computation scheme, the confidential
- information can only be shared/computed by a fix number of participants,
-without the flexibility to add or remove participants; MesaTEE’s trusted and
-secure computing does not impose such restriction.
-4. each of the participating parties needs to exchange information, which
- results in non-negligible latency and throughput downgrading; with MesaTEE,
-each data owner only needs to exchange information with the central trusted
-node, eliminating unnecessary communications.
-
-<p align="center"><img src="images/performance_psi.png" width="600"/></p>
-<p align="center"><i>Figure 5: MesaTEE’s superior performance on PSI, compared to traditional crypto-based approaches</i></p>
-
-Figure 5 uses Private Set Intersection (PSI) as the example to demonstrate
-MesaTEE’s great advantages over traditional SMC solutions. As a matter of fact,
-the more the participants, the larger the dataset to be analyzed, the better
-performance MesaTEE will obtain compared to traditional approaches.
-
-## Secure Spark Backend
-
-<p align="center"><img src="images/performance_spark.png" width="700"/></p>
-<p align="center"><i>Figure 6: MesaTEE’s integration as the Spark backend</i></p>
-
-As shown in Figure 6, we have also used Rust to re-write Spark backend executor
-in MesaTEE SGX (Level 5). Distributed big data analyses can thus enjoy strong
-confidentiality and integrity guarantees. This is extremely helpful when
-analyzing critical privacy dataset. We have also added oblivious protection to
-the framework, so that even if the platform owner observes the traffic flowing
-between the executors, he/she cannot learn any information from the pattern.
-
-In order to achieve the same security promise, traditional crypto-based
-solutions usually cost days or even months to finish the workload that can be
-done in one second by the legacy Spark; but MesaTEE can finish execution in
-4-20 seconds.
-
-## Secure Key Vault and HSM
-
-Applications and services use cryptographic keys and secrets to help keep
-information secure. MesaTEE Key Vault can safeguard these keys and secrets,
-similar to hardware security modules (HSMs).
-
-MesaTEE Key Vault can be conveniently built on [all security levels
-2-5](design.md#configurable-security-levels), providing secret management
-(securely store and control accesses to tokens, passwords, certificates, API
-keys, and other secrets), key management (create and control encryption keys),
-and certificate management (provision and manage certificates).
-
-## Secure AI Computing
-
-<p align="center"><img src="images/performance_ai.png" width="800"/></p>
-<p align="center"><i>Figure 7: MesaTEE’s application in secure AI computing and the performance overhead is acceptable</i></p>
-
-We have already supported GBDT, Linear Regression, as well as neural networks
-in MesaTEE SGX (Level 5). Because we have ported TVM and Anakin in SGX, CNN/RNN
-models generated by popular AI frameworks (e.g. Tensorflow, Caffe, etc.) can be
-conveniently converted and loaded into SGX. As a result, both the model and the
-data can be well protected against the hostile environment. Although our major
-focus is on inference, we do support model training within SGX as well.
-
-Performance is critical for AI applications, so we have also done a lot of
-optimizations to boost the efficiency, including model compression, model
-pipelining, etc. Figure 7 shows the time consumption of running ResNet 50 in
-MesaTEE SGX compared to running in the normal world (outside SGX) -- only 20%
-overhead is added. With this little addition, no other security solution ever
-can provide the same confidentiality and integrity promises.
-
-For more details about MesaTEE trusted secure AI computation, one can take a
-look at our demo video:
-<p align="center"><a href="https://youtu.be/XKaYDQ7kVlY"><img src="images/ai_demo_snapshot.png"/></a></p>
diff --git a/legacy/docs/design.md b/legacy/docs/design.md
deleted file mode 100644
index 6419f16..0000000
--- a/legacy/docs/design.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# MesaTEE Design And Roadmap
-
-**Notice:** *MesaTEE is constantly evolving and designed to demonstrate types of functionality, not necessarily 100% matching this design description.*
-
-MesaTEE is the acronym from “Memory Safe (Mesa) Trusted Execution Environment (TEE)”. It favors memory safe programming languages (e.g. Rust) and inherits the design philosophy from TEEs like Intel SGX and ARM TrustZone: isolation and attestable integrity protection. However the full MesaTEE stack has more to offer than a TEE design. Figure 1 demonstrates the high-level layered architecture of our MesaTEE stack.
-
-<p align="center"><img src="images/platforms.png" width="600"/></p>
-<p align="center"><i>Figure 1: An overview of the full MesaTEE stack. More details about each block will be covered later.</i></p>
-
-## Function-as-a-Service Model
-
-Function-as-a-Service (FaaS) computing model allows developers to concentrate on the core event-driven processing logic, without having to worry about the underlying frameworks and infrastructures. This decoupling dramatically shortens the development cycle, makes scaling much easier, and enables more fine-grained execution metering.
-
-In MesaTEE stack, FaaS is made possible by combining the unified, secure, yet enriched API interface, as well as the carefully tailored secure event service workflow.
-
-## Hybrid Memory Safety
-
-Programs written in memory unsafe languages are prone to memory bugs like buffer overflow, double free, use after free, etc. Formal verification helps to alleviate this problem but the cost is huge -- neither scalable nor sustainable. Rewriting everything in memory safe languages like Rust and Go is promising, but the higher engineering effort can be a tradeoff.
-
-To provide strong security guarantees using balanced approach, MesaTEE stack is adopting Hybrid Memory Safety: top critical system components like operating system core utils, secure communication libraries (e.g. TLS library), authentication interfaces, etc. are rewritten in Rust and Go; important but less changed C/C++ libraries are formally verified to ensure memory safety; other components not been rewritten/verified are isolated in sandbox container. In general, the overall system mu [...]
-
-1. Unsafe components must not taint safe components, especially for public APIs and data structures.
-2. Unsafe components should be as small as possible and decoupled from safe components.
-3. Unsafe components should be explicitly marked during deployment and ready to upgrade.
-
-## Unified, Secure, Yet Versatile API Interface
-
-As shown in the Figure 1, in order to realize universal secure computing, the MesaTEE stack supports various TEE platforms, including Intel SGX, AMD SEV, ARM TrustZone, etc. To unify the capabilities on these platforms, a pack of TEE low-level libraries are developed. The core of such libraries is the Standard Library (STD), which is independent of the specific TEE platform; other low-level libraries are also provided to enrich the supported functionalities. This layer of libraries is al [...]
-
-Based on this Low-level Libraries layer, a stable Abstraction Layer is provided. This layer also has a strict differentiation for trusted/untrusted APIs -- if developers stick to trusted APIs, the underneath logic can be guaranteed to execute within the TEE boundary, so developers do not have to worry about implicit data leakages. MesaTEE does expose other untrusted APIs for functionality corner cases, however they are well labelled (e.g. open v.s. untrusted_open) to match developers’ in [...]
-
-Although the Abstraction Layer APIs are stable and convenient, we also have TEE platform independent APIs (common APIs) and TEE platform dependent APIs (platform specific APIs) available for specific needs. To ease the development, MesaTEE further provides the TEE Foundation Layer, by wrapping up the APIs into turing-complete interpreters. For example, memory safe WASM interpreter is provided to support WebAssembly execution, and memory safe Python interpreter (MesaPy) is also included t [...]
-
-## Powerful and Open Service Ecosystem
-
-Targeting at redefining AI and big data analytics, MesaTEE stack utilizes the TEE Abstraction and Foundation capabilities to build popular ML algorithms and data processing services. To name a few:
-
-1. KeyStore: secure implementation of key/certificate generation and management in TEE, offering functionalities similar to the Hardware Secure Module (HSM).
-2. GBDT: Rust implementation of the Gradient Boosting Decision Trees Algorithm in TEE, with excellent performance comparable to XGBoost.
-3. TVM/Anakin: deep learning framework in TEE, supporting model conversion from most major frameworks like Tensorflow/Caffe/etc. Both model training and inference are supported and performance is close to native.
-4. PSI: multi-party private set intersection in TEE, with unbeatable efficiency boost compared to crypto-based solutions like traditional SMC and homomorphic encryption.
-5. Spark: Rust implementation of Spark backend in TEE, also with great functionalities and performance.
-Meanwhile, MesaTEE stack is totally open. We welcome other developers to join us and carry out more and more built-in services to further extend the ecosystem.
-
-## Trusted Secure Communication Channels
-
-MesaTEE stack also provides secure end-to-end communication channels into the TEE environment. This includes both TEE-to-TEE as well as external-to-TEE communications. Unlike traditional TLS communication channels, MesaTEE secure channels combine certificate based attestation with TEE remote attestation, so that clients are able to not only know which nodes they are talking to, but also ensure the integrity of the remote executing entities.
-
-<p align="center"><img src="images/pai.png" width="600"/></p>
-<p align="center"><i>Figure 2: Traditional Public Key Infrastructure (left) compared to MesaTEE’s attestation based “PAI” (right)</i></p>
-
-As shown in Figure 2, in traditional TLS settings, client verifies the endpoint certificate up against to the root certificate authority (Root CA), and validates it according to certificate revocation list (CRL) or through the online certificate status protocol (OCSP). In MesaTEE, client performs remote attestation of the target platform, and finishes trust establishment as well as key exchange at the same time.
-
-## Configurable Security Levels
-
-Different application scenarios may require different security promises; data in processing may also have various clearance levels. To answer for these different levels of situations, MesaTEE stack can be configured to five different security levels, and is able to be further tailored at finer granularity in architecture, as shown in Figure 3.
-
-<p align="center"><img src="images/five_levels.png" width="500"/></p>
-<p align="center"><i>Figure 3: Five different security levels of MesaTEE stack</i></p>
-
-The five security levels are:
-
-1. Unprotected -- the legacy mode without trust and security
-2. SoftTEE -- trust is established purely based on software (SoftTrust), the environment is measured by collecting system metrics, keys are protected via whitebox encryption, anti-debugging methods are deployed, and critical components are obfuscated to defend against reverse engineering. Optionally, security can be further enhanced by incorporating MesaLock Linux (Linux distribution with user space core utils written in memory safe languages) and Non-bypassable Gateway (NBGW, a memory s [...]
-3. MesaTEE TPM -- the Trusted Platform Module (TPM) chip is added to enforce secure boot and measure the system boot chain all the way up to the application logic. However TPM measurement can assure only static trustworthy; users can add MesaLock Linux and NBGW to enhance dynamic security. Meanwhile, for multi-tenants situation, payloads can be further isolated with the help of a light-weighted secure hypervisor (e.g. Kata Containers).
-4. MesaTEE SEV/MKTME -- the upper layers are the same with the TPM mode except that the physical memory is encrypted automatically by CPU features like AMD SEV or Intel MKTME. This withstands most software-based attacks.
-5. MesaTEE SGX -- the ultimate protection, utilizing Intel SGX to isolate and encrypt secrets automatically. It assumes no trust for the operating system and the hypervisor. So in theory even if the attackers compromise everything except the payloads inside SGX, user code and data are still safe. Physical attacks are also defeated in this setting. However recent works have demonstrated that privileged attackers can launch side-channel attacks to probe secrets in the SGX enclaves, so Mesa [...]
diff --git a/legacy/docs/faq.md b/legacy/docs/faq.md
deleted file mode 100644
index 7c5ecda..0000000
--- a/legacy/docs/faq.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# FAQs in Build and Run
-
-## Why did I see ``SGX launch check failed: Env var for IAS SPID or IAS KEY does NOT exist.``
-
-Because the Intel Attestation Service (IAS) requires mutual authentication in
-TLS communications. So if you have followed [build
-prerequisite](how_to_build.md#prerequisite) document for Intel Attestation
-Service (IAS) registration, you should be able to obtain the SPID, Primary Key,
-and Secondary Key . Please set them as environment variables, e.g. `export IAS_KEY=...`, and then configure them in the ``ias_client_config`` section of
-[config.toml](../config.toml) accordingly.
-
-MesaTEE uses the most recent [Intel IAS API version 5](https://api.trustedservices.intel.com/documents/sgx-attestation-api-spec.pdf).
-It no longer requires certificate from IAS client. Instead, it requires a **Subscription Key** for access. Please read the [manual](https://api.trustedservices.intel.com/documents/sgx-attestation-api-spec.pdf) and [build prerequisite](how_to_build.md#prerequisite) for details.
diff --git a/legacy/docs/hms_and_nbsp.md b/legacy/docs/hms_and_nbsp.md
deleted file mode 100644
index 083fc0d..0000000
--- a/legacy/docs/hms_and_nbsp.md
+++ /dev/null
@@ -1,74 +0,0 @@
-# Hybrid Memory Safety (HMS) and None-bypassable Security Paradigm (NbSP)
-
-The name MesaTEE originates from **Me**mory **Sa**fe **TEE**. Trusted
-Execution Environments (TEEs) have already provided effective foundation for
-secure computating. For example, Intel® provides a processor feature called
-Software Guard Extensions ([Intel® SGX](https://software.intel.com/en-us/sgx))
-through memory access enforcement and automatic memory encryption. However,
-TEEs may still have memory unsafe vulnerabilities like use after free, double
-free, buffer overflow, etc. and could be [exploited by
-attackers](https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/lee-jaehyuk).
-This further indicates privacy leakage or intellectual property compromise.
-Researchers have proposed [several
-techniques](https://cps.kaist.ac.kr/papers/ndss17-sgxshield.pdf) for hardening
-TEEs, but we still need an ultimate solution to provide verifiable memory
-safety.
-
-There are multiple paths towards TEE memory safety. The most straightforward
-one is to use formal verification to prove existing TEE software stack as
-memory safe; if violations occur, fix them. As mentioned above, this would be
-too expensive to be practical. A concrete example is the attempt to [formally
-verify
-seL4](https://www.sigops.org/s/conferences/sosp/2009/papers/klein-sosp09.pdf),
-where at least 8 human years were spent. Any tiny modification to the code
-would consume similar cost again.
-
-The other direction is to rewrite everything using memory safe languages.
-Thankfully, memory safety languages like [Rust](https://www.rust-lang.org/) are
-becoming more and more popular and mature. They intrinsically guarantee memory
-and thread safety during compilation. At the same time, the performance is
-almost equivalent to C/C++ programs (see
-[here](https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf)
-or [here](https://www.techempower.com/benchmarks/)). Most importantly, writing
-programs in memory safe languages is much cheaper comparing to formal verification.
-Hence we believe that Rust, the most outstanding memory safe system programming
-language by far, best fits the TEE world.
-
-However, rewriting everything in Rust is not easy. Sometimes we have to rely
-on existing unsafe components to reduce the development cycle. It is important
-to reach a good balance between safety, compatibility and functionality. To
-achieve that, we come up with the idea of Hybrid Memory Safety and the
-following rule-of-thumbs:
-
-1. Unsafe components should be appropriately isolated and modularized, and the
-size should be small (or minimized)
-2. Unsafe components should not weaken the safe, especially, public APIs and
-data structures
-3. Unsafe components should be clearly identified and easilyupgraded.
-
-Here the unsafe components include both the modules written in memory-unsafe
-languages (such as C/C++), and the
-[unsafe](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html) code in
-memory-safe languages. MesaTEE and its sibling projects ([Rust SGX
-SDK](https://github.com/baidu/rust-sgx-sdk), [MesaLock
-Linux](https://github.com/mesalock-linux/mesalock-distro),
-[MesaLink](https://github.com/mesalock-linux/mesalink), and
-[MesaPy](https://github.com/mesalock-linux/mesapy)) are all trying to adhere to
-these rules.
-
->**MesaTEE combines the power of the Baidu HMS model and Intel® SGX to provide a
->breakthrough solution to expand the trust boundary of the Internet," said Tao
->Wei, Chief Security Scientist of Baidu. " The HMS model has revolutionized
->memory safety for systems at the software architecture level. Intel® SGX,
->meanwhile, dramatically shortens the trust chain of computing and makes trusted
->dependencies more simplified, reliable, and secure. Together, MesaTEE provides
->the foundation for incubating next-generation blockchains, privacy-enhanced
->cloud computing, and other new Internet services.**
-
-Once with the memory safety promises, control flow and data flow integrities
-can be easier to enforce. Security audit also becomes very convenient. Based
-on it, we can further achieve the [Non-bypassable Security
-Paradigm](https://github.com/baidu/rust-sgx-sdk/blob/master/documents/nbsp.pdf).
-This ensures that components cannot be hijacked to take wrong paths, and all
-control/data flows must pass the critical security checkpoints. That is the
-ultimate goal of our endeavor.
diff --git a/legacy/docs/how_to_add_your_function.md b/legacy/docs/how_to_add_your_function.md
deleted file mode 100644
index 9011d1d..0000000
--- a/legacy/docs/how_to_add_your_function.md
+++ /dev/null
@@ -1,214 +0,0 @@
-# Implement your worker
-
-Example: mesatee_services/fns/sgx_trusted_lib/src/trusted_worker/private_join_and_compute.rs
-
-## Write your worker with rust
-
-* Only use sgx-compatible crates.
-* No I/O or network capabilities.
-* Handle the errors properly
-
-## Function Types
-
-* Single: Only one customer participates in this computation task
-* Multiparty: More than two customers participate in this computation task
-
-## Worker Definition
-
-### Implement the `worker` trait for your worker.
-
-```rust
-trait Worker: Send + Sync {
- fn function_name(&self) -> &str; // return function name
- fn function_type(&self) -> FunctionType; // return function type, Single/Multiparty
- fn set_id(&mut self, worker_id: u32); //id is set by FNS
- fn id(&self) -> u32; //return id
- fn prepare_input(&mut self, dynamic_input: Option<String>, file_ids: Vec<String>)
- -> Result<()>; //do some pre-processing for the input and save it to the structure
- fn execute(&mut self, context: WorkerContext) -> Result<String>; //this is the function to do the computation
-}
-```
-
-### Example
-
-```rust
-pub struct EchoWorker {
- worker_id: u32,
- func_name: String,
- func_type: FunctionType,
- input: Option<EchoWorkerInput>,
-}
-impl EchoWorker {
- pub fn new() -> Self {
- EchoWorker {
- worker_id: 0,
- func_name: "echo".to_string(),
- func_type: FunctionType::Single,
- input: None,
- }
- }
-}
-struct EchoWorkerInput {
- msg: String,
-}
-impl Worker for EchoWorker {
- fn function_name(&self) -> &str {
- self.func_name.as_str()
- }
- fn function_type(&self) -> FunctionType {
- self.func_type
- }
- fn set_id(&mut self, worker_id: u32) {
- self.worker_id = worker_id;
- }
- fn id(&self) -> u32 {
- self.worker_id
- }
- fn prepare_input(
- &mut self,
- dynamic_input: Option<String>,
- _file_ids: Vec<String>,
- ) -> Result<()> {
- let msg = dynamic_input.ok_or_else(|| Error::from(ErrorKind::InvalidInputError))?;
- self.input = Some(EchoWorkerInput { msg });
- Ok(())
- }
- fn execute(&mut self, _context: WorkerContext) -> Result<String> {
- let input = self
- .input
- .take()
- .ok_or_else(|| Error::from(ErrorKind::InvalidInputError))?;
- Ok(input.msg)
- }
-}
-```
-
-
-
-## Input
-
-MesaTEE will provide the worker with two types of input:
-
-* Dynamic Input, provided by the client who invokes the task
-* File ids, provided by clients during task creation and approval
-
-You can do some pre-processing and prepare your own input structure.
-
-```rust
-impl Worker for MyWorker {
- fn prepare_input(
- dynamic_input: Option<String>, // dynamic input
- file_ids: Vec<String>, //input file ids; files are saved in the TDFS
- ) -> Result<()> {
- unimplemented!();
- // Save the input to the structure
- }
-}
-```
-
-**Read a file with file id**
-
-Since some input are file ids, during task execution, the worker can read the data with the file id.
-
-```rust
-impl WorkerContext {
- fn read_file(&self, file_id: &str) -> Result<Vec<u8>>;
-}
-pub fn read_file(context_id: &str, context_token: &str, file_id: &str) -> Result<Vec<u8>>;
-// The above apis are equivalent
-```
-
-**Note**:
-
-The function doesn't know who provides the payload/file. The file-id/dynamic-input can belong to any participatant in this task
-
-## Output
-
-There are four types of output
-
-1. A String returned to the client who invokes the task. It's the return value of the ``execute`` function
-
- ```rust
- impl Worker for MyWorker {
- fn execute(&mut self, context: WorkerContext) -> Result<String>
- }
- ```
-
-2. Save the content to the TDFS for the task creator.
-
- The file id will be saved to the task. The function return value doesn't need to contain the file id.
-
- ```rust
- impl WorkerContext {
- pub fn save_file_for_task_creator(&self, data: &[u8]) -> Result<String>;
- }
- pub fn save_file_for_task_creator(
- context_id: &str,
- context_token: &str,
- data: &[u8],
- ) -> Result<String>
- // return value is the file id
- ```
-
-3. Save the content to the TDFS for the owner of one input file.
-
- The file id will be saved to the task. The function return value doesn't need to contain the file id.
-
- ```rust
- impl WorkerContext {
- pub fn save_file_for_file_owner(&self, data: &[u8], file_id: &str) -> Result<String>
- }
- pub fn save_file_for_file_owner(
- context_id: &str,
- context_token: &str,
- data: &[u8],
- file_id: &str,
- ) -> Result<String>
- // return value is the file id
- ```
-
-4. Save the content to the TDFS for all the participatants.
-
- The file id will be saved to the task. The function return value doesn't need to contain the file id.
-
- Only the last one will be saved in the task.
-
- ```rust
- impl WorkerContext {
- pub fn save_file_for_all_participants(&self, data: &[u8]) -> Result<String>
- }
- pub fn save_file_for_all_participants(
- context_id: &str,
- context_token: &str,
- data: &[u8],
- ) -> Result<String>
- // return value is the file id
- ```
-
-
-
-# Register your worker
-
-## Register in FunctionNodeService
-
-####Statically register your worker
-
-```rust
-In mesatee_services/fns/sgx_trusted_lib/src/global.rs
-pub fn register_trusted_worker_statically() {
- for _i in 0..number_of_worker_instances {
- let worker = Box::new(MyWorker::new());
- let _ = WorkerInfoQueue::register(worker);
- }
-}
-```
-
-## Register in Task Management Service
-
-If the function is a multiparty function, it needs to be marked in the Task Management Service
-
-```rust
-In mesatee_services/tms/sgx_trusted_lib/src/tms_external.rs
- "psi" | "concat" | "swap_file" | "private_join_and_compute" | "my_function" => FunctionType::Multiparty
-```
-
diff --git a/legacy/docs/how_to_build.md b/legacy/docs/how_to_build.md
deleted file mode 100644
index 5c19f46..0000000
--- a/legacy/docs/how_to_build.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# How to Build
-
-## Prerequisite
-
-We only support Linux environment for now. Ubuntu 16.04/18.04 are prefered. If
-you want to build in native environment, please have nightly Rust and the
-latest [Intel SGX SDK](https://01.org/intel-software-guard-extensions/downloads) installed.
-As of writing, the latest Intel SGX SDK version is
-[2.6.100](https://download.01.org/intel-sgx/linux-2.6/ubuntu18.04-server/), and
-our testing is based on that. Detailed instructions can be found in our
-[Dockerfile](https://github.com/mesalock-linux/mesatee/blob/master/Dockerfile).
-Or, you can directly build in the [docker image](https://hub.docker.com/r/mesalocklinux/build-mesatee).
-Please refer to our [CI configuration](../.drone.yml) for such examples.
-
-In order to fulfill the requirements of SGX remote attestation, you need to
-first log in to the brand new [Intel Trusted API Center](https://api.portal.trustedservices.intel.com/) and then subscribe to the **Linkable** version of [Intel SGX Attestation Service Utilizing Enhanced Privacy ID (EPID)](https://api.portal.trustedservices.intel.com/EPID-attestation). Then please visit the [Intel Trusted Service API portal](https://api.portal.trustedservices.intel.com/developer) and check the [Manage Subscriptions](https://api.portal.trustedservices.intel.com/developer) [...]
-
-Attention: MesaTEE has switched to [IAS API v5](https://api.trustedservices.intel.com/documents/sgx-attestation-api-spec.pdf).
-
-All of the prerequisites are:
-
-1. Enclave signing key pair, and the the corresponding MRSIGNER value
-2. SPID, and either "Primary Key", or "Secondary Key"
-3. Intel IAS [Report Signing Public Key](http://software.intel.com/sites/default/files/managed/7b/de/RK_PUB.zip)
-
-You need to also self-issue a CA certificate so that you can later issue client
-certificates. Only clients with certificates issued by you can successfully
-communicate with your MesaTEE deployment.
-
-Examples of the above materials can be found at [here](../cert) (we only
-included those that we are comfortable to open source though). Among them,
-MRSIGNER and IAS report signing key, and the self-issued CA certificate should
-be put in the ``ra_config`` section of [build.toml](../build.toml); the issued
-client certificate should be assigned to the ``client_config`` section of
-[build.toml](../build.toml); and the IAS SPID and Key should be configured in
-the ``ias_client_config`` section of [config.toml](../config.toml).
-
-Moreover, as we described in [Mutual Attestation: Why and
-How](mutual_attestation.md), auditors' credentials should be configured in the
-``audited_enclave_config`` section of [build.toml](../build.toml).
-
-## Build Modes
-
-After fulfill all requirements specified in [build.toml](../build.toml), you
-can start to build by using ``cmake``.
-
-### The ``cmake`` Way
-
-```
-cd <MESATEE_PROJECT_ROOT>
-mkdir build && cd build
-cmake -DSGX_SDK=<SGX_SDK_PATH> ..
-make
-
-# Other Useful Make Targets:
-# print all make targets
-make help
-# separately make sgxlib-<module> and sgxapp-<module>
-# equal to make <module>, e.g. make kms
-make sgxlib-kms && make sgxapp-kms
-# print verbose build commands
-make VERBOSE=1
-# run cargo clippy for all targets
-make clippy
-# run cargo clippy for a single target
-make CLP=1 <target_name>
-# mute cargo
-make MUTE_CARGO=1
-```
-
-Available cmake options:
-`-DSGX_MODE=<HW|SW, default HW>` build in hardware SGX mode or simulation SGX mode
-`-DSGX_SDK=<SGX_SDK_PATH, default /opt/sgxsdk>` config path of Intel SGX SDK
-`-DCMAKE_BUILD_TYPE=<RELEASE|DEBUG, default RELEASE>` build in debug/release mode
-`-DCMAKE_BUILD_TYPE=DEBUG -DCOV=1` debug with gcov enabled
-If SGX_MODE/SGX_SDK are not given on cmake command line, they will be read from
-1. Environment Variable
-2. Default Value
-
-## Enabling Simulation Mode
-
-By default, the outcome is targeting a platform with SGX hardware. In order to
-switch to SGX simulation target, please set ```-DSGX_MODE=SW``` when running ```cmake```.
-
-## Other Environment Variables
-
-All needed environment variables are auto-generated in <BUILD_DIR>/environment.
-When manually running the executables, sourcing the corresponding environment script can
-help set the variables. Below is the description for the environment variables:
-
-* ``SGX_MODE``: whether to run with hardware SGX (``HW``) or in simulation (``SW``)
-* ``SGX_SDK``: path to the Intel SGX SDK
-* ``MESATEE_PROJECT_ROOT``: MesaTEE project root directory
-* ``MESATEE_CFG_DIR``: directory containing the runtime config
-* ``MESATEE_BUILD_CFG_DIR``: directory containing the compile time config
-* `MESATEE_SOTRAGE_DIR`: directory for TDFS data storage, default is `/tmp`
-* ``MESATEE_AUDITORS_DIR``: directory containing auditors' public keys and endorsement to TEE enclaves (digital signatures)
-* ``RUST_LOG``: logging levels
-* ``RUST_BACKTRACE``: whether to enable backtrace logging on crash
diff --git a/legacy/docs/how_to_run.md b/legacy/docs/how_to_run.md
deleted file mode 100644
index 73b966b..0000000
--- a/legacy/docs/how_to_run.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# How to Run
-
-[config.toml](../config.toml) contains all the runtime configurations.
-
-First of all, please refer to the [build
-prerequisite](how_to_build.md#prerequisite) document for Intel Attestation
-Service (IAS) registration. Once obtained the IAS TLS communication
-IAS SPID and Keys, please put their paths in the ``ias_client_config`` section of
-[config.toml](../config.toml).
-
-The ``api_endpoints`` and ``internal_endpoints`` of
-[config.toml](../config.toml) specify the listening IPs and ports of MesaTEE
-services. Please configure them accordingly.
-
-Then, please set SPID and key (either primary or secondary) from Intel Trusted
-Service API portal by ``export IAS_KEY=YOUR_KEY && export IAS_SPID=YOUR_SPID``.
-Next, please edit [config.toml](../config.toml) to tell MesaTEE where to find
-IAS API key and SPID:
-
-```toml
-[ias_client_config]
-spid = { env = "IAS_SPID" }
-key = { env = "IAS_KEY" }
-```
-
-Afterwards, you can launch MesaTEE services as background daemons by running:
-``./service.sh {start|stop|restart}``
-
-## SGX Simulation Mode
-
-You can change ``-DSGX_MODE=HW`` to ``-DSGX_MODE=SW`` when running cmake to enable SGX
-simulation mode (``make clean && make`` required).
-In the simulation mode, MesaTEE won't really connect to IAS to fetch reports,
-nor perform remote attestation during the TLS communications. So basically it
-enables you to freely run on arbitrary platforms to test the functionalities.
diff --git a/legacy/docs/images/ai_demo_snapshot.png b/legacy/docs/images/ai_demo_snapshot.png
deleted file mode 100644
index 7344265..0000000
Binary files a/legacy/docs/images/ai_demo_snapshot.png and /dev/null differ
diff --git a/legacy/docs/images/basic-task-workflow.png b/legacy/docs/images/basic-task-workflow.png
deleted file mode 100644
index 77d246e..0000000
Binary files a/legacy/docs/images/basic-task-workflow.png and /dev/null differ
diff --git a/legacy/docs/images/blockchain.png b/legacy/docs/images/blockchain.png
deleted file mode 100644
index bb668c5..0000000
Binary files a/legacy/docs/images/blockchain.png and /dev/null differ
diff --git a/legacy/docs/images/client-read-workflow.png b/legacy/docs/images/client-read-workflow.png
deleted file mode 100644
index fbaf829..0000000
Binary files a/legacy/docs/images/client-read-workflow.png and /dev/null differ
diff --git a/legacy/docs/images/client-write-workflow.png b/legacy/docs/images/client-write-workflow.png
deleted file mode 100644
index 41ea73c..0000000
Binary files a/legacy/docs/images/client-write-workflow.png and /dev/null differ
diff --git a/legacy/docs/images/faas_cloud.png b/legacy/docs/images/faas_cloud.png
deleted file mode 100644
index 6524577..0000000
Binary files a/legacy/docs/images/faas_cloud.png and /dev/null differ
diff --git a/legacy/docs/images/five_levels.png b/legacy/docs/images/five_levels.png
deleted file mode 100644
index c217d5a..0000000
Binary files a/legacy/docs/images/five_levels.png and /dev/null differ
diff --git a/legacy/docs/images/logo.png b/legacy/docs/images/logo.png
deleted file mode 100644
index b946eb0..0000000
Binary files a/legacy/docs/images/logo.png and /dev/null differ
diff --git a/legacy/docs/images/multiparty-task-workflow.png b/legacy/docs/images/multiparty-task-workflow.png
deleted file mode 100644
index e99aef3..0000000
Binary files a/legacy/docs/images/multiparty-task-workflow.png and /dev/null differ
diff --git a/legacy/docs/images/overview.png b/legacy/docs/images/overview.png
deleted file mode 100644
index cbd249f..0000000
Binary files a/legacy/docs/images/overview.png and /dev/null differ
diff --git a/legacy/docs/images/pai.png b/legacy/docs/images/pai.png
deleted file mode 100644
index cdf1599..0000000
Binary files a/legacy/docs/images/pai.png and /dev/null differ
diff --git a/legacy/docs/images/performance_ai.png b/legacy/docs/images/performance_ai.png
deleted file mode 100644
index cdf9701..0000000
Binary files a/legacy/docs/images/performance_ai.png and /dev/null differ
diff --git a/legacy/docs/images/performance_psi.png b/legacy/docs/images/performance_psi.png
deleted file mode 100644
index c79ab8a..0000000
Binary files a/legacy/docs/images/performance_psi.png and /dev/null differ
diff --git a/legacy/docs/images/performance_spark.png b/legacy/docs/images/performance_spark.png
deleted file mode 100644
index 5bc153a..0000000
Binary files a/legacy/docs/images/performance_spark.png and /dev/null differ
diff --git a/legacy/docs/images/platforms.png b/legacy/docs/images/platforms.png
deleted file mode 100644
index f4ea91c..0000000
Binary files a/legacy/docs/images/platforms.png and /dev/null differ
diff --git a/legacy/docs/images/psi.png b/legacy/docs/images/psi.png
deleted file mode 100644
index 7c9985c..0000000
Binary files a/legacy/docs/images/psi.png and /dev/null differ
diff --git a/legacy/docs/images/raft.png b/legacy/docs/images/raft.png
deleted file mode 100644
index 6617df7..0000000
Binary files a/legacy/docs/images/raft.png and /dev/null differ
diff --git a/legacy/docs/images/task-rw-workflow.png b/legacy/docs/images/task-rw-workflow.png
deleted file mode 100644
index 0320192..0000000
Binary files a/legacy/docs/images/task-rw-workflow.png and /dev/null differ
diff --git a/legacy/docs/images/worker-read-workflow.png b/legacy/docs/images/worker-read-workflow.png
deleted file mode 100644
index 9ccdb31..0000000
Binary files a/legacy/docs/images/worker-read-workflow.png and /dev/null differ
diff --git a/legacy/docs/images/worker-write-workflow.png b/legacy/docs/images/worker-write-workflow.png
deleted file mode 100644
index bd9076f..0000000
Binary files a/legacy/docs/images/worker-write-workflow.png and /dev/null differ
diff --git a/legacy/docs/mutual_attestation.md b/legacy/docs/mutual_attestation.md
deleted file mode 100644
index 0f31103..0000000
--- a/legacy/docs/mutual_attestation.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Mutual Attestation: Why and How
-The standard procedure to establish a secure and trusted communication channel
-from a client to an enclave is through remote attestation. However, when the
-client itself is also an enclave and **mutual** trust between two enclaves is
-required, we need additional design and implementation effort. The MesaTEE
-framework consists of multiple enclave services and most of the
-enclave-to-enclave communications need bidirectional authentication. This
-document entails the methodology and process of MesaTEE's mutual enclave remote
-attestation.
-
-## Problem
-The identity of an enclave is defined through a pair of cryptographically
-secure hash values, i.e., MRSIGNER and MRENCLAVE. MRSIGNER indicates the
-builder of the enclave, thus shared by enclaves signed by the same party.
-MRENCLAVE is unique to each individual enclave. MesaTEE assumes that users do
-not trust the software builder, so verifying MRSIGNER is not enough. For each
-enclave service in MesaTEE, it must strictly check the unique identity of the
-other enclaves it communicates to through MRENCLAVE.
-
-Since the SGX enclave trusts no outside input, the MRENCLAVE should be
-hard-coded into source files used for identity verification logic. Therefore,
-changing the MRENCLAVE value an enclave tries to match against will change the
-MRENCLAVE of the enclave itself. When two enclaves want to remotely attest each
-other, it is impossible to decide which enclave is to be built first.
-
-## Solution
-MesaTEE resolves this problem by replying on third-party auditors. We assume
-that there will be several parties trusted by all participants of MesaTEE's
-computation tasks (could platforms, data providers, and customers, etc). The
-source code and binaries of MesaTEE are audited by these trusted parties. Once
-the auditors decided that MesaTEE is secure, they sign and publish the
-identities of audited enclaves. The **public keys** of the auditors are
-hard-coded in MesaTEE enclave source, while the enclave measures and their
-signatures are loaded from outside at runtime. Each enclave will verify that
-the enclave measures are indeed signed by the auditors before serving any
-requests.
-
-## In the Repository
-The [auditors](../auditors) directory in the source tree contain the key pairs
-of three fake auditing parties for PoC purposes. Private keys are also included
-to deliver a smooth build and test process. In production, builders of MesaTEE
-should obtain the public keys, enclave identities, and the signatures directly
-from the auditors.
diff --git a/legacy/docs/repo_structure.md b/legacy/docs/repo_structure.md
deleted file mode 100644
index e0b5b46..0000000
--- a/legacy/docs/repo_structure.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Repository Structure
-
-+ Project Root
- + [auditors](../auditors)
- - auditor credentials
- + [cmake](../cmake)
- - build scripts/utilities
- + [cert](../cert)
- - pre-generated keys/certificates that are used in the prototype. Note
- that these are only testing keys. Do not use them in production.
- + [docs](../docs)
- - documentations
- + [examples](../examples)
- - examples
- + [teaclave_binder](../teaclave_binder)
- - abstract communication interfaces between TEE untrusted/trusted worlds
- + [mesatee_config](../mesatee_config)
- - compile-time and runtime configuration utilities
- + [mesatee_core](../mesatee_core)
- - core of MesaTEE, including [IPC](../mesatee_core/src/ipc)/[RPC](../mesatee_core/src/rpc)/[Error-handling](../mesatee_core/src/error.rs)/[Database](../esatee_core/src/db.rs)/etc. -- everything you need to develop a TEE services and clients
- + [mesatee_sdk](../mesatee_sdk)
- - client SDK. Applications can utilize it to invoke MesaTEE services
- + [mesatee_services](../mesatee_services)
- - [fns](../mesatee_services/fns): function node service, trusted gateway in front of the actual worker
- - [kms](../mesatee_services/kms): key management service
- - [tdfs](../mesatee_services/tdfs): trusted distributed file system
- - [tms](../mesatee_services/tms): task management service
- + [tests](../tests)
- - functional and integration tests
- + [third_party](../third_party)
- - third party dependencies vendored as git submodules.
- + [build.toml](../build.toml)
- - compile-time configuration
- + [config.toml](../config.toml)
- - runtime configuration
diff --git a/legacy/docs/rust_guideline.md b/legacy/docs/rust_guideline.md
deleted file mode 100644
index b5c194a..0000000
--- a/legacy/docs/rust_guideline.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Rust Development Guideline
-
-This doc defines some guidelines for developing the MesaTEE project in Rust.
-
-## Style
-
-We use `rustfmt` and `clippy` to format and lint all Rust code. Mostly, we use
-the default configurations, but there are a couple of custom settings and lint
-exceptions. Our CI will check the format/lint issues and deny all warnings by
-default. Simply run `make format` to format all code before submitting a PR. If
-you still have some doubts of the `clippy` error, feel free to point out and add
-an exception.
-
-## Unsafe Rust
-
-Using unsafe Rust is extremely dangerous, and may break Rust's strong
-memory-safety guarantees. Therefore, we want to keep unsafe Rust as minimal as
-possible. Sometime (very rare) using unsafe Rust can significant improve
-performance, the unsafe code should *well documented* and *explain the
-rationales*. For contributors and reviewers, pay attention to the unsafe code
-and carefully check whether the pre-conditions and post-conditions are still
-hold.
-
-## Error handling
-
-We have designed a simple and easy error handling mechanism in MesaTEE Core. It
-can help to easyly convert different error types to `mesatee_core::Error`, and
-can also preserve error semantics.
-
-Using `unwrap` to get a value from an optional type may introduce runtime panic.
-Therefore, properly using the error handling mechanism provided by Rust can make
-the system robust and clean. In some cases, optional value can never be `None`
-internally, `unwrap` can be used with a comment explaining the assumptions and
-reasons. The same rule also applies to `panic` and similar functions which may
-cause runtime panic.
-
-## Third-party crates
-
-To ensure the quality, stability and compatibility of upstream crates, all
-third-party crates (especially for ported SGX-compatible crates) used in MesaTEE
-are vendored in the `third_party` directory. Please refer to the `crates-sgx`
-repo and choose specific versions of vendored crates.
diff --git a/legacy/docs/threat_model.md b/legacy/docs/threat_model.md
deleted file mode 100644
index 56c7f35..0000000
--- a/legacy/docs/threat_model.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Threat Model
-With its strongest security setting applied (i.e., level 5), MesaTEE guarantees
-data confidentiality even if all parties along the computation path, privileged
-or not, are untrusted. This includes:
-
-- Internet service provider
-- Cloud provider
-- Function provider
-- Other data providers
-
-Consider the following scenario. A small business needs to employ image
-classification techniques in its daily production. However, the business does
-not have the capabilities to train a high-quality machine learning model, nor
-does it have the hardware resources to host the machine learning
-infrastructures. Under such circumstances, the only solution is to subscribe to
-some cloud computing service and run the needed image classification tasks
-remotely. However, this solution requires the small business to upload its
-private data to the cloud, which may deeply concerns the business owner and
-hinders the deployment of such techniques.
-
-With MesaTEE, privacy concerns above are no more. The small business can
-subscribe to the cloud service from company A, rent the machine learning model
-from company B, and use the deep learning inference engine provided by company
-C. None of these parties need to trust another, yet the computation can
-commence with everyone's privacy respected.
-
-In the settings above, the root of trust converges to Intel and its SGX-enabled
-CPU chips. Before the computation starts, MesaTEE is booted as a secure SGX
-enclave on one of these CPUs owned by the cloud service provider. After that,
-each party can **remotely** attest the authenticity of the hardware and the
-integrity of MesaTEE software. Private data are securely provisioned to the
-MesaTEE enclave only if the attestation passes. After the provision, no
-privileged software is able to access the memory content owned by the enclave
-from outside.
-
-The remote attestation functionality implemented by MesaTEE is augmented from
-the method described by an Intel [white paper](https://arxiv.org/abs/1801.05863).
-The complicated structure of MesaTEE requires additional work for remote
-attestation, which is explained in details via a separate
-[documentation](mutual_attestation.md).
diff --git a/legacy/docs/workflow.md b/legacy/docs/workflow.md
deleted file mode 100644
index 2bfe7ea..0000000
--- a/legacy/docs/workflow.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Basic Task Workflow (Single Party Task without File Reading/Writing)
-
-
-
-# Client Write File Workflow
-
-
-
-# Client Read File Workflow
-
-
-
-# Worker Read File Workflow
-
-
-
-# Worker Write File Workflow
-
-
-
-# Task With File Reading/Writing Workflow
-
-
-
-# Mutliparty Task Workflow
-
-
-
diff --git a/legacy/examples/README.md b/legacy/examples/README.md
deleted file mode 100644
index 2cb85ac..0000000
--- a/legacy/examples/README.md
+++ /dev/null
@@ -1,74 +0,0 @@
-# Examples
-
-This directory contains several examples to illustrate the application
-scenarios. The [case studies](../docs/case_study.md) document contains more
-descriptive information.
-
-* [quickstart](quickstart)
- - Quickstart demo of how to invoke MesaTEE services. This can be a great
- starting point for new users.
-* [image_resizing](image_resizing)
- - One can invoke MesaTEE services similar to [AWS
- Lambda](https://aws.amazon.com/lambda/). On data uploading or new events
-coming, MesaTEE function services are immediately triggered. For example, you
-can use MesaTEE to thumbnail images, transcode videos, index files, process
-logs, validate content, and aggregate and filter data in real-time. In this
-specific example, we demonstrate image resizing.
-* [gbdt](gbdt)
- - MesaTEE also supports a variety of big data analyses and machine learning
- algorithms, such as GBDT, Linear Regression, as well as neural networks.
-In this specific example, we demonstrate how to utilize a GBDT model to perform
-data prediction -- in the trusted secure fashion, without concerning privacy
-leakage.
-* [rsa_sign](rsa_sign) and [online_decrypt](online_decrypt)
- - Another killing feature of MesaTEE is to serve as a key vault or an HSM.
- MesaTEE can conveniently provide secret management (securely store and
-control accesses to tokens, passwords, certificates, API keys, and other
-secrets), key management (create and control encryption keys), and certificate
-management (provision and manage certificates).
-* [private_join_and_compute](private_join_and_compute)
- - When cross-department or cross-company data collaboration happens,
- privacy concerns arise. Thus secure multi-party computation (SMC) has
-become more and more important nowadays to enable joint big data analyses.
-However, traditional crypto-based SMC has quite a few limitations, and MesaTEE
-can solve them effectively, with way better performance/flexibility
-improvements. Details are discussed
-[here](../docs/case_study.md#secure-multi-party-computation).
-* [py_matrix_multiply](py_matrix_multiply)
- - In the era of FaaS and AI, Python rules them all. So we have another
- dedicated project called
-[MesaPy](https://github.com/mesalock-linux/mesapy). In this specific example,
-we demonstrate how to invoke the MesaPy engine integrated into MesaTEE.
-* [py_logistic_reg](py_logistic_reg)
- - MesaTEE supports secondary AI development all in Python with the help of
- MesaPy Engine. Here is an example about logistic regression model
- including training and prediction.
-* [DBSCAN](DBSCAN)
- - Provides an implementaton of DBSCAN clustering.
-* [Generalized Linear Model](GeneralizedLinearModel)
- - Contains implemention of generalized linear models using iteratively
- reweighted least squares.The model will automatically add the intercept
- term to the input data.
-* [Gaussian Mixture Models](GaussianMixtureModels)
- - Provides implementation of GMMs using the EM algorithm.
-* [Gaussian Processes](GaussianProcesses)
- - Provides implementation of gaussian process regression.
-* [Linear Regression](LinearRegression)
- - Contains implemention of linear regression using OLS and gradient
- descent optimization.
-* [Logistic Regression](LogisticRegrerssion)
- - Contains implemention of logistic regression using gradient descent
- optimization.
-* [Naive Bayes Classifiers](NaiveBayesClassifiers)
- - The classifier supports Gaussian, Bernoulli and
- Multinomial distributions.A naive Bayes classifier works by treating the
- features of each input as independent observations. Under this
- assumption we utilize Bayes' rule to compute the probability that each
- input belongs to a given class.
-* [Neural Network](NeuralNetWork)
- - Contains implementation of simple feed forward neural network.
-* [Support Vector Machine](SupportVectorMachine)
- - Contains implementation of Support Vector Machine using the Pegasos
- training algorithm.The SVM models currently only support binary
- classification. The model inputs should be a matrix and the training
- targets are in the form of a vector of -1s and 1s..
\ No newline at end of file
diff --git a/legacy/examples/dbscan/Cargo.toml b/legacy/examples/dbscan/Cargo.toml
deleted file mode 100644
index 6b77003..0000000
--- a/legacy/examples/dbscan/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "dbscan"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/dbscan/dbscan_demo.sh b/legacy/examples/dbscan/dbscan_demo.sh
deleted file mode 100755
index 2325b2d..0000000
--- a/legacy/examples/dbscan/dbscan_demo.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./dbscan
-cd $BIN_DIR
-
-EPS=0.5
-MIN_POINTS=2
-INPUT_MODEL_DATA_COLUMNS=2
-INPUT_PATH=$SCRIPT_DIR/input.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-assert_eq "`$BIN $EPS $MIN_POINTS $INPUT_MODEL_DATA_COLUMNS $INPUT_PATH | tail -n +1 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/dbscan/expected_result.txt b/legacy/examples/dbscan/expected_result.txt
deleted file mode 100644
index e43ec17..0000000
--- a/legacy/examples/dbscan/expected_result.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-0
-0
-0
-0
-1
-1
-
diff --git a/legacy/examples/dbscan/input.txt b/legacy/examples/dbscan/input.txt
deleted file mode 100644
index 44f59ce..0000000
--- a/legacy/examples/dbscan/input.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-1.0,2.0
-1.1,2.2
-0.9,1.9
-1.0,2.1
--2.0,3.0
--2.2,3.1
diff --git a/legacy/examples/dbscan/src/main.rs b/legacy/examples/dbscan/src/main.rs
deleted file mode 100644
index b16c149..0000000
--- a/legacy/examples/dbscan/src/main.rs
+++ /dev/null
@@ -1,101 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct DBSCANPayload {
- eps: f64,
- min_points: usize,
- input_model_columns: usize,
- input_model_data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./dbscan eps min_points input_model_data_columns input_model_data_path
- eps: float
- min_points: uszie
- input_model_data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 5 {
- print_usage();
- return;
- }
- let eps_num = args[1].parse().unwrap();
- let min_points_number = args[2].parse().unwrap();
- let columns = args[3].parse().unwrap();
- let input_model_data_path = &args[4];
-
- let input_model_data_bytes = fs::read(&input_model_data_path).unwrap();
- let input_model_data_str = String::from_utf8(input_model_data_bytes).unwrap();
-
- let input_payload = DBSCANPayload {
- eps: eps_num,
- min_points: min_points_number,
- input_model_columns: columns,
- input_model_data: input_model_data_str,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("dbscan").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- println!("{}", result)
-}
diff --git a/legacy/examples/gaussian_mixture_model/Cargo.toml b/legacy/examples/gaussian_mixture_model/Cargo.toml
deleted file mode 100644
index 3223823..0000000
--- a/legacy/examples/gaussian_mixture_model/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "gaussian_mixture_model"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/gaussian_mixture_model/expected_result.txt b/legacy/examples/gaussian_mixture_model/expected_result.txt
deleted file mode 100644
index 82b8897..0000000
--- a/legacy/examples/gaussian_mixture_model/expected_result.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013626417521818914
-0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037009182801716326
-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000018564018320768327
-1
-1
-1
-
diff --git a/legacy/examples/gaussian_mixture_model/gaussian_mixture_model_demo.sh b/legacy/examples/gaussian_mixture_model/gaussian_mixture_model_demo.sh
deleted file mode 100755
index 862e495..0000000
--- a/legacy/examples/gaussian_mixture_model/gaussian_mixture_model_demo.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./gaussian_mixture_model
-cd $BIN_DIR
-
-K=2
-MAX_ITER=10
-INPUT_MODEL_DATA_COLUMNS=2
-INPUT_PATH=$SCRIPT_DIR/input.txt
-TEST_DATA_PATH=$SCRIPT_DIR/test.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-assert_eq "`$BIN $K $MAX_ITER $INPUT_MODEL_DATA_COLUMNS $INPUT_PATH $TEST_DATA_PATH | sort | tail -n +1 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/gaussian_mixture_model/input.txt b/legacy/examples/gaussian_mixture_model/input.txt
deleted file mode 100644
index 3be031c..0000000
--- a/legacy/examples/gaussian_mixture_model/input.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-1.0,2.0,
--3.0,-3.0,
-0.1,1.5,
--5.0,-2.5
diff --git a/legacy/examples/gaussian_mixture_model/src/main.rs b/legacy/examples/gaussian_mixture_model/src/main.rs
deleted file mode 100644
index d93b60d..0000000
--- a/legacy/examples/gaussian_mixture_model/src/main.rs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct GmmPayload {
- k: usize,
- max_iter_num: usize,
- input_model_columns: usize,
- input_model_data: String,
- test_data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./gaussian_mixture_model k max_iter_num input_model_data_columns input_model_data_path test_data_path
- input_model_data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- test_data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 6 {
- print_usage();
- return;
- }
- let k_number = args[1].parse().unwrap();
- let max_iter_number = args[2].parse().unwrap();
- let columns = args[3].parse().unwrap();
- let input_model_data_path = &args[4];
- let test_date_path = &args[5];
-
- let input_model_data_bytes = fs::read(&input_model_data_path).unwrap();
- let input_model_data_str = String::from_utf8(input_model_data_bytes).unwrap();
-
- let test_data_bytes = fs::read(&test_date_path).unwrap();
- let test_data_str = String::from_utf8(test_data_bytes).unwrap();
-
- let input_payload = GmmPayload {
- k: k_number,
- max_iter_num: max_iter_number,
- input_model_columns: columns,
- input_model_data: input_model_data_str,
- test_data: test_data_str,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("gaussian_mixture_model").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- println!("{}", result)
-}
diff --git a/legacy/examples/gaussian_mixture_model/test.txt b/legacy/examples/gaussian_mixture_model/test.txt
deleted file mode 100644
index 8704d2a..0000000
--- a/legacy/examples/gaussian_mixture_model/test.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-1.0,2.0,
-3.0,2.9,
--4.4,-2.5
diff --git a/legacy/examples/gaussian_processes/Cargo.toml b/legacy/examples/gaussian_processes/Cargo.toml
deleted file mode 100644
index 2847114..0000000
--- a/legacy/examples/gaussian_processes/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "gaussian_processes"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/gaussian_processes/expected_result.txt b/legacy/examples/gaussian_processes/expected_result.txt
deleted file mode 100644
index 4908d33..0000000
--- a/legacy/examples/gaussian_processes/expected_result.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-0.4606748007944418
-0.7472709514172396
-0.7200079942901982
-0.5573116278342435
-0.38102197972858665
-
diff --git a/legacy/examples/gaussian_processes/gaussian_processes_demo.sh b/legacy/examples/gaussian_processes/gaussian_processes_demo.sh
deleted file mode 100755
index 3e2d2ff..0000000
--- a/legacy/examples/gaussian_processes/gaussian_processes_demo.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./gaussian_processes
-cd $BIN_DIR
-
-INPUT_MODEL_DATA_COLUMNS=1
-INPUT_PATH=$SCRIPT_DIR/input.txt
-TARGET_PATH=$SCRIPT_DIR/target.txt
-TEST_DATA_PATH=$SCRIPT_DIR/test.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-assert_eq "`$BIN $INPUT_MODEL_DATA_COLUMNS $INPUT_PATH $TARGET_PATH $TEST_DATA_PATH | tail -n +1 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/gaussian_processes/input.txt b/legacy/examples/gaussian_processes/input.txt
deleted file mode 100644
index 2fdbd50..0000000
--- a/legacy/examples/gaussian_processes/input.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-0.
-1.
-2.
-3.
-4.
-5.
-6.
-7.
-8.
-9.
diff --git a/legacy/examples/gaussian_processes/src/main.rs b/legacy/examples/gaussian_processes/src/main.rs
deleted file mode 100644
index 857bfdb..0000000
--- a/legacy/examples/gaussian_processes/src/main.rs
+++ /dev/null
@@ -1,117 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct GPPayload {
- input_model_columns: usize,
- input_model_data: String,
- target_model_data: String,
- test_data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./gaussian_processes input_model_data_columns input_model_data_path target_model_data_path test_data_path
- input_model format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- target_data format:
- 1.
- 0.
- 1.
- 0.
- 0.
- 1.
- ....
- test_data format:
- f32,f32,f32,f32 ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 5 {
- print_usage();
- return;
- }
-
- let columns = args[1].parse().unwrap();
- let input_model_data_path = &args[2];
- let target_model_data_path = &args[3];
- let test_date_path = &args[4];
-
- let input_model_data_bytes = fs::read(&input_model_data_path).unwrap();
- let input_model_data_str = String::from_utf8(input_model_data_bytes).unwrap();
-
- let target_model_data_bytes = fs::read(&target_model_data_path).unwrap();
- let target_model_data_str = String::from_utf8(target_model_data_bytes).unwrap();
-
- let test_data_bytes = fs::read(&test_date_path).unwrap();
- let test_data_str = String::from_utf8(test_data_bytes).unwrap();
-
- let input_payload = GPPayload {
- input_model_columns: columns,
- input_model_data: input_model_data_str,
- target_model_data: target_model_data_str,
- test_data: test_data_str,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("gaussian_processes").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- println!("{}", result)
-}
diff --git a/legacy/examples/gaussian_processes/target.txt b/legacy/examples/gaussian_processes/target.txt
deleted file mode 100644
index cd68e61..0000000
--- a/legacy/examples/gaussian_processes/target.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-0.
-1.
-2.
-3.
-4.
-4.
-3.
-2.
-1.
-0.
diff --git a/legacy/examples/gaussian_processes/test.txt b/legacy/examples/gaussian_processes/test.txt
deleted file mode 100644
index 6cf76d9..0000000
--- a/legacy/examples/gaussian_processes/test.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-2.3
-4.4
-5.1
-6.2
-7.1
diff --git a/legacy/examples/gbdt/Cargo.toml b/legacy/examples/gbdt/Cargo.toml
deleted file mode 100644
index b457557..0000000
--- a/legacy/examples/gbdt/Cargo.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-[package]
-name = "gbdt"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-description = "Machine learning with MesaTEE."
-license = "Apache-2.0"
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = "1.1.0"
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/gbdt/expected_result.txt b/legacy/examples/gbdt/expected_result.txt
deleted file mode 100644
index cbc4842..0000000
--- a/legacy/examples/gbdt/expected_result.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-2.0000000000
-1.0000264645
-1.0000264645
-1.0000264645
-2.0000000000
-2.0000000000
-1.0000264645
-2.0000000000
-2.9999732971
-2.0000000000
-2.9999732971
-2.9999732971
-2.9999732971
-2.9999732971
-2.9999732971
-2.9999732971
-1.0000264645
-1.0000264645
-1.0000264645
-2.0000000000
-1.0000264645
-2.0000000000
-1.0000264645
-2.9999732971
-2.9999732971
-2.0000000000
-1.0000264645
-2.9999732971
-1.0000264645
-2.9999732971
-
diff --git a/legacy/examples/gbdt/gbdt_demo.sh b/legacy/examples/gbdt/gbdt_demo.sh
deleted file mode 100755
index b089a34..0000000
--- a/legacy/examples/gbdt/gbdt_demo.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./gbdt
-cd $BIN_DIR
-
-
-#Train
-TRAIN_ACTION=train
-TRAIN_FEATURE_SIZE=4
-TRAIN_MAX_DEPTH=4
-TRAIN_ITERATIONS=100
-TRAIN_SHRINKAGE=0.1
-TRAIN_FEATURE_SAMPLE_RATIO=1.0
-TRAIN_DATA_SAMPLE_RATIO=1.0
-TRAIN_MIN_LEAF_SIZE=1
-TRAIN_LOSS=LAD
-TRAIN_TRAINING_OPTIMIZATION_LEVEL=2
-TRAIN_DATA_PATH=$SCRIPT_DIR/train.txt
-TRAIN_MODEL_FILE_ID_SAVING_PATH=$SCRIPT_DIR/gbdt.model
-
-
-#PREDICT
-PREDICT_ACTION=predict
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-MODEL_DATA_PATH=$SCRIPT_DIR/gbdt.model
-TEST_DATA_PATH=$SCRIPT_DIR/test.txt
-PREDICT_RESULT_PATH=$SCRIPT_DIR/predict.result
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-
-$BIN $TRAIN_ACTION $TRAIN_FEATURE_SIZE $TRAIN_MAX_DEPTH $TRAIN_ITERATIONS $TRAIN_SHRINKAGE $TRAIN_FEATURE_SAMPLE_RATIO $TRAIN_DATA_SAMPLE_RATIO $TRAIN_MIN_LEAF_SIZE $TRAIN_LOSS $TRAIN_TRAINING_OPTIMIZATION_LEVEL $TRAIN_DATA_PATH $TRAIN_MODEL_FILE_ID_SAVING_PATH
-
-MODEL_FILE_ID=$(cat $TRAIN_MODEL_FILE_ID_SAVING_PATH)
-assert_eq "`$BIN $PREDICT_ACTION $TEST_DATA_PATH $MODEL_FILE_ID $PREDICT_RESULT_PATH | tail -n +2 2>&1`" "`cat $EXPECTED_RESULT`"
\ No newline at end of file
diff --git a/legacy/examples/gbdt/src/main.rs b/legacy/examples/gbdt/src/main.rs
deleted file mode 100644
index 0d1a45a..0000000
--- a/legacy/examples/gbdt/src/main.rs
+++ /dev/null
@@ -1,229 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-static FUNCTION_TRAIN_NAME: &str = "gbdt_train";
-static FUNCTION_PREDICT_NAME: &str = "gbdt_predict";
-
-static USER_ID: &str = "uid1";
-static USER_TOKEN: &str = "token1";
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct GBDTTrainPayload {
- gbdt_train_feature_size: usize,
- gbdt_train_max_depth: u32,
- gbdt_train_iterations: usize,
- gbdt_train_shrinkage: f64,
- gbdt_train_feature_sample_ratio: f64,
- gbdt_train_data_sample_ratio: f64,
- gbdt_train_min_leaf_size: usize,
- gbdt_train_loss: String,
- gbdt_train_training_optimization_level: u8,
-}
-
-fn print_gbdt_train_usage() {
- let msg = "
- ./gbdt
- train
- gbdt.train.cfg.feature_size [usize, default 1]
- gbdt.train.cfg.max_depth [u32, default 2]
- gbdt.train.cfg.iterations [usize ,default 2]
- gbdt.train.cfg.shrinkage [f64, default 1.0]
- gbdt.train.cfg.feature_sample_ratio [f64, default 1.0]
- gbdt.train.cfg.data_sample_ratio [f64, default 1.0]
- gbdt.train.cfg.min_leaf_size [usize, default 1]
- gbdt.train.cfg.loss [String, default SquareError]
- gbdt.train.cfg.training_optimization_level [u8, default 2]
- gbdt.train.data.path [String]
- model_file_id_saving_path [String]
-
- gbdt.train.data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn print_gbdt_predict_usage() {
- let msg = "
- ./gbdt
- preditct
- gbdt.predict.test_data_path
- gbdt.predict.model_file_id
- result_saving_path
-
- test data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- supported model:
- model saved by gbdt train
- output:
- f32
- f32
- ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn print_usage() {
- print_gbdt_train_usage();
- print_gbdt_predict_usage();
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let enclave_info_file_path = "../services/enclave_info.toml";
-
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let args: Vec<String> = env::args().collect();
- if args.len() < 2 {
- print_usage();
- return;
- }
-
- let action = args[1].as_str();
- match action {
- "train" => {
- if args.len() != 13 {
- print_gbdt_train_usage();
- return;
- }
-
- gbdt_train(
- &mesatee_enclave_info,
- args[2].parse().unwrap(), // gbdt.train.cfg.feature_size
- args[3].parse().unwrap(), // gbdt.train.cfg.max_depth
- args[4].parse().unwrap(), // gbdt.train.cfg.iterations
- args[5].parse().unwrap(), // gbdt.train.cfg.shrinkage
- args[6].parse().unwrap(), // gbdt.train.cfg.feature_sample_ratio
- args[7].parse().unwrap(), // gbdt.train.cfg.data_sample_ratio
- args[8].parse().unwrap(), // gbdt.train.cfg.min_leaf_size
- &args[9], // gbdt.train.cfg.loss
- args[10].parse().unwrap(), // gbdt.train.cfg.training_optimization_level
- &args[11], // gbdt.train.data.path
- &args[12], // model_file_id_saving_path
- );
- }
- "predict" => {
- if args.len() != 5 {
- print_gbdt_predict_usage();
- return;
- }
-
- gbdt_predict(
- &mesatee_enclave_info,
- &args[2], // gbdt.predict.test_data_path
- &args[3], // gbdt.predict.model_file_id
- &args[4], // result_saving_path
- );
- }
- _ => {
- print_usage();
- }
- }
-}
-
-// TODO: remove this lint exception
-#[allow(clippy::too_many_arguments)]
-fn gbdt_train(
- info: &MesateeEnclaveInfo,
- gbdt_train_cfg_feature_size: usize,
- gbdt_train_cfg_max_depth: u32,
- gbdt_train_cfg_iterations: usize,
- gbdt_train_cfg_shrinkage: f64,
- gbdt_train_cfg_feature_sample_ratio: f64,
- gbdt_train_cfg_data_sample_ratio: f64,
- gbdt_train_cfg_min_leaf_size: usize,
- gbdt_train_cfg_loss: &str,
- gbdt_train_training_optimization_level: u8,
- gbdt_train_data_path: &str,
- model_file_id_saving_path: &str,
-) {
- let mesatee = Mesatee::new(info, USER_ID, USER_TOKEN, *TMS_ADDR, *TDFS_ADDR).unwrap();
- let gbdt_train_file_id = mesatee.upload_file(gbdt_train_data_path).unwrap();
-
- let task = mesatee
- .create_task_with_files(FUNCTION_TRAIN_NAME, &[&gbdt_train_file_id])
- .unwrap();
-
- let input_payload = GBDTTrainPayload {
- gbdt_train_feature_size: gbdt_train_cfg_feature_size,
- gbdt_train_max_depth: gbdt_train_cfg_max_depth,
- gbdt_train_iterations: gbdt_train_cfg_iterations,
- gbdt_train_shrinkage: gbdt_train_cfg_shrinkage,
- gbdt_train_feature_sample_ratio: gbdt_train_cfg_feature_sample_ratio,
- gbdt_train_data_sample_ratio: gbdt_train_cfg_data_sample_ratio,
- gbdt_train_min_leaf_size: gbdt_train_cfg_min_leaf_size,
- gbdt_train_loss: gbdt_train_cfg_loss.to_string(),
- gbdt_train_training_optimization_level,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let model_file_id = task.invoke_with_payload(&input_string).unwrap();
-
- println!("the gbdt train model file id: \n{}", model_file_id);
- fs::write(model_file_id_saving_path, model_file_id.as_bytes()).unwrap();
-}
-
-fn gbdt_predict(
- info: &MesateeEnclaveInfo,
- gbdt_predict_test_data_path: &str,
- gbdt_predict_model_file_id: &str,
- result_saving_path: &str,
-) {
- let mesatee = Mesatee::new(info, USER_ID, USER_TOKEN, *TMS_ADDR, *TDFS_ADDR).unwrap();
- // upload model_file_id and test_data_file to mesatee's tdfs
- // let model_file_id = mesatee.upload_file(model_data_path).unwrap();
- let test_file_id = mesatee.upload_file(gbdt_predict_test_data_path).unwrap();
-
- let file_ids: [&str; 2] = [gbdt_predict_model_file_id, test_file_id.as_str()];
-
- let task = mesatee
- .create_task_with_files(FUNCTION_PREDICT_NAME, &file_ids)
- .unwrap();
- let result = task.invoke().unwrap();
-
- println!("result:\n{}", result);
- fs::write(result_saving_path, result.as_bytes()).unwrap();
-}
diff --git a/legacy/examples/gbdt/test.txt b/legacy/examples/gbdt/test.txt
deleted file mode 100644
index 74bb8dc..0000000
--- a/legacy/examples/gbdt/test.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-7.7,2.6,6.9,2.3
-6.1,2.9,4.7,1.4
-6.0,2.9,4.5,1.5
-5.8,2.6,4.0,1.2
-7.6,3.0,6.6,2.1
-5.6,2.8,4.9,2.0
-5.5,2.5,4.0,1.3
-7.1,3.0,5.9,2.1
-5.0,3.5,1.6,0.6
-6.7,3.0,5.2,2.3
-4.6,3.4,1.4,0.3
-5.1,3.5,1.4,0.2
-5.4,3.7,1.5,0.2
-5.0,3.4,1.6,0.4
-4.5,2.3,1.3,0.3
-4.9,3.6,1.4,0.1
-7.0,3.2,4.7,1.4
-6.0,2.2,4.0,1.0
-6.0,3.0,4.8,1.8
-6.7,3.1,5.6,2.4
-5.7,2.9,4.2,1.3
-6.1,3.0,4.9,1.8
-6.7,3.1,4.7,1.5
-5.4,3.9,1.3,0.4
-4.8,3.4,1.9,0.2
-6.4,3.2,5.3,2.3
-7.2,3.0,5.8,1.6
-5.0,3.5,1.3,0.3
-6.3,2.5,4.9,1.5
-5.0,3.4,1.5,0.2
diff --git a/legacy/examples/gbdt/train.txt b/legacy/examples/gbdt/train.txt
deleted file mode 100644
index 7dc9c9c..0000000
--- a/legacy/examples/gbdt/train.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-4.8,3.0,1.4,0.3,3.0
-5.1,3.7,1.5,0.4,3.0
-6.7,2.5,5.8,1.8,2.0
-5.5,2.4,3.7,1.0,1.0
-4.8,3.4,1.6,0.2,3.0
-6.9,3.1,5.4,2.1,2.0
-5.4,3.9,1.7,0.4,3.0
-6.9,3.1,4.9,1.5,1.0
-6.5,3.0,5.5,1.8,2.0
-5.0,2.3,3.3,1.0,1.0
-5.4,3.4,1.5,0.4,3.0
-5.7,4.4,1.5,0.4,3.0
-5.0,3.3,1.4,0.2,3.0
-4.4,3.2,1.3,0.2,3.0
-4.9,3.1,1.5,0.2,3.0
-6.9,3.2,5.7,2.3,2.0
-7.7,3.8,6.7,2.2,2.0
-5.5,2.4,3.8,1.1,1.0
-7.7,3.0,6.1,2.3,2.0
-6.4,2.8,5.6,2.2,2.0
-5.8,2.7,5.1,1.9,2.0
-4.6,3.6,1.0,0.2,3.0
-7.2,3.2,6.0,1.8,2.0
-6.3,3.3,4.7,1.6,1.0
-6.7,3.3,5.7,2.5,2.0
-6.5,3.2,5.1,2.0,2.0
-6.9,3.1,5.1,2.3,2.0
-6.1,2.6,5.6,1.4,2.0
-5.9,3.0,4.2,1.5,1.0
-4.4,2.9,1.4,0.2,3.0
-5.8,2.7,4.1,1.0,1.0
-4.8,3.1,1.6,0.2,3.0
-6.4,2.8,5.6,2.1,2.0
-5.1,3.5,1.4,0.3,3.0
-6.3,3.3,6.0,2.5,2.0
-6.0,2.7,5.1,1.6,1.0
-5.4,3.0,4.5,1.5,1.0
-5.5,2.6,4.4,1.2,1.0
-6.4,3.1,5.5,1.8,2.0
-6.3,3.4,5.6,2.4,2.0
-5.2,3.5,1.5,0.2,3.0
-6.5,3.0,5.8,2.2,2.0
-5.6,2.9,3.6,1.3,1.0
-6.0,2.2,5.0,1.5,2.0
-5.4,3.4,1.7,0.2,3.0
-4.9,3.1,1.5,0.1,3.0
-4.6,3.1,1.5,0.2,3.0
-5.1,2.5,3.0,1.1,1.0
-5.0,2.0,3.5,1.0,1.0
-5.8,2.7,3.9,1.2,1.0
-5.9,3.2,4.8,1.8,1.0
-6.8,3.2,5.9,2.3,2.0
-6.6,2.9,4.6,1.3,1.0
-5.0,3.2,1.2,0.2,3.0
-6.8,2.8,4.8,1.4,1.0
-5.6,3.0,4.5,1.5,1.0
-5.0,3.6,1.4,0.2,3.0
-5.6,2.7,4.2,1.3,1.0
-4.4,3.0,1.3,0.2,3.0
-5.2,3.4,1.4,0.2,3.0
-6.1,3.0,4.6,1.4,1.0
-5.0,3.0,1.6,0.2,3.0
-4.9,2.5,4.5,1.7,2.0
-4.7,3.2,1.6,0.2,3.0
-4.3,3.0,1.1,0.1,3.0
-7.9,3.8,6.4,2.0,2.0
-6.4,3.2,4.5,1.5,1.0
-6.4,2.9,4.3,1.3,1.0
-5.1,3.8,1.9,0.4,3.0
-5.2,2.7,3.9,1.4,1.0
-5.1,3.4,1.5,0.2,3.0
-6.0,3.4,4.5,1.6,1.0
-4.7,3.2,1.3,0.2,3.0
-4.8,3.0,1.4,0.1,3.0
-5.6,2.5,3.9,1.1,1.0
-6.7,3.0,5.0,1.7,1.0
-6.5,3.0,5.2,2.0,2.0
-4.6,3.2,1.4,0.2,3.0
-6.7,3.3,5.7,2.1,2.0
-6.2,2.8,4.8,1.8,2.0
-5.7,3.8,1.7,0.3,3.0
-6.3,2.8,5.1,1.5,2.0
-5.7,3.0,4.2,1.2,1.0
-6.3,2.3,4.4,1.3,1.0
-4.9,2.4,3.3,1.0,1.0
-7.2,3.6,6.1,2.5,2.0
-5.7,2.8,4.5,1.3,1.0
-5.5,4.2,1.4,0.2,3.0
-6.6,3.0,4.4,1.4,1.0
-5.9,3.0,5.1,1.8,2.0
-5.7,2.8,4.1,1.3,1.0
-6.2,2.2,4.5,1.5,1.0
-5.1,3.3,1.7,0.5,3.0
-6.2,2.9,4.3,1.3,1.0
-6.3,2.5,5.0,1.9,2.0
-5.5,3.5,1.3,0.2,3.0
-5.1,3.8,1.5,0.3,3.0
-6.1,2.8,4.7,1.2,1.0
-6.1,2.8,4.0,1.3,1.0
-5.2,4.1,1.5,0.1,3.0
-5.6,3.0,4.1,1.3,1.0
-6.3,2.7,4.9,1.8,2.0
-5.7,2.5,5.0,2.0,2.0
-5.7,2.6,3.5,1.0,1.0
-6.4,2.7,5.3,1.9,2.0
-7.7,2.8,6.7,2.0,2.0
-5.5,2.3,4.0,1.3,1.0
-5.3,3.7,1.5,0.2,3.0
-6.7,3.1,4.4,1.4,1.0
-6.2,3.4,5.4,2.3,2.0
-5.8,4.0,1.2,0.2,3.0
-7.3,2.9,6.3,1.8,2.0
-6.3,2.9,5.6,1.8,2.0
-5.8,2.8,5.1,2.4,2.0
-6.8,3.0,5.5,2.1,2.0
-5.1,3.8,1.6,0.2,3.0
-6.5,2.8,4.6,1.5,1.0
-7.4,2.8,6.1,1.9,2.0
-4.9,3.0,1.4,0.2,3.0
-5.8,2.7,5.1,1.9,2.0
diff --git a/legacy/examples/gen_linear_model/Cargo.toml b/legacy/examples/gen_linear_model/Cargo.toml
deleted file mode 100644
index 42dd923..0000000
--- a/legacy/examples/gen_linear_model/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "gen_linear_model"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/gen_linear_model/expected_result.txt b/legacy/examples/gen_linear_model/expected_result.txt
deleted file mode 100644
index cfa8f82..0000000
--- a/legacy/examples/gen_linear_model/expected_result.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-result:1
-
diff --git a/legacy/examples/gen_linear_model/gen_linear_model_demo.sh b/legacy/examples/gen_linear_model/gen_linear_model_demo.sh
deleted file mode 100755
index c1b619a..0000000
--- a/legacy/examples/gen_linear_model/gen_linear_model_demo.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./gen_linear_model
-cd $BIN_DIR
-
-INPUT_MODEL_DATA_COLUMNS=1
-INPUT_PATH=$SCRIPT_DIR/input.txt
-TARGET_PATH=$SCRIPT_DIR/target.txt
-TEST_DATA_PATH=$SCRIPT_DIR/test.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-
-assert_eq "`$BIN $INPUT_MODEL_DATA_COLUMNS $INPUT_PATH $TARGET_PATH $TEST_DATA_PATH | tail -n +1 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/gen_linear_model/input.txt b/legacy/examples/gen_linear_model/input.txt
deleted file mode 100644
index db6007c..0000000
--- a/legacy/examples/gen_linear_model/input.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-1.0
-3.0
-5.0
-7.0
diff --git a/legacy/examples/gen_linear_model/src/main.rs b/legacy/examples/gen_linear_model/src/main.rs
deleted file mode 100644
index 8ef65d8..0000000
--- a/legacy/examples/gen_linear_model/src/main.rs
+++ /dev/null
@@ -1,117 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct GenLinearModelPayload {
- input_model_columns: usize,
- input_model_data: String,
- target_model_data: String,
- test_data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./gen_linear_model input_model_data_columns input_model_data_path target_model_data_path test_data_path
- input_model_data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- target_model_data format:
- 1.
- 0.
- 1.
- 0.
- 0.
- 1.
- ....
- test_data format:
- f32,f32,f32,f32 ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 5 {
- print_usage();
- return;
- }
-
- let columns = args[1].parse().unwrap();
- let input_model_data_path = &args[2];
- let target_model_data_path = &args[3];
- let test_date_path = &args[4];
-
- let input_model_data_bytes = fs::read(&input_model_data_path).unwrap();
- let input_model_data_str = String::from_utf8(input_model_data_bytes).unwrap();
-
- let target_model_data_bytes = fs::read(&target_model_data_path).unwrap();
- let target_model_data_str = String::from_utf8(target_model_data_bytes).unwrap();
-
- let test_data_bytes = fs::read(&test_date_path).unwrap();
- let test_data_str = String::from_utf8(test_data_bytes).unwrap();
-
- let input_payload = GenLinearModelPayload {
- input_model_columns: columns,
- input_model_data: input_model_data_str,
- target_model_data: target_model_data_str,
- test_data: test_data_str,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("gen_linear_model").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- println!("result:{}", result)
-}
diff --git a/legacy/examples/gen_linear_model/target.txt b/legacy/examples/gen_linear_model/target.txt
deleted file mode 100644
index db635c0..0000000
--- a/legacy/examples/gen_linear_model/target.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-0.
-0.
-1.
-1.
diff --git a/legacy/examples/gen_linear_model/test.txt b/legacy/examples/gen_linear_model/test.txt
deleted file mode 100644
index c556bbb..0000000
--- a/legacy/examples/gen_linear_model/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-10.
diff --git a/legacy/examples/image_resizing/Cargo.toml b/legacy/examples/image_resizing/Cargo.toml
deleted file mode 100644
index 39993b1..0000000
--- a/legacy/examples/image_resizing/Cargo.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[package]
-name = "image_resizing"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-description = "Image resizing with MesaTEE."
-license = "Apache-2.0"
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-base64 = { version = "0.10.1" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
-lazy_static = { version = "1.3.0" }
diff --git a/legacy/examples/image_resizing/expected_result.txt b/legacy/examples/image_resizing/expected_result.txt
deleted file mode 100644
index 423fc14..0000000
--- a/legacy/examples/image_resizing/expected_result.txt
+++ /dev/null
@@ -1 +0,0 @@
-./logo.jpg: JPEG image data, JFIF standard 1.02, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 100x100, frames 3
diff --git a/legacy/examples/image_resizing/image_resize_demo.sh b/legacy/examples/image_resizing/image_resize_demo.sh
deleted file mode 100755
index 0ba9f66..0000000
--- a/legacy/examples/image_resizing/image_resize_demo.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-
-BIN=./image_resizing
-
-cd $BIN_DIR
-
-IMAGE_PATH=$SCRIPT_DIR/logo.png
-WIDTH=100
-HEIGHT=100
-FILTER=Nearest
-OUTPUT_FORMAT=JPEG
-OUTPUT_PATH=./logo.jpg
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-$BIN $IMAGE_PATH $WIDTH $HEIGHT $FILTER $OUTPUT_FORMAT $OUTPUT_PATH 2>&1
-assert_eq "`file $OUTPUT_PATH`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/image_resizing/logo.png b/legacy/examples/image_resizing/logo.png
deleted file mode 100644
index 033c6b8..0000000
Binary files a/legacy/examples/image_resizing/logo.png and /dev/null differ
diff --git a/legacy/examples/image_resizing/src/main.rs b/legacy/examples/image_resizing/src/main.rs
deleted file mode 100644
index 4330798..0000000
--- a/legacy/examples/image_resizing/src/main.rs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use base64;
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-fn print_usage() {
- let msg = "
- ./image_resizing image_path width height filter output_format output_path
-
- filter: Nearest Triangle CatmullRom Gaussian Lanczos3. Default: Nearest
- output_format: PNG JPEG GIF ICO BMP. Default: JPEG
-
- example: ./image_resizing ./logo.png 100 100 Nearest JPEG logo.jpg
- ";
- println!("usage: \n{}", msg);
-}
-
-#[derive(Serialize)]
-pub(crate) struct ImageResizePayload {
- nwidth: u32,
- nheight: u32,
- filter_type: String, //"Nearest", "Triangle", "CatmullRom", "Gaussian", "Lanczos3"
- output_format: String, //"PNG", "JPEG", , "GIF", "ICO", "BMP"
- base64_image: String,
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
- let enclave_info_file_path = "../services/enclave_info.toml";
-
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 7 {
- print_usage();
- return;
- }
-
- let image_path = args[1].to_owned();
- let width: u32 = args[2].parse().unwrap();
- let height: u32 = args[3].parse().unwrap();
- let filter = args[4].to_owned();
- let output_format = args[5].to_owned();
- let output_path = args[6].to_owned();
-
- let image_bytes = fs::read(&image_path).unwrap();
- let base64_image = base64::encode(&image_bytes);
-
- let input_payload = ImageResizePayload {
- nwidth: width,
- nheight: height,
- filter_type: filter,
- output_format,
- base64_image,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
-
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("image_resize").unwrap();
- let ret = task.invoke_with_payload(&input_string).unwrap();
-
- let output_bytes = base64::decode(&ret).unwrap();
- fs::write(output_path, &output_bytes).unwrap();
-}
diff --git a/legacy/examples/kmeans/Cargo.toml b/legacy/examples/kmeans/Cargo.toml
deleted file mode 100644
index 64696f8..0000000
--- a/legacy/examples/kmeans/Cargo.toml
+++ /dev/null
@@ -1,13 +0,0 @@
-[package]
-name = "kmeans"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-description = "KMeans Cluster with MesaTEE"
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/kmeans/expected_result.txt b/legacy/examples/kmeans/expected_result.txt
deleted file mode 100644
index 075da10..0000000
--- a/legacy/examples/kmeans/expected_result.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-4
-3
-2
\ No newline at end of file
diff --git a/legacy/examples/kmeans/kmeans_demo.sh b/legacy/examples/kmeans/kmeans_demo.sh
deleted file mode 100755
index 006a4a2..0000000
--- a/legacy/examples/kmeans/kmeans_demo.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./kmeans
-cd $BIN_DIR
-
-K_NUM=3
-FEATURES_NUM=2
-TEST_DATA_PATH=$SCRIPT_DIR/test_data.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-
-# Since k-means randomly select initial points, the classification result is not
-# stable. Uncomment this line if you need to assert the result.
-# assert_eq "`$BIN $K_NUM $FEATURES_NUM $TEST_DATA_PATH | grep -Eo '[0-9]' | sort | uniq -c | sort -nr | awk '{print $1}' 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/kmeans/src/main.rs b/legacy/examples/kmeans/src/main.rs
deleted file mode 100644
index 9a1a94e..0000000
--- a/legacy/examples/kmeans/src/main.rs
+++ /dev/null
@@ -1,103 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct KmeansPayload {
- k: usize,
- feature_num: usize,
- data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./kmeans k feature_num test_data_path
- test data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- output:
- labels:
- i32
- i32
- ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 4 {
- print_usage();
- return;
- }
- let k_number = args[1].parse().unwrap();
- let feature_number = args[2].parse().unwrap();
- let data_path = &args[3];
-
- let data_bytes = fs::read(&data_path).unwrap();
- let data_str = String::from_utf8(data_bytes).unwrap();
-
- let input_payload = KmeansPayload {
- k: k_number,
- feature_num: feature_number,
- data: data_str,
- };
- let input_string = serde_json::to_string(&input_payload).unwrap();
-
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
-
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("kmeans_cluster").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- print!("result: \n{}", result)
-}
diff --git a/legacy/examples/kmeans/test_data.txt b/legacy/examples/kmeans/test_data.txt
deleted file mode 100644
index cd26806..0000000
--- a/legacy/examples/kmeans/test_data.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-8.3, 23.
-10.2, 21.
-11.1, 22.
-12.5, 15.
--11.3, 20.
--12.4, 11.
--11.2, 23.
-100.2, 33.
-100.3, 34.
diff --git a/legacy/examples/lin_reg/Cargo.toml b/legacy/examples/lin_reg/Cargo.toml
deleted file mode 100644
index c750fc4..0000000
--- a/legacy/examples/lin_reg/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "lin_reg"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
\ No newline at end of file
diff --git a/legacy/examples/lin_reg/expected_result.txt b/legacy/examples/lin_reg/expected_result.txt
deleted file mode 100644
index d3cfcac..0000000
--- a/legacy/examples/lin_reg/expected_result.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-result:-0.2030623978763419
-
diff --git a/legacy/examples/lin_reg/input.txt b/legacy/examples/lin_reg/input.txt
deleted file mode 100644
index fa99966..0000000
--- a/legacy/examples/lin_reg/input.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-70.0,1.0,4.0,130.0,322.0,0.0,2.0,109.0,0.0,2.4,2.0,3.0,3.0
-67.0,0.0,3.0,115.0,564.0,0.0,2.0,160.0,0.0,1.6,2.0,0.0,7.0
-57.0,1.0,2.0,124.0,261.0,0.0,0.0,141.0,0.0,0.3,1.0,0.0,7.0
-64.0,1.0,4.0,128.0,263.0,0.0,0.0,105.0,1.0,0.2,2.0,1.0,7.0
-74.0,0.0,2.0,120.0,269.0,0.0,2.0,121.0,1.0,0.2,1.0,1.0,3.0
-65.0,1.0,4.0,120.0,177.0,0.0,0.0,140.0,0.0,0.4,1.0,0.0,7.0
-56.0,1.0,3.0,130.0,256.0,1.0,2.0,142.0,1.0,0.6,2.0,1.0,6.0
-59.0,1.0,4.0,110.0,239.0,0.0,2.0,142.0,1.0,1.2,2.0,1.0,7.0
-60.0,1.0,4.0,140.0,293.0,0.0,2.0,170.0,0.0,1.2,2.0,2.0,7.0
-63.0,0.0,4.0,150.0,407.0,0.0,2.0,154.0,0.0,4.0,2.0,3.0,7.0
-59.0,1.0,4.0,135.0,234.0,0.0,0.0,161.0,0.0,0.5,2.0,0.0,7.0
-53.0,1.0,4.0,142.0,226.0,0.0,2.0,111.0,1.0,0.0,1.0,0.0,7.0
-44.0,1.0,3.0,140.0,235.0,0.0,2.0,180.0,0.0,0.0,1.0,0.0,3.0
-61.0,1.0,1.0,134.0,234.0,0.0,0.0,145.0,0.0,2.6,2.0,2.0,3.0
-57.0,0.0,4.0,128.0,303.0,0.0,2.0,159.0,0.0,0.0,1.0,1.0,3.0
-71.0,0.0,4.0,112.0,149.0,0.0,0.0,125.0,0.0,1.6,2.0,0.0,3.0
-46.0,1.0,4.0,140.0,311.0,0.0,0.0,120.0,1.0,1.8,2.0,2.0,7.0
-53.0,1.0,4.0,140.0,203.0,1.0,2.0,155.0,1.0,3.1,3.0,0.0,7.0
-64.0,1.0,1.0,110.0,211.0,0.0,2.0,144.0,1.0,1.8,2.0,0.0,3.0
-40.0,1.0,1.0,140.0,199.0,0.0,0.0,178.0,1.0,1.4,1.0,0.0,7.0
-67.0,1.0,4.0,120.0,229.0,0.0,2.0,129.0,1.0,2.6,2.0,2.0,7.0
-48.0,1.0,2.0,130.0,245.0,0.0,2.0,180.0,0.0,0.2,2.0,0.0,3.0
-43.0,1.0,4.0,115.0,303.0,0.0,0.0,181.0,0.0,1.2,2.0,0.0,3.0
-47.0,1.0,4.0,112.0,204.0,0.0,0.0,143.0,0.0,0.1,1.0,0.0,3.0
-54.0,0.0,2.0,132.0,288.0,1.0,2.0,159.0,1.0,0.0,1.0,1.0,3.0
-48.0,0.0,3.0,130.0,275.0,0.0,0.0,139.0,0.0,0.2,1.0,0.0,3.0
-46.0,0.0,4.0,138.0,243.0,0.0,2.0,152.0,1.0,0.0,2.0,0.0,3.0
-51.0,0.0,3.0,120.0,295.0,0.0,2.0,157.0,0.0,0.6,1.0,0.0,3.0
-58.0,1.0,3.0,112.0,230.0,0.0,2.0,165.0,0.0,2.5,2.0,1.0,7.0
-71.0,0.0,3.0,110.0,265.0,1.0,2.0,130.0,0.0,0.0,1.0,1.0,3.0
-57.0,1.0,3.0,128.0,229.0,0.0,2.0,150.0,0.0,0.4,2.0,1.0,7.0
-66.0,1.0,4.0,160.0,228.0,0.0,2.0,138.0,0.0,2.3,1.0,0.0,6.0
-37.0,0.0,3.0,120.0,215.0,0.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0
-59.0,1.0,4.0,170.0,326.0,0.0,2.0,140.0,1.0,3.4,3.0,0.0,7.0
-50.0,1.0,4.0,144.0,200.0,0.0,2.0,126.0,1.0,0.9,2.0,0.0,7.0
-48.0,1.0,4.0,130.0,256.0,1.0,2.0,150.0,1.0,0.0,1.0,2.0,7.0
-61.0,1.0,4.0,140.0,207.0,0.0,2.0,138.0,1.0,1.9,1.0,1.0,7.0
-59.0,1.0,1.0,160.0,273.0,0.0,2.0,125.0,0.0,0.0,1.0,0.0,3.0
-42.0,1.0,3.0,130.0,180.0,0.0,0.0,150.0,0.0,0.0,1.0,0.0,3.0
-48.0,1.0,4.0,122.0,222.0,0.0,2.0,186.0,0.0,0.0,1.0,0.0,3.0
-40.0,1.0,4.0,152.0,223.0,0.0,0.0,181.0,0.0,0.0,1.0,0.0,7.0
-62.0,0.0,4.0,124.0,209.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-44.0,1.0,3.0,130.0,233.0,0.0,0.0,179.0,1.0,0.4,1.0,0.0,3.0
-46.0,1.0,2.0,101.0,197.0,1.0,0.0,156.0,0.0,0.0,1.0,0.0,7.0
-59.0,1.0,3.0,126.0,218.0,1.0,0.0,134.0,0.0,2.2,2.0,1.0,6.0
-58.0,1.0,3.0,140.0,211.0,1.0,2.0,165.0,0.0,0.0,1.0,0.0,3.0
-49.0,1.0,3.0,118.0,149.0,0.0,2.0,126.0,0.0,0.8,1.0,3.0,3.0
-44.0,1.0,4.0,110.0,197.0,0.0,2.0,177.0,0.0,0.0,1.0,1.0,3.0
-66.0,1.0,2.0,160.0,246.0,0.0,0.0,120.0,1.0,0.0,2.0,3.0,6.0
-65.0,0.0,4.0,150.0,225.0,0.0,2.0,114.0,0.0,1.0,2.0,3.0,7.0
-42.0,1.0,4.0,136.0,315.0,0.0,0.0,125.0,1.0,1.8,2.0,0.0,6.0
-52.0,1.0,2.0,128.0,205.0,1.0,0.0,184.0,0.0,0.0,1.0,0.0,3.0
-65.0,0.0,3.0,140.0,417.0,1.0,2.0,157.0,0.0,0.8,1.0,1.0,3.0
-63.0,0.0,2.0,140.0,195.0,0.0,0.0,179.0,0.0,0.0,1.0,2.0,3.0
-45.0,0.0,2.0,130.0,234.0,0.0,2.0,175.0,0.0,0.6,2.0,0.0,3.0
-41.0,0.0,2.0,105.0,198.0,0.0,0.0,168.0,0.0,0.0,1.0,1.0,3.0
-61.0,1.0,4.0,138.0,166.0,0.0,2.0,125.0,1.0,3.6,2.0,1.0,3.0
-60.0,0.0,3.0,120.0,178.0,1.0,0.0,96.0,0.0,0.0,1.0,0.0,3.0
-59.0,0.0,4.0,174.0,249.0,0.0,0.0,143.0,1.0,0.0,2.0,0.0,3.0
-62.0,1.0,2.0,120.0,281.0,0.0,2.0,103.0,0.0,1.4,2.0,1.0,7.0
-57.0,1.0,3.0,150.0,126.0,1.0,0.0,173.0,0.0,0.2,1.0,1.0,7.0
-51.0,0.0,4.0,130.0,305.0,0.0,0.0,142.0,1.0,1.2,2.0,0.0,7.0
-44.0,1.0,3.0,120.0,226.0,0.0,0.0,169.0,0.0,0.0,1.0,0.0,3.0
-60.0,0.0,1.0,150.0,240.0,0.0,0.0,171.0,0.0,0.9,1.0,0.0,3.0
-63.0,1.0,1.0,145.0,233.0,1.0,2.0,150.0,0.0,2.3,3.0,0.0,6.0
-57.0,1.0,4.0,150.0,276.0,0.0,2.0,112.0,1.0,0.6,2.0,1.0,6.0
-51.0,1.0,4.0,140.0,261.0,0.0,2.0,186.0,1.0,0.0,1.0,0.0,3.0
-58.0,0.0,2.0,136.0,319.0,1.0,2.0,152.0,0.0,0.0,1.0,2.0,3.0
-44.0,0.0,3.0,118.0,242.0,0.0,0.0,149.0,0.0,0.3,2.0,1.0,3.0
-47.0,1.0,3.0,108.0,243.0,0.0,0.0,152.0,0.0,0.0,1.0,0.0,3.0
-61.0,1.0,4.0,120.0,260.0,0.0,0.0,140.0,1.0,3.6,2.0,1.0,7.0
-57.0,0.0,4.0,120.0,354.0,0.0,0.0,163.0,1.0,0.6,1.0,0.0,3.0
-70.0,1.0,2.0,156.0,245.0,0.0,2.0,143.0,0.0,0.0,1.0,0.0,3.0
-76.0,0.0,3.0,140.0,197.0,0.0,1.0,116.0,0.0,1.1,2.0,0.0,3.0
-67.0,0.0,4.0,106.0,223.0,0.0,0.0,142.0,0.0,0.3,1.0,2.0,3.0
-45.0,1.0,4.0,142.0,309.0,0.0,2.0,147.0,1.0,0.0,2.0,3.0,7.0
-45.0,1.0,4.0,104.0,208.0,0.0,2.0,148.0,1.0,3.0,2.0,0.0,3.0
-39.0,0.0,3.0,94.0,199.0,0.0,0.0,179.0,0.0,0.0,1.0,0.0,3.0
-42.0,0.0,3.0,120.0,209.0,0.0,0.0,173.0,0.0,0.0,2.0,0.0,3.0
-56.0,1.0,2.0,120.0,236.0,0.0,0.0,178.0,0.0,0.8,1.0,0.0,3.0
-58.0,1.0,4.0,146.0,218.0,0.0,0.0,105.0,0.0,2.0,2.0,1.0,7.0
-35.0,1.0,4.0,120.0,198.0,0.0,0.0,130.0,1.0,1.6,2.0,0.0,7.0
-58.0,1.0,4.0,150.0,270.0,0.0,2.0,111.0,1.0,0.8,1.0,0.0,7.0
-41.0,1.0,3.0,130.0,214.0,0.0,2.0,168.0,0.0,2.0,2.0,0.0,3.0
-57.0,1.0,4.0,110.0,201.0,0.0,0.0,126.0,1.0,1.5,2.0,0.0,6.0
-42.0,1.0,1.0,148.0,244.0,0.0,2.0,178.0,0.0,0.8,1.0,2.0,3.0
-62.0,1.0,2.0,128.0,208.0,1.0,2.0,140.0,0.0,0.0,1.0,0.0,3.0
-59.0,1.0,1.0,178.0,270.0,0.0,2.0,145.0,0.0,4.2,3.0,0.0,7.0
-41.0,0.0,2.0,126.0,306.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-50.0,1.0,4.0,150.0,243.0,0.0,2.0,128.0,0.0,2.6,2.0,0.0,7.0
-59.0,1.0,2.0,140.0,221.0,0.0,0.0,164.0,1.0,0.0,1.0,0.0,3.0
-61.0,0.0,4.0,130.0,330.0,0.0,2.0,169.0,0.0,0.0,1.0,0.0,3.0
-54.0,1.0,4.0,124.0,266.0,0.0,2.0,109.0,1.0,2.2,2.0,1.0,7.0
-54.0,1.0,4.0,110.0,206.0,0.0,2.0,108.0,1.0,0.0,2.0,1.0,3.0
-52.0,1.0,4.0,125.0,212.0,0.0,0.0,168.0,0.0,1.0,1.0,2.0,7.0
-47.0,1.0,4.0,110.0,275.0,0.0,2.0,118.0,1.0,1.0,2.0,1.0,3.0
-66.0,1.0,4.0,120.0,302.0,0.0,2.0,151.0,0.0,0.4,2.0,0.0,3.0
-58.0,1.0,4.0,100.0,234.0,0.0,0.0,156.0,0.0,0.1,1.0,1.0,7.0
-64.0,0.0,3.0,140.0,313.0,0.0,0.0,133.0,0.0,0.2,1.0,0.0,7.0
-50.0,0.0,2.0,120.0,244.0,0.0,0.0,162.0,0.0,1.1,1.0,0.0,3.0
-44.0,0.0,3.0,108.0,141.0,0.0,0.0,175.0,0.0,0.6,2.0,0.0,3.0
-67.0,1.0,4.0,120.0,237.0,0.0,0.0,71.0,0.0,1.0,2.0,0.0,3.0
-49.0,0.0,4.0,130.0,269.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-57.0,1.0,4.0,165.0,289.0,1.0,2.0,124.0,0.0,1.0,2.0,3.0,7.0
-63.0,1.0,4.0,130.0,254.0,0.0,2.0,147.0,0.0,1.4,2.0,1.0,7.0
-48.0,1.0,4.0,124.0,274.0,0.0,2.0,166.0,0.0,0.5,2.0,0.0,7.0
-51.0,1.0,3.0,100.0,222.0,0.0,0.0,143.0,1.0,1.2,2.0,0.0,3.0
-60.0,0.0,4.0,150.0,258.0,0.0,2.0,157.0,0.0,2.6,2.0,2.0,7.0
-59.0,1.0,4.0,140.0,177.0,0.0,0.0,162.0,1.0,0.0,1.0,1.0,7.0
-45.0,0.0,2.0,112.0,160.0,0.0,0.0,138.0,0.0,0.0,2.0,0.0,3.0
-55.0,0.0,4.0,180.0,327.0,0.0,1.0,117.0,1.0,3.4,2.0,0.0,3.0
-41.0,1.0,2.0,110.0,235.0,0.0,0.0,153.0,0.0,0.0,1.0,0.0,3.0
-60.0,0.0,4.0,158.0,305.0,0.0,2.0,161.0,0.0,0.0,1.0,0.0,3.0
-54.0,0.0,3.0,135.0,304.0,1.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0
-42.0,1.0,2.0,120.0,295.0,0.0,0.0,162.0,0.0,0.0,1.0,0.0,3.0
-49.0,0.0,2.0,134.0,271.0,0.0,0.0,162.0,0.0,0.0,2.0,0.0,3.0
-46.0,1.0,4.0,120.0,249.0,0.0,2.0,144.0,0.0,0.8,1.0,0.0,7.0
-56.0,0.0,4.0,200.0,288.0,1.0,2.0,133.0,1.0,4.0,3.0,2.0,7.0
-66.0,0.0,1.0,150.0,226.0,0.0,0.0,114.0,0.0,2.6,3.0,0.0,3.0
-56.0,1.0,4.0,130.0,283.0,1.0,2.0,103.0,1.0,1.6,3.0,0.0,7.0
-49.0,1.0,3.0,120.0,188.0,0.0,0.0,139.0,0.0,2.0,2.0,3.0,7.0
-54.0,1.0,4.0,122.0,286.0,0.0,2.0,116.0,1.0,3.2,2.0,2.0,3.0
-57.0,1.0,4.0,152.0,274.0,0.0,0.0,88.0,1.0,1.2,2.0,1.0,7.0
-65.0,0.0,3.0,160.0,360.0,0.0,2.0,151.0,0.0,0.8,1.0,0.0,3.0
-54.0,1.0,3.0,125.0,273.0,0.0,2.0,152.0,0.0,0.5,3.0,1.0,3.0
-54.0,0.0,3.0,160.0,201.0,0.0,0.0,163.0,0.0,0.0,1.0,1.0,3.0
-62.0,1.0,4.0,120.0,267.0,0.0,0.0,99.0,1.0,1.8,2.0,2.0,7.0
-52.0,0.0,3.0,136.0,196.0,0.0,2.0,169.0,0.0,0.1,2.0,0.0,3.0
-52.0,1.0,2.0,134.0,201.0,0.0,0.0,158.0,0.0,0.8,1.0,1.0,3.0
-60.0,1.0,4.0,117.0,230.0,1.0,0.0,160.0,1.0,1.4,1.0,2.0,7.0
-63.0,0.0,4.0,108.0,269.0,0.0,0.0,169.0,1.0,1.8,2.0,2.0,3.0
-66.0,1.0,4.0,112.0,212.0,0.0,2.0,132.0,1.0,0.1,1.0,1.0,3.0
-42.0,1.0,4.0,140.0,226.0,0.0,0.0,178.0,0.0,0.0,1.0,0.0,3.0
-64.0,1.0,4.0,120.0,246.0,0.0,2.0,96.0,1.0,2.2,3.0,1.0,3.0
-54.0,1.0,3.0,150.0,232.0,0.0,2.0,165.0,0.0,1.6,1.0,0.0,7.0
-46.0,0.0,3.0,142.0,177.0,0.0,2.0,160.0,1.0,1.4,3.0,0.0,3.0
-67.0,0.0,3.0,152.0,277.0,0.0,0.0,172.0,0.0,0.0,1.0,1.0,3.0
-56.0,1.0,4.0,125.0,249.0,1.0,2.0,144.0,1.0,1.2,2.0,1.0,3.0
-34.0,0.0,2.0,118.0,210.0,0.0,0.0,192.0,0.0,0.7,1.0,0.0,3.0
-57.0,1.0,4.0,132.0,207.0,0.0,0.0,168.0,1.0,0.0,1.0,0.0,7.0
-64.0,1.0,4.0,145.0,212.0,0.0,2.0,132.0,0.0,2.0,2.0,2.0,6.0
-59.0,1.0,4.0,138.0,271.0,0.0,2.0,182.0,0.0,0.0,1.0,0.0,3.0
-50.0,1.0,3.0,140.0,233.0,0.0,0.0,163.0,0.0,0.6,2.0,1.0,7.0
-51.0,1.0,1.0,125.0,213.0,0.0,2.0,125.0,1.0,1.4,1.0,1.0,3.0
-54.0,1.0,2.0,192.0,283.0,0.0,2.0,195.0,0.0,0.0,1.0,1.0,7.0
-53.0,1.0,4.0,123.0,282.0,0.0,0.0,95.0,1.0,2.0,2.0,2.0,7.0
-52.0,1.0,4.0,112.0,230.0,0.0,0.0,160.0,0.0,0.0,1.0,1.0,3.0
-40.0,1.0,4.0,110.0,167.0,0.0,2.0,114.0,1.0,2.0,2.0,0.0,7.0
-58.0,1.0,3.0,132.0,224.0,0.0,2.0,173.0,0.0,3.2,1.0,2.0,7.0
-41.0,0.0,3.0,112.0,268.0,0.0,2.0,172.0,1.0,0.0,1.0,0.0,3.0
-41.0,1.0,3.0,112.0,250.0,0.0,0.0,179.0,0.0,0.0,1.0,0.0,3.0
-50.0,0.0,3.0,120.0,219.0,0.0,0.0,158.0,0.0,1.6,2.0,0.0,3.0
-54.0,0.0,3.0,108.0,267.0,0.0,2.0,167.0,0.0,0.0,1.0,0.0,3.0
-64.0,0.0,4.0,130.0,303.0,0.0,0.0,122.0,0.0,2.0,2.0,2.0,3.0
-51.0,0.0,3.0,130.0,256.0,0.0,2.0,149.0,0.0,0.5,1.0,0.0,3.0
-46.0,0.0,2.0,105.0,204.0,0.0,0.0,172.0,0.0,0.0,1.0,0.0,3.0
-55.0,1.0,4.0,140.0,217.0,0.0,0.0,111.0,1.0,5.6,3.0,0.0,7.0
-45.0,1.0,2.0,128.0,308.0,0.0,2.0,170.0,0.0,0.0,1.0,0.0,3.0
-56.0,1.0,1.0,120.0,193.0,0.0,2.0,162.0,0.0,1.9,2.0,0.0,7.0
-66.0,0.0,4.0,178.0,228.0,1.0,0.0,165.0,1.0,1.0,2.0,2.0,7.0
-38.0,1.0,1.0,120.0,231.0,0.0,0.0,182.0,1.0,3.8,2.0,0.0,7.0
-62.0,0.0,4.0,150.0,244.0,0.0,0.0,154.0,1.0,1.4,2.0,0.0,3.0
-55.0,1.0,2.0,130.0,262.0,0.0,0.0,155.0,0.0,0.0,1.0,0.0,3.0
-58.0,1.0,4.0,128.0,259.0,0.0,2.0,130.0,1.0,3.0,2.0,2.0,7.0
-43.0,1.0,4.0,110.0,211.0,0.0,0.0,161.0,0.0,0.0,1.0,0.0,7.0
-64.0,0.0,4.0,180.0,325.0,0.0,0.0,154.0,1.0,0.0,1.0,0.0,3.0
-50.0,0.0,4.0,110.0,254.0,0.0,2.0,159.0,0.0,0.0,1.0,0.0,3.0
-53.0,1.0,3.0,130.0,197.0,1.0,2.0,152.0,0.0,1.2,3.0,0.0,3.0
-45.0,0.0,4.0,138.0,236.0,0.0,2.0,152.0,1.0,0.2,2.0,0.0,3.0
-65.0,1.0,1.0,138.0,282.0,1.0,2.0,174.0,0.0,1.4,2.0,1.0,3.0
-69.0,1.0,1.0,160.0,234.0,1.0,2.0,131.0,0.0,0.1,2.0,1.0,3.0
-69.0,1.0,3.0,140.0,254.0,0.0,2.0,146.0,0.0,2.0,2.0,3.0,7.0
-67.0,1.0,4.0,100.0,299.0,0.0,2.0,125.0,1.0,0.9,2.0,2.0,3.0
-68.0,0.0,3.0,120.0,211.0,0.0,2.0,115.0,0.0,1.5,2.0,0.0,3.0
-34.0,1.0,1.0,118.0,182.0,0.0,2.0,174.0,0.0,0.0,1.0,0.0,3.0
-62.0,0.0,4.0,138.0,294.0,1.0,0.0,106.0,0.0,1.9,2.0,3.0,3.0
-51.0,1.0,4.0,140.0,298.0,0.0,0.0,122.0,1.0,4.2,2.0,3.0,7.0
-46.0,1.0,3.0,150.0,231.0,0.0,0.0,147.0,0.0,3.6,2.0,0.0,3.0
-67.0,1.0,4.0,125.0,254.0,1.0,0.0,163.0,0.0,0.2,2.0,2.0,7.0
-50.0,1.0,3.0,129.0,196.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-42.0,1.0,3.0,120.0,240.0,1.0,0.0,194.0,0.0,0.8,3.0,0.0,7.0
-56.0,0.0,4.0,134.0,409.0,0.0,2.0,150.0,1.0,1.9,2.0,2.0,7.0
-41.0,1.0,4.0,110.0,172.0,0.0,2.0,158.0,0.0,0.0,1.0,0.0,7.0
-42.0,0.0,4.0,102.0,265.0,0.0,2.0,122.0,0.0,0.6,2.0,0.0,3.0
-53.0,1.0,3.0,130.0,246.0,1.0,2.0,173.0,0.0,0.0,1.0,3.0,3.0
-43.0,1.0,3.0,130.0,315.0,0.0,0.0,162.0,0.0,1.9,1.0,1.0,3.0
-56.0,1.0,4.0,132.0,184.0,0.0,2.0,105.0,1.0,2.1,2.0,1.0,6.0
-52.0,1.0,4.0,108.0,233.0,1.0,0.0,147.0,0.0,0.1,1.0,3.0,7.0
-62.0,0.0,4.0,140.0,394.0,0.0,2.0,157.0,0.0,1.2,2.0,0.0,3.0
-70.0,1.0,3.0,160.0,269.0,0.0,0.0,112.0,1.0,2.9,2.0,1.0,7.0
-54.0,1.0,4.0,140.0,239.0,0.0,0.0,160.0,0.0,1.2,1.0,0.0,3.0
-70.0,1.0,4.0,145.0,174.0,0.0,0.0,125.0,1.0,2.6,3.0,0.0,7.0
-54.0,1.0,2.0,108.0,309.0,0.0,0.0,156.0,0.0,0.0,1.0,0.0,7.0
-35.0,1.0,4.0,126.0,282.0,0.0,2.0,156.0,1.0,0.0,1.0,0.0,7.0
-48.0,1.0,3.0,124.0,255.0,1.0,0.0,175.0,0.0,0.0,1.0,2.0,3.0
-55.0,0.0,2.0,135.0,250.0,0.0,2.0,161.0,0.0,1.4,2.0,0.0,3.0
-58.0,0.0,4.0,100.0,248.0,0.0,2.0,122.0,0.0,1.0,2.0,0.0,3.0
-54.0,0.0,3.0,110.0,214.0,0.0,0.0,158.0,0.0,1.6,2.0,0.0,3.0
-69.0,0.0,1.0,140.0,239.0,0.0,0.0,151.0,0.0,1.8,1.0,2.0,3.0
-77.0,1.0,4.0,125.0,304.0,0.0,2.0,162.0,1.0,0.0,1.0,3.0,3.0
-68.0,1.0,3.0,118.0,277.0,0.0,0.0,151.0,0.0,1.0,1.0,1.0,7.0
-58.0,1.0,4.0,125.0,300.0,0.0,2.0,171.0,0.0,0.0,1.0,2.0,7.0
-60.0,1.0,4.0,125.0,258.0,0.0,2.0,141.0,1.0,2.8,2.0,1.0,7.0
-51.0,1.0,4.0,140.0,299.0,0.0,0.0,173.0,1.0,1.6,1.0,0.0,7.0
-55.0,1.0,4.0,160.0,289.0,0.0,2.0,145.0,1.0,0.8,2.0,1.0,7.0
-52.0,1.0,1.0,152.0,298.0,1.0,0.0,178.0,0.0,1.2,2.0,0.0,7.0
-60.0,0.0,3.0,102.0,318.0,0.0,0.0,160.0,0.0,0.0,1.0,1.0,3.0
-58.0,1.0,3.0,105.0,240.0,0.0,2.0,154.0,1.0,0.6,2.0,0.0,7.0
-64.0,1.0,3.0,125.0,309.0,0.0,0.0,131.0,1.0,1.8,2.0,0.0,7.0
-37.0,1.0,3.0,130.0,250.0,0.0,0.0,187.0,0.0,3.5,3.0,0.0,3.0
-59.0,1.0,1.0,170.0,288.0,0.0,2.0,159.0,0.0,0.2,2.0,0.0,7.0
-51.0,1.0,3.0,125.0,245.0,1.0,2.0,166.0,0.0,2.4,2.0,0.0,3.0
-43.0,0.0,3.0,122.0,213.0,0.0,0.0,165.0,0.0,0.2,2.0,0.0,3.0
-58.0,1.0,4.0,128.0,216.0,0.0,2.0,131.0,1.0,2.2,2.0,3.0,7.0
-29.0,1.0,2.0,130.0,204.0,0.0,2.0,202.0,0.0,0.0,1.0,0.0,3.0
-41.0,0.0,2.0,130.0,204.0,0.0,2.0,172.0,0.0,1.4,1.0,0.0,3.0
-63.0,0.0,3.0,135.0,252.0,0.0,2.0,172.0,0.0,0.0,1.0,0.0,3.0
-51.0,1.0,3.0,94.0,227.0,0.0,0.0,154.0,1.0,0.0,1.0,1.0,7.0
-54.0,1.0,3.0,120.0,258.0,0.0,2.0,147.0,0.0,0.4,2.0,0.0,7.0
-44.0,1.0,2.0,120.0,220.0,0.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0
-54.0,1.0,4.0,110.0,239.0,0.0,0.0,126.0,1.0,2.8,2.0,1.0,7.0
-65.0,1.0,4.0,135.0,254.0,0.0,2.0,127.0,0.0,2.8,2.0,1.0,7.0
-57.0,1.0,3.0,150.0,168.0,0.0,0.0,174.0,0.0,1.6,1.0,0.0,3.0
-63.0,1.0,4.0,130.0,330.0,1.0,2.0,132.0,1.0,1.8,1.0,3.0,7.0
-35.0,0.0,4.0,138.0,183.0,0.0,0.0,182.0,0.0,1.4,1.0,0.0,3.0
-41.0,1.0,2.0,135.0,203.0,0.0,0.0,132.0,0.0,0.0,2.0,0.0,6.0
-62.0,0.0,3.0,130.0,263.0,0.0,0.0,97.0,0.0,1.2,2.0,1.0,7.0
-43.0,0.0,4.0,132.0,341.0,1.0,2.0,136.0,1.0,3.0,2.0,0.0,7.0
-58.0,0.0,1.0,150.0,283.0,1.0,2.0,162.0,0.0,1.0,1.0,0.0,3.0
-52.0,1.0,1.0,118.0,186.0,0.0,2.0,190.0,0.0,0.0,2.0,0.0,6.0
-61.0,0.0,4.0,145.0,307.0,0.0,2.0,146.0,1.0,1.0,2.0,0.0,7.0
-39.0,1.0,4.0,118.0,219.0,0.0,0.0,140.0,0.0,1.2,2.0,0.0,7.0
-45.0,1.0,4.0,115.0,260.0,0.0,2.0,185.0,0.0,0.0,1.0,0.0,3.0
-52.0,1.0,4.0,128.0,255.0,0.0,0.0,161.0,1.0,0.0,1.0,1.0,7.0
-62.0,1.0,3.0,130.0,231.0,0.0,0.0,146.0,0.0,1.8,2.0,3.0,7.0
-62.0,0.0,4.0,160.0,164.0,0.0,2.0,145.0,0.0,6.2,3.0,3.0,7.0
-53.0,0.0,4.0,138.0,234.0,0.0,2.0,160.0,0.0,0.0,1.0,0.0,3.0
-43.0,1.0,4.0,120.0,177.0,0.0,2.0,120.0,1.0,2.5,2.0,0.0,7.0
-47.0,1.0,3.0,138.0,257.0,0.0,2.0,156.0,0.0,0.0,1.0,0.0,3.0
-52.0,1.0,2.0,120.0,325.0,0.0,0.0,172.0,0.0,0.2,1.0,0.0,3.0
-68.0,1.0,3.0,180.0,274.0,1.0,2.0,150.0,1.0,1.6,2.0,0.0,7.0
-39.0,1.0,3.0,140.0,321.0,0.0,2.0,182.0,0.0,0.0,1.0,0.0,3.0
-53.0,0.0,4.0,130.0,264.0,0.0,2.0,143.0,0.0,0.4,2.0,0.0,3.0
-62.0,0.0,4.0,140.0,268.0,0.0,2.0,160.0,0.0,3.6,3.0,2.0,3.0
-51.0,0.0,3.0,140.0,308.0,0.0,2.0,142.0,0.0,1.5,1.0,1.0,3.0
-60.0,1.0,4.0,130.0,253.0,0.0,0.0,144.0,1.0,1.4,1.0,1.0,7.0
-65.0,1.0,4.0,110.0,248.0,0.0,2.0,158.0,0.0,0.6,1.0,2.0,6.0
-65.0,0.0,3.0,155.0,269.0,0.0,0.0,148.0,0.0,0.8,1.0,0.0,3.0
-60.0,1.0,3.0,140.0,185.0,0.0,2.0,155.0,0.0,3.0,2.0,0.0,3.0
-60.0,1.0,4.0,145.0,282.0,0.0,2.0,142.0,1.0,2.8,2.0,2.0,7.0
-54.0,1.0,4.0,120.0,188.0,0.0,0.0,113.0,0.0,1.4,2.0,1.0,7.0
-44.0,1.0,2.0,130.0,219.0,0.0,2.0,188.0,0.0,0.0,1.0,0.0,3.0
-44.0,1.0,4.0,112.0,290.0,0.0,2.0,153.0,0.0,0.0,1.0,1.0,3.0
-51.0,1.0,3.0,110.0,175.0,0.0,0.0,123.0,0.0,0.6,1.0,0.0,3.0
-59.0,1.0,3.0,150.0,212.0,1.0,0.0,157.0,0.0,1.6,1.0,0.0,3.0
-71.0,0.0,2.0,160.0,302.0,0.0,0.0,162.0,0.0,0.4,1.0,2.0,3.0
-61.0,1.0,3.0,150.0,243.0,1.0,0.0,137.0,1.0,1.0,2.0,0.0,3.0
-55.0,1.0,4.0,132.0,353.0,0.0,0.0,132.0,1.0,1.2,2.0,1.0,7.0
-64.0,1.0,3.0,140.0,335.0,0.0,0.0,158.0,0.0,0.0,1.0,0.0,3.0
-43.0,1.0,4.0,150.0,247.0,0.0,0.0,171.0,0.0,1.5,1.0,0.0,3.0
-58.0,0.0,3.0,120.0,340.0,0.0,0.0,172.0,0.0,0.0,1.0,0.0,3.0
-60.0,1.0,4.0,130.0,206.0,0.0,2.0,132.0,1.0,2.4,2.0,2.0,7.0
-58.0,1.0,2.0,120.0,284.0,0.0,2.0,160.0,0.0,1.8,2.0,0.0,3.0
-49.0,1.0,2.0,130.0,266.0,0.0,0.0,171.0,0.0,0.6,1.0,0.0,3.0
-48.0,1.0,2.0,110.0,229.0,0.0,0.0,168.0,0.0,1.0,3.0,0.0,7.0
-52.0,1.0,3.0,172.0,199.0,1.0,0.0,162.0,0.0,0.5,1.0,0.0,7.0
-44.0,1.0,2.0,120.0,263.0,0.0,0.0,173.0,0.0,0.0,1.0,0.0,7.0
-56.0,0.0,2.0,140.0,294.0,0.0,2.0,153.0,0.0,1.3,2.0,0.0,3.0
-57.0,1.0,4.0,140.0,192.0,0.0,0.0,148.0,0.0,0.4,2.0,0.0,6.0
-67.0,1.0,4.0,160.0,286.0,0.0,2.0,108.0,1.0,1.5,2.0,3.0,3.0
\ No newline at end of file
diff --git a/legacy/examples/lin_reg/lin_reg_demo.sh b/legacy/examples/lin_reg/lin_reg_demo.sh
deleted file mode 100755
index e2ad75c..0000000
--- a/legacy/examples/lin_reg/lin_reg_demo.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./lin_reg
-cd $BIN_DIR
-
-INPUT_MODEL_DATA_COLUMNS=13
-INPUT_PATH=$SCRIPT_DIR/input.txt
-TARGET_PATH=$SCRIPT_DIR/target.txt
-TEST_DATA_PATH=$SCRIPT_DIR/test.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-assert_eq "`$BIN $INPUT_MODEL_DATA_COLUMNS $INPUT_PATH $TARGET_PATH $TEST_DATA_PATH | tail -n +1 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/lin_reg/src/main.rs b/legacy/examples/lin_reg/src/main.rs
deleted file mode 100644
index a280aa0..0000000
--- a/legacy/examples/lin_reg/src/main.rs
+++ /dev/null
@@ -1,117 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct LinRegPayload {
- input_model_columns: usize,
- input_model_data: String,
- target_model_data: String,
- test_data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./lin_reg input_model_data_columns input_model_data_path target_model_data_path test_data_path
- input_model_data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- target_model_data format:
- 1.
- 0.
- 1.
- 0.
- 0.
- 1.
- ....
- test_data format:
- f32,f32,f32,f32 ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 5 {
- print_usage();
- return;
- }
-
- let columns = args[1].parse().unwrap();
- let input_model_data_path = &args[2];
- let target_model_data_path = &args[3];
- let test_date_path = &args[4];
-
- let input_model_data_bytes = fs::read(&input_model_data_path).unwrap();
- let input_model_data_str = String::from_utf8(input_model_data_bytes).unwrap();
-
- let target_model_data_bytes = fs::read(&target_model_data_path).unwrap();
- let target_model_data_str = String::from_utf8(target_model_data_bytes).unwrap();
-
- let test_data_bytes = fs::read(&test_date_path).unwrap();
- let test_data_str = String::from_utf8(test_data_bytes).unwrap();
-
- let input_payload = LinRegPayload {
- input_model_columns: columns,
- input_model_data: input_model_data_str,
- target_model_data: target_model_data_str,
- test_data: test_data_str,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("lin_reg").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- println!("result:{}", result)
-}
diff --git a/legacy/examples/lin_reg/target.txt b/legacy/examples/lin_reg/target.txt
deleted file mode 100644
index af2a0d3..0000000
--- a/legacy/examples/lin_reg/target.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-1.
-0.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-0.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-0.
-1.
-1.
-0.
-0.
-0.
-0.
-1.
-0.
-0.
-0.
-0.
-1.
-1.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-0.
-1.
-1.
-0.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-1.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-0.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-0.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-0.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-1.
-0.
-1.
-0.
-0.
-1.
-1.
-0.
-0.
-1.
-1.
-0.
-1.
-0.
-1.
-0.
-1.
-0.
-0.
-1.
-0.
-0.
-1.
-0.
-1.
-1.
-0.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-1.
-1.
-0.
-0.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-1.
\ No newline at end of file
diff --git a/legacy/examples/lin_reg/test.txt b/legacy/examples/lin_reg/test.txt
deleted file mode 100644
index c70618a..0000000
--- a/legacy/examples/lin_reg/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-34.0,0.0,2.0,118.0,210.0,0.0,0.0,192.0,0.0,0.7,1.0,0.0,3.0
diff --git a/legacy/examples/logistic_reg/Cargo.toml b/legacy/examples/logistic_reg/Cargo.toml
deleted file mode 100644
index 1ad1f08..0000000
--- a/legacy/examples/logistic_reg/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "logistic_reg"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
\ No newline at end of file
diff --git a/legacy/examples/logistic_reg/expected_result.txt b/legacy/examples/logistic_reg/expected_result.txt
deleted file mode 100644
index ec63aa7..0000000
--- a/legacy/examples/logistic_reg/expected_result.txt
+++ /dev/null
@@ -1 +0,0 @@
-result:0
diff --git a/legacy/examples/logistic_reg/logistic_reg_demo.sh b/legacy/examples/logistic_reg/logistic_reg_demo.sh
deleted file mode 100755
index 353b294..0000000
--- a/legacy/examples/logistic_reg/logistic_reg_demo.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./logistic_reg
-cd $BIN_DIR
-
-#Train
-TRAIN_ALG_ALPHA=0.3
-TRAIN_ALG_ITERS=100
-TRAIN_ACTION=train
-TRAIN_DATA_PATH=$SCRIPT_DIR/train.txt
-TARGET_DATA_PATH=$SCRIPT_DIR/target.txt
-TRAIN_MODEL_FILE_ID_SAVING_PATH=$SCRIPT_DIR/test.model
-
-#Predict
-PREDICT_ACTION=predict
-TEST_DATA_PATH=$SCRIPT_DIR/test.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-PREDICT_RESULT_PATH=$SCRIPT_DIR/predict.result
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-
-$BIN $TRAIN_ACTION $TRAIN_ALG_ALPHA $TRAIN_ALG_ITERS $TRAIN_DATA_PATH $TARGET_DATA_PATH $TRAIN_MODEL_FILE_ID_SAVING_PATH 2>&1
-MODEL_FILE_ID=$(cat $TRAIN_MODEL_FILE_ID_SAVING_PATH)
-assert_eq "`$BIN $PREDICT_ACTION $MODEL_FILE_ID $TEST_DATA_PATH $PREDICT_RESULT_PATH | tail 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/logistic_reg/src/main.rs b/legacy/examples/logistic_reg/src/main.rs
deleted file mode 100644
index 67b7521..0000000
--- a/legacy/examples/logistic_reg/src/main.rs
+++ /dev/null
@@ -1,194 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-//use std::fs;
-
-static FUNCTION_TRAIN_NAME: &str = "logisticreg_train";
-static FUNCTION_PREDICT_NAME: &str = "logisticreg_predict";
-
-static USER_ID: &str = "uid1";
-static USER_TOKEN: &str = "token1";
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct LogisticRegTrainPayload {
- train_alg_alpha: f64,
- train_alg_iters: usize,
-}
-
-fn print_logisticreg_train_usage() {
- let msg = "
- ./logisticreg train logisticreg.train.alg.alpha logisticreg.train.alg.iters logisticreg.train.data.path logisticreg.target.data.path model_file_id_saving_path
- logisticreg.train.alg_alpha : f64, such as 0.3
- logisticreg.train.alg_iters : usize, such as 100
- logisticreg.train.data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- logisticreg.target.data format:
- 1.
- 0.
- 1.
- 0.
- 0.
- 1.
- ....
- ";
- println!("logisticreg_train usage: \n{}", msg);
-}
-
-fn print_logisticreg_predict_usage() {
- let msg = "
- ./logisticreg predict logisticreg.predict.model.file.id logisticreg.predict.test.data.path predict_result_saving_path
- 1.use logisticreg train to get the logisticreg.predict.mode.file.id file,then
- 2.logisticreg.predict.test.data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- ";
- println!("logisticreg_predict usage: \n{}", msg);
-}
-
-fn print_usage() {
- print_logisticreg_train_usage();
- print_logisticreg_predict_usage();
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let enclave_info_file_path = "../services/enclave_info.toml";
-
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let args_string: Vec<String> = env::args().collect();
- let args: Vec<&str> = args_string.iter().map(|s| s.as_str()).collect();
- if args.len() < 2 {
- print_usage();
- return;
- }
-
- let action = args[1];
- match action {
- "train" => {
- if args.len() != 7 {
- print_logisticreg_train_usage();
- return;
- }
-
- logisticreg_train(
- &mesatee_enclave_info,
- args[2].parse().unwrap(), // logisticreg.train.alg.alpha
- args[3].parse().unwrap(), // logisticreg.train.alg.iters
- args[4], // logisticreg.train.data.path
- args[5], // logisticreg.target.data.path
- args[6], // model_file_id_saving_path
- );
- }
- "predict" => {
- if args.len() != 5 {
- print_logisticreg_predict_usage();
- return;
- }
-
- logisticreg_predict(
- &mesatee_enclave_info,
- args[2], // logisticreg.predict.model.file.id
- args[3], // logisticreg.predict.test.data.path
- args[4], // predict_result_saving_path
- );
- }
- _ => {
- print_usage();
- }
- }
-}
-
-fn logisticreg_train(
- info: &MesateeEnclaveInfo,
- alg_alpha: f64,
- alg_iters: usize,
- train_data_path: &str,
- target_data_path: &str,
- model_file_id_saving_path: &str,
-) {
- let mesatee = Mesatee::new(info, USER_ID, USER_TOKEN, *TMS_ADDR, *TDFS_ADDR).unwrap();
- // upload train_data and target_data to mesatee's tdfs
- let train_file_id = mesatee.upload_file(train_data_path).unwrap();
- let target_file_id = mesatee.upload_file(target_data_path).unwrap();
-
- let file_ids: [&str; 2] = [train_file_id.as_str(), target_file_id.as_str()];
-
- let task = mesatee
- .create_task_with_files(FUNCTION_TRAIN_NAME, &file_ids)
- .unwrap();
-
- let input_payload = LogisticRegTrainPayload {
- train_alg_alpha: alg_alpha,
- train_alg_iters: alg_iters,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let model_file_id = task.invoke_with_payload(&input_string).unwrap();
-
- println!("the model file id: \n{}", model_file_id);
- fs::write(model_file_id_saving_path, model_file_id.as_bytes()).unwrap();
-}
-
-fn logisticreg_predict(
- info: &MesateeEnclaveInfo,
- model_file_id: &str,
- test_data_path: &str,
- result_saving_path: &str,
-) {
- let mesatee = Mesatee::new(info, USER_ID, USER_TOKEN, *TMS_ADDR, *TDFS_ADDR).unwrap();
- // upload train_data and target_data to mesatee's tdfs
- // let model_file_id = mesatee.upload_file(model_data_path).unwrap();
- let test_file_id = mesatee.upload_file(test_data_path).unwrap();
-
- let file_ids: [&str; 2] = [model_file_id, test_file_id.as_str()];
-
- let task = mesatee
- .create_task_with_files(FUNCTION_PREDICT_NAME, &file_ids)
- .unwrap();
- let result = task.invoke().unwrap();
-
- println!("result:{}", result);
- fs::write(result_saving_path, result.as_bytes()).unwrap();
-}
diff --git a/legacy/examples/logistic_reg/target.txt b/legacy/examples/logistic_reg/target.txt
deleted file mode 100644
index af2a0d3..0000000
--- a/legacy/examples/logistic_reg/target.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-1.
-0.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-0.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-0.
-1.
-1.
-0.
-0.
-0.
-0.
-1.
-0.
-0.
-0.
-0.
-1.
-1.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-0.
-1.
-1.
-0.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-1.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-0.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-0.
-1.
-0.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-1.
-0.
-1.
-1.
-1.
-1.
-0.
-0.
-0.
-1.
-0.
-1.
-0.
-0.
-1.
-0.
-0.
-0.
-0.
-0.
-0.
-1.
-1.
-0.
-1.
-0.
-0.
-1.
-1.
-0.
-0.
-1.
-1.
-0.
-1.
-0.
-1.
-0.
-1.
-0.
-0.
-1.
-0.
-0.
-1.
-0.
-1.
-1.
-0.
-1.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-1.
-1.
-0.
-0.
-1.
-1.
-0.
-1.
-0.
-0.
-0.
-0.
-1.
\ No newline at end of file
diff --git a/legacy/examples/logistic_reg/test.txt b/legacy/examples/logistic_reg/test.txt
deleted file mode 100644
index c70618a..0000000
--- a/legacy/examples/logistic_reg/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-34.0,0.0,2.0,118.0,210.0,0.0,0.0,192.0,0.0,0.7,1.0,0.0,3.0
diff --git a/legacy/examples/logistic_reg/train.txt b/legacy/examples/logistic_reg/train.txt
deleted file mode 100644
index fa99966..0000000
--- a/legacy/examples/logistic_reg/train.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-70.0,1.0,4.0,130.0,322.0,0.0,2.0,109.0,0.0,2.4,2.0,3.0,3.0
-67.0,0.0,3.0,115.0,564.0,0.0,2.0,160.0,0.0,1.6,2.0,0.0,7.0
-57.0,1.0,2.0,124.0,261.0,0.0,0.0,141.0,0.0,0.3,1.0,0.0,7.0
-64.0,1.0,4.0,128.0,263.0,0.0,0.0,105.0,1.0,0.2,2.0,1.0,7.0
-74.0,0.0,2.0,120.0,269.0,0.0,2.0,121.0,1.0,0.2,1.0,1.0,3.0
-65.0,1.0,4.0,120.0,177.0,0.0,0.0,140.0,0.0,0.4,1.0,0.0,7.0
-56.0,1.0,3.0,130.0,256.0,1.0,2.0,142.0,1.0,0.6,2.0,1.0,6.0
-59.0,1.0,4.0,110.0,239.0,0.0,2.0,142.0,1.0,1.2,2.0,1.0,7.0
-60.0,1.0,4.0,140.0,293.0,0.0,2.0,170.0,0.0,1.2,2.0,2.0,7.0
-63.0,0.0,4.0,150.0,407.0,0.0,2.0,154.0,0.0,4.0,2.0,3.0,7.0
-59.0,1.0,4.0,135.0,234.0,0.0,0.0,161.0,0.0,0.5,2.0,0.0,7.0
-53.0,1.0,4.0,142.0,226.0,0.0,2.0,111.0,1.0,0.0,1.0,0.0,7.0
-44.0,1.0,3.0,140.0,235.0,0.0,2.0,180.0,0.0,0.0,1.0,0.0,3.0
-61.0,1.0,1.0,134.0,234.0,0.0,0.0,145.0,0.0,2.6,2.0,2.0,3.0
-57.0,0.0,4.0,128.0,303.0,0.0,2.0,159.0,0.0,0.0,1.0,1.0,3.0
-71.0,0.0,4.0,112.0,149.0,0.0,0.0,125.0,0.0,1.6,2.0,0.0,3.0
-46.0,1.0,4.0,140.0,311.0,0.0,0.0,120.0,1.0,1.8,2.0,2.0,7.0
-53.0,1.0,4.0,140.0,203.0,1.0,2.0,155.0,1.0,3.1,3.0,0.0,7.0
-64.0,1.0,1.0,110.0,211.0,0.0,2.0,144.0,1.0,1.8,2.0,0.0,3.0
-40.0,1.0,1.0,140.0,199.0,0.0,0.0,178.0,1.0,1.4,1.0,0.0,7.0
-67.0,1.0,4.0,120.0,229.0,0.0,2.0,129.0,1.0,2.6,2.0,2.0,7.0
-48.0,1.0,2.0,130.0,245.0,0.0,2.0,180.0,0.0,0.2,2.0,0.0,3.0
-43.0,1.0,4.0,115.0,303.0,0.0,0.0,181.0,0.0,1.2,2.0,0.0,3.0
-47.0,1.0,4.0,112.0,204.0,0.0,0.0,143.0,0.0,0.1,1.0,0.0,3.0
-54.0,0.0,2.0,132.0,288.0,1.0,2.0,159.0,1.0,0.0,1.0,1.0,3.0
-48.0,0.0,3.0,130.0,275.0,0.0,0.0,139.0,0.0,0.2,1.0,0.0,3.0
-46.0,0.0,4.0,138.0,243.0,0.0,2.0,152.0,1.0,0.0,2.0,0.0,3.0
-51.0,0.0,3.0,120.0,295.0,0.0,2.0,157.0,0.0,0.6,1.0,0.0,3.0
-58.0,1.0,3.0,112.0,230.0,0.0,2.0,165.0,0.0,2.5,2.0,1.0,7.0
-71.0,0.0,3.0,110.0,265.0,1.0,2.0,130.0,0.0,0.0,1.0,1.0,3.0
-57.0,1.0,3.0,128.0,229.0,0.0,2.0,150.0,0.0,0.4,2.0,1.0,7.0
-66.0,1.0,4.0,160.0,228.0,0.0,2.0,138.0,0.0,2.3,1.0,0.0,6.0
-37.0,0.0,3.0,120.0,215.0,0.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0
-59.0,1.0,4.0,170.0,326.0,0.0,2.0,140.0,1.0,3.4,3.0,0.0,7.0
-50.0,1.0,4.0,144.0,200.0,0.0,2.0,126.0,1.0,0.9,2.0,0.0,7.0
-48.0,1.0,4.0,130.0,256.0,1.0,2.0,150.0,1.0,0.0,1.0,2.0,7.0
-61.0,1.0,4.0,140.0,207.0,0.0,2.0,138.0,1.0,1.9,1.0,1.0,7.0
-59.0,1.0,1.0,160.0,273.0,0.0,2.0,125.0,0.0,0.0,1.0,0.0,3.0
-42.0,1.0,3.0,130.0,180.0,0.0,0.0,150.0,0.0,0.0,1.0,0.0,3.0
-48.0,1.0,4.0,122.0,222.0,0.0,2.0,186.0,0.0,0.0,1.0,0.0,3.0
-40.0,1.0,4.0,152.0,223.0,0.0,0.0,181.0,0.0,0.0,1.0,0.0,7.0
-62.0,0.0,4.0,124.0,209.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-44.0,1.0,3.0,130.0,233.0,0.0,0.0,179.0,1.0,0.4,1.0,0.0,3.0
-46.0,1.0,2.0,101.0,197.0,1.0,0.0,156.0,0.0,0.0,1.0,0.0,7.0
-59.0,1.0,3.0,126.0,218.0,1.0,0.0,134.0,0.0,2.2,2.0,1.0,6.0
-58.0,1.0,3.0,140.0,211.0,1.0,2.0,165.0,0.0,0.0,1.0,0.0,3.0
-49.0,1.0,3.0,118.0,149.0,0.0,2.0,126.0,0.0,0.8,1.0,3.0,3.0
-44.0,1.0,4.0,110.0,197.0,0.0,2.0,177.0,0.0,0.0,1.0,1.0,3.0
-66.0,1.0,2.0,160.0,246.0,0.0,0.0,120.0,1.0,0.0,2.0,3.0,6.0
-65.0,0.0,4.0,150.0,225.0,0.0,2.0,114.0,0.0,1.0,2.0,3.0,7.0
-42.0,1.0,4.0,136.0,315.0,0.0,0.0,125.0,1.0,1.8,2.0,0.0,6.0
-52.0,1.0,2.0,128.0,205.0,1.0,0.0,184.0,0.0,0.0,1.0,0.0,3.0
-65.0,0.0,3.0,140.0,417.0,1.0,2.0,157.0,0.0,0.8,1.0,1.0,3.0
-63.0,0.0,2.0,140.0,195.0,0.0,0.0,179.0,0.0,0.0,1.0,2.0,3.0
-45.0,0.0,2.0,130.0,234.0,0.0,2.0,175.0,0.0,0.6,2.0,0.0,3.0
-41.0,0.0,2.0,105.0,198.0,0.0,0.0,168.0,0.0,0.0,1.0,1.0,3.0
-61.0,1.0,4.0,138.0,166.0,0.0,2.0,125.0,1.0,3.6,2.0,1.0,3.0
-60.0,0.0,3.0,120.0,178.0,1.0,0.0,96.0,0.0,0.0,1.0,0.0,3.0
-59.0,0.0,4.0,174.0,249.0,0.0,0.0,143.0,1.0,0.0,2.0,0.0,3.0
-62.0,1.0,2.0,120.0,281.0,0.0,2.0,103.0,0.0,1.4,2.0,1.0,7.0
-57.0,1.0,3.0,150.0,126.0,1.0,0.0,173.0,0.0,0.2,1.0,1.0,7.0
-51.0,0.0,4.0,130.0,305.0,0.0,0.0,142.0,1.0,1.2,2.0,0.0,7.0
-44.0,1.0,3.0,120.0,226.0,0.0,0.0,169.0,0.0,0.0,1.0,0.0,3.0
-60.0,0.0,1.0,150.0,240.0,0.0,0.0,171.0,0.0,0.9,1.0,0.0,3.0
-63.0,1.0,1.0,145.0,233.0,1.0,2.0,150.0,0.0,2.3,3.0,0.0,6.0
-57.0,1.0,4.0,150.0,276.0,0.0,2.0,112.0,1.0,0.6,2.0,1.0,6.0
-51.0,1.0,4.0,140.0,261.0,0.0,2.0,186.0,1.0,0.0,1.0,0.0,3.0
-58.0,0.0,2.0,136.0,319.0,1.0,2.0,152.0,0.0,0.0,1.0,2.0,3.0
-44.0,0.0,3.0,118.0,242.0,0.0,0.0,149.0,0.0,0.3,2.0,1.0,3.0
-47.0,1.0,3.0,108.0,243.0,0.0,0.0,152.0,0.0,0.0,1.0,0.0,3.0
-61.0,1.0,4.0,120.0,260.0,0.0,0.0,140.0,1.0,3.6,2.0,1.0,7.0
-57.0,0.0,4.0,120.0,354.0,0.0,0.0,163.0,1.0,0.6,1.0,0.0,3.0
-70.0,1.0,2.0,156.0,245.0,0.0,2.0,143.0,0.0,0.0,1.0,0.0,3.0
-76.0,0.0,3.0,140.0,197.0,0.0,1.0,116.0,0.0,1.1,2.0,0.0,3.0
-67.0,0.0,4.0,106.0,223.0,0.0,0.0,142.0,0.0,0.3,1.0,2.0,3.0
-45.0,1.0,4.0,142.0,309.0,0.0,2.0,147.0,1.0,0.0,2.0,3.0,7.0
-45.0,1.0,4.0,104.0,208.0,0.0,2.0,148.0,1.0,3.0,2.0,0.0,3.0
-39.0,0.0,3.0,94.0,199.0,0.0,0.0,179.0,0.0,0.0,1.0,0.0,3.0
-42.0,0.0,3.0,120.0,209.0,0.0,0.0,173.0,0.0,0.0,2.0,0.0,3.0
-56.0,1.0,2.0,120.0,236.0,0.0,0.0,178.0,0.0,0.8,1.0,0.0,3.0
-58.0,1.0,4.0,146.0,218.0,0.0,0.0,105.0,0.0,2.0,2.0,1.0,7.0
-35.0,1.0,4.0,120.0,198.0,0.0,0.0,130.0,1.0,1.6,2.0,0.0,7.0
-58.0,1.0,4.0,150.0,270.0,0.0,2.0,111.0,1.0,0.8,1.0,0.0,7.0
-41.0,1.0,3.0,130.0,214.0,0.0,2.0,168.0,0.0,2.0,2.0,0.0,3.0
-57.0,1.0,4.0,110.0,201.0,0.0,0.0,126.0,1.0,1.5,2.0,0.0,6.0
-42.0,1.0,1.0,148.0,244.0,0.0,2.0,178.0,0.0,0.8,1.0,2.0,3.0
-62.0,1.0,2.0,128.0,208.0,1.0,2.0,140.0,0.0,0.0,1.0,0.0,3.0
-59.0,1.0,1.0,178.0,270.0,0.0,2.0,145.0,0.0,4.2,3.0,0.0,7.0
-41.0,0.0,2.0,126.0,306.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-50.0,1.0,4.0,150.0,243.0,0.0,2.0,128.0,0.0,2.6,2.0,0.0,7.0
-59.0,1.0,2.0,140.0,221.0,0.0,0.0,164.0,1.0,0.0,1.0,0.0,3.0
-61.0,0.0,4.0,130.0,330.0,0.0,2.0,169.0,0.0,0.0,1.0,0.0,3.0
-54.0,1.0,4.0,124.0,266.0,0.0,2.0,109.0,1.0,2.2,2.0,1.0,7.0
-54.0,1.0,4.0,110.0,206.0,0.0,2.0,108.0,1.0,0.0,2.0,1.0,3.0
-52.0,1.0,4.0,125.0,212.0,0.0,0.0,168.0,0.0,1.0,1.0,2.0,7.0
-47.0,1.0,4.0,110.0,275.0,0.0,2.0,118.0,1.0,1.0,2.0,1.0,3.0
-66.0,1.0,4.0,120.0,302.0,0.0,2.0,151.0,0.0,0.4,2.0,0.0,3.0
-58.0,1.0,4.0,100.0,234.0,0.0,0.0,156.0,0.0,0.1,1.0,1.0,7.0
-64.0,0.0,3.0,140.0,313.0,0.0,0.0,133.0,0.0,0.2,1.0,0.0,7.0
-50.0,0.0,2.0,120.0,244.0,0.0,0.0,162.0,0.0,1.1,1.0,0.0,3.0
-44.0,0.0,3.0,108.0,141.0,0.0,0.0,175.0,0.0,0.6,2.0,0.0,3.0
-67.0,1.0,4.0,120.0,237.0,0.0,0.0,71.0,0.0,1.0,2.0,0.0,3.0
-49.0,0.0,4.0,130.0,269.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-57.0,1.0,4.0,165.0,289.0,1.0,2.0,124.0,0.0,1.0,2.0,3.0,7.0
-63.0,1.0,4.0,130.0,254.0,0.0,2.0,147.0,0.0,1.4,2.0,1.0,7.0
-48.0,1.0,4.0,124.0,274.0,0.0,2.0,166.0,0.0,0.5,2.0,0.0,7.0
-51.0,1.0,3.0,100.0,222.0,0.0,0.0,143.0,1.0,1.2,2.0,0.0,3.0
-60.0,0.0,4.0,150.0,258.0,0.0,2.0,157.0,0.0,2.6,2.0,2.0,7.0
-59.0,1.0,4.0,140.0,177.0,0.0,0.0,162.0,1.0,0.0,1.0,1.0,7.0
-45.0,0.0,2.0,112.0,160.0,0.0,0.0,138.0,0.0,0.0,2.0,0.0,3.0
-55.0,0.0,4.0,180.0,327.0,0.0,1.0,117.0,1.0,3.4,2.0,0.0,3.0
-41.0,1.0,2.0,110.0,235.0,0.0,0.0,153.0,0.0,0.0,1.0,0.0,3.0
-60.0,0.0,4.0,158.0,305.0,0.0,2.0,161.0,0.0,0.0,1.0,0.0,3.0
-54.0,0.0,3.0,135.0,304.0,1.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0
-42.0,1.0,2.0,120.0,295.0,0.0,0.0,162.0,0.0,0.0,1.0,0.0,3.0
-49.0,0.0,2.0,134.0,271.0,0.0,0.0,162.0,0.0,0.0,2.0,0.0,3.0
-46.0,1.0,4.0,120.0,249.0,0.0,2.0,144.0,0.0,0.8,1.0,0.0,7.0
-56.0,0.0,4.0,200.0,288.0,1.0,2.0,133.0,1.0,4.0,3.0,2.0,7.0
-66.0,0.0,1.0,150.0,226.0,0.0,0.0,114.0,0.0,2.6,3.0,0.0,3.0
-56.0,1.0,4.0,130.0,283.0,1.0,2.0,103.0,1.0,1.6,3.0,0.0,7.0
-49.0,1.0,3.0,120.0,188.0,0.0,0.0,139.0,0.0,2.0,2.0,3.0,7.0
-54.0,1.0,4.0,122.0,286.0,0.0,2.0,116.0,1.0,3.2,2.0,2.0,3.0
-57.0,1.0,4.0,152.0,274.0,0.0,0.0,88.0,1.0,1.2,2.0,1.0,7.0
-65.0,0.0,3.0,160.0,360.0,0.0,2.0,151.0,0.0,0.8,1.0,0.0,3.0
-54.0,1.0,3.0,125.0,273.0,0.0,2.0,152.0,0.0,0.5,3.0,1.0,3.0
-54.0,0.0,3.0,160.0,201.0,0.0,0.0,163.0,0.0,0.0,1.0,1.0,3.0
-62.0,1.0,4.0,120.0,267.0,0.0,0.0,99.0,1.0,1.8,2.0,2.0,7.0
-52.0,0.0,3.0,136.0,196.0,0.0,2.0,169.0,0.0,0.1,2.0,0.0,3.0
-52.0,1.0,2.0,134.0,201.0,0.0,0.0,158.0,0.0,0.8,1.0,1.0,3.0
-60.0,1.0,4.0,117.0,230.0,1.0,0.0,160.0,1.0,1.4,1.0,2.0,7.0
-63.0,0.0,4.0,108.0,269.0,0.0,0.0,169.0,1.0,1.8,2.0,2.0,3.0
-66.0,1.0,4.0,112.0,212.0,0.0,2.0,132.0,1.0,0.1,1.0,1.0,3.0
-42.0,1.0,4.0,140.0,226.0,0.0,0.0,178.0,0.0,0.0,1.0,0.0,3.0
-64.0,1.0,4.0,120.0,246.0,0.0,2.0,96.0,1.0,2.2,3.0,1.0,3.0
-54.0,1.0,3.0,150.0,232.0,0.0,2.0,165.0,0.0,1.6,1.0,0.0,7.0
-46.0,0.0,3.0,142.0,177.0,0.0,2.0,160.0,1.0,1.4,3.0,0.0,3.0
-67.0,0.0,3.0,152.0,277.0,0.0,0.0,172.0,0.0,0.0,1.0,1.0,3.0
-56.0,1.0,4.0,125.0,249.0,1.0,2.0,144.0,1.0,1.2,2.0,1.0,3.0
-34.0,0.0,2.0,118.0,210.0,0.0,0.0,192.0,0.0,0.7,1.0,0.0,3.0
-57.0,1.0,4.0,132.0,207.0,0.0,0.0,168.0,1.0,0.0,1.0,0.0,7.0
-64.0,1.0,4.0,145.0,212.0,0.0,2.0,132.0,0.0,2.0,2.0,2.0,6.0
-59.0,1.0,4.0,138.0,271.0,0.0,2.0,182.0,0.0,0.0,1.0,0.0,3.0
-50.0,1.0,3.0,140.0,233.0,0.0,0.0,163.0,0.0,0.6,2.0,1.0,7.0
-51.0,1.0,1.0,125.0,213.0,0.0,2.0,125.0,1.0,1.4,1.0,1.0,3.0
-54.0,1.0,2.0,192.0,283.0,0.0,2.0,195.0,0.0,0.0,1.0,1.0,7.0
-53.0,1.0,4.0,123.0,282.0,0.0,0.0,95.0,1.0,2.0,2.0,2.0,7.0
-52.0,1.0,4.0,112.0,230.0,0.0,0.0,160.0,0.0,0.0,1.0,1.0,3.0
-40.0,1.0,4.0,110.0,167.0,0.0,2.0,114.0,1.0,2.0,2.0,0.0,7.0
-58.0,1.0,3.0,132.0,224.0,0.0,2.0,173.0,0.0,3.2,1.0,2.0,7.0
-41.0,0.0,3.0,112.0,268.0,0.0,2.0,172.0,1.0,0.0,1.0,0.0,3.0
-41.0,1.0,3.0,112.0,250.0,0.0,0.0,179.0,0.0,0.0,1.0,0.0,3.0
-50.0,0.0,3.0,120.0,219.0,0.0,0.0,158.0,0.0,1.6,2.0,0.0,3.0
-54.0,0.0,3.0,108.0,267.0,0.0,2.0,167.0,0.0,0.0,1.0,0.0,3.0
-64.0,0.0,4.0,130.0,303.0,0.0,0.0,122.0,0.0,2.0,2.0,2.0,3.0
-51.0,0.0,3.0,130.0,256.0,0.0,2.0,149.0,0.0,0.5,1.0,0.0,3.0
-46.0,0.0,2.0,105.0,204.0,0.0,0.0,172.0,0.0,0.0,1.0,0.0,3.0
-55.0,1.0,4.0,140.0,217.0,0.0,0.0,111.0,1.0,5.6,3.0,0.0,7.0
-45.0,1.0,2.0,128.0,308.0,0.0,2.0,170.0,0.0,0.0,1.0,0.0,3.0
-56.0,1.0,1.0,120.0,193.0,0.0,2.0,162.0,0.0,1.9,2.0,0.0,7.0
-66.0,0.0,4.0,178.0,228.0,1.0,0.0,165.0,1.0,1.0,2.0,2.0,7.0
-38.0,1.0,1.0,120.0,231.0,0.0,0.0,182.0,1.0,3.8,2.0,0.0,7.0
-62.0,0.0,4.0,150.0,244.0,0.0,0.0,154.0,1.0,1.4,2.0,0.0,3.0
-55.0,1.0,2.0,130.0,262.0,0.0,0.0,155.0,0.0,0.0,1.0,0.0,3.0
-58.0,1.0,4.0,128.0,259.0,0.0,2.0,130.0,1.0,3.0,2.0,2.0,7.0
-43.0,1.0,4.0,110.0,211.0,0.0,0.0,161.0,0.0,0.0,1.0,0.0,7.0
-64.0,0.0,4.0,180.0,325.0,0.0,0.0,154.0,1.0,0.0,1.0,0.0,3.0
-50.0,0.0,4.0,110.0,254.0,0.0,2.0,159.0,0.0,0.0,1.0,0.0,3.0
-53.0,1.0,3.0,130.0,197.0,1.0,2.0,152.0,0.0,1.2,3.0,0.0,3.0
-45.0,0.0,4.0,138.0,236.0,0.0,2.0,152.0,1.0,0.2,2.0,0.0,3.0
-65.0,1.0,1.0,138.0,282.0,1.0,2.0,174.0,0.0,1.4,2.0,1.0,3.0
-69.0,1.0,1.0,160.0,234.0,1.0,2.0,131.0,0.0,0.1,2.0,1.0,3.0
-69.0,1.0,3.0,140.0,254.0,0.0,2.0,146.0,0.0,2.0,2.0,3.0,7.0
-67.0,1.0,4.0,100.0,299.0,0.0,2.0,125.0,1.0,0.9,2.0,2.0,3.0
-68.0,0.0,3.0,120.0,211.0,0.0,2.0,115.0,0.0,1.5,2.0,0.0,3.0
-34.0,1.0,1.0,118.0,182.0,0.0,2.0,174.0,0.0,0.0,1.0,0.0,3.0
-62.0,0.0,4.0,138.0,294.0,1.0,0.0,106.0,0.0,1.9,2.0,3.0,3.0
-51.0,1.0,4.0,140.0,298.0,0.0,0.0,122.0,1.0,4.2,2.0,3.0,7.0
-46.0,1.0,3.0,150.0,231.0,0.0,0.0,147.0,0.0,3.6,2.0,0.0,3.0
-67.0,1.0,4.0,125.0,254.0,1.0,0.0,163.0,0.0,0.2,2.0,2.0,7.0
-50.0,1.0,3.0,129.0,196.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0
-42.0,1.0,3.0,120.0,240.0,1.0,0.0,194.0,0.0,0.8,3.0,0.0,7.0
-56.0,0.0,4.0,134.0,409.0,0.0,2.0,150.0,1.0,1.9,2.0,2.0,7.0
-41.0,1.0,4.0,110.0,172.0,0.0,2.0,158.0,0.0,0.0,1.0,0.0,7.0
-42.0,0.0,4.0,102.0,265.0,0.0,2.0,122.0,0.0,0.6,2.0,0.0,3.0
-53.0,1.0,3.0,130.0,246.0,1.0,2.0,173.0,0.0,0.0,1.0,3.0,3.0
-43.0,1.0,3.0,130.0,315.0,0.0,0.0,162.0,0.0,1.9,1.0,1.0,3.0
-56.0,1.0,4.0,132.0,184.0,0.0,2.0,105.0,1.0,2.1,2.0,1.0,6.0
-52.0,1.0,4.0,108.0,233.0,1.0,0.0,147.0,0.0,0.1,1.0,3.0,7.0
-62.0,0.0,4.0,140.0,394.0,0.0,2.0,157.0,0.0,1.2,2.0,0.0,3.0
-70.0,1.0,3.0,160.0,269.0,0.0,0.0,112.0,1.0,2.9,2.0,1.0,7.0
-54.0,1.0,4.0,140.0,239.0,0.0,0.0,160.0,0.0,1.2,1.0,0.0,3.0
-70.0,1.0,4.0,145.0,174.0,0.0,0.0,125.0,1.0,2.6,3.0,0.0,7.0
-54.0,1.0,2.0,108.0,309.0,0.0,0.0,156.0,0.0,0.0,1.0,0.0,7.0
-35.0,1.0,4.0,126.0,282.0,0.0,2.0,156.0,1.0,0.0,1.0,0.0,7.0
-48.0,1.0,3.0,124.0,255.0,1.0,0.0,175.0,0.0,0.0,1.0,2.0,3.0
-55.0,0.0,2.0,135.0,250.0,0.0,2.0,161.0,0.0,1.4,2.0,0.0,3.0
-58.0,0.0,4.0,100.0,248.0,0.0,2.0,122.0,0.0,1.0,2.0,0.0,3.0
-54.0,0.0,3.0,110.0,214.0,0.0,0.0,158.0,0.0,1.6,2.0,0.0,3.0
-69.0,0.0,1.0,140.0,239.0,0.0,0.0,151.0,0.0,1.8,1.0,2.0,3.0
-77.0,1.0,4.0,125.0,304.0,0.0,2.0,162.0,1.0,0.0,1.0,3.0,3.0
-68.0,1.0,3.0,118.0,277.0,0.0,0.0,151.0,0.0,1.0,1.0,1.0,7.0
-58.0,1.0,4.0,125.0,300.0,0.0,2.0,171.0,0.0,0.0,1.0,2.0,7.0
-60.0,1.0,4.0,125.0,258.0,0.0,2.0,141.0,1.0,2.8,2.0,1.0,7.0
-51.0,1.0,4.0,140.0,299.0,0.0,0.0,173.0,1.0,1.6,1.0,0.0,7.0
-55.0,1.0,4.0,160.0,289.0,0.0,2.0,145.0,1.0,0.8,2.0,1.0,7.0
-52.0,1.0,1.0,152.0,298.0,1.0,0.0,178.0,0.0,1.2,2.0,0.0,7.0
-60.0,0.0,3.0,102.0,318.0,0.0,0.0,160.0,0.0,0.0,1.0,1.0,3.0
-58.0,1.0,3.0,105.0,240.0,0.0,2.0,154.0,1.0,0.6,2.0,0.0,7.0
-64.0,1.0,3.0,125.0,309.0,0.0,0.0,131.0,1.0,1.8,2.0,0.0,7.0
-37.0,1.0,3.0,130.0,250.0,0.0,0.0,187.0,0.0,3.5,3.0,0.0,3.0
-59.0,1.0,1.0,170.0,288.0,0.0,2.0,159.0,0.0,0.2,2.0,0.0,7.0
-51.0,1.0,3.0,125.0,245.0,1.0,2.0,166.0,0.0,2.4,2.0,0.0,3.0
-43.0,0.0,3.0,122.0,213.0,0.0,0.0,165.0,0.0,0.2,2.0,0.0,3.0
-58.0,1.0,4.0,128.0,216.0,0.0,2.0,131.0,1.0,2.2,2.0,3.0,7.0
-29.0,1.0,2.0,130.0,204.0,0.0,2.0,202.0,0.0,0.0,1.0,0.0,3.0
-41.0,0.0,2.0,130.0,204.0,0.0,2.0,172.0,0.0,1.4,1.0,0.0,3.0
-63.0,0.0,3.0,135.0,252.0,0.0,2.0,172.0,0.0,0.0,1.0,0.0,3.0
-51.0,1.0,3.0,94.0,227.0,0.0,0.0,154.0,1.0,0.0,1.0,1.0,7.0
-54.0,1.0,3.0,120.0,258.0,0.0,2.0,147.0,0.0,0.4,2.0,0.0,7.0
-44.0,1.0,2.0,120.0,220.0,0.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0
-54.0,1.0,4.0,110.0,239.0,0.0,0.0,126.0,1.0,2.8,2.0,1.0,7.0
-65.0,1.0,4.0,135.0,254.0,0.0,2.0,127.0,0.0,2.8,2.0,1.0,7.0
-57.0,1.0,3.0,150.0,168.0,0.0,0.0,174.0,0.0,1.6,1.0,0.0,3.0
-63.0,1.0,4.0,130.0,330.0,1.0,2.0,132.0,1.0,1.8,1.0,3.0,7.0
-35.0,0.0,4.0,138.0,183.0,0.0,0.0,182.0,0.0,1.4,1.0,0.0,3.0
-41.0,1.0,2.0,135.0,203.0,0.0,0.0,132.0,0.0,0.0,2.0,0.0,6.0
-62.0,0.0,3.0,130.0,263.0,0.0,0.0,97.0,0.0,1.2,2.0,1.0,7.0
-43.0,0.0,4.0,132.0,341.0,1.0,2.0,136.0,1.0,3.0,2.0,0.0,7.0
-58.0,0.0,1.0,150.0,283.0,1.0,2.0,162.0,0.0,1.0,1.0,0.0,3.0
-52.0,1.0,1.0,118.0,186.0,0.0,2.0,190.0,0.0,0.0,2.0,0.0,6.0
-61.0,0.0,4.0,145.0,307.0,0.0,2.0,146.0,1.0,1.0,2.0,0.0,7.0
-39.0,1.0,4.0,118.0,219.0,0.0,0.0,140.0,0.0,1.2,2.0,0.0,7.0
-45.0,1.0,4.0,115.0,260.0,0.0,2.0,185.0,0.0,0.0,1.0,0.0,3.0
-52.0,1.0,4.0,128.0,255.0,0.0,0.0,161.0,1.0,0.0,1.0,1.0,7.0
-62.0,1.0,3.0,130.0,231.0,0.0,0.0,146.0,0.0,1.8,2.0,3.0,7.0
-62.0,0.0,4.0,160.0,164.0,0.0,2.0,145.0,0.0,6.2,3.0,3.0,7.0
-53.0,0.0,4.0,138.0,234.0,0.0,2.0,160.0,0.0,0.0,1.0,0.0,3.0
-43.0,1.0,4.0,120.0,177.0,0.0,2.0,120.0,1.0,2.5,2.0,0.0,7.0
-47.0,1.0,3.0,138.0,257.0,0.0,2.0,156.0,0.0,0.0,1.0,0.0,3.0
-52.0,1.0,2.0,120.0,325.0,0.0,0.0,172.0,0.0,0.2,1.0,0.0,3.0
-68.0,1.0,3.0,180.0,274.0,1.0,2.0,150.0,1.0,1.6,2.0,0.0,7.0
-39.0,1.0,3.0,140.0,321.0,0.0,2.0,182.0,0.0,0.0,1.0,0.0,3.0
-53.0,0.0,4.0,130.0,264.0,0.0,2.0,143.0,0.0,0.4,2.0,0.0,3.0
-62.0,0.0,4.0,140.0,268.0,0.0,2.0,160.0,0.0,3.6,3.0,2.0,3.0
-51.0,0.0,3.0,140.0,308.0,0.0,2.0,142.0,0.0,1.5,1.0,1.0,3.0
-60.0,1.0,4.0,130.0,253.0,0.0,0.0,144.0,1.0,1.4,1.0,1.0,7.0
-65.0,1.0,4.0,110.0,248.0,0.0,2.0,158.0,0.0,0.6,1.0,2.0,6.0
-65.0,0.0,3.0,155.0,269.0,0.0,0.0,148.0,0.0,0.8,1.0,0.0,3.0
-60.0,1.0,3.0,140.0,185.0,0.0,2.0,155.0,0.0,3.0,2.0,0.0,3.0
-60.0,1.0,4.0,145.0,282.0,0.0,2.0,142.0,1.0,2.8,2.0,2.0,7.0
-54.0,1.0,4.0,120.0,188.0,0.0,0.0,113.0,0.0,1.4,2.0,1.0,7.0
-44.0,1.0,2.0,130.0,219.0,0.0,2.0,188.0,0.0,0.0,1.0,0.0,3.0
-44.0,1.0,4.0,112.0,290.0,0.0,2.0,153.0,0.0,0.0,1.0,1.0,3.0
-51.0,1.0,3.0,110.0,175.0,0.0,0.0,123.0,0.0,0.6,1.0,0.0,3.0
-59.0,1.0,3.0,150.0,212.0,1.0,0.0,157.0,0.0,1.6,1.0,0.0,3.0
-71.0,0.0,2.0,160.0,302.0,0.0,0.0,162.0,0.0,0.4,1.0,2.0,3.0
-61.0,1.0,3.0,150.0,243.0,1.0,0.0,137.0,1.0,1.0,2.0,0.0,3.0
-55.0,1.0,4.0,132.0,353.0,0.0,0.0,132.0,1.0,1.2,2.0,1.0,7.0
-64.0,1.0,3.0,140.0,335.0,0.0,0.0,158.0,0.0,0.0,1.0,0.0,3.0
-43.0,1.0,4.0,150.0,247.0,0.0,0.0,171.0,0.0,1.5,1.0,0.0,3.0
-58.0,0.0,3.0,120.0,340.0,0.0,0.0,172.0,0.0,0.0,1.0,0.0,3.0
-60.0,1.0,4.0,130.0,206.0,0.0,2.0,132.0,1.0,2.4,2.0,2.0,7.0
-58.0,1.0,2.0,120.0,284.0,0.0,2.0,160.0,0.0,1.8,2.0,0.0,3.0
-49.0,1.0,2.0,130.0,266.0,0.0,0.0,171.0,0.0,0.6,1.0,0.0,3.0
-48.0,1.0,2.0,110.0,229.0,0.0,0.0,168.0,0.0,1.0,3.0,0.0,7.0
-52.0,1.0,3.0,172.0,199.0,1.0,0.0,162.0,0.0,0.5,1.0,0.0,7.0
-44.0,1.0,2.0,120.0,263.0,0.0,0.0,173.0,0.0,0.0,1.0,0.0,7.0
-56.0,0.0,2.0,140.0,294.0,0.0,2.0,153.0,0.0,1.3,2.0,0.0,3.0
-57.0,1.0,4.0,140.0,192.0,0.0,0.0,148.0,0.0,0.4,2.0,0.0,6.0
-67.0,1.0,4.0,160.0,286.0,0.0,2.0,108.0,1.0,1.5,2.0,3.0,3.0
\ No newline at end of file
diff --git a/legacy/examples/naive_bayes/Cargo.toml b/legacy/examples/naive_bayes/Cargo.toml
deleted file mode 100644
index 5b6aa7d..0000000
--- a/legacy/examples/naive_bayes/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "naive_bayes"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/naive_bayes/expected_result.txt b/legacy/examples/naive_bayes/expected_result.txt
deleted file mode 100644
index eb5b579..0000000
--- a/legacy/examples/naive_bayes/expected_result.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-⎡1 0 0⎤
-⎢1 0 0⎥
-⎢0 1 0⎥
-⎢0 1 0⎥
-⎢0 0 1⎥
-⎣0 0 1⎦
diff --git a/legacy/examples/naive_bayes/input.txt b/legacy/examples/naive_bayes/input.txt
deleted file mode 100644
index b1373d9..0000000
--- a/legacy/examples/naive_bayes/input.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-1.0, 1.1
-1.1, 0.9
-2.2, 2.3
-2.5, 2.7
-5.2, 4.3
-6.2, 7.3
-
diff --git a/legacy/examples/naive_bayes/naive_bayes_demo.sh b/legacy/examples/naive_bayes/naive_bayes_demo.sh
deleted file mode 100755
index 63d8d68..0000000
--- a/legacy/examples/naive_bayes/naive_bayes_demo.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./naive_bayes
-cd $BIN_DIR
-
-INPUT_MODEL_DATA_COLUMNS=2
-INPUT_PATH=$SCRIPT_DIR/input.txt
-TARGET_MODEL_DATA_COLUMNS=3
-TARGET_PATH=$SCRIPT_DIR/target.txt
-EXPECTED_RESULT=$SCRIPT_DIR/expected_result.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-assert_eq "`$BIN $INPUT_MODEL_DATA_COLUMNS $INPUT_PATH $TARGET_MODEL_DATA_COLUMNS $TARGET_PATH | tail -n +1 2>&1`" "`cat $EXPECTED_RESULT`"
diff --git a/legacy/examples/naive_bayes/src/main.rs b/legacy/examples/naive_bayes/src/main.rs
deleted file mode 100644
index 43c9b57..0000000
--- a/legacy/examples/naive_bayes/src/main.rs
+++ /dev/null
@@ -1,109 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct NaiveBayesPayload {
- input_model_columns: usize,
- input_model_data: String,
- target_model_columns: usize,
- target_model_data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./naive_bayes input_model_data_columns input_model_data_path target_model_columns target_model_data_path
- input_model_data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- target_model_data format:
- 1.0,0.0,0.0 ...
- 1.0,0.0,0.0 ...
- 0.0,1.0,0.0 ...
- ....
- ";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 5 {
- print_usage();
- return;
- }
-
- let input_columns = args[1].parse().unwrap();
- let input_model_data_path = &args[2];
- let target_columns = args[3].parse().unwrap();
- let target_model_data_path = &args[4];
-
- let input_model_data_bytes = fs::read(&input_model_data_path).unwrap();
- let input_model_data_str = String::from_utf8(input_model_data_bytes).unwrap();
-
- let target_model_data_bytes = fs::read(&target_model_data_path).unwrap();
- let target_model_data_str = String::from_utf8(target_model_data_bytes).unwrap();
-
- let input_payload = NaiveBayesPayload {
- input_model_columns: input_columns,
- input_model_data: input_model_data_str,
- target_model_columns: target_columns,
- target_model_data: target_model_data_str,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("naive_bayes").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- println!("{}", result)
-}
diff --git a/legacy/examples/naive_bayes/target.txt b/legacy/examples/naive_bayes/target.txt
deleted file mode 100644
index 273a9e1..0000000
--- a/legacy/examples/naive_bayes/target.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-1.0,0.0,0.0
-1.0,0.0,0.0
-0.0,1.0,0.0
-0.0,1.0,0.0
-0.0,0.0,1.0
-0.0,0.0,1.0
diff --git a/legacy/examples/neural_net/Cargo.toml b/legacy/examples/neural_net/Cargo.toml
deleted file mode 100644
index 189de8b..0000000
--- a/legacy/examples/neural_net/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "neural_net"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = { version = "1.3.0" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
diff --git a/legacy/examples/neural_net/input.txt b/legacy/examples/neural_net/input.txt
deleted file mode 100644
index 846958e..0000000
--- a/legacy/examples/neural_net/input.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-1.,1.,1.
-2.,2.,2.
-3.,3.,3.
-4.,4.,4.
-5.,5.,5.
\ No newline at end of file
diff --git a/legacy/examples/neural_net/neural_net_demo.sh b/legacy/examples/neural_net/neural_net_demo.sh
deleted file mode 100755
index 04d4a83..0000000
--- a/legacy/examples/neural_net/neural_net_demo.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./neural_net
-cd $BIN_DIR
-
-INPUT_MODEL_DATA_COLUMNS=3
-INPUT_PATH=$SCRIPT_DIR/input.txt
-TARGET_PATH=$SCRIPT_DIR/target.txt
-TEST_DATA_PATH=$SCRIPT_DIR/test.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-
-$BIN $INPUT_MODEL_DATA_COLUMNS $INPUT_PATH $TARGET_PATH $TEST_DATA_PATH 2>&1
diff --git a/legacy/examples/neural_net/src/main.rs b/legacy/examples/neural_net/src/main.rs
deleted file mode 100644
index cce6ab0..0000000
--- a/legacy/examples/neural_net/src/main.rs
+++ /dev/null
@@ -1,116 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use serde_derive::Serialize;
-use serde_json;
-use std::net::SocketAddr;
-use std::{env, fs};
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-#[derive(Serialize)]
-pub(crate) struct NeuralNetPayload {
- input_model_columns: usize,
- input_model_data: String,
- target_model_data: String,
- test_data: String,
-}
-
-fn print_usage() {
- let msg = "
- ./neural_net input_model_data_columns input_model_data_path target_model_data_path test_data_path
- input_model format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- target_data format:
- 1.,0.,0. ...
- 0.,1.,0. ...
- 0.,0.,1. ...
- ....
- test_data format:
- f32,f32,f32,f32 ...
- f32,f32,f32,f32 ...
- ...
- ";
- println!("usage: \n{}", msg);
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
-
- let args: Vec<String> = env::args().collect();
- if args.len() != 5 {
- print_usage();
- return;
- }
-
- let columns = args[1].parse().unwrap();
- let input_model_data_path = &args[2];
- let target_model_data_path = &args[3];
- let test_date_path = &args[4];
-
- let input_model_data_bytes = fs::read(&input_model_data_path).unwrap();
- let input_model_data_str = String::from_utf8(input_model_data_bytes).unwrap();
-
- let target_model_data_bytes = fs::read(&target_model_data_path).unwrap();
- let target_model_data_str = String::from_utf8(target_model_data_bytes).unwrap();
-
- let test_data_bytes = fs::read(&test_date_path).unwrap();
- let test_data_str = String::from_utf8(test_data_bytes).unwrap();
-
- let input_payload = NeuralNetPayload {
- input_model_columns: columns,
- input_model_data: input_model_data_str,
- target_model_data: target_model_data_str,
- test_data: test_data_str,
- };
-
- let input_string = serde_json::to_string(&input_payload).unwrap();
- let enclave_info_file_path = "../services/enclave_info.toml";
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
- let mesatee = Mesatee::new(
- &mesatee_enclave_info,
- "uid1",
- "token1",
- *TMS_ADDR,
- *TDFS_ADDR,
- )
- .unwrap();
- let task = mesatee.create_task("neural_net").unwrap();
- let result = task.invoke_with_payload(&input_string).unwrap();
-
- println!("{}", result)
-}
diff --git a/legacy/examples/neural_net/target.txt b/legacy/examples/neural_net/target.txt
deleted file mode 100644
index a0ed2a3..0000000
--- a/legacy/examples/neural_net/target.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-1.,0.,0.
-0.,1.,0.
-0.,0.,1.
-0.,0.,1.
-0.,0.,1.
\ No newline at end of file
diff --git a/legacy/examples/neural_net/test.txt b/legacy/examples/neural_net/test.txt
deleted file mode 100644
index 89d2e80..0000000
--- a/legacy/examples/neural_net/test.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-1.5,1.5,1.5
-5.1,5.1,5.1
\ No newline at end of file
diff --git a/legacy/examples/online_decrypt/Cargo.toml b/legacy/examples/online_decrypt/Cargo.toml
deleted file mode 100644
index 02b1244..0000000
--- a/legacy/examples/online_decrypt/Cargo.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[package]
-name = "online_decrypt"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-description = "Online decryption with MesaTEE."
-license = "Apache-2.0"
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-base64 = { version = "0.10.1" }
-serde_derive = { version = "1.0.92" }
-serde_json = { version = "1.0.39" }
-serde = { version = "1.0.92" }
-ring = { version = "0.16.5" }
-lazy_static = { version = "1.3.0" }
diff --git a/legacy/examples/online_decrypt/online_decrypt_demo.sh b/legacy/examples/online_decrypt/online_decrypt_demo.sh
deleted file mode 100755
index ff606a9..0000000
--- a/legacy/examples/online_decrypt/online_decrypt_demo.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-BIN_DIR=$SCRIPT_DIR/../../release/examples
-BIN=./online_decrypt
-cd $BIN_DIR
-
-PLAINTXT=$SCRIPT_DIR/test.txt
-CIPHERTXT=./cipher.txt
-KEY_PATH=./key.txt
-KEY_ID_PATH=./key_id.txt
-OUTPUT=./output.txt
-
-# check ports
-for port in 5554 5555 3444 6016 5065 5066; do
- if ! lsof -i :$port > /dev/null; then
- echo "[-] port $port is not open"
- echo "[-] please run service.sh start|restart to launch services"
- exit 1
- fi
-done
-
-assert_eq() {
- if [ "`echo $1`" != "`echo $2`" ]; then
- echo "Result mismatch:"
- diff <(echo "$1") <(echo $2)
- exit 1
- else
- echo "$1"
- fi
-}
-
-$BIN gen_and_upload_key $KEY_PATH $KEY_ID_PATH
-$BIN local_encrypt $PLAINTXT $CIPHERTXT $KEY_PATH
-KEY_ID=`cat $KEY_ID_PATH`
-$BIN online_decrypt $CIPHERTXT $KEY_ID $OUTPUT
-
-assert_eq "`cat $OUTPUT`" "`cat $PLAINTXT`"
\ No newline at end of file
diff --git a/legacy/examples/online_decrypt/src/main.rs b/legacy/examples/online_decrypt/src/main.rs
deleted file mode 100644
index 4fe7631..0000000
--- a/legacy/examples/online_decrypt/src/main.rs
+++ /dev/null
@@ -1,197 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you 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.
-
-use lazy_static::lazy_static;
-use mesatee_sdk::{Mesatee, MesateeEnclaveInfo};
-use ring::aead::{self, Aad, BoundKey, Nonce, UnboundKey};
-use ring::rand;
-use ring::rand::SecureRandom;
-use serde_derive::{Deserialize, Serialize};
-use std::net::SocketAddr;
-use std::{env, fs};
-
-static FUNCTION_NAME: &str = "decrypt";
-static USER_ID: &str = "uid";
-static USER_TOKEN: &str = "token";
-
-lazy_static! {
- static ref TMS_ADDR: SocketAddr = "127.0.0.1:5554".parse().unwrap();
- static ref TDFS_ADDR: SocketAddr = "127.0.0.1:5065".parse().unwrap();
-}
-
-fn print_usage() {
- let msg = "
- ./online_decrypt gen_and_upload_key key_saving_path key_file_id_saving_path
- ./online_decrypt local_encrypt plaintxt_path encrypted_data_saving_path key_path
- ./online_decrypt online_decrypt encrypted_data_path key_file_id decrypted_data_saving_path
-
- gen_and_upload_key: Generate key; Upload it to TDFS
- local_encrypt: Encrypt data and save it;
- remote_decrypt: Invoke MesaTEE to decrypt file
- ";
- println!("usage: \n{}", msg);
-}
-
-#[derive(Serialize, Deserialize)]
-struct AEADKeyConfig {
- pub key: Vec<u8>,
- pub nonce: Vec<u8>,
- pub ad: Vec<u8>,
-}
-
-impl AEADKeyConfig {
- pub fn new() -> Self {
- let mut key_config = AEADKeyConfig {
- key: vec![0; 32],
- nonce: vec![0; 12],
- ad: vec![0; 5],
- };
-
- let rng = rand::SystemRandom::new();
- rng.fill(&mut key_config.key).unwrap();
- rng.fill(&mut key_config.nonce).unwrap();
- rng.fill(&mut key_config.ad).unwrap();
-
- key_config
- }
-}
-
-struct OneNonceSequence(Option<aead::Nonce>);
-
-impl OneNonceSequence {
- /// Constructs the sequence allowing `advance()` to be called
- /// `allowed_invocations` times.
- fn new(nonce: aead::Nonce) -> Self {
- Self(Some(nonce))
- }
-}
-
-impl aead::NonceSequence for OneNonceSequence {
- fn advance(&mut self) -> core::result::Result<aead::Nonce, ring::error::Unspecified> {
- self.0.take().ok_or(ring::error::Unspecified)
- }
-}
-fn encrypt_data(mut data: Vec<u8>, aes_key: &[u8], aes_nonce: &[u8], aes_ad: &[u8]) -> Vec<u8> {
- let aead_alg = &aead::AES_256_GCM;
-
- assert_eq!(aes_key.len(), 32);
- assert_eq!(aes_nonce.len(), 12);
- assert_eq!(aes_ad.len(), 5);
-
- let ub = UnboundKey::new(aead_alg, aes_key).unwrap();
- let nonce = Nonce::try_assume_unique_for_key(aes_nonce).unwrap();
- let filesequence = OneNonceSequence::new(nonce);
-
- let mut s_key = aead::SealingKey::new(ub, filesequence);
- let ad = Aad::from(aes_ad);
- let s_result = s_key.seal_in_place_append_tag(ad, &mut data);
- s_result.unwrap();
-
- data
-}
-
-fn gen_and_upload_key(
- info: &MesateeEnclaveInfo,
- key_saving_path: &str,
- key_file_id_saving_path: &str,
-) {
- let key_config = AEADKeyConfig::new();
- let key_bytes = serde_json::to_vec(&key_config).unwrap();
- fs::write(key_saving_path, key_bytes).unwrap();
- let mesatee = Mesatee::new(info, USER_ID, USER_TOKEN, *TMS_ADDR, *TDFS_ADDR).unwrap();
- let file_id = mesatee.upload_file(key_saving_path).unwrap();
- fs::write(key_file_id_saving_path, file_id.as_bytes()).unwrap();
-}
-
-fn local_encrypt(plaintxt_path: &str, encrypted_data_saving_path: &str, key_path: &str) {
- let key_bytes = fs::read(key_path).unwrap();
- let key_config: AEADKeyConfig = serde_json::from_slice(&key_bytes).unwrap();
- let plaintxt = fs::read(plaintxt_path).unwrap();
- let encrypted_data = encrypt_data(plaintxt, &key_config.key, &key_config.nonce, &key_config.ad);
- fs::write(encrypted_data_saving_path, encrypted_data).unwrap();
-}
-
-fn online_decrypt(
- info: &MesateeEnclaveInfo,
- encrypted_data_path: &str,
- key_file_id: &str,
- decrypted_data_saving_path: &str,
-) {
- let encrypted_bytes = fs::read(&encrypted_data_path).unwrap();
- let base64_input = base64::encode(&encrypted_bytes);
- let mesatee = Mesatee::new(info, USER_ID, USER_TOKEN, *TMS_ADDR, *TDFS_ADDR).unwrap();
- let task = mesatee
- .create_task_with_files(FUNCTION_NAME, &[key_file_id])
- .unwrap();
- let result = task.invoke_with_payload(&base64_input).unwrap();
- let output_bytes = base64::decode(&result).unwrap();
- fs::write(decrypted_data_saving_path, &output_bytes).unwrap();
-}
-
-fn main() {
- let auditors = vec![
- (
- "../services/auditors/godzilla/godzilla.public.der",
- "../services/auditors/godzilla/godzilla.sign.sha256",
- ),
- (
- "../services/auditors/optimus_prime/optimus_prime.public.der",
- "../services/auditors/optimus_prime/optimus_prime.sign.sha256",
- ),
- (
- "../services/auditors/albus_dumbledore/albus_dumbledore.public.der",
- "../services/auditors/albus_dumbledore/albus_dumbledore.sign.sha256",
- ),
- ];
- let enclave_info_file_path = "../services/enclave_info.toml";
-
- let mesatee_enclave_info = MesateeEnclaveInfo::load(auditors, enclave_info_file_path).unwrap();
-
- let args_string: Vec<String> = env::args().collect();
- let args: Vec<&str> = args_string.iter().map(|s| s.as_str()).collect();
- if args.len() < 2 {
- print_usage();
- return;
- }
- let action = args[1];
- match action {
- "gen_and_upload_key" => {
- if args.len() != 4 {
- print_usage();
- return;
- }
- gen_and_upload_key(&mesatee_enclave_info, args[2], args[3]);
- }
- "local_encrypt" => {
- if args.len() != 5 {
- print_usage();
- return;
- }
- local_encrypt(args[2], args[3], args[4]);
- }
- "online_decrypt" => {
- if args.len() != 5 {
- print_usage();
- return;
- }
- online_decrypt(&mesatee_enclave_info, args[2], args[3], args[4]);
- }
- _ => {
- print_usage();
- }
- }
-}
diff --git a/legacy/examples/online_decrypt/test.txt b/legacy/examples/online_decrypt/test.txt
deleted file mode 100644
index c079528..0000000
--- a/legacy/examples/online_decrypt/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-MesaTEE
\ No newline at end of file
diff --git a/legacy/examples/private_join_and_compute/Cargo.toml b/legacy/examples/private_join_and_compute/Cargo.toml
deleted file mode 100644
index 297e760..0000000
--- a/legacy/examples/private_join_and_compute/Cargo.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-[package]
-name = "private_join_and_compute"
-version = "0.1.0"
-authors = ["MesaTEE Authors <de...@mesatee.org>"]
-description = "Multi-party private join and compute task with MesaTEE."
-license = "Apache-2.0"
-edition = "2018"
-
-[dependencies]
-mesatee_sdk = { path = "../../mesatee_sdk" }
-lazy_static = "1.1.0"
diff --git a/legacy/examples/private_join_and_compute/data.csv b/legacy/examples/private_join_and_compute/data.csv
deleted file mode 100644
index 68f132f..0000000
--- a/legacy/examples/private_join_and_compute/data.csv
+++ /dev/null
@@ -1,20002 +0,0 @@
-identity,Bank_A,Bank_B,Bank_C,Bank_D,Total
-1000000,55427,69353,57378,27430,209588
-1000001,88685,20945,92923,49455,252008
-1000002,12642,13403,39075,4728,69848
-1000003,56852,69702,12325,75786,214665
-1000004,63735,80039,51381,33458,228613
-1000005,72083,82217,26307,75339,255946
-1000006,93878,68234,60339,23669,246120
-1000007,25909,75250,99309,12806,213274
-1000008,17981,90757,73270,89561,271569
-1000009,28771,93330,82071,58730,262902
-1000010,85857,38075,32161,6828,162921
-1000011,49403,76679,86966,55233,268281
-1000012,59165,41351,59846,64749,225111
-1000013,61333,35001,95383,33488,225205
-1000014,66537,70799,38572,13544,189452
-1000015,11886,19719,88277,21629,141511
-1000016,91496,67646,53365,20197,232704
-1000017,33548,84147,26235,27306,171236
-1000018,52834,81673,8143,10035,152685
-1000019,1482,39232,54148,14769,109631
-1000020,55538,27770,35524,63439,182271
-1000021,59026,67357,91372,47668,265423
-1000022,47884,89282,73710,48830,259706
-1000023,58182,65050,47795,32441,203468
-1000024,89687,51809,85041,68569,295106
-1000025,87420,94025,41442,62037,284924
-1000026,22085,84684,45990,88040,240799
-1000027,33203,46402,22872,56426,158903
-1000028,19604,56981,37642,54167,168394
-1000029,16265,602,22294,38168,77329
-1000030,95524,33519,49269,7586,185898
-1000031,60867,41257,89548,86872,278544
-1000032,47810,7003,84968,4289,144070
-1000033,63084,6372,99412,29784,198652
-1000034,71906,14743,22989,61197,170835
-1000035,46639,6183,64443,78238,195503
-1000036,11276,63096,75233,38929,188534
-1000037,36644,3795,59605,59691,159735
-1000038,81904,19429,8918,71023,181274
-1000039,71403,81455,42922,21717,217497
-1000040,42244,81822,19349,48495,191910
-1000041,61985,11274,13943,270,87472
-1000042,78738,62094,7155,16100,164087
-1000043,49560,57939,46512,72679,226690
-1000044,12396,13526,39352,22286,87560
-1000045,13416,85424,58904,60124,217868
-1000046,13491,55638,42603,81793,193525
-1000047,1308,43458,79318,44365,168449
-1000048,15960,39705,7922,12990,76577
-1000049,29777,43090,80395,36081,189343
-1000050,18051,43392,78657,82815,222915
-1000051,60516,8569,32790,80938,182813
-1000052,75027,76662,52642,27780,232111
-1000053,17573,13904,72915,52750,157142
-1000054,11804,84867,78770,2446,177887
-1000055,52554,47324,25442,78204,203524
-1000056,77794,84552,32107,51583,246036
-1000057,90434,43962,95306,6531,236233
-1000058,91353,13693,56750,39181,200977
-1000059,37689,41446,8788,50460,138383
-1000060,1534,51853,48980,22880,125247
-1000061,79098,14866,93455,291,187710
-1000062,87947,92590,67548,72111,320196
-1000063,94891,31293,46467,43503,216154
-1000064,84709,79628,9223,57244,230804
-1000065,30899,22664,77268,21856,152687
-1000066,69783,9070,12284,66739,157876
-1000067,53410,75723,46834,62105,238072
-1000068,73825,79786,44780,71978,270369
-1000069,66479,58400,22909,33019,180807
-1000070,37153,41521,62849,5938,147461
-1000071,79393,9159,36329,17058,141939
-1000072,32060,74281,53993,89430,249764
-1000073,53075,22142,47030,61835,184082
-1000074,74989,83786,78028,82125,318928
-1000075,52559,99408,24335,23407,199709
-1000076,93881,36058,71112,58064,259115
-1000077,98984,29382,44214,73421,246001
-1000078,25089,95453,55124,94913,270579
-1000079,93562,95374,94033,30106,313075
-1000080,43942,84917,23625,95333,247817
-1000081,99714,59563,69170,52069,280516
-1000082,59795,50001,40518,38330,188644
-1000083,4970,92168,3970,97139,198247
-1000084,38870,35883,44991,89693,209437
-1000085,74211,92272,80020,52513,299016
-1000086,82926,57112,31403,10854,182295
-1000087,97206,77021,69935,40974,285136
-1000088,27590,47714,75750,25893,176947
-1000089,96879,20899,77078,32414,227270
-1000090,25650,57906,60436,95124,239116
-1000091,29602,1259,54923,28278,114062
-1000092,71477,10163,10431,64246,156317
-1000093,14084,274,70833,13198,98389
-1000094,62577,61558,70031,14556,208722
-1000095,93009,35319,21797,10673,160798
-1000096,25020,60019,26253,75197,186489
-1000097,39874,48229,57662,16398,162163
-1000098,4018,14866,1702,89508,110094
-1000099,97291,92762,685,37589,228327
-1000100,83071,63106,2246,23035,171458
-1000101,47077,61565,8320,71345,188307
-1000102,80785,10221,97172,58107,246285
-1000103,35826,61172,43265,30944,171207
-1000104,4763,92416,36285,98416,231880
-1000105,82224,6663,5789,5614,100290
-1000106,22244,62160,68964,34097,187465
-1000107,41347,36769,89019,35888,203023
-1000108,82534,50342,52231,39691,224798
-1000109,44124,73281,72677,48877,238959
-1000110,78880,74431,43049,7745,204105
-1000111,28566,86526,42579,11787,169458
-1000112,90968,13130,17290,76689,198077
-1000113,37379,28846,35583,67416,169224
-1000114,77721,87262,59547,2196,226726
-1000115,77558,38326,7212,93210,216306
-1000116,24822,47741,97892,4110,174565
-1000117,68985,92268,60470,58701,280424
-1000118,69105,49810,33245,2370,154530
-1000119,59175,65357,80388,52202,257122
-1000120,45847,67117,40894,53041,206899
-1000121,16857,71442,4385,37929,130613
-1000122,39512,4264,11000,78169,132945
-1000123,67185,10254,63824,60850,202113
-1000124,12606,45799,98570,4569,161544
-1000125,11023,53038,24558,85651,174270
-1000126,42245,71374,46206,25423,185248
-1000127,89356,54770,37325,6139,187590
-1000128,8794,50422,32516,84990,176722
-1000129,32517,2862,36130,3018,74527
-1000130,4248,99095,19838,62491,185672
-1000131,699,11898,98681,78057,189335
-1000132,23655,14133,44317,73048,155153
-1000133,78793,89865,17053,94613,280324
-1000134,97694,2990,32173,78712,211569
-1000135,50488,29105,56,56683,136332
-1000136,8504,65341,78947,68917,221709
-1000137,71235,12192,50467,84204,218098
-1000138,43465,30175,65029,61156,199825
-1000139,16847,76344,37483,15341,146015
-1000140,9041,25259,43181,24089,101570
-1000141,84401,22523,45151,43482,195557
-1000142,57414,36920,61021,7169,162524
-1000143,79192,37364,65937,76602,259095
-1000144,71963,94496,14816,11866,193141
-1000145,41561,65855,17163,84248,208827
-1000146,15440,36581,69387,39878,161286
-1000147,96319,6680,13681,72947,189627
-1000148,29775,88110,227,50993,169105
-1000149,92708,62328,24968,63710,243714
-1000150,99315,66838,89142,26171,281466
-1000151,32656,31948,91766,34989,191359
-1000152,35577,27536,72847,92721,228681
-1000153,34003,14874,49572,73688,172137
-1000154,52505,32193,45980,15870,146548
-1000155,51885,60056,4383,91274,207598
-1000156,74222,96726,60511,32086,263545
-1000157,98556,91425,94251,45006,329238
-1000158,20749,53894,98951,88564,262158
-1000159,80898,619,82468,2570,166555
-1000160,81326,77355,62928,21726,243335
-1000161,83614,30231,72701,99152,285698
-1000162,64572,42273,38597,15808,161250
-1000163,4498,25829,32302,27438,90067
-1000164,54915,58972,86518,48241,248646
-1000165,55310,7842,52353,34752,150257
-1000166,67826,10140,90345,31194,199505
-1000167,86380,7242,67462,74183,235267
-1000168,25644,29275,99892,9166,163977
-1000169,83452,37346,37372,94243,252413
-1000170,29868,5134,58309,70869,164180
-1000171,67373,20560,26430,43460,157823
-1000172,19921,87930,38404,27711,173966
-1000173,68820,53996,56977,5704,185497
-1000174,70336,30966,82883,10740,194925
-1000175,63676,24571,94244,15760,198251
-1000176,48057,91161,1180,97297,237695
-1000177,93612,46660,34252,93712,268236
-1000178,75135,49436,7426,59355,191352
-1000179,12535,29325,51190,38329,131379
-1000180,74184,9685,48191,73803,205863
-1000181,24938,44807,28690,49336,147771
-1000182,78658,78885,21966,24030,203539
-1000183,10472,96554,11026,43400,161452
-1000184,91920,15476,26122,60771,194289
-1000185,46421,39730,50134,66200,202485
-1000186,87715,29712,17673,84059,219159
-1000187,31755,1600,25949,10992,70296
-1000188,34076,6996,39730,45494,126296
-1000189,72481,75450,84894,85693,318518
-1000190,54548,87319,46583,79473,267923
-1000191,18522,57649,84679,3332,164182
-1000192,34741,29593,58517,70185,193036
-1000193,3311,73440,47023,45027,168801
-1000194,78817,52604,59607,24407,215435
-1000195,75500,28392,59900,75418,239210
-1000196,9145,16283,61497,85476,172401
-1000197,27055,76914,81061,77921,262951
-1000198,69583,17711,82574,33403,203271
-1000199,27964,26635,77136,82251,213986
-1000200,75323,67856,32272,64306,239757
-1000201,64223,75365,25493,18075,183156
-1000202,69155,20707,78877,41658,210397
-1000203,27104,26179,68063,95397,216743
-1000204,40879,31071,42961,85985,200896
-1000205,22220,73603,10617,44491,150931
-1000206,49555,84469,65727,4677,204428
-1000207,54738,37615,80625,52912,225890
-1000208,64853,62255,77338,66774,271220
-1000209,49432,15466,56417,30792,152107
-1000210,20290,56017,52538,25131,153976
-1000211,82729,79996,25031,73198,260954
-1000212,7912,51736,15498,65008,140154
-1000213,20738,4093,92445,58330,175606
-1000214,92249,18043,20940,56010,187242
-1000215,79608,53928,83270,17467,234273
-1000216,80561,14126,23554,57184,175425
-1000217,92673,65250,49006,90915,297844
-1000218,83289,63222,77408,87738,311657
-1000219,94396,74144,64832,19265,252637
-1000220,91897,94233,5375,29579,221084
-1000221,87731,5799,85360,23385,202275
-1000222,37187,35670,14415,18870,106142
-1000223,98575,52866,63802,30377,245620
-1000224,69134,98855,92466,33718,294173
-1000225,17629,65678,60323,44280,187910
-1000226,90221,11456,2305,93098,197080
-1000227,62677,50871,4676,23534,141758
-1000228,77955,52647,87710,76625,294937
-1000229,13854,57218,10936,36060,118068
-1000230,86340,34554,8468,25226,154588
-1000231,48545,29492,66213,65492,209742
-1000232,77509,47891,10229,51445,187074
-1000233,89686,48034,6141,29888,173749
-1000234,29773,92189,70849,57423,250234
-1000235,2834,76093,91499,59024,229450
-1000236,86892,99360,23419,43363,253034
-1000237,92209,57813,84030,74000,308052
-1000238,80349,39159,62264,44768,226540
-1000239,79966,8807,32423,76985,198181
-1000240,92425,67021,74811,65315,299572
-1000241,26379,26170,99216,287,152052
-1000242,78290,35030,16570,75695,205585
-1000243,14880,78594,10078,43921,147473
-1000244,23006,51707,24265,18375,117353
-1000245,74537,47010,35475,44205,201227
-1000246,35179,80488,86018,56687,258372
-1000247,98217,45028,54120,51914,249279
-1000248,18067,17366,79025,68132,182590
-1000249,10437,18118,99482,25289,153326
-1000250,75128,17161,59873,53339,205501
-1000251,84954,16218,93445,6399,201016
-1000252,26429,29808,62330,89789,208356
-1000253,42497,54289,70504,27048,194338
-1000254,35930,33209,44163,94865,208167
-1000255,18774,22885,59086,89696,190441
-1000256,82167,52997,48445,13674,197283
-1000257,10809,22419,82191,93635,209054
-1000258,16171,92854,22072,95615,226712
-1000259,5982,91975,23155,39439,160551
-1000260,56492,30444,47450,44619,179005
-1000261,35752,86205,27911,20052,169920
-1000262,1737,24055,31712,51842,109346
-1000263,48335,1483,20013,62684,132515
-1000264,7917,97096,73691,69713,248417
-1000265,86212,97294,96876,41560,321942
-1000266,32837,31082,23320,56013,143252
-1000267,71943,92229,67884,87735,319791
-1000268,6666,15370,23525,88286,133847
-1000269,39139,51056,44015,37578,171788
-1000270,99042,35715,63234,3967,201958
-1000271,16374,24662,66875,53220,161131
-1000272,72996,70951,88048,42449,274444
-1000273,12378,87104,75693,83037,258212
-1000274,57285,58859,56288,37433,209865
-1000275,62205,80665,36673,81026,260569
-1000276,39261,40294,84194,48385,212134
-1000277,78172,47007,39853,49751,214783
-1000278,12659,22922,21764,66653,123998
-1000279,72773,88480,83194,10407,254854
-1000280,81697,97380,88910,50816,318803
-1000281,79,34097,70748,89298,194222
-1000282,16010,7339,67910,12967,104226
-1000283,24331,58726,590,77784,161431
-1000284,46908,30855,98343,53363,229469
-1000285,23465,20263,93306,74735,211769
-1000286,44224,69336,4031,92318,209909
-1000287,31135,93767,45159,10960,181021
-1000288,9726,21152,58195,73340,162413
-1000289,19743,6023,11798,4799,42363
-1000290,13469,81773,72843,98907,266992
-1000291,80843,22284,94844,46163,244134
-1000292,74263,89255,25355,47593,236466
-1000293,84537,74872,95222,13476,268107
-1000294,46962,75224,59001,70862,252049
-1000295,69614,67448,77013,21508,235583
-1000296,58413,99551,11039,21135,190138
-1000297,64397,56561,11781,92795,225534
-1000298,59760,39868,31091,22329,153048
-1000299,35873,51109,29239,80735,196956
-1000300,59050,56279,21149,62287,198765
-1000301,28834,4299,35105,78855,147093
-1000302,35742,17883,44699,98860,197184
-1000303,35043,50611,736,43394,129784
-1000304,38959,50215,22995,46924,159093
-1000305,57594,26936,21180,74357,180067
-1000306,76784,42270,50039,580,169673
-1000307,12418,12300,50221,43903,118842
-1000308,46156,23104,90151,53643,213054
-1000309,49992,54590,94757,96795,296134
-1000310,528,11613,98748,44627,155516
-1000311,20078,69462,39075,90672,219287
-1000312,84179,64555,72172,61834,282740
-1000313,19492,17085,44944,5160,86681
-1000314,84218,58028,79502,60261,282009
-1000315,66194,59983,95429,13566,235172
-1000316,16840,93754,66564,13097,190255
-1000317,53658,11029,69581,12767,147035
-1000318,79409,79684,4531,26471,190095
-1000319,70025,98788,59560,89909,318282
-1000320,10376,38079,65533,33709,147697
-1000321,63521,95792,55173,70647,285133
-1000322,9383,26338,28732,97906,162359
-1000323,23703,56674,3042,2995,86414
-1000324,41350,51886,17903,80693,191832
-1000325,50635,62816,52491,15622,181564
-1000326,35763,15868,53595,86375,191601
-1000327,49383,16544,97222,65030,228179
-1000328,71553,27623,61008,20495,180679
-1000329,57276,22314,51698,36794,168082
-1000330,49767,85029,25336,52423,212555
-1000331,12039,23264,50708,88621,174632
-1000332,96351,91054,2443,69106,258954
-1000333,26043,10221,37981,12567,86812
-1000334,49059,40835,19845,25515,135254
-1000335,9903,63475,31082,83910,188370
-1000336,84925,50509,41232,67045,243711
-1000337,41755,13328,89144,95671,239898
-1000338,10601,53647,30585,21627,116460
-1000339,85590,19732,69787,82210,257319
-1000340,19116,4080,67822,9937,100955
-1000341,91290,67095,38879,23195,220459
-1000342,83506,76846,12416,86475,259243
-1000343,78974,51705,16605,97870,245154
-1000344,62877,34002,51564,69997,218440
-1000345,53179,6599,99111,29729,188618
-1000346,38256,99737,88269,52826,279088
-1000347,78507,20724,65516,81330,246077
-1000348,25259,90054,95609,2395,213317
-1000349,36727,31890,41782,98101,208500
-1000350,22370,90235,32995,67128,212728
-1000351,64116,4212,34392,84514,187234
-1000352,34712,47142,19803,46036,147693
-1000353,21423,23965,76281,50462,172131
-1000354,92440,56579,42108,6254,197381
-1000355,58424,4391,69047,99459,231321
-1000356,94441,70214,71363,35811,271829
-1000357,61708,11803,87381,10519,171411
-1000358,99022,76204,69653,30572,275451
-1000359,12061,27036,33141,9203,81441
-1000360,10467,80877,1382,61987,154713
-1000361,90316,94801,86667,88290,360074
-1000362,2741,64177,66893,86543,220354
-1000363,85381,36187,17081,18890,157539
-1000364,35574,53107,87536,79855,256072
-1000365,51287,54875,95992,55908,258062
-1000366,79974,68731,88782,36198,273685
-1000367,39043,59113,58408,18775,175339
-1000368,28009,890,30792,4810,64501
-1000369,37524,23146,65547,30959,157176
-1000370,2436,55119,20716,65592,143863
-1000371,14271,98464,64977,33583,211295
-1000372,77288,79238,38846,8786,204158
-1000373,2495,67425,33754,41304,144978
-1000374,86999,87546,52452,38196,265193
-1000375,19389,11753,24606,61923,117671
-1000376,70284,34003,52954,32524,189765
-1000377,73881,16439,86294,11548,188162
-1000378,94299,25342,8051,80205,207897
-1000379,66571,86746,99376,77381,330074
-1000380,64102,12384,44652,6817,127955
-1000381,57735,37457,58116,13668,166976
-1000382,61412,14476,70811,78602,225301
-1000383,5302,38621,64143,9793,117859
-1000384,32633,85437,19767,67921,205758
-1000385,63559,38237,45491,44871,192158
-1000386,35412,57638,3143,30642,126835
-1000387,68485,44861,18145,778,132269
-1000388,5270,60222,21377,7072,93941
-1000389,5716,63363,810,50239,120128
-1000390,67487,73153,88290,40127,269057
-1000391,65904,11735,50301,78825,206765
-1000392,57052,13130,80816,93078,244076
-1000393,28843,34781,3871,13628,81123
-1000394,14615,70773,57636,43377,186401
-1000395,69889,65803,7566,70230,213488
-1000396,56338,50420,65716,96495,268969
-1000397,93583,94497,22031,28985,239096
-1000398,72214,23749,55814,66227,218004
-1000399,5486,72016,42471,87886,207859
-1000400,20812,76026,83104,48500,228442
-1000401,10098,9517,6679,67698,93992
-1000402,85042,55552,60484,18589,219667
-1000403,10077,24777,69895,66555,171304
-1000404,95566,72165,29271,60760,257762
-1000405,93046,11273,19748,32320,156387
-1000406,78844,5614,71795,85136,241389
-1000407,96083,29911,4780,85110,215884
-1000408,55132,68506,44459,40559,208656
-1000409,77538,86673,74461,84772,323444
-1000410,83814,41083,75686,88380,288963
-1000411,47493,19980,71262,29717,168452
-1000412,80423,972,98640,21807,201842
-1000413,80643,51707,79778,40505,252633
-1000414,37942,10444,51947,66437,166770
-1000415,44983,60038,37597,43663,186281
-1000416,58037,38327,99666,20692,216722
-1000417,62454,35230,28576,68465,194725
-1000418,2854,50980,9174,81169,144177
-1000419,94540,53072,28673,21511,197796
-1000420,32876,21372,71032,56102,181382
-1000421,68845,88270,67634,17643,242392
-1000422,41173,67042,26495,88325,223035
-1000423,85087,57518,61899,45657,250161
-1000424,18259,49394,20681,93832,182166
-1000425,48822,9081,95923,6930,160756
-1000426,27068,59055,16448,99831,202402
-1000427,28334,6925,94386,3814,133459
-1000428,20879,67367,85164,97374,270784
-1000429,90223,4985,94997,17230,207435
-1000430,22873,43118,86225,87396,239612
-1000431,76394,272,53229,65141,195036
-1000432,65959,9746,39700,31808,147213
-1000433,73158,57181,47670,31317,209326
-1000434,42135,84840,75846,97298,300119
-1000435,26037,59971,15607,12148,113763
-1000436,60262,4718,96124,66181,227285
-1000437,47639,9689,29666,30547,117541
-1000438,7387,30777,93036,89929,221129
-1000439,67654,93013,9121,4404,174192
-1000440,91797,1881,78813,48422,220913
-1000441,81484,5129,80116,3181,169910
-1000442,80580,34428,48040,97567,260615
-1000443,27705,54360,88868,47679,218612
-1000444,86452,3950,20660,49076,160138
-1000445,64272,44142,93066,62955,264435
-1000446,51454,92561,41063,65671,250749
-1000447,13445,35317,39085,74972,162819
-1000448,23430,25474,43911,65501,158316
-1000449,30473,47600,97962,13460,189495
-1000450,83278,95253,49056,90800,318387
-1000451,46254,7371,70178,47398,171201
-1000452,81770,10202,344,66658,158974
-1000453,73983,1518,77671,11766,164938
-1000454,62899,36066,76442,17018,192425
-1000455,41235,48911,10672,24025,124843
-1000456,57589,94235,45219,14694,211737
-1000457,63017,47716,22251,59394,192378
-1000458,86728,52679,24249,54715,218371
-1000459,50553,6863,88708,47819,193943
-1000460,1438,31870,26618,83187,143113
-1000461,63500,61709,20610,66606,212425
-1000462,30872,49488,78465,71256,230081
-1000463,50316,52921,58067,25936,187240
-1000464,48798,28892,38185,13811,129686
-1000465,58758,78105,67258,18817,222938
-1000466,55637,44793,38412,4354,143196
-1000467,12944,8333,5942,80469,107688
-1000468,54513,90856,49137,41764,236270
-1000469,88843,78755,76028,28025,271651
-1000470,16816,26083,22369,75811,141079
-1000471,83041,7664,11847,19332,121884
-1000472,75836,84689,99144,79478,339147
-1000473,54027,24192,97109,33712,209040
-1000474,21939,89524,86856,9796,208115
-1000475,21519,47243,16743,30535,116040
-1000476,32475,1127,28153,78268,140023
-1000477,53049,29586,72142,36074,190851
-1000478,75252,62896,66894,77724,282766
-1000479,11221,79753,75442,63621,230037
-1000480,97916,82429,99924,31432,311701
-1000481,68206,71151,59520,39303,238180
-1000482,91216,35823,87701,82556,297296
-1000483,81509,87560,85602,69905,324576
-1000484,73678,78428,97006,96156,345268
-1000485,37243,68129,8036,8516,121924
-1000486,36154,12632,44674,7042,100502
-1000487,38493,12610,62521,49996,163620
-1000488,17500,86407,77264,60109,241280
-1000489,48304,43184,78561,58708,228757
-1000490,15529,82605,51191,95875,245200
-1000491,7822,88943,28135,22454,147354
-1000492,79501,7766,37465,67476,192208
-1000493,92593,28414,13842,73150,207999
-1000494,68210,80223,51071,45057,244561
-1000495,43629,31558,35069,65347,175603
-1000496,15178,12110,18745,45143,91176
-1000497,96874,19949,93864,46720,257407
-1000498,61378,466,34512,68752,165108
-1000499,72492,19332,88995,71941,252760
-1000500,80469,3773,42133,49532,175907
-1000501,38227,99962,91710,26789,256688
-1000502,74470,27896,82549,54675,239590
-1000503,16031,64915,72051,44449,197446
-1000504,82255,23595,17694,89581,213125
-1000505,56984,85109,98878,91397,332368
-1000506,52149,53326,20145,57534,183154
-1000507,68503,38395,10359,97831,215088
-1000508,27442,1401,71529,66305,166677
-1000509,55517,65423,63956,50805,235701
-1000510,48735,47580,25574,2923,124812
-1000511,19233,5491,63188,98097,186009
-1000512,57623,46347,35404,80129,219503
-1000513,7582,46214,54281,49221,157298
-1000514,90673,23269,54068,70049,238059
-1000515,27837,94545,53963,58211,234556
-1000516,54120,32124,57414,27963,171621
-1000517,21195,26175,71770,55622,174762
-1000518,52388,82373,59821,23459,218041
-1000519,61522,21635,53825,17520,154502
-1000520,36383,52675,75790,93787,258635
-1000521,14181,35560,76178,25641,151560
-1000522,57250,96338,22135,88721,264444
-1000523,28679,21872,38297,44300,133148
-1000524,22795,16525,50877,99240,189437
-1000525,76048,76697,22906,77106,252757
-1000526,30256,68205,63655,10954,173070
-1000527,12411,36292,97022,76012,221737
-1000528,30946,22534,33037,79973,166490
-1000529,46197,30771,27425,69569,173962
-1000530,22615,37683,16374,96451,173123
-1000531,44266,36316,21696,35644,137922
-1000532,96863,39274,52723,33004,221864
-1000533,95373,1503,20371,10930,128177
-1000534,80543,32094,65640,72745,251022
-1000535,51908,54496,72620,63072,242096
-1000536,84836,41236,26667,77990,230729
-1000537,39276,94517,26028,54215,214036
-1000538,9077,49063,499,87900,146539
-1000539,10274,36979,36383,49032,132668
-1000540,42779,34712,48419,11056,136966
-1000541,39626,67727,31585,18645,157583
-1000542,28733,34200,27263,39143,129339
-1000543,7677,83016,29397,74489,194579
-1000544,68061,37807,23549,77120,206537
-1000545,13679,6074,78347,73592,171692
-1000546,43070,50008,80512,49318,222908
-1000547,77824,32908,34358,40755,185845
-1000548,61426,6709,5608,77097,150840
-1000549,35150,58308,49454,6260,149172
-1000550,90067,30655,24626,84721,230069
-1000551,31735,84557,55115,52214,223621
-1000552,25507,98657,11982,49629,185775
-1000553,10161,78995,79968,84641,253765
-1000554,67734,23392,89188,96757,277071
-1000555,5075,15789,84238,79465,184567
-1000556,23478,98360,99264,21546,242648
-1000557,13525,77148,80869,66614,238156
-1000558,33676,8386,20141,90745,152948
-1000559,23475,29683,74839,12382,140379
-1000560,49358,11528,82440,38496,181822
-1000561,9112,81706,72820,3647,167285
-1000562,97995,56574,52367,53401,260337
-1000563,61887,20679,93447,81991,258004
-1000564,21736,82248,40709,51157,195850
-1000565,53224,88585,37896,39253,218958
-1000566,87224,49065,28711,52047,217047
-1000567,17602,67203,67428,46910,199143
-1000568,23596,82706,49650,82863,238815
-1000569,48499,49249,65106,11904,174758
-1000570,49246,26896,78098,73179,227419
-1000571,57446,3417,37423,6989,105275
-1000572,61209,4134,62150,67157,194650
-1000573,72485,38620,29734,60339,201178
-1000574,96218,12188,93045,29457,230908
-1000575,12279,27158,62512,69985,171934
-1000576,5775,1753,37793,55213,100534
-1000577,74240,35815,95679,32851,238585
-1000578,36956,41226,54534,68657,201373
-1000579,67895,42887,85724,75180,271686
-1000580,61345,67089,56328,53763,238525
-1000581,8953,59085,83060,83773,234871
-1000582,26830,85646,97089,26332,235897
-1000583,81118,74756,30811,52484,239169
-1000584,12020,3847,8973,60006,84846
-1000585,45496,79404,32488,67382,224770
-1000586,14533,45168,57811,61029,178541
-1000587,21592,2833,50900,16269,91594
-1000588,77212,44929,21123,88010,231274
-1000589,58857,112,24513,71028,154510
-1000590,61734,87514,57274,76022,282544
-1000591,15384,61427,4021,48760,129592
-1000592,97132,46566,70212,69748,283658
-1000593,72757,30950,75226,88429,267362
-1000594,50157,88114,13833,73727,225831
-1000595,96266,9534,89634,9918,205352
-1000596,74261,22144,93337,60820,250562
-1000597,61921,38938,46356,37756,184971
-1000598,48356,82073,42929,29391,202749
-1000599,35492,38892,58700,51554,184638
-1000600,46632,16986,80533,1241,145392
-1000601,44053,9011,52177,53401,158642
-1000602,57265,48015,44881,75837,225998
-1000603,81421,65991,48162,29705,225279
-1000604,72506,16499,29608,86581,205194
-1000605,38682,49413,13992,85583,187670
-1000606,24667,73710,47587,58775,204739
-1000607,35415,59542,92067,85339,272363
-1000608,21187,86325,20460,10394,138366
-1000609,7738,54533,14290,49156,125717
-1000610,99640,51581,48588,83143,282952
-1000611,80557,20998,35093,71291,207939
-1000612,68687,10284,60296,81176,220443
-1000613,19299,7657,16708,86124,129788
-1000614,78238,2940,34367,79585,195130
-1000615,58830,68267,59852,44095,231044
-1000616,48679,5673,1960,86457,142769
-1000617,22261,59528,84525,96798,263112
-1000618,82340,82154,55956,72021,292471
-1000619,30677,48715,47008,84660,211060
-1000620,12837,83715,30356,61700,188608
-1000621,20705,48445,30298,47679,147127
-1000622,7358,97317,39449,36227,180351
-1000623,86828,60078,77531,11421,235858
-1000624,46284,99415,70567,2902,219168
-1000625,77849,13116,72500,29255,192720
-1000626,86348,21273,15466,9845,132932
-1000627,26625,72734,46427,1100,146886
-1000628,27619,39896,22642,52303,142460
-1000629,82216,26620,67928,81302,258066
-1000630,31840,42906,93647,99970,268363
-1000631,61480,66379,68864,18593,215316
-1000632,16807,43497,70099,56419,186822
-1000633,93118,57534,22685,3652,176989
-1000634,72789,18689,10700,65345,167523
-1000635,16518,9518,13719,27831,67586
-1000636,7057,17641,98403,61549,184650
-1000637,65065,19960,74599,55678,215302
-1000638,29430,25049,45922,97985,198386
-1000639,32507,71071,76145,65418,245141
-1000640,44686,87527,38830,96140,267183
-1000641,58098,84848,24220,88058,255224
-1000642,66435,13012,18356,2335,100138
-1000643,371,43707,67800,51851,163729
-1000644,60319,14421,37312,89458,201510
-1000645,70049,19656,43288,53367,186360
-1000646,56418,50160,99514,99573,305665
-1000647,64652,99769,7397,96251,268069
-1000648,27369,47145,52239,49279,176032
-1000649,41115,64845,67533,40132,213625
-1000650,80677,97696,47238,82178,307789
-1000651,42698,4887,94843,78904,221332
-1000652,60888,77247,51691,24571,214397
-1000653,29338,84575,11488,5165,130566
-1000654,84666,97639,37879,93573,313757
-1000655,15697,17457,42640,36668,112462
-1000656,34080,18232,35872,65423,153607
-1000657,63783,72565,35734,48357,220439
-1000658,28799,58584,68474,9125,164982
-1000659,2902,10531,86704,29893,130030
-1000660,53366,22675,145,33355,109541
-1000661,1215,27582,34539,41279,104615
-1000662,35910,92747,26797,61757,217211
-1000663,47922,25793,26324,27998,128037
-1000664,71323,13171,30212,5996,120702
-1000665,63255,11501,37977,28469,141202
-1000666,56605,52503,88634,70052,267794
-1000667,90776,61250,36686,8336,197048
-1000668,19786,44483,39833,18973,123075
-1000669,91770,76948,36359,11997,217074
-1000670,36562,47713,78784,88751,251810
-1000671,67552,49632,87395,50867,255446
-1000672,41443,94564,73152,73297,282456
-1000673,45682,35165,51980,96406,229233
-1000674,13929,67976,48352,63223,193480
-1000675,78390,10356,35969,15867,140582
-1000676,65095,72579,97920,72593,308187
-1000677,9577,73177,83898,12146,178798
-1000678,23155,5622,91183,3346,123306
-1000679,16980,77935,41630,11054,147599
-1000680,98997,59582,68719,22407,249705
-1000681,89385,70922,61946,54860,277113
-1000682,97603,20087,96285,56386,270361
-1000683,22905,47811,50126,40930,161772
-1000684,78452,30805,95926,19442,224625
-1000685,96283,12455,12800,71576,193114
-1000686,90902,48015,43765,87586,270268
-1000687,29644,39578,52712,38635,160569
-1000688,68450,64863,99926,14531,247770
-1000689,85335,23459,14337,46498,169629
-1000690,24958,74870,21447,57241,178516
-1000691,46462,51310,58621,66366,222759
-1000692,65299,55769,54578,53063,228709
-1000693,1764,21477,41453,63966,128660
-1000694,83008,79493,35113,13797,211411
-1000695,95343,48314,62158,80519,286334
-1000696,40108,97016,95051,27266,259441
-1000697,86868,14768,26842,11530,140008
-1000698,71365,75060,69777,68200,284402
-1000699,55840,79175,97292,85523,317830
-1000700,34996,22212,35844,28693,121745
-1000701,93176,96190,1747,19602,210715
-1000702,86354,99536,73401,73692,332983
-1000703,21711,13321,13925,41844,90801
-1000704,76163,91493,7559,95067,270282
-1000705,66229,3271,47592,27414,144506
-1000706,71576,80752,33268,66808,252404
-1000707,8811,56966,28675,98231,192683
-1000708,77969,12384,19892,21631,131876
-1000709,57406,1757,36257,68281,163701
-1000710,52130,68940,51297,91634,264001
-1000711,41987,44951,8077,49494,144509
-1000712,13451,50303,77864,12843,154461
-1000713,84760,25325,17561,56758,184404
-1000714,26325,52990,1494,84828,165637
-1000715,23687,86035,86582,71612,267916
-1000716,49409,41560,91472,23995,206436
-1000717,28023,45224,68283,83415,224945
-1000718,82712,38327,61226,90545,272810
-1000719,5649,94139,82491,71134,253413
-1000720,36537,95667,52370,15222,199796
-1000721,53269,90788,34333,94477,272867
-1000722,33818,81775,54109,71355,241057
-1000723,47596,6987,50103,46028,150714
-1000724,8368,41210,53422,39955,142955
-1000725,40341,24097,12644,2832,79914
-1000726,66360,96057,92300,74574,329291
-1000727,70175,98395,92620,99085,360275
-1000728,13529,58990,867,17780,91166
-1000729,625,53378,39881,80446,174330
-1000730,63808,56873,24633,95113,240427
-1000731,1287,3743,12675,53257,70962
-1000732,31008,64628,64467,93427,253530
-1000733,86246,98167,24475,37727,246615
-1000734,92679,86470,75883,66414,321446
-1000735,43358,36997,77202,71538,229095
-1000736,77459,48157,45007,74316,244939
-1000737,13957,7792,90857,71451,184057
-1000738,40476,84485,3107,28690,156758
-1000739,54301,22738,50454,29356,156849
-1000740,93412,23122,37081,93605,247220
-1000741,23966,80433,52075,33874,190348
-1000742,70090,76683,32289,46096,225158
-1000743,44699,65124,92489,55936,258248
-1000744,86192,63298,77706,32991,260187
-1000745,41086,85716,1088,87264,215154
-1000746,43677,55370,51498,9323,159868
-1000747,60734,31123,33764,26128,151749
-1000748,86519,43694,28702,35535,194450
-1000749,18522,32793,6049,26313,83677
-1000750,48289,59448,64861,54104,226702
-1000751,29106,98621,79343,33152,240222
-1000752,83046,78185,95991,78726,335948
-1000753,98209,22511,36613,59916,217249
-1000754,46367,26069,7231,92825,172492
-1000755,92381,82726,83872,49577,308556
-1000756,29164,14002,93130,68460,204756
-1000757,59898,97026,64226,81417,302567
-1000758,94257,91561,60357,84463,330638
-1000759,35156,19032,82606,91004,227798
-1000760,42507,38273,21769,70363,172912
-1000761,23479,44111,25934,88964,182488
-1000762,4048,53941,69369,46978,174336
-1000763,63624,60907,39244,39480,203255
-1000764,96844,27546,24163,77153,225706
-1000765,56382,1504,90696,57721,206303
-1000766,78527,14777,62750,50449,206503
-1000767,47071,74525,36779,42871,201246
-1000768,56461,3495,76550,40300,176806
-1000769,57377,9212,99901,30072,196562
-1000770,89789,28007,4173,83334,205303
-1000771,25583,77340,83073,32301,218297
-1000772,58943,3825,90441,69398,222607
-1000773,15742,33806,74528,60738,184814
-1000774,90835,40175,20608,53185,204803
-1000775,37895,20468,94101,233,152697
-1000776,76134,28345,32270,92904,229653
-1000777,99380,79804,94605,91641,365430
-1000778,68117,12923,46386,73802,201228
-1000779,87797,53160,67347,52559,260863
-1000780,13598,50772,58489,1290,124149
-1000781,13498,40188,50890,83607,188183
-1000782,92920,44470,14468,17593,169451
-1000783,58481,91710,58615,17772,226578
-1000784,41352,26159,80680,26596,174787
-1000785,28909,13099,32185,76288,150481
-1000786,20340,34666,21474,63956,140436
-1000787,12107,68510,97679,78670,256966
-1000788,51461,69471,33262,26541,180735
-1000789,20337,5223,92233,35959,153752
-1000790,29393,91674,79380,55619,256066
-1000791,87931,18113,79492,29647,215183
-1000792,63767,22828,15990,40642,143227
-1000793,16251,99598,19528,77212,212589
-1000794,33190,84360,76346,63425,257321
-1000795,50902,95090,65668,53449,265109
-1000796,24980,44055,3341,97989,170365
-1000797,72823,75157,21098,24330,193408
-1000798,65977,30789,43756,69676,210198
-1000799,63735,5629,76525,45584,191473
-1000800,67985,51527,80414,68245,268171
-1000801,63886,71043,58199,47457,240585
-1000802,5816,71881,4087,74929,156713
-1000803,9301,49524,45687,60405,164917
-1000804,74877,57755,36054,63337,232023
-1000805,99985,61854,56140,57085,275064
-1000806,64376,2944,54802,58185,180307
-1000807,30665,68443,33665,72212,204985
-1000808,63649,59008,31488,60968,215113
-1000809,21859,4312,58465,61489,146125
-1000810,91793,56659,92475,88623,329550
-1000811,56436,37573,69042,12946,175997
-1000812,89906,8791,63432,72669,234798
-1000813,56203,44424,62952,8199,171778
-1000814,60376,74105,44537,82472,261490
-1000815,16946,3968,10430,9387,40731
-1000816,90602,45465,63059,74092,273218
-1000817,34455,61090,12271,34466,142282
-1000818,61782,86151,51962,13946,213841
-1000819,1135,62926,28830,53117,146008
-1000820,62509,1706,894,27224,92333
-1000821,98777,93596,52782,72361,317516
-1000822,46879,53379,9791,31350,141399
-1000823,20564,32404,38021,7956,98945
-1000824,78797,100000,88166,57184,324147
-1000825,61507,23246,17630,49646,152029
-1000826,9147,19511,51267,60575,140500
-1000827,1875,40414,15522,77684,135495
-1000828,41472,76520,26209,50185,194386
-1000829,12413,39227,58624,89440,199704
-1000830,26736,88471,41277,34247,190731
-1000831,56839,13390,3602,57065,130896
-1000832,50124,41822,45205,23218,160369
-1000833,78364,85207,9546,13438,186555
-1000834,29356,86512,86582,67798,270248
-1000835,9301,80683,38869,10843,139696
-1000836,50106,66300,40801,21607,178814
-1000837,96086,90975,45720,96134,328915
-1000838,63406,55676,82407,35691,237180
-1000839,66741,70834,78631,10171,226377
-1000840,39295,50172,91594,47347,228408
-1000841,51667,54746,25616,9343,141372
-1000842,73097,91187,76382,56151,296817
-1000843,54787,53061,53312,64130,225290
-1000844,6972,50606,47989,80175,185742
-1000845,38795,52533,47830,60588,199746
-1000846,83656,87137,51554,50816,273163
-1000847,24655,55652,64940,23227,168474
-1000848,30952,64209,39138,72283,206582
-1000849,37794,60225,12508,31451,141978
-1000850,67994,19392,60922,24043,172351
-1000851,29787,47812,18716,74665,170980
-1000852,45063,43545,79545,48119,216272
-1000853,25007,3980,68308,23616,120911
-1000854,48756,5944,79543,80781,215024
-1000855,3882,97908,40996,4,142790
-1000856,31329,61603,87328,44776,225036
-1000857,14804,60385,62649,48178,186016
-1000858,3119,13914,14578,58783,90394
-1000859,70501,80538,48154,60671,259864
-1000860,89834,46773,88022,78159,302788
-1000861,93042,10675,43124,58511,205352
-1000862,91019,37289,79547,61892,269747
-1000863,39623,80187,18964,59769,198543
-1000864,56723,44906,73124,11089,185842
-1000865,1926,53128,56688,52213,163955
-1000866,5895,99763,36976,81990,224624
-1000867,69435,73502,47533,14743,205213
-1000868,39203,73619,87169,99267,299258
-1000869,425,57774,59607,86421,204227
-1000870,78808,41029,76252,89036,285125
-1000871,93185,4993,59042,68539,225759
-1000872,10985,26998,34684,11818,84485
-1000873,29765,42874,53950,23206,149795
-1000874,52370,7669,79083,90811,229933
-1000875,33591,48938,50638,75424,208591
-1000876,22922,2848,63627,18744,108141
-1000877,60517,62116,47861,99494,269988
-1000878,6790,90426,98587,12438,208241
-1000879,84007,71959,73587,72683,302236
-1000880,34543,40856,40501,36898,152798
-1000881,55426,1588,25780,93760,176554
-1000882,89753,6326,43086,64078,203243
-1000883,94928,74278,87193,8410,264809
-1000884,85446,49327,40521,12224,187518
-1000885,132,64394,17703,51238,133467
-1000886,584,70962,38248,30744,140538
-1000887,80322,19105,99197,44173,242797
-1000888,10818,48455,40983,11639,111895
-1000889,31818,61086,55396,48134,196434
-1000890,47052,35787,30761,79283,192883
-1000891,81775,36436,16669,59068,193948
-1000892,4935,40519,31001,85195,161650
-1000893,95492,67559,28003,19558,210612
-1000894,53916,98158,30505,84947,267526
-1000895,88453,1285,12910,33690,136338
-1000896,4904,9302,57752,14305,86263
-1000897,40267,61529,85733,82873,270402
-1000898,68106,19625,72183,9502,169416
-1000899,87521,7399,92745,63856,251521
-1000900,12419,54291,20494,46754,133958
-1000901,85999,47286,36512,17326,187123
-1000902,24578,22835,81142,89215,217770
-1000903,37856,40937,97362,14211,190366
-1000904,17088,71088,97547,43369,229092
-1000905,83696,81041,67987,56118,288842
-1000906,67769,58942,49599,77849,254159
-1000907,73742,28848,5074,36442,144106
-1000908,67635,79033,58788,62521,267977
-1000909,95850,40368,64128,96,200442
-1000910,6975,20461,24540,18610,70586
-1000911,46721,14465,68750,98783,228719
-1000912,78679,58376,49469,50914,237438
-1000913,78515,22822,48651,41074,191062
-1000914,94392,93575,8453,9919,206339
-1000915,61321,29361,37925,75700,204307
-1000916,65305,72741,65086,70768,273900
-1000917,40496,45789,76834,57669,220788
-1000918,79270,41271,24436,10766,155743
-1000919,36575,12625,94079,38048,181327
-1000920,10294,51913,38225,69220,169652
-1000921,99593,98383,13734,59819,271529
-1000922,70529,80011,27282,78065,255887
-1000923,68117,87493,98130,44465,298205
-1000924,23204,77834,20009,20225,141272
-1000925,40128,65277,84674,98857,288936
-1000926,52430,31133,16402,59804,159769
-1000927,11080,98448,20894,64612,195034
-1000928,56486,9544,92751,4280,163061
-1000929,89485,98207,1779,95193,284664
-1000930,54019,52430,78315,12530,197294
-1000931,47658,3877,11907,30474,93916
-1000932,78850,50918,64241,36124,230133
-1000933,28065,11737,58988,67629,166419
-1000934,29415,63989,77050,30398,200852
-1000935,29224,53311,48272,65527,196334
-1000936,20722,1599,84759,51736,158816
-1000937,1701,88632,98087,15509,203929
-1000938,53522,74107,20813,25836,174278
-1000939,7531,61006,31422,69137,169096
-1000940,257,30539,85200,23404,139400
-1000941,59429,81237,30851,42686,214203
-1000942,48914,455,58862,91183,199414
-1000943,429,84192,9337,26754,120712
-1000944,36950,37599,54363,68696,197608
-1000945,67541,75279,32647,94693,270160
-1000946,84133,48752,25639,1325,159849
-1000947,42151,29473,70360,49696,191680
-1000948,79170,77457,67096,41361,265084
-1000949,83705,87308,40856,83023,294892
-1000950,21411,35109,35781,60416,152717
-1000951,47444,6995,47269,67182,168890
-1000952,50630,14096,73151,62315,200192
-1000953,73250,47036,79273,6361,205920
-1000954,98710,45729,14482,27096,186017
-1000955,98171,12797,64156,96928,272052
-1000956,14632,27212,4937,44036,90817
-1000957,34399,19446,78885,44025,176755
-1000958,91565,12854,82501,42407,229327
-1000959,73724,89378,43184,52270,258556
-1000960,21207,63364,4847,60017,149435
-1000961,14065,57756,58882,522,131225
-1000962,81779,7694,76861,27720,194054
-1000963,73345,27562,77724,70074,248705
-1000964,34838,7688,55037,89631,187194
-1000965,7027,71416,37868,65109,181420
-1000966,14994,76568,82352,93964,267878
-1000967,69556,6801,93730,1208,171295
-1000968,47334,10183,66490,3443,127450
-1000969,24774,10012,90480,26873,152139
-1000970,27506,90010,34200,42066,193782
-1000971,60710,62358,38954,1071,163093
-1000972,69931,63605,82406,33442,249384
-1000973,10185,13343,47267,12120,82915
-1000974,75093,5125,55850,46791,182859
-1000975,73023,65331,57828,1493,197675
-1000976,19466,970,43657,30127,94220
-1000977,96183,58773,74408,91830,321194
-1000978,61322,23056,54221,55917,194516
-1000979,50721,80424,40322,95061,266528
-1000980,845,51494,77899,11334,141572
-1000981,84831,38158,90806,59524,273319
-1000982,58992,67320,75168,77151,278631
-1000983,8651,75080,47066,82731,213528
-1000984,29322,23069,27467,14694,94552
-1000985,7241,35208,23503,64652,130604
-1000986,42637,16010,6570,26859,92076
-1000987,7015,14222,75943,63035,160215
-1000988,53976,38158,16320,63995,172449
-1000989,23893,4282,98823,58636,185634
-1000990,62926,78628,96396,36572,274522
-1000991,12543,57375,43790,25871,139579
-1000992,56058,35362,61528,15349,168297
-1000993,26334,4644,21308,22490,74776
-1000994,61227,84529,54918,77846,278520
-1000995,16207,51534,3992,96015,167748
-1000996,60792,50910,20233,58440,190375
-1000997,82741,98043,90657,63475,334916
-1000998,90344,79555,41229,10562,221690
-1000999,88613,813,46797,30366,166589
-1001000,48185,78964,13118,79969,220236
-1001001,99348,891,22156,65464,187859
-1001002,42089,18305,66780,96382,223556
-1001003,50694,3628,92062,35377,181761
-1001004,37472,8278,75337,86963,208050
-1001005,60558,15060,23602,17434,116654
-1001006,6902,94298,95636,9134,205970
-1001007,82582,12968,78427,28728,202705
-1001008,17948,82437,74225,14301,188911
-1001009,46011,67115,67215,12535,192876
-1001010,5063,66069,48794,58800,178726
-1001011,50976,6,83270,45076,179328
-1001012,17707,19679,10652,38905,86943
-1001013,3261,72720,19289,69502,164772
-1001014,28572,59926,84287,72280,245065
-1001015,51604,40662,49840,61889,203995
-1001016,76636,93728,35021,42229,247614
-1001017,93699,71635,46757,79783,291874
-1001018,80581,3744,38583,76366,199274
-1001019,50048,18599,49056,37237,154940
-1001020,27611,67226,88679,84087,267603
-1001021,82675,86323,19926,26282,215206
-1001022,34225,59571,5154,19850,118800
-1001023,70822,69521,70618,75286,286247
-1001024,20169,51422,55023,88355,214969
-1001025,71411,81854,72074,85263,310602
-1001026,39950,7756,95404,99191,242301
-1001027,7526,61104,26190,48139,142959
-1001028,9496,96016,73921,2927,182360
-1001029,24154,19892,27590,59619,131255
-1001030,40966,2203,76481,59355,179005
-1001031,62681,71774,58624,47096,240175
-1001032,50025,38018,2710,39277,130030
-1001033,25373,28382,94399,89719,237873
-1001034,33198,24414,64311,44652,166575
-1001035,93922,37611,98607,60015,290155
-1001036,5470,61149,81948,56782,205349
-1001037,65916,27379,57162,50422,200879
-1001038,4270,83370,3376,34725,125741
-1001039,69837,11450,14663,34519,130469
-1001040,67837,79424,39929,53450,240640
-1001041,81609,34207,7655,77733,201204
-1001042,53769,66268,95769,52806,268612
-1001043,68851,67559,88971,6420,231801
-1001044,7243,63756,4752,8926,84677
-1001045,5024,8424,7395,39806,60649
-1001046,62574,1996,84845,19059,168474
-1001047,48645,83348,5382,68979,206354
-1001048,71759,93036,48808,85402,299005
-1001049,37363,10476,96271,36236,180346
-1001050,13248,59351,62111,99789,234499
-1001051,33250,2003,33104,69639,137996
-1001052,56108,90166,22343,25040,193657
-1001053,15253,11293,21813,77877,126236
-1001054,23486,21663,79952,5515,130616
-1001055,97993,97021,7761,73763,276538
-1001056,85305,96325,24578,50595,256803
-1001057,65379,67875,89696,89465,312415
-1001058,126,10127,7059,51206,68518
-1001059,15992,61337,7403,65428,150160
-1001060,29105,75508,18561,52842,176016
-1001061,50770,31352,25310,94827,202259
-1001062,39635,83619,98500,64617,286371
-1001063,62898,1254,73897,10228,148277
-1001064,63845,20145,50319,40633,174942
-1001065,63497,47602,26932,60443,198474
-1001066,82001,95797,29365,50155,257318
-1001067,84523,16462,44599,4478,150062
-1001068,71408,69591,92775,32639,266413
-1001069,36007,34270,76979,88258,235514
-1001070,6234,91688,64426,80495,242843
-1001071,79248,29698,96958,84857,290761
-1001072,45194,21071,65947,20202,152414
-1001073,92452,17948,90966,66536,267902
-1001074,20924,36197,56737,43281,157139
-1001075,73755,8540,75717,4103,162115
-1001076,56174,53191,16147,2927,128439
-1001077,85469,92241,63120,54361,295191
-1001078,28719,25148,50999,31165,136031
-1001079,56354,70282,17178,53818,197632
-1001080,81460,82813,11599,47220,223092
-1001081,47027,11776,66654,90247,215704
-1001082,95417,66650,36239,36488,234794
-1001083,1251,26275,37585,8417,73528
-1001084,54665,23388,47815,73980,199848
-1001085,9572,62638,25894,58559,156663
-1001086,27145,521,74358,61191,163215
-1001087,44457,87569,38188,12162,182376
-1001088,10141,16106,59555,39384,125186
-1001089,89137,33748,44853,17691,185429
-1001090,90562,62519,69109,89759,311949
-1001091,82806,58234,77953,67506,286499
-1001092,81427,33431,88003,27005,229866
-1001093,75188,93682,93904,66263,329037
-1001094,22196,85935,33356,21918,163405
-1001095,11702,18453,62508,81188,173851
-1001096,61879,16650,64143,31769,174441
-1001097,97051,38012,7958,62531,205552
-1001098,56814,57421,1866,34615,150716
-1001099,81324,69383,20017,51734,222458
-1001100,92783,18934,15640,50940,178297
-1001101,10608,91678,83400,68927,254613
-1001102,67092,26573,20635,63561,177861
-1001103,49293,84699,37241,13031,184264
-1001104,61490,98754,26931,47321,234496
-1001105,22489,65457,58660,31325,177931
-1001106,95984,25020,17433,10799,149236
-1001107,24935,9085,3616,67214,104850
-1001108,99151,40851,28431,3620,172053
-1001109,66173,41815,75511,10725,194224
-1001110,47410,55732,90247,21000,214389
-1001111,94665,52114,53427,83295,283501
-1001112,26945,19784,71722,208,118659
-1001113,88664,63574,72332,34788,259358
-1001114,72869,50029,76411,71411,270720
-1001115,52875,76062,22103,97551,248591
-1001116,43126,17456,39424,66611,166617
-1001117,91873,29720,83462,70356,275411
-1001118,57725,70963,23053,23751,175492
-1001119,56339,41219,7310,16881,121749
-1001120,14557,67218,9158,62975,153908
-1001121,44516,62131,90618,46471,243736
-1001122,21424,48635,30245,72094,172398
-1001123,75979,36927,42830,75792,231528
-1001124,88652,25329,94830,9529,218340
-1001125,62923,83161,30587,55994,232665
-1001126,22982,12654,2088,33749,71473
-1001127,46230,3575,85286,95004,230095
-1001128,94171,50561,6605,59861,211198
-1001129,32458,96074,86971,13841,229344
-1001130,24617,67181,92217,63049,247064
-1001131,18880,69356,20851,30128,139215
-1001132,90420,16335,17799,46551,171105
-1001133,13723,61028,36584,89892,201227
-1001134,5007,29762,50595,46326,131690
-1001135,14541,89790,593,79923,184847
-1001136,14549,79600,27021,74799,195969
-1001137,68338,50359,23971,25345,168013
-1001138,86181,69570,96835,75053,327639
-1001139,6279,4444,20019,62539,93281
-1001140,10439,50107,14352,57106,132004
-1001141,54035,15248,96434,75520,241237
-1001142,43383,39611,46918,73358,203270
-1001143,10958,32468,36561,18883,98870
-1001144,22817,43129,24370,50676,140992
-1001145,73510,16866,66784,71200,228360
-1001146,43613,39532,12502,73145,168792
-1001147,27597,9893,65273,7232,109995
-1001148,25623,62654,49629,84914,222820
-1001149,26359,45765,41090,72405,185619
-1001150,92350,75588,39140,30782,237860
-1001151,85666,88566,97247,62989,334468
-1001152,99414,98555,4540,75788,278297
-1001153,78101,32190,39484,24961,174736
-1001154,22610,15959,25661,48481,112711
-1001155,82186,1900,20193,35870,140149
-1001156,45585,170,26520,17550,89825
-1001157,38387,4627,66704,46787,156505
-1001158,41428,5740,49004,88892,185064
-1001159,84270,42396,96472,243,223381
-1001160,97314,79577,54733,6200,237824
-1001161,28117,39029,3470,56921,127537
-1001162,95494,68701,87998,95243,347436
-1001163,22471,15414,65704,77780,181369
-1001164,32957,20940,73353,73584,200834
-1001165,18358,70052,36726,6710,131846
-1001166,34746,53179,16757,91259,195941
-1001167,17591,24931,25182,38258,105962
-1001168,3390,85572,81483,17489,187934
-1001169,80860,44087,14886,90922,230755
-1001170,46526,33796,86084,17591,183997
-1001171,28096,89021,21935,79547,218599
-1001172,70819,95984,1640,8790,177233
-1001173,73179,83921,9691,34114,200905
-1001174,93820,593,98182,51806,244401
-1001175,87500,54362,34751,93497,270110
-1001176,21318,4012,50475,46086,121891
-1001177,14245,67862,8613,12555,103275
-1001178,20182,80592,84459,54958,240191
-1001179,84906,35328,34508,41257,195999
-1001180,28992,23400,3223,88399,144014
-1001181,53228,11862,52085,23457,140632
-1001182,31860,70715,2745,18035,123355
-1001183,68494,65270,80920,25372,240056
-1001184,16562,95074,88840,83227,283703
-1001185,18478,64190,5823,59918,148409
-1001186,35411,16757,30255,79386,161809
-1001187,38273,87235,45273,20634,191415
-1001188,17159,52769,42099,34666,146693
-1001189,72406,69869,58332,67923,268530
-1001190,34421,57882,69128,75408,236839
-1001191,30229,1774,39159,4723,75885
-1001192,27112,34810,35165,90157,187244
-1001193,60164,11584,84276,93820,249844
-1001194,16763,79585,95247,39281,230876
-1001195,93305,77992,27481,36513,235291
-1001196,7323,69974,33494,35819,146610
-1001197,36859,21598,6944,3369,68770
-1001198,4562,13649,59582,21759,99552
-1001199,92977,73732,8057,10786,185552
-1001200,64623,90329,46836,21108,222896
-1001201,31421,60750,38987,85851,217009
-1001202,84539,87177,11339,28387,211442
-1001203,13062,56365,98883,65398,233708
-1001204,51303,32588,44741,7487,136119
-1001205,25791,89235,1746,75507,192279
-1001206,6965,8696,55296,74457,145414
-1001207,61895,66523,35768,46104,210290
-1001208,81905,84275,25264,1137,192581
-1001209,48421,15327,90324,11180,165252
-1001210,86606,19430,10583,51042,167661
-1001211,97551,53087,74889,25655,251182
-1001212,854,84248,92962,78602,256666
-1001213,79656,50487,33345,66729,230217
-1001214,8107,1508,23724,38159,71498
-1001215,96910,18595,49969,70593,236067
-1001216,44558,90314,29922,85267,250061
-1001217,98947,89392,81525,78956,348820
-1001218,8167,84882,57655,56523,207227
-1001219,54544,16605,17537,66670,155356
-1001220,41690,21014,90427,38474,191605
-1001221,33883,68175,24357,35216,161631
-1001222,67894,72732,4259,47052,191937
-1001223,75499,68011,58118,49299,250927
-1001224,59014,60390,4036,23486,146926
-1001225,41404,31197,46042,89005,207648
-1001226,61640,55782,91620,95519,304561
-1001227,17197,45870,15560,4780,83407
-1001228,48477,1040,76652,84722,210891
-1001229,9528,11721,41012,4421,66682
-1001230,25412,30636,90626,18568,165242
-1001231,23956,31265,8592,99339,163152
-1001232,22181,61550,62245,27247,173223
-1001233,68314,4795,96415,4728,174252
-1001234,50948,37772,64156,19161,172037
-1001235,89257,65021,66465,27560,248303
-1001236,82213,59362,74983,99741,316299
-1001237,3622,52636,74595,19450,150303
-1001238,88372,62454,14607,33562,198995
-1001239,77388,24453,75920,34415,212176
-1001240,45427,17677,46613,18345,128062
-1001241,61650,64968,10725,96748,234091
-1001242,70274,92649,4794,64955,232672
-1001243,50528,45722,65262,61244,222756
-1001244,42716,7198,63751,9653,123318
-1001245,78178,87041,9790,43638,218647
-1001246,41809,69491,20180,16033,147513
-1001247,20179,82725,46908,44050,193862
-1001248,2608,42918,94853,22038,162417
-1001249,72400,42081,14629,70262,199372
-1001250,65734,68495,71033,51544,256806
-1001251,15804,76498,26106,36336,154744
-1001252,7249,30293,54388,50523,142453
-1001253,85063,36513,1365,70263,193204
-1001254,7765,99130,14947,63453,185295
-1001255,49492,72814,14481,29982,166769
-1001256,35404,92677,20794,85197,234072
-1001257,40908,7131,21434,71362,140835
-1001258,95985,31142,37169,22851,187147
-1001259,59022,14287,49626,93455,216390
-1001260,84131,46207,92806,51733,274877
-1001261,86151,32189,63254,61432,243026
-1001262,20360,89283,26125,77298,213066
-1001263,50510,43210,72041,61278,227039
-1001264,61372,67654,88614,62455,280095
-1001265,44089,39029,18328,15072,116518
-1001266,91833,96015,69180,16178,273206
-1001267,27138,34261,95299,39251,195949
-1001268,98226,11573,55855,44529,210183
-1001269,26884,64849,92402,48426,232561
-1001270,20323,71843,87440,43210,222816
-1001271,9849,63197,24936,76109,174091
-1001272,90834,47042,18298,78353,234527
-1001273,45849,9357,7967,48466,111639
-1001274,8396,43574,21608,47190,120768
-1001275,91860,72294,60695,76252,301101
-1001276,80989,62482,81500,32584,257555
-1001277,38953,94849,97397,43276,274475
-1001278,10250,51590,85437,83666,230943
-1001279,74932,51848,59064,63317,249161
-1001280,82192,35100,11649,91316,220257
-1001281,26669,8996,45445,29548,110658
-1001282,12809,62448,20741,64327,160325
-1001283,12647,46993,23948,62722,146310
-1001284,6581,64869,90113,54995,216558
-1001285,12372,26288,65651,84588,188899
-1001286,82526,17938,10244,30893,141601
-1001287,73068,84401,57883,57361,272713
-1001288,24993,28975,36584,57697,148249
-1001289,53706,72888,58441,7104,192139
-1001290,15992,62270,53256,65878,197396
-1001291,26,91733,75929,49251,216939
-1001292,41691,31551,10668,22636,106546
-1001293,14706,78427,40735,29447,163315
-1001294,55823,83578,52586,21911,213898
-1001295,78811,6673,86055,46361,217900
-1001296,89887,52178,66932,92723,301720
-1001297,18070,69441,23332,29343,140186
-1001298,26836,91693,55234,59661,233424
-1001299,42349,56228,52161,29714,180452
-1001300,83515,74633,30242,54693,243083
-1001301,27754,22988,80997,60513,192252
-1001302,81348,29944,31304,73851,216447
-1001303,25816,26303,42548,39558,134225
-1001304,94317,58122,43783,31921,228143
-1001305,96742,52820,74767,94998,319327
-1001306,20779,13666,98276,5789,138510
-1001307,29205,50322,66662,52911,199100
-1001308,13180,83355,56366,12601,165502
-1001309,50255,40898,10528,89324,191005
-1001310,63915,25964,3158,50792,143829
-1001311,91129,1201,18549,21700,132579
-1001312,13330,98825,90467,29423,232045
-1001313,15205,24161,73614,54585,167565
-1001314,79446,19199,79820,11051,189516
-1001315,65315,61289,77192,34460,238256
-1001316,89989,39633,74767,61573,265962
-1001317,26343,90340,96992,85259,298934
-1001318,64063,42898,20582,59078,186621
-1001319,58320,60818,66314,49458,234910
-1001320,74715,75455,55311,83422,288903
-1001321,24347,74696,68294,3361,170698
-1001322,93669,98190,49863,2644,244366
-1001323,43027,16791,67236,14596,141650
-1001324,75081,30030,9950,10233,125294
-1001325,50483,17974,28924,56259,153640
-1001326,3333,73146,75351,94665,246495
-1001327,25495,16955,96895,52565,191910
-1001328,14898,68333,53851,87458,224540
-1001329,68111,24763,59343,33191,185408
-1001330,55336,94141,35042,58986,243505
-1001331,87564,15173,73779,36434,212950
-1001332,19807,24146,96142,51937,192032
-1001333,18644,51618,92797,80147,243206
-1001334,19896,25562,23717,15019,84194
-1001335,79055,67796,53967,71371,272189
-1001336,94883,55430,79419,10472,240204
-1001337,9819,53553,2162,78254,143788
-1001338,66635,17161,10053,85558,179407
-1001339,97374,72018,56237,92583,318212
-1001340,51510,10976,99095,88839,250420
-1001341,55855,93802,35768,1556,186981
-1001342,24842,59000,267,84146,168255
-1001343,71913,28931,29652,74639,205135
-1001344,32142,80256,34904,41783,189085
-1001345,45523,31766,45600,50211,173100
-1001346,40525,7365,7760,42237,97887
-1001347,98860,17011,41788,71740,229399
-1001348,55504,96656,60705,233,213098
-1001349,59654,78911,54611,30316,223492
-1001350,8480,26462,92424,33943,161309
-1001351,53399,53075,66339,45138,217951
-1001352,2166,95513,30781,53637,182097
-1001353,55516,79871,32604,38089,206080
-1001354,15696,88714,434,8435,113279
-1001355,72811,75659,54199,96452,299121
-1001356,25485,86107,76567,8973,197132
-1001357,14744,14397,12579,76729,118449
-1001358,99389,42816,67043,27849,237097
-1001359,36299,12868,28041,93639,170847
-1001360,75080,85399,88193,68710,317382
-1001361,94134,55554,84783,30760,265231
-1001362,89045,98567,52029,61995,301636
-1001363,96238,12075,63912,31425,203650
-1001364,90865,17373,46045,72118,226401
-1001365,95057,11168,39548,10455,156228
-1001366,61455,39452,29183,41351,171441
-1001367,4158,76828,64740,94391,240117
-1001368,60634,70859,37496,17724,186713
-1001369,43988,77925,73190,2013,197116
-1001370,66490,29886,99884,15878,212138
-1001371,24662,23505,26161,32288,106616
-1001372,6738,184,8781,78368,94071
-1001373,18662,87737,46622,26413,179434
-1001374,36524,49204,52816,6646,145190
-1001375,53183,10290,74055,29097,166625
-1001376,2731,26576,27063,68756,125126
-1001377,30463,45116,6774,59416,141769
-1001378,26709,3229,68811,95501,194250
-1001379,39734,78856,78564,74971,272125
-1001380,8938,45291,34666,85604,174499
-1001381,17000,35535,32375,37954,122864
-1001382,56316,32285,96937,62679,248217
-1001383,26599,22516,26252,31079,106446
-1001384,7677,39898,87489,32047,167111
-1001385,79353,77580,71444,73131,301508
-1001386,77466,82137,57103,75106,291812
-1001387,70465,32564,80414,29698,213141
-1001388,48527,81939,94427,42497,267390
-1001389,91222,79761,28305,86503,285791
-1001390,23254,41916,54516,72400,192086
-1001391,34687,22394,54053,50406,161540
-1001392,45131,39982,82670,1338,169121
-1001393,52015,45630,41218,15562,154425
-1001394,1786,31527,14244,63736,111293
-1001395,16627,5532,22292,26496,70947
-1001396,55352,34498,78547,70492,238889
-1001397,86005,2135,86857,71066,246063
-1001398,25726,39606,75176,58278,198786
-1001399,40468,40903,64329,85522,231222
-1001400,94812,47234,89487,54973,286506
-1001401,29688,23009,35650,88800,177147
-1001402,33999,95441,2760,99689,231889
-1001403,62500,40547,854,40385,144286
-1001404,15260,8886,4672,25440,54258
-1001405,10875,98067,1888,93069,203899
-1001406,77347,32692,50782,78647,239468
-1001407,51010,16110,58890,41350,167360
-1001408,30754,39785,507,32219,103265
-1001409,30661,77280,97357,12934,218232
-1001410,41489,33261,38538,44049,157337
-1001411,70465,22353,23093,38688,154599
-1001412,54715,86292,80008,68913,289928
-1001413,52603,77320,71766,47654,249343
-1001414,28133,48260,60088,40590,177071
-1001415,91685,37810,30230,18968,178693
-1001416,11564,67067,27392,17405,123428
-1001417,73461,47188,77337,15892,213878
-1001418,16565,35239,44753,35921,132478
-1001419,8943,67517,80594,95473,252527
-1001420,88007,92756,4544,11178,196485
-1001421,6442,61345,11294,56838,135919
-1001422,12520,12486,91328,33930,150264
-1001423,17568,85024,12307,14057,128956
-1001424,87816,43181,52125,98413,281535
-1001425,797,80770,4453,40889,126909
-1001426,45331,76841,14231,88833,225236
-1001427,6546,53853,36044,20868,117311
-1001428,62042,89086,62597,51817,265542
-1001429,36503,78935,10514,55846,181798
-1001430,49472,85197,68725,77807,281201
-1001431,9978,30918,81611,69445,191952
-1001432,35981,28536,57116,64895,186528
-1001433,75023,67770,90556,17427,250776
-1001434,64876,22879,34870,70007,192632
-1001435,57510,18338,73758,44044,193650
-1001436,28781,8163,71023,48584,156551
-1001437,56429,90776,19878,42022,209105
-1001438,81668,46803,4404,39472,172347
-1001439,37129,14165,80933,14196,146423
-1001440,91489,80662,63649,74011,309811
-1001441,1083,74033,98176,52607,225899
-1001442,47927,18104,66591,2219,134841
-1001443,61014,89912,84479,81143,316548
-1001444,20135,6032,25400,8230,59797
-1001445,38747,74004,22425,7315,142491
-1001446,31256,63446,13507,17803,126012
-1001447,22306,93296,77526,7703,200831
-1001448,41428,53077,15547,1777,111829
-1001449,29771,44453,83773,3415,161412
-1001450,62565,33151,71888,57404,225008
-1001451,67567,91520,60501,72850,292438
-1001452,57147,66203,92701,63913,279964
-1001453,49801,89077,10290,99356,248524
-1001454,2551,10993,21076,9537,44157
-1001455,52460,70579,92465,8389,223893
-1001456,93264,45835,70101,9540,218740
-1001457,42393,8130,46310,83995,180828
-1001458,99098,95021,35985,67875,297979
-1001459,60581,21569,18564,26694,127408
-1001460,55252,67292,18324,30838,171706
-1001461,18229,84249,76151,73117,251746
-1001462,12211,81190,96859,84238,274498
-1001463,86299,87591,23975,14376,212241
-1001464,43099,91535,52847,37457,224938
-1001465,35693,79287,52965,70009,237954
-1001466,77525,76762,85558,25742,265587
-1001467,65131,4510,89344,71099,230084
-1001468,90651,3849,97603,92861,284964
-1001469,79593,36783,91856,78699,286931
-1001470,57614,77273,91403,50376,276666
-1001471,83405,43531,18537,48157,193630
-1001472,8255,91573,13966,58995,172789
-1001473,16746,7131,78991,3936,106804
-1001474,48317,20834,48936,86637,204724
-1001475,5817,878,92392,6894,105981
-1001476,65583,24742,56599,15560,162484
-1001477,86953,50832,17576,83587,238948
-1001478,51600,22323,81851,15853,171627
-1001479,33968,937,94155,89034,218094
-1001480,78380,9466,56771,9466,154083
-1001481,78702,64258,26888,80965,250813
-1001482,7779,55053,87396,56731,206959
-1001483,67272,97545,62129,51377,278323
-1001484,89738,76756,30125,99035,295654
-1001485,53757,7132,98465,16735,176089
-1001486,58606,15845,38074,4256,116781
-1001487,99264,94412,74619,70137,338432
-1001488,36516,27533,2575,84593,151217
-1001489,71988,45711,55515,8831,182045
-1001490,39498,64760,256,29042,133556
-1001491,2302,64275,36309,65465,168351
-1001492,57008,84330,20992,48687,211017
-1001493,76814,992,36864,56383,171053
-1001494,13796,39582,67926,5504,126808
-1001495,89903,89865,93281,66161,339210
-1001496,12105,30813,22792,37552,103262
-1001497,23958,21628,7209,77223,130018
-1001498,55254,78962,66320,88922,289458
-1001499,39986,33873,52882,78377,205118
-1001500,47416,58471,85350,34147,225384
-1001501,1417,22235,56340,89807,169799
-1001502,8980,72202,71556,26120,178858
-1001503,22616,99415,23114,79886,225031
-1001504,87601,79797,63229,27375,258002
-1001505,34443,78635,26659,97860,237597
-1001506,87079,87982,30328,911,206300
-1001507,67690,63841,81492,84883,297906
-1001508,905,79461,91612,19466,191444
-1001509,11970,29374,28299,5701,75344
-1001510,38369,66843,28907,42988,177107
-1001511,82311,69110,75718,46613,273752
-1001512,562,15404,42279,92440,150685
-1001513,36252,54397,48205,82304,221158
-1001514,70281,81171,17055,61404,229911
-1001515,50857,35759,60021,48225,194862
-1001516,9169,13313,20094,4297,46873
-1001517,2317,9458,94918,21336,128029
-1001518,65483,19489,92168,90236,267376
-1001519,4564,82706,38299,7746,133315
-1001520,88790,44016,47520,19552,199878
-1001521,88850,39507,5338,51433,185128
-1001522,10197,63129,83269,78378,234973
-1001523,49468,31304,4623,38275,123670
-1001524,85579,36542,59547,115,181783
-1001525,59905,80745,38942,42962,222554
-1001526,25788,84052,70454,44966,225260
-1001527,89334,74025,57006,59319,279684
-1001528,53365,64385,11515,95896,225161
-1001529,91370,42001,69798,23610,226779
-1001530,21187,11595,79653,94471,206906
-1001531,43297,69007,67633,68517,248454
-1001532,4200,15478,81883,49956,151517
-1001533,31360,44234,96682,75897,248173
-1001534,12709,17435,74833,48711,153688
-1001535,53074,46481,41426,39713,180694
-1001536,5725,87378,49072,37345,179520
-1001537,7730,19530,81575,45368,154203
-1001538,37691,38731,10990,25778,113190
-1001539,8295,72563,11940,25873,118671
-1001540,41089,2180,67062,57,110388
-1001541,67398,10508,72059,73337,223302
-1001542,14021,89328,72376,36938,212663
-1001543,87492,74916,66770,19805,248983
-1001544,7289,71598,76458,9593,164938
-1001545,51306,74681,28868,41970,196825
-1001546,989,14423,87407,67331,170150
-1001547,31954,7798,44613,70085,154450
-1001548,64051,12889,43353,12202,132495
-1001549,22385,42773,58295,81803,205256
-1001550,2073,63131,14975,57988,138167
-1001551,92241,63962,85942,34036,276181
-1001552,37296,6293,43472,90827,177888
-1001553,92375,92897,97985,95896,379153
-1001554,67709,37187,3224,58537,166657
-1001555,15435,66516,79641,82220,243812
-1001556,81185,50166,6823,33282,171456
-1001557,16906,48722,46835,17768,130231
-1001558,36999,31914,70557,39891,179361
-1001559,73465,55823,51493,88675,269456
-1001560,49267,17778,1348,81151,149544
-1001561,48882,81009,99904,12938,242733
-1001562,27926,71502,14167,289,113884
-1001563,60541,72267,11668,40822,185298
-1001564,51040,31672,25236,46478,154426
-1001565,51086,48440,43030,1615,144171
-1001566,15893,29815,87387,57831,190926
-1001567,93781,74089,46733,3242,217845
-1001568,19932,69046,66485,79105,234568
-1001569,14269,68550,34243,42580,159642
-1001570,47157,80986,32657,84352,245152
-1001571,41701,58840,94936,38433,233910
-1001572,92392,52399,96984,45641,287416
-1001573,78127,75150,35551,16989,205817
-1001574,14278,74186,55337,47210,191011
-1001575,76793,15595,48004,35458,175850
-1001576,67867,61535,20217,74242,223861
-1001577,60416,19472,96492,46448,222828
-1001578,16442,23760,65215,74404,179821
-1001579,14875,90033,11039,2976,118923
-1001580,12831,9287,93598,84142,199858
-1001581,35684,15771,33538,80452,165445
-1001582,77966,54844,5874,5316,144000
-1001583,79994,52507,35745,58021,226267
-1001584,53012,85726,75467,25192,239397
-1001585,77098,14329,46549,80951,218927
-1001586,59374,36246,54544,96744,246908
-1001587,40970,86828,9569,1835,139202
-1001588,8273,48219,13450,44298,114240
-1001589,87451,77856,58330,43821,267458
-1001590,59826,58230,94480,68559,281095
-1001591,36428,91043,45691,97276,270438
-1001592,54802,99255,14283,40767,209107
-1001593,97923,54780,75145,34275,262123
-1001594,53557,76430,35757,53641,219385
-1001595,66875,80964,39327,39936,227102
-1001596,34624,35708,86010,44191,200533
-1001597,63216,7738,7257,96029,174240
-1001598,84961,15750,71213,54283,226207
-1001599,74172,87698,2138,32426,196434
-1001600,30303,84531,85057,65646,265537
-1001601,13274,84739,82603,89237,269853
-1001602,25168,16737,89273,15100,146278
-1001603,45397,35700,96086,35061,212244
-1001604,9389,72580,17203,83311,182483
-1001605,79738,40194,19294,71250,210476
-1001606,22377,41857,38363,88450,191047
-1001607,68312,68598,35691,51010,223611
-1001608,26722,91556,37177,61385,216840
-1001609,50152,26520,74196,23888,174756
-1001610,46741,96677,31538,3090,178046
-1001611,90742,88142,40983,6753,226620
-1001612,39978,39262,72797,20819,172856
-1001613,32018,38649,75634,70292,216593
-1001614,9254,4888,53383,97532,165057
-1001615,13451,71603,33346,21073,139473
-1001616,43916,97252,4950,6101,152219
-1001617,40402,33085,54125,40117,167729
-1001618,80003,18520,11654,60885,171062
-1001619,25612,36758,26161,75316,163847
-1001620,58767,85306,96258,95680,336011
-1001621,59706,29184,35608,41915,166413
-1001622,52922,92866,66934,83887,296609
-1001623,692,58067,38528,29307,126594
-1001624,50387,10458,56070,59682,176597
-1001625,59376,49783,27194,95160,231513
-1001626,92576,78664,20010,5859,197109
-1001627,76444,88912,2292,19308,186956
-1001628,19010,47498,33809,19417,119734
-1001629,31252,38848,48075,26894,145069
-1001630,92195,14782,83189,60250,250416
-1001631,57300,13913,26649,17157,115019
-1001632,7439,87779,29189,2248,126655
-1001633,4251,4502,17668,76927,103348
-1001634,31764,10074,41173,64998,148009
-1001635,8626,94404,6589,81011,190630
-1001636,46893,81170,33244,80891,242198
-1001637,67364,21316,9697,73742,172119
-1001638,76955,83493,67324,24945,252717
-1001639,44011,81977,59417,25035,210440
-1001640,19491,36259,69993,41255,166998
-1001641,5759,69775,24012,93113,192659
-1001642,57057,80588,91077,62963,291685
-1001643,85026,64144,86937,79648,315755
-1001644,8311,87269,126,56028,151734
-1001645,37727,86430,14320,79772,218249
-1001646,24284,99947,34350,28865,187446
-1001647,95899,57430,80525,72060,305914
-1001648,69610,64895,91453,32869,258827
-1001649,76748,43091,89681,71000,280520
-1001650,35092,59534,50555,50627,195808
-1001651,44424,10046,70126,80261,204857
-1001652,99357,73770,49143,23928,246198
-1001653,36764,36576,57697,10648,141685
-1001654,84351,33161,33561,90600,241673
-1001655,71713,4169,52738,91640,220260
-1001656,32963,89993,56393,55054,234403
-1001657,91727,85070,95579,49358,321734
-1001658,34106,67478,97921,54247,253752
-1001659,79483,19562,60930,70110,230085
-1001660,39845,32508,56536,27380,156269
-1001661,89314,38218,24631,26578,178741
-1001662,86504,81001,69488,16943,253936
-1001663,24674,86181,49081,40152,200088
-1001664,55659,51643,39649,61944,208895
-1001665,57079,89995,9012,65084,221170
-1001666,41348,32140,92088,33664,199240
-1001667,11451,46361,72513,81091,211416
-1001668,19924,5892,45689,4751,76256
-1001669,9487,85625,82025,5733,182870
-1001670,51056,90183,78861,84146,304246
-1001671,2725,57262,69620,70301,199908
-1001672,14560,30398,56956,97886,199800
-1001673,6899,67962,65881,15970,156712
-1001674,87115,43610,71631,90038,292394
-1001675,26529,5568,14764,86624,133485
-1001676,1564,33559,57498,92230,184851
-1001677,95473,77540,88527,25593,287133
-1001678,70103,21546,39761,21555,152965
-1001679,59897,7531,41622,15329,124379
-1001680,95473,27248,68491,48872,240084
-1001681,38419,55304,15465,69165,178353
-1001682,17201,71006,58378,82755,229340
-1001683,37714,72240,45977,10618,166549
-1001684,77949,29994,5597,48886,162426
-1001685,53906,56868,13023,64546,188343
-1001686,77721,37720,18120,35721,169282
-1001687,51620,45495,36007,87999,221121
-1001688,90457,98732,62251,48817,300257
-1001689,41596,66037,56227,48434,212294
-1001690,28628,11553,63292,17728,121201
-1001691,31759,41301,20991,19536,113587
-1001692,11169,84277,87387,9506,192339
-1001693,53654,93625,77211,91196,315686
-1001694,54201,56098,48593,93930,252822
-1001695,60266,95600,27683,26154,209703
-1001696,7575,58915,42647,91957,201094
-1001697,19293,53767,66920,36340,176320
-1001698,16754,80323,10226,97540,204843
-1001699,11253,88912,29624,9685,139474
-1001700,23083,14717,25227,37469,100496
-1001701,41775,63144,84637,16589,206145
-1001702,41210,46889,75555,75838,239492
-1001703,35070,81659,32432,14934,164095
-1001704,96654,60439,27554,61111,245758
-1001705,51133,96251,10467,79820,237671
-1001706,42615,73105,27183,44846,187749
-1001707,13896,483,2673,65382,82434
-1001708,38430,30895,59922,93363,222610
-1001709,86387,15406,18490,91650,211933
-1001710,75185,75021,59996,442,210644
-1001711,90843,2484,18404,11641,123372
-1001712,48900,21728,58766,11658,141052
-1001713,51627,47645,53115,68968,221355
-1001714,74467,20495,30870,85330,211162
-1001715,3205,31004,37025,23197,94431
-1001716,93607,23494,1643,2088,120832
-1001717,49208,68780,92679,59480,270147
-1001718,54002,6737,69180,68946,198865
-1001719,68761,5041,6779,43710,124291
-1001720,79541,91727,39997,22029,233294
-1001721,36678,28407,59041,70229,194355
-1001722,11793,24518,16103,22619,75033
-1001723,91603,78328,32432,42087,244450
-1001724,89681,69706,80467,94315,334169
-1001725,69362,23405,42751,68889,204407
-1001726,16,21294,98248,34600,154158
-1001727,42011,10869,2045,59069,113994
-1001728,26086,48156,85515,94832,254589
-1001729,78515,38547,68456,47542,233060
-1001730,62827,73066,14117,21023,171033
-1001731,92020,92035,80130,64231,328416
-1001732,96292,18433,75805,46543,237073
-1001733,55932,95870,57715,88132,297649
-1001734,88070,65613,50663,42515,246861
-1001735,41875,42144,9177,22262,115458
-1001736,10414,89096,70463,95340,265313
-1001737,2652,57754,71850,86877,219133
-1001738,79929,64318,81599,24405,250251
-1001739,88770,94347,32800,3918,219835
-1001740,91438,76908,31328,77760,277434
-1001741,40853,15542,46759,20952,124106
-1001742,9711,59701,87127,81100,237639
-1001743,82106,44701,99303,53263,279373
-1001744,56369,8844,27664,69635,162512
-1001745,82211,99360,27940,76577,286088
-1001746,5975,55798,60157,50811,172741
-1001747,582,2533,17903,81437,102455
-1001748,97794,34793,86167,39249,258003
-1001749,8216,39062,78562,87882,213722
-1001750,42670,45924,58167,92250,239011
-1001751,90980,89090,76124,86530,342724
-1001752,73520,64001,11943,171,149635
-1001753,27638,90891,80436,82202,281167
-1001754,53431,54950,83131,17557,209069
-1001755,24279,20652,61022,42200,148153
-1001756,96144,19628,92183,32883,240838
-1001757,95889,65735,34953,3003,199580
-1001758,87975,86471,96043,83702,354191
-1001759,11043,40559,20513,65861,137976
-1001760,9306,35849,89643,7617,142415
-1001761,8469,91265,36874,38361,174969
-1001762,65653,44260,36824,15977,162714
-1001763,22016,35642,62668,47711,168037
-1001764,35845,21434,88665,79862,225806
-1001765,97528,69330,56825,23366,247049
-1001766,17828,46571,28473,31716,124588
-1001767,87188,80672,61579,78433,307872
-1001768,68928,78226,60815,78778,286747
-1001769,86094,83913,30641,86017,286665
-1001770,4062,61948,69585,48957,184552
-1001771,43821,30734,95842,86377,256774
-1001772,30243,25858,23098,56517,135716
-1001773,98591,42106,91218,69345,301260
-1001774,19703,39510,84908,72291,216412
-1001775,92588,5133,93274,70416,261411
-1001776,1385,54556,42033,61498,159472
-1001777,15357,47771,74505,75945,213578
-1001778,35593,22544,62279,36125,156541
-1001779,95298,24221,95262,92079,306860
-1001780,99105,69604,35919,36179,240807
-1001781,20391,27551,22336,87107,157385
-1001782,38490,19136,45111,50091,152828
-1001783,3130,76809,11838,15551,107328
-1001784,16112,54307,85736,7734,163889
-1001785,17233,43787,87278,12143,160441
-1001786,84461,94184,63384,90315,332344
-1001787,70033,1008,77326,64872,213239
-1001788,25073,61622,95925,50646,233266
-1001789,27472,52869,18959,64363,163663
-1001790,13438,49237,79729,28391,170795
-1001791,15882,82718,96888,64340,259828
-1001792,58164,76995,63309,25387,223855
-1001793,24398,14533,75201,29803,143935
-1001794,17230,12022,83545,90342,203139
-1001795,2833,99714,40731,86083,229361
-1001796,59863,34744,49130,20603,164340
-1001797,783,63204,965,37605,102557
-1001798,84079,78758,61245,58738,282820
-1001799,34911,39946,91286,35745,201888
-1001800,44313,65032,41593,30705,181643
-1001801,80014,78854,88316,92964,340148
-1001802,75237,7136,83660,63000,229033
-1001803,45820,68725,22921,86111,223577
-1001804,96874,87023,42002,66055,291954
-1001805,73099,47045,74905,11816,206865
-1001806,14789,11263,79736,72744,178532
-1001807,50075,46799,43829,82773,223476
-1001808,26249,1218,75214,31720,134401
-1001809,95167,54875,58405,30949,239396
-1001810,26862,34203,44933,41922,147920
-1001811,8068,42286,36172,32929,119455
-1001812,39247,18983,71664,63876,193770
-1001813,60023,69408,40042,78995,248468
-1001814,48275,52215,56523,24348,181361
-1001815,91180,39300,36650,982,168112
-1001816,55078,61890,42270,42278,201516
-1001817,96317,87019,90391,25845,299572
-1001818,1566,57203,78933,39171,176873
-1001819,47315,16868,30684,26587,121454
-1001820,77890,56983,81523,47957,264353
-1001821,240,26908,94187,1192,122527
-1001822,43430,66002,61639,21573,192644
-1001823,68007,29985,88369,29237,215598
-1001824,84339,38745,97386,55572,276042
-1001825,31967,94992,23817,17249,168025
-1001826,77756,49369,435,56432,183992
-1001827,79818,4768,22489,41999,149074
-1001828,6069,4640,92096,45434,148239
-1001829,59346,29390,12719,84158,185613
-1001830,11202,8416,9904,15903,45425
-1001831,29917,20502,10980,88924,150323
-1001832,39779,6635,49972,2811,99197
-1001833,71473,1021,82193,24093,178780
-1001834,29476,34628,12696,84590,161390
-1001835,31404,49281,34648,23108,138441
-1001836,99603,66076,72424,23312,261415
-1001837,65244,8507,31211,54594,159556
-1001838,67828,24990,5324,53110,151252
-1001839,87951,10932,95110,3565,197558
-1001840,18662,11978,31659,4552,66851
-1001841,67779,86862,17011,90432,262084
-1001842,74038,21136,38799,77711,211684
-1001843,82447,43198,83872,12280,221797
-1001844,77389,61686,78799,58849,276723
-1001845,34993,64177,34747,64133,198050
-1001846,42022,11417,12779,9236,75454
-1001847,28484,98544,18912,95363,241303
-1001848,49343,87071,36257,1938,174609
-1001849,20195,88207,84153,42183,234738
-1001850,20927,86656,65847,89561,262991
-1001851,45725,8431,53188,95412,202756
-1001852,70539,96462,96157,69877,333035
-1001853,32196,94090,92199,3627,222112
-1001854,45451,4572,97074,44364,191461
-1001855,68213,97451,6902,3134,175700
-1001856,70914,46594,73173,79054,269735
-1001857,61861,37216,87257,62175,248509
-1001858,78045,27041,77434,6538,189058
-1001859,28233,21445,73141,73830,196649
-1001860,42135,18156,43047,20932,124270
-1001861,99090,78279,36156,65456,278981
-1001862,64926,27192,87381,7372,186871
-1001863,7691,28291,74246,64568,174796
-1001864,10027,97348,7304,84883,199562
-1001865,23337,81466,70033,31054,205890
-1001866,88784,63481,87567,39556,279388
-1001867,18767,70049,32028,23873,144717
-1001868,51223,58210,68512,93,178038
-1001869,56041,90216,7201,41974,195432
-1001870,79190,74472,61892,74881,290435
-1001871,94902,86997,47436,88789,318124
-1001872,7603,62551,27540,5990,103684
-1001873,96907,70904,83075,31229,282115
-1001874,77220,12267,43770,65159,198416
-1001875,37234,61406,81924,50926,231490
-1001876,10458,39857,74964,1569,126848
-1001877,45037,1293,24674,70429,141433
-1001878,72690,82271,10240,18980,184181
-1001879,54951,4090,84035,55831,198907
-1001880,11677,29723,38813,56736,136949
-1001881,45490,56445,58765,52914,213614
-1001882,54637,20702,12610,62297,150246
-1001883,18215,35326,80126,39955,173622
-1001884,92160,27766,43714,54443,218083
-1001885,44522,82227,76567,68707,272023
-1001886,96330,66958,23400,98958,285646
-1001887,47198,16924,37448,70094,171664
-1001888,10916,9957,69763,83370,174006
-1001889,23982,81016,36121,4882,146001
-1001890,83366,5155,98778,15600,202899
-1001891,66736,98091,91893,85558,342278
-1001892,68866,13587,34952,24490,141895
-1001893,2127,21041,92425,30524,146117
-1001894,82218,16237,1191,95387,195033
-1001895,87041,96729,21872,78510,284152
-1001896,56434,8885,67774,68413,201506
-1001897,54014,7324,87611,41600,190549
-1001898,79459,96365,69891,42177,287892
-1001899,22204,35836,97769,67185,222994
-1001900,88734,63426,22413,20444,195017
-1001901,55664,19449,23345,94717,193175
-1001902,7914,49201,4272,79404,140791
-1001903,46682,9566,43782,97228,197258
-1001904,44525,1615,41003,79815,166958
-1001905,76196,69576,18859,59087,223718
-1001906,81344,36170,33026,75147,225687
-1001907,18688,9832,91844,52952,173316
-1001908,16012,66512,28543,95299,206366
-1001909,4498,98444,71639,98252,272833
-1001910,90498,88955,21317,73538,274308
-1001911,73135,80390,57695,75229,286449
-1001912,66768,17722,16694,56961,158145
-1001913,6791,96498,70560,94227,268076
-1001914,3752,50390,30246,80625,165013
-1001915,37422,21831,92753,38551,190557
-1001916,22052,74696,57653,12423,166824
-1001917,60378,11051,81627,9690,162746
-1001918,41588,18342,91856,43310,195096
-1001919,2952,63859,62220,8208,137239
-1001920,99129,97276,9778,18916,225099
-1001921,35550,96729,79176,31947,243402
-1001922,24540,30406,26182,44233,125361
-1001923,99385,51687,63930,91243,306245
-1001924,93930,4342,52557,97889,248718
-1001925,86283,72806,31246,73679,264014
-1001926,61174,44117,19957,36897,162145
-1001927,39443,32917,99270,25694,197324
-1001928,18997,23973,53402,83554,179926
-1001929,76363,39405,95746,26486,238000
-1001930,91675,66578,86187,36063,280503
-1001931,60688,17122,41816,67548,187174
-1001932,26950,81845,12415,16097,137307
-1001933,22583,4747,92648,8481,128459
-1001934,2591,9916,77750,48703,138960
-1001935,70830,86675,52464,4342,214311
-1001936,74936,53570,33010,27873,189389
-1001937,69733,78244,97129,22973,268079
-1001938,73087,82013,452,20496,176048
-1001939,45396,808,78533,92364,217101
-1001940,37148,75237,53357,16909,182651
-1001941,74807,61317,1098,8442,145664
-1001942,64975,48825,93453,25140,232393
-1001943,76902,97902,534,29445,204783
-1001944,44624,82817,6192,33257,166890
-1001945,51884,68209,43765,98146,262004
-1001946,7742,32254,98181,32779,170956
-1001947,91198,37297,40460,41652,210607
-1001948,6717,33971,27110,83265,151063
-1001949,72618,3718,97678,24165,198179
-1001950,32803,27609,32305,77048,169765
-1001951,63367,76891,95514,19422,255194
-1001952,4262,90145,80386,94952,269745
-1001953,66291,90373,63692,75459,295815
-1001954,44263,70890,56802,84045,256000
-1001955,94044,64588,12767,21854,193253
-1001956,54284,29240,53633,2263,139420
-1001957,23519,18273,5118,53330,100240
-1001958,25956,72089,6596,24571,129212
-1001959,27922,88272,48822,44759,209775
-1001960,60165,65070,32629,93395,251259
-1001961,38179,27600,56411,95069,217259
-1001962,49338,81117,58020,2182,190657
-1001963,25774,57261,616,22239,105890
-1001964,74690,42588,33578,66227,217083
-1001965,29926,19261,78484,68842,196513
-1001966,32217,60516,25102,50440,168275
-1001967,5159,88516,8667,19169,121511
-1001968,76910,34059,65616,53195,229780
-1001969,75848,34506,67076,55869,233299
-1001970,25235,78620,53699,32321,189875
-1001971,9137,66571,72840,16067,164615
-1001972,93379,68440,45786,4316,211921
-1001973,95521,83642,8607,9917,197687
-1001974,7732,16725,5155,13734,43346
-1001975,4676,77080,60820,54495,197071
-1001976,10884,55906,51175,33421,151386
-1001977,72815,46992,26767,4469,151043
-1001978,76812,66945,78857,14905,237519
-1001979,32298,56205,11279,70084,169866
-1001980,32970,94096,59784,88439,275289
-1001981,12446,42934,20325,28725,104430
-1001982,17741,73424,82111,24076,197352
-1001983,73686,45375,27113,22759,168933
-1001984,89331,77911,6843,61994,236079
-1001985,37184,39,74926,67856,180005
-1001986,67861,39818,579,77951,186209
-1001987,40853,52032,63241,18257,174383
-1001988,8417,75792,6149,9315,99673
-1001989,90010,62769,15787,6266,174832
-1001990,90039,62295,97991,48037,298362
-1001991,15946,98267,87467,80548,282228
-1001992,30302,97247,10785,34589,172923
-1001993,25682,31886,86722,36228,180518
-1001994,5458,1611,83629,93944,184642
-1001995,41056,82312,90546,27154,241068
-1001996,47530,50013,82958,23046,203547
-1001997,90271,17143,98583,49185,255182
-1001998,77446,59491,9331,30840,177108
-1001999,29328,22024,29702,90666,171720
-1002000,92971,44734,57846,27079,222630
-1002001,66349,38409,43569,29495,177822
-1002002,37673,52178,94309,45946,230106
-1002003,21763,32711,95031,87621,237126
-1002004,7921,79804,68147,27172,183044
-1002005,14333,61152,94754,94342,264581
-1002006,39832,95193,68856,25718,229599
-1002007,63163,92045,88856,95334,339398
-1002008,6317,68957,60652,28299,164225
-1002009,12180,6115,40067,34848,93210
-1002010,72000,97296,30868,52356,252520
-1002011,2657,7373,60907,95044,165981
-1002012,39073,54020,84022,35962,213077
-1002013,5804,94205,33865,47477,181351
-1002014,41183,27458,5679,95468,169788
-1002015,5031,84202,14509,78214,181956
-1002016,82944,47934,89424,5702,226004
-1002017,8596,79606,73512,63445,225159
-1002018,82283,79962,15460,2630,180335
-1002019,67106,55466,42187,28464,193223
-1002020,85550,10122,83465,36278,215415
-1002021,49293,41675,51559,50242,192769
-1002022,82279,19789,22069,31092,155229
-1002023,698,16526,31413,33661,82298
-1002024,31444,9827,67217,87215,195703
-1002025,99823,69150,36731,74864,280568
-1002026,37899,57057,94623,30348,219927
-1002027,25303,74865,90841,6485,197494
-1002028,1072,78007,38756,49198,167033
-1002029,87208,93640,86109,60989,327946
-1002030,53427,8349,36488,7180,105444
-1002031,3801,96032,86735,37278,223846
-1002032,31372,75249,78853,58884,244358
-1002033,56040,99509,46468,8784,210801
-1002034,37673,55591,603,19557,113424
-1002035,45295,72915,86611,12759,217580
-1002036,74101,5832,38294,20512,138739
-1002037,98435,33567,50237,7126,189365
-1002038,62282,96914,93073,42995,295264
-1002039,38098,35691,23259,91121,188169
-1002040,21233,20567,72402,9013,123215
-1002041,73508,98375,86166,7602,265651
-1002042,44019,29291,14592,26635,114537
-1002043,63223,78245,74930,97665,314063
-1002044,75524,52791,75854,72019,276188
-1002045,37133,49431,46383,67406,200353
-1002046,32334,48474,77905,53641,212354
-1002047,51929,26110,16298,68379,162716
-1002048,17177,58220,82438,48635,206470
-1002049,40568,42598,75154,62596,220916
-1002050,9284,15248,9090,42980,76602
-1002051,17636,7451,26393,93139,144619
-1002052,15713,98592,74644,92220,281169
-1002053,80877,76944,45927,71966,275714
-1002054,63269,29937,94759,35964,223929
-1002055,20878,99076,29705,67778,217437
-1002056,12768,29426,9172,41946,93312
-1002057,31756,19166,92137,58517,201576
-1002058,93566,33908,83557,49327,260358
-1002059,88177,44478,17950,59853,210458
-1002060,81583,37347,58813,28684,206427
-1002061,41817,95630,92844,11576,241867
-1002062,73185,14678,70277,43852,201992
-1002063,48997,79184,4890,77455,210526
-1002064,33407,83946,14860,17716,149929
-1002065,65238,16441,89899,90426,262004
-1002066,72384,82347,12183,39923,206837
-1002067,83903,11438,21946,23676,140963
-1002068,55368,87434,80617,81838,305257
-1002069,70859,3128,38314,53561,165862
-1002070,15650,7192,79543,90378,192763
-1002071,12511,64611,47540,88785,213447
-1002072,32858,33511,69957,73506,209832
-1002073,55230,68582,51044,94795,269651
-1002074,25130,17373,69083,19875,131461
-1002075,60176,34038,66503,28208,188925
-1002076,73540,6931,38591,12836,131898
-1002077,78861,92330,29698,76084,276973
-1002078,93711,77897,85555,34162,291325
-1002079,38682,69551,95101,45350,248684
-1002080,21643,3818,91241,2431,119133
-1002081,18623,69064,63222,45635,196544
-1002082,81291,88932,8491,18931,197645
-1002083,92407,98824,75612,3083,269926
-1002084,88544,54224,6943,83606,233317
-1002085,2941,24615,19994,44252,91802
-1002086,23837,83804,39264,7968,154873
-1002087,67290,93144,33655,64715,258804
-1002088,76425,49601,93684,72592,292302
-1002089,44698,37093,43446,80264,205501
-1002090,63259,34387,13906,9565,121117
-1002091,89127,58837,66232,54852,269048
-1002092,84492,24334,1862,46824,157512
-1002093,72799,80249,47639,10037,210724
-1002094,90209,33603,65351,16956,206119
-1002095,56668,39969,7965,83580,188182
-1002096,62537,76137,65177,56145,259996
-1002097,80675,53063,19131,32846,185715
-1002098,77378,77375,16059,23149,193961
-1002099,46294,43564,34544,33336,157738
-1002100,13739,67544,71993,97820,251096
-1002101,91665,28332,79069,34825,233891
-1002102,94304,97290,54066,44846,290506
-1002103,61900,27849,23754,69336,182839
-1002104,38104,92122,11811,17507,159544
-1002105,8304,44044,40728,83454,176530
-1002106,4784,13430,5686,27585,51485
-1002107,34915,48111,23746,7334,114106
-1002108,9688,96558,42118,91108,239472
-1002109,52062,34644,46614,75053,208373
-1002110,48650,98036,77861,40011,264558
-1002111,5321,37555,62748,78130,183754
-1002112,81665,17473,32755,36124,168017
-1002113,79410,34464,84947,43180,242001
-1002114,34049,96237,87326,76347,293959
-1002115,2113,80428,71433,23029,177003
-1002116,13245,1888,11462,73325,99920
-1002117,92913,40091,16854,30109,179967
-1002118,13254,51460,67036,84925,216675
-1002119,9964,74739,84703,58459,227865
-1002120,41141,46623,13479,16094,117337
-1002121,66937,13269,15029,46156,141391
-1002122,13724,27679,83819,91466,216688
-1002123,13129,93418,7590,34695,148832
-1002124,59642,46156,1589,66795,174182
-1002125,36413,20599,91720,6935,155667
-1002126,57289,14071,55142,31077,157579
-1002127,21151,79369,57277,85561,243358
-1002128,44793,88297,62745,18856,214691
-1002129,98356,22285,71117,17666,209424
-1002130,53323,57950,78450,22575,212298
-1002131,63754,1531,45217,58920,169422
-1002132,65474,43890,10537,98355,218256
-1002133,62415,98403,42144,91355,294317
-1002134,52158,23712,56794,64875,197539
-1002135,63318,39007,4277,37052,143654
-1002136,23065,61424,81116,79664,245269
-1002137,59885,33477,48900,83123,225385
-1002138,18456,62323,97623,31787,210189
-1002139,84280,2454,85961,53039,225734
-1002140,99094,7404,94853,25052,226403
-1002141,98651,57762,3482,91843,251738
-1002142,94522,8033,2223,71127,175905
-1002143,64731,29354,63232,48809,206126
-1002144,18260,23995,24169,17591,84015
-1002145,83653,98060,37102,88312,307127
-1002146,30975,90217,55412,73091,249695
-1002147,18617,9291,79737,42352,149997
-1002148,32956,35253,31438,10787,110434
-1002149,33041,15257,89967,78862,217127
-1002150,52398,70209,45311,23476,191394
-1002151,14764,11234,3314,92127,121439
-1002152,59431,45812,94970,2445,202658
-1002153,36696,22953,1412,66610,127671
-1002154,452,31062,68611,25282,125407
-1002155,80458,53247,49633,89600,272938
-1002156,31493,55880,15778,76632,179783
-1002157,10215,49959,32101,72849,165124
-1002158,92163,33717,28445,16084,170409
-1002159,38794,30384,55384,28647,153209
-1002160,11483,12041,25453,36325,85302
-1002161,62435,51670,54382,28568,197055
-1002162,28317,31533,1348,50650,111848
-1002163,10705,7495,98560,5876,122636
-1002164,43018,23709,21330,70403,158460
-1002165,42791,97749,68045,21037,229622
-1002166,61589,33782,70301,11706,177378
-1002167,93757,86887,75469,70403,326516
-1002168,10636,91732,52415,24474,179257
-1002169,90736,30888,86533,45806,253963
-1002170,53036,18049,52060,90992,214137
-1002171,42469,25028,3136,70785,141418
-1002172,1975,57282,77129,13201,149587
-1002173,26594,50175,65518,54733,197020
-1002174,9932,26126,79070,38328,153456
-1002175,19630,79050,87290,89516,275486
-1002176,94382,86054,81445,61626,323507
-1002177,68753,84771,61164,62062,276750
-1002178,79787,52446,58684,80468,271385
-1002179,15319,46167,59021,18796,139303
-1002180,33217,3968,71063,3670,111918
-1002181,2552,94676,78332,56903,232463
-1002182,67945,59806,5546,19784,153081
-1002183,89849,44824,27644,15234,177551
-1002184,9774,22345,16223,725,49067
-1002185,34211,24945,98981,71936,230073
-1002186,27583,70967,34154,27930,160634
-1002187,38988,97755,95254,83015,315012
-1002188,7456,78024,6174,81819,173473
-1002189,33268,87425,21683,56124,198500
-1002190,85174,38479,89372,87924,300949
-1002191,82107,63367,42021,50366,237861
-1002192,54407,88882,80543,73928,297760
-1002193,56790,57885,11151,48925,174751
-1002194,33222,68109,4626,30594,136551
-1002195,48983,28207,58583,81430,217203
-1002196,15435,13551,61323,56474,146783
-1002197,80225,439,2063,51019,133746
-1002198,97019,89563,34345,55416,276343
-1002199,28710,88800,81303,58394,257207
-1002200,56822,84530,41267,5763,188382
-1002201,24553,1812,29204,35829,91398
-1002202,53541,39013,35057,12316,139927
-1002203,483,40409,38218,36999,116109
-1002204,67592,15843,32993,63678,180106
-1002205,6590,5287,20942,19721,52540
-1002206,17863,50320,6604,87502,162289
-1002207,43846,3942,99216,70874,217878
-1002208,13113,5502,18300,22928,59843
-1002209,84212,64009,24991,71953,245165
-1002210,4280,24092,32257,82065,142694
-1002211,80320,41834,73846,12055,208055
-1002212,28510,17164,79634,62820,188128
-1002213,54314,72959,98614,77382,303269
-1002214,52659,91051,48408,83392,275510
-1002215,13868,692,44812,1689,61061
-1002216,71912,69110,39236,83123,263381
-1002217,38571,52661,21278,5881,118391
-1002218,9539,94975,23569,49165,177248
-1002219,28302,60461,64032,94211,247006
-1002220,49787,74428,28911,29984,183110
-1002221,89868,83744,72645,92697,338954
-1002222,14151,88724,35076,81796,219747
-1002223,64632,81933,7616,77331,231512
-1002224,48170,36125,7305,52425,144025
-1002225,38262,32566,87911,73718,232457
-1002226,66605,90733,4732,98798,260868
-1002227,29301,15198,82956,30045,157500
-1002228,42361,11676,67335,80142,201514
-1002229,84204,6557,37974,11407,140142
-1002230,86180,62951,62588,35321,247040
-1002231,48145,97154,83376,59320,287995
-1002232,64049,12026,80345,36254,192674
-1002233,45663,29032,94959,25571,195225
-1002234,34369,52812,19094,64472,170747
-1002235,68009,13572,37461,59202,178244
-1002236,64345,77689,16564,69041,227639
-1002237,91114,31336,65397,93796,281643
-1002238,67307,95574,33513,49304,245698
-1002239,16479,47336,9180,35886,108881
-1002240,22194,79295,46689,56505,204683
-1002241,75434,39346,912,25277,140969
-1002242,57862,14354,35127,59323,166666
-1002243,73724,80697,58943,63367,276731
-1002244,54329,19504,36653,7114,117600
-1002245,13897,12150,66944,75680,168671
-1002246,10826,28522,80774,69390,189512
-1002247,15142,74302,87340,65689,242473
-1002248,30920,39988,99609,65713,236230
-1002249,64530,64387,44126,20811,193854
-1002250,1363,86433,3406,8390,99592
-1002251,86347,30792,75269,40801,233209
-1002252,67328,69760,48681,83381,269150
-1002253,89528,6631,47393,85023,228575
-1002254,56888,52531,47382,33537,190338
-1002255,48095,32374,82103,45876,208448
-1002256,57964,12400,488,98696,169548
-1002257,5096,96619,84223,94681,280619
-1002258,83532,17383,2491,76731,180137
-1002259,14963,87712,86489,41336,230500
-1002260,18330,43008,41098,74970,177406
-1002261,2886,66859,31195,20131,121071
-1002262,63415,39241,40303,40825,183784
-1002263,35906,4414,44704,50062,135086
-1002264,34074,65673,17294,26676,143717
-1002265,5041,60141,61264,9269,135715
-1002266,86212,62101,2531,91386,242230
-1002267,4154,53394,84362,26247,168157
-1002268,56645,61581,32865,14707,165798
-1002269,58905,52101,40738,26253,177997
-1002270,24133,80872,1800,30820,137625
-1002271,55310,79043,90151,28186,252690
-1002272,77768,12902,22903,60676,174249
-1002273,27096,12650,8034,96490,144270
-1002274,67177,2878,74322,9272,153649
-1002275,63901,42790,44080,11084,161855
-1002276,59148,47694,58245,50452,215539
-1002277,38009,97546,57289,92607,285451
-1002278,15803,32653,7514,39352,95322
-1002279,81035,10318,82105,85209,258667
-1002280,64334,21104,67954,77463,230855
-1002281,51144,88360,74951,45474,259929
-1002282,50213,66486,2564,31368,150631
-1002283,81799,35623,4839,20331,142592
-1002284,49857,39688,97519,54868,241932
-1002285,28133,6528,83090,19325,137076
-1002286,7538,21529,23884,849,53800
-1002287,54147,35662,79078,43976,212863
-1002288,25553,74040,26242,50663,176498
-1002289,53983,16607,57941,22572,151103
-1002290,23120,50898,70563,61764,206345
-1002291,37297,4763,60423,88896,191379
-1002292,8548,76755,73463,75206,233972
-1002293,55896,4434,82254,63123,205707
-1002294,5253,95582,51724,20848,173407
-1002295,10125,25892,83761,6209,125987
-1002296,73801,12429,52289,69711,208230
-1002297,64371,91721,57094,98888,312074
-1002298,44866,31406,84264,31025,191561
-1002299,83739,72333,97842,62152,316066
-1002300,52701,53197,7868,82573,196339
-1002301,24630,79630,58058,65187,227505
-1002302,43646,83967,42848,34899,205360
-1002303,86490,78486,75077,43047,283100
-1002304,1781,31518,32999,32088,98386
-1002305,72065,99266,51215,12141,234687
-1002306,84377,92556,51579,2110,230622
-1002307,19429,41941,39759,23438,124567
-1002308,38546,7478,53689,27778,127491
-1002309,60093,47844,73102,39955,220994
-1002310,79728,64646,21688,75221,241283
-1002311,61266,61861,57487,36991,217605
-1002312,38322,5365,39237,34159,117083
-1002313,91734,94589,30121,96178,312622
-1002314,49470,48650,14102,95044,207266
-1002315,81549,17754,54648,38394,192345
-1002316,27970,51304,40031,37606,156911
-1002317,14281,2525,82602,18384,117792
-1002318,50978,59135,48415,13004,171532
-1002319,95110,82689,49265,7249,234313
-1002320,35389,65434,47301,90777,238901
-1002321,98836,51668,12408,81704,244616
-1002322,26658,7409,47946,18068,100081
-1002323,82777,97231,65187,48935,294130
-1002324,29975,47574,32053,65735,175337
-1002325,12858,66636,36597,75666,191757
-1002326,36791,30971,35078,18239,121079
-1002327,92172,32869,96766,20462,242269
-1002328,64334,79760,16646,80480,241220
-1002329,66405,63539,40326,74708,244978
-1002330,45645,83922,52858,37131,219556
-1002331,56054,51647,30157,86558,224416
-1002332,77994,16216,77288,38555,210053
-1002333,28376,82710,59295,22903,193284
-1002334,88129,33902,91249,77556,290836
-1002335,70337,45018,92631,51671,259657
-1002336,83672,11710,70596,66005,231983
-1002337,23122,70356,45814,4867,144159
-1002338,68849,5518,44636,81581,200584
-1002339,80690,36134,36279,37188,190291
-1002340,32091,55815,37670,5979,131555
-1002341,38185,88496,39339,63478,229498
-1002342,89555,947,85043,78,175623
-1002343,76480,51925,66727,57834,252966
-1002344,63232,12389,26913,1130,103664
-1002345,72341,22566,66321,8810,170038
-1002346,99247,58084,51742,87258,296331
-1002347,8918,97128,45445,81303,232794
-1002348,59398,21615,42596,71642,195251
-1002349,20105,43681,50485,11829,126100
-1002350,81997,79658,88410,95576,345641
-1002351,62246,84536,26593,61519,234894
-1002352,7353,69089,58690,85680,220812
-1002353,54857,73742,83291,81184,293074
-1002354,64925,766,68728,82896,217315
-1002355,47860,41638,74437,43865,207800
-1002356,19928,45811,41189,85317,192245
-1002357,29359,58469,9592,48438,145858
-1002358,82632,51367,49080,75249,258328
-1002359,32441,48948,5101,82989,169479
-1002360,48835,27436,66430,10731,153432
-1002361,23719,45616,53354,81057,203746
-1002362,93714,56599,87051,95160,332524
-1002363,59862,34919,70867,55431,221079
-1002364,44200,72545,83125,76830,276700
-1002365,43993,30374,64539,9501,148407
-1002366,78017,27878,29135,60013,195043
-1002367,99887,63559,43551,1466,208463
-1002368,68751,94935,72203,73951,309840
-1002369,43693,90054,1968,94638,230353
-1002370,88567,48093,13871,82597,233128
-1002371,64710,4873,88293,67263,225139
-1002372,4508,21474,8153,96486,130621
-1002373,37285,38921,28151,58800,163157
-1002374,76407,75414,95149,89376,336346
-1002375,46847,94280,34227,68918,244272
-1002376,21260,68612,64357,56006,210235
-1002377,78789,83496,72871,87551,322707
-1002378,88505,25862,6945,40984,162296
-1002379,92660,96209,40909,42660,272438
-1002380,57373,59571,86018,63577,266539
-1002381,36299,70047,87060,56579,249985
-1002382,23045,98268,4956,69847,196116
-1002383,17446,98908,21009,68094,205457
-1002384,52313,84609,4641,28527,170090
-1002385,16151,11001,69188,37265,133605
-1002386,77427,79508,15941,45020,217896
-1002387,40376,25702,98148,9759,173985
-1002388,12446,62062,69110,80602,224220
-1002389,83416,19511,89471,52117,244515
-1002390,86101,49835,87475,98155,321566
-1002391,73680,60887,86644,60559,281770
-1002392,80986,38292,7585,52196,179059
-1002393,47540,39230,60965,33394,181129
-1002394,30656,3374,65910,37107,137047
-1002395,63198,30979,29967,47598,171742
-1002396,21119,12911,70554,78474,183058
-1002397,96805,46703,50199,50721,244428
-1002398,74901,94449,35404,43524,248278
-1002399,54475,11062,38987,33052,137576
-1002400,4134,17906,31228,69808,123076
-1002401,95301,29984,96747,87148,309180
-1002402,77998,87009,93414,40927,299348
-1002403,71121,84006,85468,84892,325487
-1002404,19384,24620,95127,15600,154731
-1002405,44480,53358,2561,36714,137113
-1002406,46880,40605,15728,12269,115482
-1002407,90998,14629,24848,33555,164030
-1002408,2305,27857,6797,68518,105477
-1002409,19616,90894,17752,95746,224008
-1002410,22932,49787,90742,79116,242577
-1002411,72096,82588,31289,90865,276838
-1002412,58214,33920,92155,54020,238309
-1002413,81938,45026,20282,39746,186992
-1002414,45410,98617,51639,94697,290363
-1002415,56669,64857,10806,86800,219132
-1002416,32307,28262,67462,54164,182195
-1002417,15737,6374,18977,88442,129530
-1002418,76376,66319,99754,73610,316059
-1002419,21880,96680,21889,20398,160847
-1002420,64066,72120,20510,86229,242925
-1002421,73459,11630,87233,42370,214692
-1002422,99267,60764,9105,77198,246334
-1002423,11733,87379,8853,79793,187758
-1002424,75475,55716,72808,29683,233682
-1002425,12709,49489,90213,18121,170532
-1002426,23707,4144,11072,29668,68591
-1002427,14341,20674,51347,81800,168162
-1002428,7220,59825,34733,9765,111543
-1002429,21420,136,9867,21960,53383
-1002430,39416,39211,82057,13524,174208
-1002431,33379,31285,22757,27963,115384
-1002432,9666,62693,57603,22992,152954
-1002433,91326,4467,55214,64621,215628
-1002434,41106,32375,28725,59251,161457
-1002435,87952,3197,11789,21725,124663
-1002436,10042,73157,53123,55874,192196
-1002437,97358,79192,92120,74444,343114
-1002438,91606,32279,45231,3231,172347
-1002439,40294,70138,55972,95016,261420
-1002440,233,27761,72884,49303,150181
-1002441,75114,70035,22660,44022,211831
-1002442,60280,12911,30080,18889,122160
-1002443,35764,7036,71102,31348,145250
-1002444,57181,85838,78633,99732,321384
-1002445,8154,54508,73919,97732,234313
-1002446,4692,98145,36801,18782,158420
-1002447,61659,18890,97204,40607,218360
-1002448,52356,68351,84994,70990,276691
-1002449,93275,16096,61500,54687,225558
-1002450,78625,56746,50787,35668,221826
-1002451,99674,91479,69603,73901,334657
-1002452,99576,91325,82528,83852,357281
-1002453,75393,85729,53485,40306,254913
-1002454,87701,37351,66066,270,191388
-1002455,61464,17049,58679,94533,231725
-1002456,69385,97746,94164,30679,291974
-1002457,55558,19962,35258,25881,136659
-1002458,68235,61432,23455,35380,188502
-1002459,43534,45889,23071,87764,200258
-1002460,90561,20868,61446,42147,215022
-1002461,55413,90244,13762,9609,169028
-1002462,21594,4551,55506,25379,107030
-1002463,32918,15723,71407,37288,157336
-1002464,98249,58850,97893,21099,276091
-1002465,8740,4607,77444,15862,106653
-1002466,65625,73265,54846,24368,218104
-1002467,2450,36482,31040,72105,142077
-1002468,42560,14880,68205,93436,219081
-1002469,31988,90219,90637,98466,311310
-1002470,7084,40959,70841,35493,154377
-1002471,14517,28391,38942,11287,93137
-1002472,75121,49157,46967,55716,226961
-1002473,63769,1135,71011,10703,146618
-1002474,17531,22174,48741,88945,177391
-1002475,72803,21834,31620,77753,204010
-1002476,77197,83759,14868,12761,188585
-1002477,61285,16617,79917,41599,199418
-1002478,6826,5614,51776,7353,71569
-1002479,80888,5383,22984,88669,197924
-1002480,56963,39801,77741,12931,187436
-1002481,30754,63700,83494,59613,237561
-1002482,88161,9355,56055,76909,230480
-1002483,70416,49899,29756,31676,181747
-1002484,86118,90145,78571,99498,354332
-1002485,31987,40327,56933,18447,147694
-1002486,52978,88442,5221,925,147566
-1002487,27866,25982,99649,89335,242832
-1002488,29523,9474,79805,11504,130306
-1002489,28528,42647,8751,12187,92113
-1002490,36245,65849,35659,24747,162500
-1002491,16427,87917,74958,78665,257967
-1002492,97473,66491,77874,11365,253203
-1002493,39940,50636,94778,9134,194488
-1002494,68016,74553,37629,65386,245584
-1002495,82831,89450,84863,60899,318043
-1002496,16205,18202,39016,164,73587
-1002497,43989,51559,46911,27223,169682
-1002498,88242,25282,72792,28024,214340
-1002499,45113,84619,79371,45885,254988
-1002500,57975,29251,96527,99120,282873
-1002501,97791,93103,13718,91352,295964
-1002502,48588,83177,37736,64177,233678
-1002503,81545,78859,16836,25713,202953
-1002504,53100,37811,31294,27287,149492
-1002505,89166,4620,53265,43784,190835
-1002506,13458,76435,9788,13970,113651
-1002507,70574,67242,37781,91769,267366
-1002508,66533,19520,77458,14690,178201
-1002509,33634,48624,24369,9286,115913
-1002510,99512,71961,99275,84747,355495
-1002511,95621,17407,2295,59512,174835
-1002512,33887,79119,28144,17016,158166
-1002513,74443,49369,26175,21198,171185
-1002514,77122,75691,27044,33805,213662
-1002515,55998,22568,59918,48996,187480
-1002516,21708,46702,31156,64514,164080
-1002517,57609,59557,88821,43781,249768
-1002518,41695,2289,7817,9918,61719
-1002519,55277,81070,66893,34948,238188
-1002520,6981,35683,61805,20261,124730
-1002521,60057,1842,72486,84742,219127
-1002522,16978,37534,36279,72317,163108
-1002523,91456,43589,17438,87232,239715
-1002524,2339,75442,40466,57627,175874
-1002525,4557,99275,82261,68697,254790
-1002526,80362,82930,90541,5541,259374
-1002527,4242,64839,4383,71064,144528
-1002528,35383,87741,65639,38353,227116
-1002529,55986,38696,64070,65639,224391
-1002530,94563,49692,58112,26889,229256
-1002531,6510,46965,81991,29596,165062
-1002532,59782,8739,37863,1695,108079
-1002533,46116,45013,59347,35295,185771
-1002534,10952,51953,88257,1533,152695
-1002535,85828,30336,91301,42272,249737
-1002536,56755,20924,30529,41079,149287
-1002537,62425,17969,91470,80032,251896
-1002538,31292,26272,23092,81684,162340
-1002539,31055,20610,23261,83366,158292
-1002540,27735,39230,43216,38919,149100
-1002541,80377,37386,41376,25722,184861
-1002542,18335,65249,65642,97618,246844
-1002543,66233,7113,54796,59050,187192
-1002544,20729,94365,43104,10398,168596
-1002545,45009,64456,78385,22988,210838
-1002546,82561,9962,65896,75138,233557
-1002547,50690,70552,77423,76192,274857
-1002548,97375,92389,74970,40062,304796
-1002549,44274,832,42259,42906,130271
-1002550,14899,66038,61271,37687,179895
-1002551,59112,94700,43456,72912,270180
-1002552,23162,24294,8521,22507,78484
-1002553,19497,22785,31768,28557,102607
-1002554,19750,97182,37387,32681,187000
-1002555,48969,61991,66470,36134,213564
-1002556,63901,19712,12577,49693,145883
-1002557,73732,90529,98112,31134,293507
-1002558,7576,86761,94791,43636,232764
-1002559,77266,13063,19010,1076,110415
-1002560,27688,67309,80066,57278,232341
-1002561,40087,5134,86456,90226,221903
-1002562,73175,15438,72246,3875,164734
-1002563,1756,92332,76037,24557,194682
-1002564,47379,42380,40165,82059,211983
-1002565,11493,22181,13014,74937,121625
-1002566,52931,6661,4698,38133,102423
-1002567,59295,60685,70216,93459,283655
-1002568,87212,9330,42952,40751,180245
-1002569,91396,99152,58830,34261,283639
-1002570,5031,85478,27698,29103,147310
-1002571,39662,99657,89432,14406,243157
-1002572,24650,25465,14369,70912,135396
-1002573,59203,82083,50135,73889,265310
-1002574,6165,19445,43889,21780,91279
-1002575,61722,75744,61672,13687,212825
-1002576,6646,36260,71542,86327,200775
-1002577,33955,15555,32418,33739,115667
-1002578,34647,20724,46882,60332,162585
-1002579,72789,28243,51525,13540,166097
-1002580,97006,73528,32158,44110,246802
-1002581,14438,79761,43939,96938,235076
-1002582,70456,4080,80478,85695,240709
-1002583,58341,79594,97567,78182,313684
-1002584,9056,66484,10613,39484,125637
-1002585,21271,90021,91126,86060,288478
-1002586,10413,5314,91287,30339,137353
-1002587,20332,53036,54993,53618,181979
-1002588,95632,27456,98637,91475,313200
-1002589,73504,64954,83621,32805,254884
-1002590,16876,93078,6331,9443,125728
-1002591,62075,36111,88864,73847,260897
-1002592,52028,42446,75060,88475,258009
-1002593,91140,15656,22294,1115,130205
-1002594,87301,77961,71476,48777,285515
-1002595,99376,35352,64545,91212,290485
-1002596,33714,62373,14914,96028,207029
-1002597,32163,27953,88794,2318,151228
-1002598,91368,80239,93254,86131,350992
-1002599,13637,49243,18713,8873,90466
-1002600,10691,69823,17794,55511,153819
-1002601,55236,11134,30234,32391,128995
-1002602,18347,26508,44434,27631,116920
-1002603,64985,58795,30925,44362,199067
-1002604,64330,33316,97624,11617,206887
-1002605,72739,39086,32667,22861,167353
-1002606,72456,52312,21614,10506,156888
-1002607,3393,87894,78878,86604,256769
-1002608,59071,76637,62348,38227,236283
-1002609,30926,95119,31680,88258,245983
-1002610,54238,11001,78225,7252,150716
-1002611,85296,70548,77761,27627,261232
-1002612,47428,15074,33287,61242,157031
-1002613,84142,49463,88127,45834,267566
-1002614,4205,95478,27095,94707,221485
-1002615,45625,98315,96044,33791,273775
-1002616,2213,91496,69406,41089,204204
-1002617,271,26406,24188,33381,84246
-1002618,51520,96528,2022,59744,209814
-1002619,51290,59709,14346,131,125476
-1002620,9508,75035,74209,61750,220502
-1002621,84555,34669,2498,48797,170519
-1002622,87108,34100,44908,57785,223901
-1002623,64201,67772,90332,16309,238614
-1002624,31631,21843,37981,54576,146031
-1002625,10099,78974,60022,26168,175263
-1002626,18187,50235,94681,17650,180753
-1002627,62648,15045,54935,30416,163044
-1002628,28101,68005,65097,53136,214339
-1002629,83046,27436,4822,784,116088
-1002630,54411,72266,11785,39354,177816
-1002631,99025,84955,99562,60792,344334
-1002632,24861,55492,88242,15530,184125
-1002633,97858,26300,48999,83859,257016
-1002634,50110,56538,56148,3745,166541
-1002635,66668,55558,42758,94041,259025
-1002636,66603,72865,84319,96460,320247
-1002637,93839,13394,55413,44869,207515
-1002638,83062,69395,6661,68020,227138
-1002639,53540,7197,91782,12837,165356
-1002640,45871,60753,97698,25584,229906
-1002641,37092,39566,77967,39652,194277
-1002642,76379,92037,70011,93920,332347
-1002643,5742,42225,22307,52918,123192
-1002644,99022,70134,21738,10607,201501
-1002645,20955,25830,22562,22193,91540
-1002646,998,17144,72276,54637,145055
-1002647,1600,80221,16364,37201,135386
-1002648,39292,32713,26712,95425,194142
-1002649,27061,75338,50024,34568,186991
-1002650,69607,12999,33788,63347,179741
-1002651,75923,91689,86184,19750,273546
-1002652,79868,63410,58315,87113,288706
-1002653,662,77124,88730,97861,264377
-1002654,3773,93956,88126,40342,226197
-1002655,61290,60360,52530,13762,187942
-1002656,20521,44923,47362,92861,205667
-1002657,61908,85956,89895,49488,287247
-1002658,88408,92174,84260,95995,360837
-1002659,34093,44458,66659,43436,188646
-1002660,1079,13239,17334,59527,91179
-1002661,89462,29352,97863,14696,231373
-1002662,54615,63091,43852,19351,180909
-1002663,68378,68877,45118,18647,201020
-1002664,80081,16697,26648,43549,166975
-1002665,22272,89090,25997,97095,234454
-1002666,82559,46294,30238,14917,174008
-1002667,63992,83518,72434,10058,230002
-1002668,54182,21301,20589,34432,130504
-1002669,90705,87548,59611,93913,331777
-1002670,48566,4867,65932,77650,197015
-1002671,98716,1718,90479,16967,207880
-1002672,6735,51545,52884,93484,204648
-1002673,22862,17697,52471,3192,96222
-1002674,65581,61857,73564,51129,252131
-1002675,27685,88563,23184,22728,162160
-1002676,81125,33331,50999,77096,242551
-1002677,12437,85779,30031,23565,151812
-1002678,43748,38610,22506,80257,185121
-1002679,24702,40100,76069,84561,225432
-1002680,73557,78546,17461,90510,260074
-1002681,8748,2239,96473,16807,124267
-1002682,68401,3681,28533,52140,152755
-1002683,81942,85698,9426,56632,233698
-1002684,32386,56988,74219,56996,220589
-1002685,86971,9759,81266,92599,270595
-1002686,5,2787,78660,90575,172027
-1002687,81283,98846,73729,37339,291197
-1002688,36164,59842,64864,17446,178316
-1002689,68297,62459,86608,56914,274278
-1002690,54350,35702,21824,7660,119536
-1002691,35317,65288,50942,24073,175620
-1002692,20708,21193,76530,60653,179084
-1002693,70598,40768,77674,39831,228871
-1002694,67389,18014,79577,92036,257016
-1002695,31455,76823,60794,87262,256334
-1002696,77938,22767,36605,61983,199293
-1002697,69807,17819,57920,91656,237202
-1002698,43330,75490,68927,44961,232708
-1002699,65967,37376,45092,16861,165296
-1002700,62462,52999,87910,88693,292064
-1002701,19606,1045,33260,23085,76996
-1002702,16222,51405,27186,53218,148031
-1002703,1256,60367,57377,98685,217685
-1002704,90647,668,10515,5639,107469
-1002705,48265,68276,53314,94186,264041
-1002706,7526,13861,38398,44842,104627
-1002707,52249,26397,21407,20302,120355
-1002708,26523,78954,67781,53834,227092
-1002709,1546,13886,29541,73134,118107
-1002710,49532,54185,61513,79631,244861
-1002711,1459,64746,16745,24521,107471
-1002712,93790,57735,77281,38995,267801
-1002713,96184,54883,55558,33628,240253
-1002714,4426,41915,70890,23452,140683
-1002715,39753,92300,84898,77203,294154
-1002716,89475,34758,74559,16690,215482
-1002717,6971,70959,12208,53334,143472
-1002718,60337,51638,22356,42625,176956
-1002719,91143,1570,28484,97538,218735
-1002720,53046,54775,62927,87890,258638
-1002721,79106,10132,44197,37672,171107
-1002722,33440,88545,34416,94445,250846
-1002723,65219,29392,81827,29339,205777
-1002724,32498,6606,839,98721,138664
-1002725,37915,39960,54569,67199,199643
-1002726,44224,99813,58933,5987,208957
-1002727,21559,89307,44471,15427,170764
-1002728,96363,5664,10645,44488,157160
-1002729,97622,61820,55015,72915,287372
-1002730,76058,37892,25055,70299,209304
-1002731,63574,42244,42757,12246,160821
-1002732,10856,29511,42677,24719,107763
-1002733,76122,90710,59696,53507,280035
-1002734,57486,97796,54022,56405,265709
-1002735,64531,34391,34542,25946,159410
-1002736,40749,78165,65889,65096,249899
-1002737,11813,77532,98780,74081,262206
-1002738,63583,57744,24567,46291,192185
-1002739,15936,54821,24742,78384,173883
-1002740,53486,27085,12555,90268,183394
-1002741,20590,40936,41985,81795,185306
-1002742,41098,9883,13066,8997,73044
-1002743,68033,40632,39839,36910,185414
-1002744,98931,45637,54244,40864,239676
-1002745,88247,25676,31557,16323,161803
-1002746,71827,78825,49066,68185,267903
-1002747,99681,5219,19472,25477,149849
-1002748,87896,66533,65850,66227,286506
-1002749,98562,97572,40701,94673,331508
-1002750,75544,11442,6373,48700,142059
-1002751,63138,54102,92832,65020,275092
-1002752,6848,3381,67893,77272,155394
-1002753,73943,94436,37343,50071,255793
-1002754,92856,18481,13691,49936,174964
-1002755,23075,41432,27606,81355,173468
-1002756,88783,85973,87986,21068,283810
-1002757,10659,1148,3945,62066,77818
-1002758,52956,60553,80107,59060,252676
-1002759,28737,7573,71405,71448,179163
-1002760,95194,60754,92355,7902,256205
-1002761,1876,31135,98608,88648,220267
-1002762,62229,79778,1542,25906,169455
-1002763,42233,70755,92406,97597,302991
-1002764,20352,57176,66112,30185,173825
-1002765,52153,81156,78032,62603,273944
-1002766,80359,51199,78850,91512,301920
-1002767,54853,97224,35744,62337,250158
-1002768,59379,34494,18743,96277,208893
-1002769,53763,51481,17247,6313,128804
-1002770,18989,24188,38327,93863,175367
-1002771,81638,81709,61888,91876,317111
-1002772,4174,99208,16013,21297,140692
-1002773,54353,16568,18439,75432,164792
-1002774,268,64922,28226,98170,191586
-1002775,38621,78530,62074,66733,245958
-1002776,93664,74185,47413,88224,303486
-1002777,18317,1836,33956,75633,129742
-1002778,22788,5049,44384,7025,79246
-1002779,68779,70555,28678,70102,238114
-1002780,89419,43324,24584,41104,198431
-1002781,89437,28772,40349,12495,171053
-1002782,53593,62385,50752,76936,243666
-1002783,47300,80035,90761,12985,231081
-1002784,67181,3738,78485,890,150294
-1002785,79695,30899,46650,98375,255619
-1002786,83422,96640,73862,3478,257402
-1002787,49680,11254,57721,70021,188676
-1002788,23482,42463,52383,94920,213248
-1002789,27788,19826,94642,44714,186970
-1002790,89002,89262,90108,59002,327374
-1002791,57148,62898,39158,25241,184445
-1002792,67684,72509,70810,95109,306112
-1002793,76331,14469,66444,12133,169377
-1002794,74735,72936,59263,88405,295339
-1002795,93485,20224,93934,89754,297397
-1002796,94728,71427,23386,21349,210890
-1002797,33667,55209,99169,49967,238012
-1002798,47077,90888,18576,88730,245271
-1002799,22748,70126,77115,39624,209613
-1002800,17787,54206,11524,6819,90336
-1002801,88734,27309,80074,79113,275230
-1002802,79181,85427,24342,62787,251737
-1002803,74969,35930,78116,54260,243275
-1002804,43088,65539,72486,90172,271285
-1002805,11035,26957,31213,61339,130544
-1002806,63168,19433,29412,34772,146785
-1002807,68734,84646,41236,10436,205052
-1002808,24127,81162,29133,76210,210632
-1002809,14537,31598,9938,82642,138715
-1002810,56241,47337,31418,49623,184619
-1002811,84231,83864,77610,85645,331350
-1002812,52365,61612,7877,43754,165608
-1002813,52865,94902,3870,77756,229393
-1002814,91278,7421,74124,64029,236852
-1002815,20905,37874,49358,10790,118927
-1002816,88035,66120,84179,40758,279092
-1002817,16432,33235,27145,8331,85143
-1002818,55546,53048,76232,9900,194726
-1002819,82109,35057,23861,64552,205579
-1002820,69966,93766,43945,82298,289975
-1002821,15784,88939,75781,60899,241403
-1002822,34655,16907,34173,96154,181889
-1002823,22626,78295,91197,22025,214143
-1002824,34756,3386,50676,67117,155935
-1002825,92029,13025,89793,10411,205258
-1002826,88277,29666,88377,41561,247881
-1002827,35128,30839,91527,38080,195574
-1002828,29146,18049,34865,58540,140600
-1002829,14562,64062,8829,1000,88453
-1002830,16401,22511,13200,8763,60875
-1002831,58961,72820,4682,71485,207948
-1002832,83250,58142,7392,18129,166913
-1002833,36857,38447,37273,7357,119934
-1002834,71989,58251,70266,10371,210877
-1002835,77179,98443,66813,39842,282277
-1002836,4019,10684,49760,12475,76938
-1002837,14045,34183,46225,99911,194364
-1002838,2743,4280,2957,90911,100891
-1002839,4789,61916,6224,55979,128908
-1002840,27690,3974,2683,6252,40599
-1002841,43633,47819,78187,36897,206536
-1002842,12243,29103,38280,86079,165705
-1002843,81732,73163,90384,22260,267539
-1002844,27223,37935,28693,4138,97989
-1002845,44986,35460,37477,64159,182082
-1002846,89289,98734,56397,44704,289124
-1002847,75959,15953,86989,55574,234475
-1002848,41647,40546,90641,67228,240062
-1002849,85510,52555,71552,10007,219624
-1002850,42207,99081,94599,24024,259911
-1002851,85471,47720,40736,89305,263232
-1002852,47644,93633,55534,55282,252093
-1002853,86076,43826,58180,61653,249735
-1002854,21547,20577,31325,97026,170475
-1002855,52116,95215,88507,4373,240211
-1002856,42120,32966,80686,9110,164882
-1002857,47180,61693,57956,32126,198955
-1002858,16515,47078,84907,31712,180212
-1002859,52885,68217,93561,253,214916
-1002860,88906,29119,40805,18255,177085
-1002861,96053,13868,62458,95086,267465
-1002862,24836,87008,56195,60435,228474
-1002863,15855,71761,52066,98951,238633
-1002864,22308,15326,44995,56052,138681
-1002865,92656,66485,13585,79825,252551
-1002866,74015,80224,89454,36841,280534
-1002867,75041,65375,12088,9628,162132
-1002868,40213,24196,54274,14284,132967
-1002869,97304,32686,97521,86673,314184
-1002870,74354,70014,23873,17901,186142
-1002871,34839,2137,37975,38513,113464
-1002872,85472,4245,6181,60897,156795
-1002873,16326,79658,95489,63447,254920
-1002874,12752,28541,27841,73259,142393
-1002875,58404,54009,69582,33688,215683
-1002876,70285,51141,26003,17965,165394
-1002877,5009,71678,49168,55322,181177
-1002878,93580,99647,1495,78320,273042
-1002879,57074,11535,97541,79233,245383
-1002880,81453,80859,8947,8028,179287
-1002881,5147,52787,6063,48177,112174
-1002882,84945,55513,93784,96536,330778
-1002883,34268,8125,43160,1124,86677
-1002884,51236,50696,27153,44498,173583
-1002885,66095,78468,62642,24764,231969
-1002886,9329,1125,21263,51560,83277
-1002887,55943,78435,14460,8486,157324
-1002888,88316,74681,99085,91057,353139
-1002889,59460,88884,72260,81938,302542
-1002890,12651,77590,72941,6976,170158
-1002891,67993,2505,12764,58682,141944
-1002892,94912,41738,25318,14914,176882
-1002893,69197,2844,5085,88303,165429
-1002894,8134,33449,99635,12706,153924
-1002895,7940,1697,2183,38026,49846
-1002896,61750,70367,9800,74362,216279
-1002897,52236,51616,60073,88825,252750
-1002898,87703,25501,76194,86680,276078
-1002899,17772,32908,78387,71137,200204
-1002900,57045,32538,10514,65205,165302
-1002901,34160,7951,99767,29845,171723
-1002902,23098,35459,64139,78457,201153
-1002903,56237,59856,69100,59905,245098
-1002904,74054,54497,52416,34803,215770
-1002905,66020,15944,9121,63041,154126
-1002906,10947,68807,80443,74762,234959
-1002907,4735,39151,21813,4216,69915
-1002908,48010,44560,56656,93606,242832
-1002909,51500,79977,89589,14477,235543
-1002910,78843,95690,26518,90609,291660
-1002911,81380,42771,71361,13415,208927
-1002912,16273,36348,15302,53804,121727
-1002913,46620,75126,74142,89472,285360
-1002914,95835,30084,83616,37390,246925
-1002915,97239,1285,77666,70680,246870
-1002916,66404,29547,71139,22342,189432
-1002917,90075,69849,38029,42919,240872
-1002918,95944,61162,14771,304,172181
-1002919,59309,95588,30211,70099,255207
-1002920,82391,8662,96453,64785,252291
-1002921,92792,2814,84799,27084,207489
-1002922,69210,48145,20814,57034,195203
-1002923,99811,87398,1824,20167,209200
-1002924,16459,67012,84083,35967,203521
-1002925,25720,2056,48940,16146,92862
-1002926,25759,12581,28718,58474,125532
-1002927,53334,80977,54544,35727,224582
-1002928,67789,75946,61865,94666,300266
-1002929,25155,50203,2461,9630,87449
-1002930,55804,85844,35377,95046,272071
-1002931,10669,87329,92106,70890,260994
-1002932,38630,21116,49991,30278,140015
-1002933,9354,82408,94820,51787,238369
-1002934,78454,80162,25572,85278,269466
-1002935,53412,29280,14701,99198,196591
-1002936,38681,89999,84558,19495,232733
-1002937,64997,22928,45254,37656,170835
-1002938,27071,58884,72736,21926,180617
-1002939,84686,9852,13025,99472,207035
-1002940,32375,85716,3480,57267,178838
-1002941,18269,35932,65131,28695,148027
-1002942,65476,50138,99549,46055,261218
-1002943,5514,41859,51586,33602,132561
-1002944,31326,93638,7631,88407,221002
-1002945,6416,35825,53635,76999,172875
-1002946,31226,12188,12353,80887,136654
-1002947,7043,59510,93527,56259,216339
-1002948,78588,93267,50741,13754,236350
-1002949,37556,26930,2710,39537,106733
-1002950,11716,20069,98335,13647,143767
-1002951,37871,10050,15980,63848,127749
-1002952,7348,58507,41458,26906,134219
-1002953,87153,33502,32210,28005,180870
-1002954,19047,55664,40522,78460,193693
-1002955,75423,59222,94720,92288,321653
-1002956,85562,9973,35565,24759,155859
-1002957,73376,11456,41007,90400,216239
-1002958,19916,95922,5668,1445,122951
-1002959,3271,89280,57199,65605,215355
-1002960,70254,70315,11502,60338,212409
-1002961,40372,82456,26054,19399,168281
-1002962,82097,6511,56291,54736,199635
-1002963,35538,77147,9010,83607,205302
-1002964,7518,68179,73578,22918,172193
-1002965,12343,81832,88019,86046,268240
-1002966,3808,14811,85989,79335,183943
-1002967,66395,34027,63533,54739,218694
-1002968,11061,83433,98105,59399,251998
-1002969,42198,94050,44807,60233,241288
-1002970,17251,80237,77729,33512,208729
-1002971,49764,62434,73780,30609,216587
-1002972,61003,96326,891,65253,223473
-1002973,46887,11243,60258,59895,178283
-1002974,17540,44893,69245,40933,172611
-1002975,20354,67913,83543,85945,257755
-1002976,33918,17646,84455,8697,144716
-1002977,72887,9982,80177,51014,214060
-1002978,11563,47422,93456,45889,198330
-1002979,54385,81100,66229,52294,254008
-1002980,26431,63266,75370,24977,190044
-1002981,93377,5196,88329,18832,205734
-1002982,18112,10310,73565,30774,132761
-1002983,1150,26344,89020,75399,191913
-1002984,41235,3619,39951,80418,165223
-1002985,43536,47386,16179,62381,169482
-1002986,54032,61369,9905,98754,224060
-1002987,5935,66612,98916,98778,270241
-1002988,65581,3267,69934,15687,154469
-1002989,88025,91820,62226,77649,319720
-1002990,61976,44636,29517,92897,229026
-1002991,17909,12246,55386,73248,158789
-1002992,64856,99545,35110,42287,241798
-1002993,20874,49512,66309,21011,157706
-1002994,69806,71441,79418,31987,252652
-1002995,68956,72055,26166,18506,185683
-1002996,19724,57581,82215,58702,218222
-1002997,87810,47464,1296,39253,175823
-1002998,6376,55629,42393,97766,202164
-1002999,58041,86455,9930,8281,162707
-1003000,23107,67993,98745,26008,215853
-1003001,93571,20561,89085,87412,290629
-1003002,42692,96296,57071,50045,246104
-1003003,54029,30531,85707,70414,240681
-1003004,21271,28657,80333,17866,148127
-1003005,30559,11776,97236,68706,208277
-1003006,15116,45365,84782,64699,209962
-1003007,29912,56639,84308,28761,199620
-1003008,90960,92335,72981,62096,318372
-1003009,56746,60770,29725,26954,174195
-1003010,70339,91615,46034,85815,293803
-1003011,79523,97276,76794,2703,256296
-1003012,71400,64930,95923,12503,244756
-1003013,35868,83463,34339,2168,155838
-1003014,12723,76157,70689,73147,232716
-1003015,48466,25832,8205,45033,127536
-1003016,90693,87159,60909,37080,275841
-1003017,85054,7418,11034,43818,147324
-1003018,1547,24774,1473,93791,121585
-1003019,1286,33384,81372,22509,138551
-1003020,23178,89301,28276,4596,145351
-1003021,40658,73837,1324,21060,136879
-1003022,4430,58036,48692,35934,147092
-1003023,82734,53932,62723,13400,212789
-1003024,53205,94631,7004,75311,230151
-1003025,62253,32517,95664,94699,285133
-1003026,56540,86933,5454,55748,204675
-1003027,61500,55264,7182,12927,136873
-1003028,30097,62930,70971,30922,194920
-1003029,27704,3556,253,47421,78934
-1003030,79618,976,51431,75407,207432
-1003031,43563,74457,21205,87720,226945
-1003032,15873,63925,45689,93534,219021
-1003033,902,49040,78955,15066,143963
-1003034,14836,76521,51564,32387,175308
-1003035,15617,24767,92988,22715,156087
-1003036,23196,91204,45377,63690,223467
-1003037,73607,36818,17810,63575,191810
-1003038,4961,28305,88068,35501,156835
-1003039,94631,12441,43436,6370,156878
-1003040,35192,81482,57108,15007,188789
-1003041,63634,97806,60031,13483,234954
-1003042,53191,43519,24304,91232,212246
-1003043,81861,52149,61850,64247,260107
-1003044,38604,26903,61436,98418,225361
-1003045,90490,81328,9913,52969,234700
-1003046,53815,85800,11289,3442,154346
-1003047,92193,8670,76902,10215,187980
-1003048,37911,49865,45392,33186,166354
-1003049,62054,87849,64683,60255,274841
-1003050,77882,68751,73662,2842,223137
-1003051,60456,72135,66389,1729,200709
-1003052,46329,76237,62541,41597,226704
-1003053,23533,50355,7525,6305,87718
-1003054,44903,54497,97216,15747,212363
-1003055,67851,37857,14261,36806,156775
-1003056,3296,26240,62283,98553,190372
-1003057,88769,26588,75256,76060,266673
-1003058,6241,67333,93276,73183,240033
-1003059,10917,61728,60640,21066,154351
-1003060,79067,7733,33761,41601,162162
-1003061,21423,10338,22405,68150,122316
-1003062,93620,87180,8139,59024,247963
-1003063,96962,36542,82025,7132,222661
-1003064,63039,97466,94814,99643,354962
-1003065,80277,17496,8262,45498,151533
-1003066,48696,63407,28981,28478,169562
-1003067,175,52624,55416,94201,202416
-1003068,23940,45302,3625,72988,145855
-1003069,60923,13418,11210,65927,151478
... 64645 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org