From 50d196db1bdc32f4bbab9c23c186ff3bdcd7947e Mon Sep 17 00:00:00 2001 From: Atsushin Date: Mon, 9 Dec 2019 01:40:03 +1100 Subject: [PATCH] BE-714 Refine app and client e2e-test environment for v1.4.4 (#65) * BE-714 Refine app and client e2e-test environment for v1.4.4 - Based on 64a5e04f5fc2b52ff584c9f68519899419fece0d of release-1.4 branch on fabric-test repo - For making it easy to maintainance - Need to download fabric-ca-client under e2e-test/feature/bin - Add fabric-v1.4.4 support Signed-off-by: Atsushi Neki * BE-714 Add a network enabled service discovery Signed-off-by: Atsushi Neki * BE-714 Fix an error and add README for e2e-test env Signed-off-by: Atsushi Neki --- app/platform/fabric/e2e-test/.gitignore | 12 +- app/platform/fabric/e2e-test/README.md | 125 +- .../e2e-test/chaincodes/auctionapp/art.go | 2600 ++++++++++++++++ .../chaincodes/auctionapp/image_proc_api.go | 263 ++ .../chaincodes/auctionapp/table_api.go | 484 +++ .../chaincodes/autovendor/chaincode/main.go | 43 + .../chaincodes/autovendor/directdep/core.go | 17 + .../chaincodes/autovendor/indirectdep/core.go | 14 + .../e2e-test/chaincodes/badimport/main.go | 25 + .../example02/node/chaincode_example02.js | 141 + .../chaincodes/example02/node/package.json | 16 + .../chaincodes/map_private/go/map_private.go | 166 + .../e2e-test/chaincodes/mapkeys/go/map.go | 203 ++ .../e2e-test/chaincodes/mapkeys/go/mapkeys.go | 305 ++ .../marbles/node/marbles_chaincode.js | 409 +++ .../chaincodes/marbles/node/package.json | 16 + .../marbles02_private/marbles_chaincode.go | 628 ++++ .../samplecc/go/chaincode_sample.go | 180 ++ .../chaincodes/samplecc/java/build.gradle | 34 + .../e2e-test/chaincodes/samplecc/java/gradlew | 172 + .../chaincodes/samplecc/java/gradlew.bat | 84 + .../chaincodes/samplecc/java/settings.gradle | 7 + .../hyperledger/fabric/example/SampleCC.java | 111 + .../samplecc/node/chaincode_sample.js | 104 + .../chaincodes/samplecc/node/package.json | 20 + .../e2e-test/chaincodes/sbe/chaincode.go | 151 + .../e2e-test/chaincodes/sbe/chaincode_test.go | 68 + .../plob-1.0-shim/chaincode/data.pb.go | 55 + .../plob-1.0-shim/chaincode/data.proto | 24 + .../plob-1.0-shim/chaincode/plob.go | 182 ++ .../plob-1.0-shim/chaincode/vendor.zip | Bin 0 -> 1927136 bytes .../plob-1.1-shim/chaincode/data.pb.go | 55 + .../plob-1.1-shim/chaincode/data.proto | 24 + .../plob-1.1-shim/chaincode/plob.go | 182 ++ .../plob-1.1-shim/chaincode/vendor.zip | Bin 0 -> 1954997 bytes .../shimApiDriver/go/shimAPIDriver.go | 212 ++ .../shimApiDriver/node/package.json | 18 + .../shimApiDriver/node/shimApiDriver.js | 190 ++ .../e2e-test/configs/network-config.json | 319 -- .../docker-compose/docker-compose-solo.yml | 222 -- .../balance-transfer/.gitignore | 3 - .../fabric-samples/balance-transfer/README.md | 332 -- .../fabric-samples/balance-transfer/app.js | 560 ---- .../balance-transfer/app/create-channel.js | 105 - .../balance-transfer/app/helper.js | 134 - .../balance-transfer/app/install-chaincode.js | 112 - .../app/instantiate-chaincode.js | 269 -- .../app/invoke-transaction.js | 240 -- .../balance-transfer/app/join-channel.js | 133 - .../balance-transfer/app/query.js | 343 -- .../app/update-anchor-peers.js | 165 - .../balance-transfer/artifacts/base.yaml | 30 - .../artifacts/channel/Org1MSPanchors.tx | Bin 284 -> 0 bytes .../artifacts/channel/Org2MSPanchors.tx | Bin 284 -> 0 bytes .../artifacts/channel/configtx.yaml | 149 - ...0cdb202c4943604f95c72ee0ff839d3ec300719_sk | 5 - .../example.com/ca/ca.example.com-cert.pem | 14 - .../ordererOrganizations/example.com/ca/sk | 1 - .../msp/admincerts/Admin@example.com-cert.pem | 13 - .../msp/cacerts/ca.example.com-cert.pem | 14 - .../msp/tlscacerts/tlsca.example.com-cert.pem | 14 - .../msp/admincerts/Admin@example.com-cert.pem | 13 - .../msp/cacerts/ca.example.com-cert.pem | 14 - ...8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk | 5 - .../orderer.example.com/msp/keystore/sk | 1 - .../signcerts/orderer.example.com-cert.pem | 14 - .../msp/tlscacerts/tlsca.example.com-cert.pem | 14 - .../orderers/orderer.example.com/tls/ca.crt | 14 - .../orderer.example.com/tls/server.crt | 15 - .../orderer.example.com/tls/server.key | 5 - ...77809902713b8e321a5ab55ecc104dafc2eec49_sk | 5 - .../ordererOrganizations/example.com/tlsca/sk | 1 - .../tlsca/tlsca.example.com-cert.pem | 14 - .../msp/admincerts/Admin@example.com-cert.pem | 13 - .../msp/cacerts/ca.example.com-cert.pem | 14 - ...f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk | 5 - .../users/Admin@example.com/msp/keystore/sk | 1 - .../msp/signcerts/Admin@example.com-cert.pem | 13 - .../msp/tlscacerts/tlsca.example.com-cert.pem | 14 - .../users/Admin@example.com/tls/ca.crt | 14 - .../users/Admin@example.com/tls/server.crt | 14 - .../users/Admin@example.com/tls/server.key | 5 - ...b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk | 5 - .../ca/ca.org1.example.com-cert.pem | 15 - .../peerOrganizations/org1.example.com/ca/sk | 1 - .../Admin@org1.example.com-cert.pem | 14 - .../msp/cacerts/ca.org1.example.com-cert.pem | 15 - .../tlsca.org1.example.com-cert.pem | 15 - .../Admin@org1.example.com-cert.pem | 14 - .../msp/cacerts/ca.org1.example.com-cert.pem | 15 - ...80e5cce249beaab27b70c741bb0e2554355957e_sk | 5 - .../peer0.org1.example.com/msp/keystore/sk | 1 - .../signcerts/peer0.org1.example.com-cert.pem | 14 - .../tlsca.org1.example.com-cert.pem | 15 - .../peers/peer0.org1.example.com/tls/ca.crt | 15 - .../peer0.org1.example.com/tls/server.crt | 16 - .../peer0.org1.example.com/tls/server.key | 5 - .../Admin@org1.example.com-cert.pem | 14 - .../msp/cacerts/ca.org1.example.com-cert.pem | 15 - ...fec26090ae249bfbca28f884e60c21338493edd_sk | 5 - .../peer1.org1.example.com/msp/keystore/sk | 1 - .../signcerts/peer1.org1.example.com-cert.pem | 14 - .../tlsca.org1.example.com-cert.pem | 15 - .../peers/peer1.org1.example.com/tls/ca.crt | 15 - .../peer1.org1.example.com/tls/server.crt | 16 - .../peer1.org1.example.com/tls/server.key | 5 - ...b974d857933706737d00d04bf65f74e3976f9f8_sk | 5 - .../org1.example.com/tlsca/sk | 1 - .../tlsca/tlsca.org1.example.com-cert.pem | 15 - .../Admin@org1.example.com-cert.pem | 14 - .../msp/cacerts/ca.org1.example.com-cert.pem | 15 - ...304edecc020fe63f41a6db109f1e227cc1cb2a8_sk | 5 - .../Admin@org1.example.com/msp/keystore/sk | 1 - .../signcerts/Admin@org1.example.com-cert.pem | 14 - .../tlsca.org1.example.com-cert.pem | 15 - .../users/Admin@org1.example.com/tls/ca.crt | 15 - .../Admin@org1.example.com/tls/server.crt | 14 - .../Admin@org1.example.com/tls/server.key | 5 - .../User1@org1.example.com-cert.pem | 14 - .../msp/cacerts/ca.org1.example.com-cert.pem | 15 - ...780fc84acc9752ef30ebc16be1f4666c02b614b_sk | 5 - .../User1@org1.example.com/msp/keystore/sk | 1 - .../signcerts/User1@org1.example.com-cert.pem | 14 - .../tlsca.org1.example.com-cert.pem | 15 - .../users/User1@org1.example.com/tls/ca.crt | 15 - .../User1@org1.example.com/tls/server.crt | 14 - .../User1@org1.example.com/tls/server.key | 5 - ...d2c1375df27360d7227f48cdc2f80e505678005_sk | 5 - .../ca/ca.org2.example.com-cert.pem | 15 - .../peerOrganizations/org2.example.com/ca/sk | 1 - .../Admin@org2.example.com-cert.pem | 14 - .../msp/cacerts/ca.org2.example.com-cert.pem | 15 - .../tlsca.org2.example.com-cert.pem | 15 - .../Admin@org2.example.com-cert.pem | 14 - .../msp/cacerts/ca.org2.example.com-cert.pem | 15 - ...6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk | 5 - .../peer0.org2.example.com/msp/keystore/sk | 1 - .../signcerts/peer0.org2.example.com-cert.pem | 14 - .../tlsca.org2.example.com-cert.pem | 15 - .../peers/peer0.org2.example.com/tls/ca.crt | 15 - .../peer0.org2.example.com/tls/server.crt | 16 - .../peer0.org2.example.com/tls/server.key | 5 - .../Admin@org2.example.com-cert.pem | 14 - .../msp/cacerts/ca.org2.example.com-cert.pem | 15 - ...91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk | 5 - .../peer1.org2.example.com/msp/keystore/sk | 1 - .../signcerts/peer1.org2.example.com-cert.pem | 14 - .../tlsca.org2.example.com-cert.pem | 15 - .../peers/peer1.org2.example.com/tls/ca.crt | 15 - .../peer1.org2.example.com/tls/server.crt | 16 - .../peer1.org2.example.com/tls/server.key | 5 - ...6062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk | 5 - .../org2.example.com/tlsca/sk | 1 - .../tlsca/tlsca.org2.example.com-cert.pem | 15 - .../Admin@org2.example.com-cert.pem | 14 - .../msp/cacerts/ca.org2.example.com-cert.pem | 15 - ...fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk | 5 - .../Admin@org2.example.com/msp/keystore/sk | 1 - .../signcerts/Admin@org2.example.com-cert.pem | 14 - .../tlsca.org2.example.com-cert.pem | 15 - .../users/Admin@org2.example.com/tls/ca.crt | 15 - .../Admin@org2.example.com/tls/server.crt | 14 - .../Admin@org2.example.com/tls/server.key | 5 - .../User1@org2.example.com-cert.pem | 14 - .../msp/cacerts/ca.org2.example.com-cert.pem | 15 - ...0ff9aefa47c565678f100ca8673db249ee785ac_sk | 5 - .../User1@org2.example.com/msp/keystore/sk | 1 - .../signcerts/User1@org2.example.com-cert.pem | 14 - .../tlsca.org2.example.com-cert.pem | 15 - .../users/User1@org2.example.com/tls/ca.crt | 15 - .../User1@org2.example.com/tls/server.crt | 14 - .../User1@org2.example.com/tls/server.key | 5 - .../artifacts/channel/cryptogen.yaml | 113 - .../artifacts/channel/genesis.block | Bin 9089 -> 0 bytes .../artifacts/channel/mychannel.tx | Bin 394 -> 0 bytes .../artifacts/docker-compose-explorer.yaml | 136 - .../artifacts/docker-compose.yaml | 142 - .../artifacts/network-config-aws.yaml | 230 -- .../artifacts/network-config.yaml | 230 -- .../balance-transfer/artifacts/org1.yaml | 53 - .../balance-transfer/artifacts/org2.yaml | 53 - .../github.com/example_cc/node/example_cc.js | 143 - .../fabric-samples/balance-transfer/config.js | 25 - .../balance-transfer/config.json | 14 - .../balance-transfer/package.json | 33 - .../fabric-samples/balance-transfer/runApp.sh | 62 - .../balance-transfer/testAPIs.sh | 280 -- .../balance-transfer/typescript/.gitignore | 4 - .../balance-transfer/typescript/README.md | 303 -- .../typescript/api/chaincode.ts | 89 - .../typescript/api/channel.ts | 261 -- .../balance-transfer/typescript/api/index.ts | 27 - .../balance-transfer/typescript/api/users.ts | 69 - .../balance-transfer/typescript/api/utils.ts | 23 - .../balance-transfer/typescript/app.ts | 92 - .../typescript/app_config.json | 15 - .../balance-transfer/typescript/config.ts | 30 - .../balance-transfer/typescript/interfaces.ts | 23 - .../typescript/lib/chaincode.ts | 151 - .../typescript/lib/channel.ts | 566 ---- .../balance-transfer/typescript/lib/helper.ts | 315 -- .../typescript/lib/network-config.json | 55 - .../balance-transfer/typescript/package.json | 38 - .../balance-transfer/typescript/runApp.sh | 63 - .../balance-transfer/typescript/testAPIs.sh | 197 -- .../balance-transfer/typescript/tsconfig.json | 24 - .../balance-transfer/typescript/tslint.json | 28 - .../abac/go/abac.go} | 69 +- .../vendor/github.com/golang/protobuf/LICENSE | 28 + .../github.com/golang/protobuf/proto/clone.go | 253 ++ .../golang/protobuf/proto/decode.go | 427 +++ .../golang/protobuf/proto/deprecated.go | 38 + .../golang/protobuf/proto/discard.go | 350 +++ .../golang/protobuf/proto/encode.go | 203 ++ .../github.com/golang/protobuf/proto/equal.go | 300 ++ .../golang/protobuf/proto/extensions.go | 543 ++++ .../github.com/golang/protobuf/proto/lib.go | 959 ++++++ .../golang/protobuf/proto/message_set.go | 314 ++ .../golang/protobuf/proto/pointer_reflect.go | 357 +++ .../golang/protobuf/proto/pointer_unsafe.go | 308 ++ .../golang/protobuf/proto/properties.go | 535 ++++ .../golang/protobuf/proto/table_marshal.go | 2767 +++++++++++++++++ .../golang/protobuf/proto/table_merge.go | 654 ++++ .../golang/protobuf/proto/table_unmarshal.go | 2051 ++++++++++++ .../github.com/golang/protobuf/proto/text.go | 843 +++++ .../golang/protobuf/proto/text_parser.go | 880 ++++++ .../github.com/hyperledger/fabric/LICENSE | 202 ++ .../chaincode/shim/ext/attrmgr/attrmgr.go | 260 ++ .../core/chaincode/shim/ext/cid/README.md | 214 ++ .../fabric/core/chaincode/shim/ext/cid/cid.go | 259 ++ .../core/chaincode/shim/ext/cid/interfaces.go | 55 + .../fabric/protos/msp/identities.pb.go | 179 ++ .../fabric/protos/msp/identities.proto | 49 + .../fabric/protos/msp/msp_config.go | 41 + .../fabric/protos/msp/msp_config.pb.go | 743 +++++ .../fabric/protos/msp/msp_config.proto | 208 ++ .../fabric/protos/msp/msp_principal.go | 43 + .../fabric/protos/msp/msp_principal.pb.go | 437 +++ .../fabric/protos/msp/msp_principal.proto | 153 + .../go/vendor/github.com/pkg/errors/LICENSE | 23 + .../go/vendor/github.com/pkg/errors/README.md | 52 + .../vendor/github.com/pkg/errors/appveyor.yml | 32 + .../go/vendor/github.com/pkg/errors/errors.go | 282 ++ .../go/vendor/github.com/pkg/errors/stack.go | 147 + .../chaincode/abac/go/vendor/vendor.json | 37 + .../chaincode_example02/java/.gitignore | 4 + .../chaincode_example02/java/build.gradle | 34 + .../chaincode_example02/java/settings.gradle | 7 + .../fabric/example/SimpleChaincode.java | 142 + .../node/chaincode_example02.js | 138 + .../chaincode_example02/node/package.json | 15 + .../chaincode/fabcar/go/fabcar.go | 204 ++ .../chaincode/fabcar/java/.gitignore | 61 + .../chaincode/fabcar/java/README.md | 14 + .../chaincode/fabcar/java/build.gradle | 81 + .../java/config/checkstyle/checkstyle.xml | 178 ++ .../java/config/checkstyle/suppressions.xml | 9 + .../java/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 56177 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + .../chaincode/fabcar/java/gradlew | 172 + .../chaincode/fabcar/java/gradlew.bat | 84 + .../chaincode/fabcar/java/settings.gradle | 5 + .../fabric/samples/fabcar/Car.java | 79 + .../fabric/samples/fabcar/FabCar.java | 190 ++ .../fabric/samples/fabcar/CarTest.java | 74 + .../fabric/samples/fabcar/FabCarTest.java | 262 ++ .../fabcar/javascript-low-level/fabcar.js | 193 ++ .../fabcar/javascript-low-level}/package.json | 6 +- .../chaincode/fabcar/javascript/.editorconfig | 16 + .../chaincode/fabcar/javascript/.eslintignore | 5 + .../chaincode/fabcar/javascript/.eslintrc.js | 38 + .../chaincode/fabcar/javascript/.gitignore | 77 + .../chaincode/fabcar/javascript/index.js | 10 + .../chaincode/fabcar/javascript/lib/fabcar.js | 156 + .../chaincode/fabcar/javascript/package.json | 47 + .../chaincode/fabcar/typescript/.editorconfig | 16 + .../chaincode/fabcar/typescript/.gitignore | 81 + .../chaincode/fabcar/typescript/package.json | 62 + .../chaincode/fabcar/typescript/src/car.ts | 11 + .../chaincode/fabcar/typescript/src/fabcar.ts | 153 + .../chaincode/fabcar/typescript/src/index.ts | 8 + .../chaincode/fabcar/typescript/tsconfig.json | 16 + .../chaincode/fabcar/typescript/tslint.json | 21 + .../statedb/couchdb/indexes/indexOwner.json | 1 + .../marbles02/go/marbles_chaincode.go | 755 +++++ .../statedb/couchdb/indexes/indexOwner.json | 1 + .../marbles02/node/marbles_chaincode.js | 481 +++ .../chaincode/marbles02/node/package.json | 15 + .../marbles02_private/collections_config.json | 18 + .../collectionMarbles/indexes/indexOwner.json | 1 + .../go/marbles_chaincode_private.go | 650 ++++ .../fabric-samples/chaincode/sacc/sacc.go | 97 + .../fabric-samples/first-network/.env | 3 - .../fabric-samples/first-network/.gitignore | 8 - .../fabric-samples/first-network/README.md | 7 - .../base/docker-compose-base.yaml | 110 - .../first-network/base/peer-base.yaml | 50 - .../fabric-samples/first-network/byfn.sh | 608 ---- .../first-network/channel-artifacts/.gitkeep | 0 .../first-network/configtx.yaml | 402 --- .../first-network/connection-org1.json | 53 - .../first-network/connection-org1.yaml | 38 - .../first-network/connection-org2.json | 53 - .../first-network/connection-org2.yaml | 38 - .../first-network/connection-org3.json | 40 - .../first-network/connection-org3.yaml | 28 - .../first-network/crypto-config.yaml | 88 - .../first-network/docker-compose-ca.yaml | 46 - .../first-network/docker-compose-cli.yaml | 94 - .../docker-compose-couch-org3.yaml | 64 - .../first-network/docker-compose-couch.yaml | 118 - .../docker-compose-e2e-template.yaml | 90 - .../docker-compose-etcdraft2-behave.yaml | 35 - .../docker-compose-etcdraft2.yaml | 77 - .../docker-compose-explorer.yaml | 109 - .../first-network/docker-compose-kafka.yaml | 43 - .../first-network/docker-compose-org3.yaml | 97 - .../fabric-samples/first-network/eyfn.sh | 326 -- .../org3-artifacts/configtx.yaml | 31 - .../org3-artifacts/org3-crypto.yaml | 19 - .../first-network/scripts/capabilities.json | 9 - .../first-network/scripts/script.sh | 129 - .../first-network/scripts/step1org3.sh | 74 - .../first-network/scripts/step2org3.sh | 58 - .../first-network/scripts/step3org3.sh | 52 - .../first-network/scripts/testorg3.sh | 79 - .../first-network/scripts/upgrade_to_v14.sh | 166 - .../first-network/scripts/utils.sh | 321 -- .../chaincode/go/enccc_example/README.md | 80 + .../go/enccc_example/enccc_example.go | 223 ++ .../chaincode/go/enccc_example/enccc_test.go | 234 ++ .../chaincode/go/enccc_example/utils.go | 147 + .../chaincode/go/eventsender/eventsender.go | 92 + .../chaincode/go/example01/chaincode.go | 73 + .../chaincode/go/example01/cmd/main.go | 21 + .../chaincode/go/example02/chaincode.go | 176 ++ .../chaincode/go/example02/chaincode_test.go | 103 + .../chaincode/go/example02/cmd/main.go | 21 + .../chaincode/go/example03/chaincode.go | 82 + .../chaincode/go/example03/chaincode_test.go | 63 + .../chaincode/go/example03/cmd/main.go | 21 + .../chaincode/go/example04/chaincode.go | 156 + .../chaincode/go/example04/chaincode_test.go | 110 + .../chaincode/go/example04/cmd/main.go | 21 + .../chaincode/go/example05/chaincode.go | 197 ++ .../chaincode/go/example05/chaincode_test.go | 119 + .../chaincode/go/example05/cmd/main.go | 21 + .../invokereturnsvalue/invokereturnsvalue.go | 133 + .../invokereturnsvalue_test.go | 97 + .../fabric/examples/chaincode/go/map/map.go | 465 +++ .../statedb/couchdb/indexes/indexOwner.json | 6 + .../go/marbles02/marbles_chaincode.go | 755 +++++ .../chaincode/go/passthru/passthru.go | 72 + .../examples/chaincode/go/sleeper/sleeper.go | 124 + .../fabric/e2e-test/{ => feature}/.env | 7 - .../e2e-test/feature/CouchDB_index.feature | 450 +++ .../fabric/e2e-test/feature/README.rst | 349 +++ .../fabric/e2e-test/feature/bootstrap.feature | 124 + .../e2e-test/feature/chaincodes.feature | 528 ++++ .../{steps => feature/common}/__init__.py | 1 - .../e2e-test/feature/common/common_pb2.py | 774 +++++ .../feature/common/common_pb2_grpc.py | 5 + .../e2e-test/feature/common/configtx_pb2.py | 879 ++++++ .../feature/common/configtx_pb2_grpc.py | 5 + .../feature/common/configuration_pb2.py | 319 ++ .../feature/common/configuration_pb2_grpc.py | 3 + .../e2e-test/feature/common/ledger_pb2.py | 95 + .../feature/common/ledger_pb2_grpc.py | 5 + .../e2e-test/feature/common/policies_pb2.py | 355 +++ .../feature/common/policies_pb2_grpc.py | 3 + .../{ => feature}/configs/configtx.yaml | 85 +- .../{ => feature}/configs/crypto.yaml | 3 + .../configs/fabric-ca-server-config.yaml | 0 .../feature/configs/network-config.json | 338 ++ .../docker-compose/docker-compose-base.yml | 0 .../docker-compose/docker-compose-cli.yml | 0 .../docker-compose/docker-compose-couchdb.yml | 0 .../docker-compose-explorer.yaml | 4 +- .../docker-compose-kafka-sd.yml | 443 +++ .../docker-compose/docker-compose-kafka.yml | 35 +- .../docker-compose-peer-org3.yml | 0 .../docker-compose/docker-compose-solo.yml | 560 ++++ .../e2e-test/{ => feature}/environment.py | 57 +- .../config-balance-transfer.json | 0 .../config-first-network.json | 0 .../config-solo-tls-disabled.json | 0 .../connection-profile/balance-transfer.json | 12 +- .../connection-profile/first-network.json | 0 .../connection-profile/solo-tls-disabled.json | 0 .../e2e-test/{ => feature}/explorer.feature | 155 +- .../e2e-test/feature/explorer_gui_e2e.feature | 22 + .../fabric/e2e-test/feature/fabric-ca.feature | 101 + .../fabric/e2e-test/feature/gossip.feature | 411 +++ .../fabric/e2e-test/feature/ledger.feature | 240 ++ .../fabric/e2e-test/feature/orderer.feature | 353 +++ .../fabric/e2e-test/feature/package.json | 25 + .../fabric/e2e-test/feature/peer.feature | 398 +++ .../fabric/e2e-test/feature/peer/__init__.py | 5 + .../fabric/e2e-test/feature/peer/admin_pb2.py | 429 +++ .../e2e-test/feature/peer/admin_pb2_grpc.py | 109 + .../feature/peer/chaincode_event_pb2.py | 102 + .../feature/peer/chaincode_event_pb2_grpc.py | 5 + .../e2e-test/feature/peer/chaincode_pb2.py | 396 +++ .../feature/peer/chaincode_pb2_grpc.py | 5 + .../feature/peer/chaincode_shim_pb2.py | 670 ++++ .../feature/peer/chaincode_shim_pb2_grpc.py | 48 + .../feature/peer/configuration_pb2.py | 128 + .../feature/peer/configuration_pb2_grpc.py | 5 + .../e2e-test/feature/peer/events_pb2.py | 568 ++++ .../e2e-test/feature/peer/events_pb2_grpc.py | 48 + .../fabric/e2e-test/feature/peer/peer_pb2.py | 226 ++ .../e2e-test/feature/peer/peer_pb2_grpc.py | 43 + .../e2e-test/feature/peer/proposal_pb2.py | 340 ++ .../feature/peer/proposal_pb2_grpc.py | 5 + .../feature/peer/proposal_response_pb2.py | 259 ++ .../peer/proposal_response_pb2_grpc.py | 5 + .../fabric/e2e-test/feature/peer/query_pb2.py | 235 ++ .../e2e-test/feature/peer/query_pb2_grpc.py | 5 + .../e2e-test/feature/peer/resources_pb2.py | 301 ++ .../feature/peer/resources_pb2_grpc.py | 3 + .../e2e-test/feature/peer/transaction_pb2.py | 426 +++ .../feature/peer/transaction_pb2_grpc.py | 5 + .../e2e-test/{ => feature}/requirement.txt | 0 ...ar-with-dependencies-exclude-resources.xml | 0 .../{ => feature}/sdk/java/package.sh | 4 - .../e2e-test/{ => feature}/sdk/java/pom.xml | 0 .../sdk/java/src/META-INF/MANIFEST.MF | 0 .../fabric_test/operations/CreateAppUser.java | 4 - .../operations/PeerOperations.java | 4 - .../fabric_test/structures/AppEnrollment.java | 4 - .../fabric_test/structures/AppPrivateKey.java | 4 - .../fabric_test/structures/AppUser.java | 4 - .../e2e-test/feature/sdk/node/common.js | 137 + .../e2e-test/feature/sdk/node/invoke.js | 216 ++ .../fabric/e2e-test/feature/sdk/node/query.js | 184 ++ .../fabric/e2e-test/feature/steps/__init__.py | 5 + .../{ => feature}/steps/basic_impl.py | 2 +- .../{ => feature}/steps/bootstrap_impl.py | 0 .../{ => feature}/steps/common_util.py | 0 .../{ => feature}/steps/compose_util.py | 2 +- .../{ => feature}/steps/config_util.py | 2 - .../{ => feature}/steps/database_util.py | 0 .../{ => feature}/steps/endorser_impl.py | 14 +- .../{ => feature}/steps/endorser_util.py | 42 +- .../{ => feature}/steps/explorer_impl.py | 76 +- .../{ => feature}/steps/json_responses.py | 2 +- .../{ => feature}/steps/orderer_impl.py | 6 +- .../{ => feature}/steps/orderer_util.py | 38 +- .../{ => feature}/steps/remote_util.py | 0 .../{ => feature}/steps/request_util.py | 0 app/platform/fabric/e2e-test/package.json | 25 - .../fabric/e2e-test/sdk/node/common.js | 151 - .../fabric/e2e-test/sdk/node/invoke.js | 310 -- .../fabric/e2e-test/sdk/node/query.js | 251 -- client/test/docker-compose.yaml | 2 +- client/test/e2e-setup.sh | 120 +- client/test/specs/dashboard.js | 6 +- client/test/specs/network_view.js | 2 +- package.json | 15 +- scripts/verify-license.sh | 2 +- 460 files changed, 42936 insertions(+), 12952 deletions(-) create mode 100644 app/platform/fabric/e2e-test/chaincodes/auctionapp/art.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/auctionapp/image_proc_api.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/auctionapp/table_api.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/autovendor/chaincode/main.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/autovendor/directdep/core.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/autovendor/indirectdep/core.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/badimport/main.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/example02/node/chaincode_example02.js create mode 100644 app/platform/fabric/e2e-test/chaincodes/example02/node/package.json create mode 100644 app/platform/fabric/e2e-test/chaincodes/map_private/go/map_private.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/mapkeys/go/map.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/mapkeys/go/mapkeys.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/marbles/node/marbles_chaincode.js create mode 100644 app/platform/fabric/e2e-test/chaincodes/marbles/node/package.json create mode 100644 app/platform/fabric/e2e-test/chaincodes/marbles02_private/marbles_chaincode.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/samplecc/go/chaincode_sample.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/samplecc/java/build.gradle create mode 100755 app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew create mode 100644 app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew.bat create mode 100644 app/platform/fabric/e2e-test/chaincodes/samplecc/java/settings.gradle create mode 100644 app/platform/fabric/e2e-test/chaincodes/samplecc/java/src/main/java/org/hyperledger/fabric/example/SampleCC.java create mode 100644 app/platform/fabric/e2e-test/chaincodes/samplecc/node/chaincode_sample.js create mode 100644 app/platform/fabric/e2e-test/chaincodes/samplecc/node/package.json create mode 100644 app/platform/fabric/e2e-test/chaincodes/sbe/chaincode.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/sbe/chaincode_test.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.pb.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.proto create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/plob.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/vendor.zip create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.1-shim/chaincode/data.pb.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.1-shim/chaincode/data.proto create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.1-shim/chaincode/plob.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.1-shim/chaincode/vendor.zip create mode 100644 app/platform/fabric/e2e-test/chaincodes/shimApiDriver/go/shimAPIDriver.go create mode 100644 app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/package.json create mode 100644 app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/shimApiDriver.js delete mode 100644 app/platform/fabric/e2e-test/configs/network-config.json delete mode 100644 app/platform/fabric/e2e-test/docker-compose/docker-compose-solo.yml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/.gitignore delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/README.md delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/create-channel.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/helper.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/install-chaincode.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/instantiate-chaincode.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/invoke-transaction.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/join-channel.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/query.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/update-anchor-peers.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/base.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/Org1MSPanchors.tx delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/Org2MSPanchors.tx delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/configtx.yaml delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/fdee12a3510fde3155c37128cfec26090ae249bfbca28f884e60c21338493edd_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/27ccb54a06020260c66c65bec91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/User1@org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk delete mode 120000 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/sk delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/cryptogen.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/genesis.block delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/mychannel.tx delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose-explorer.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config-aws.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org1.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org2.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/node/example_cc.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.js delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.json delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/package.json delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/runApp.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/testAPIs.sh delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/.gitignore delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/README.md delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/chaincode.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/channel.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/index.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/users.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/utils.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app_config.json delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/config.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/interfaces.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/chaincode.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/channel.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/helper.ts delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/network-config.json delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/package.json delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/runApp.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/testAPIs.sh delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tsconfig.json delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tslint.json rename app/platform/fabric/e2e-test/fabric-samples/{balance-transfer/artifacts/src/github.com/example_cc/go/example_cc.go => chaincode/abac/go/abac.go} (76%) create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/LICENSE create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/clone.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/decode.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/deprecated.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/discard.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/encode.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/equal.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/extensions.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/lib.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/message_set.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_reflect.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/properties.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_marshal.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_merge.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_unmarshal.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text_parser.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/LICENSE create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/attrmgr/attrmgr.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/README.md create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/cid.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/interfaces.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.pb.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.proto create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.pb.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.proto create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.pb.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.proto create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/LICENSE create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/README.md create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/appveyor.yml create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/errors.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/stack.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/vendor.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/.gitignore create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/build.gradle create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/settings.gradle create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/src/main/java/org/hyperledger/fabric/example/SimpleChaincode.java create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/chaincode_example02.js create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/package.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/go/fabcar.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/.gitignore create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/README.md create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/build.gradle create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/checkstyle.xml create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/suppressions.xml create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradle/wrapper/gradle-wrapper.jar create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradle/wrapper/gradle-wrapper.properties create mode 100755 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradlew create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradlew.bat create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/settings.gradle create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/Car.java create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/CarTest.java create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript-low-level/fabcar.js rename app/platform/fabric/e2e-test/fabric-samples/{balance-transfer/artifacts/src/github.com/example_cc/node => chaincode/fabcar/javascript-low-level}/package.json (62%) create mode 100755 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.editorconfig create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintignore create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintrc.js create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.gitignore create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/index.js create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/lib/fabcar.js create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/package.json create mode 100755 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.editorconfig create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.gitignore create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/package.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/car.ts create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/fabcar.ts create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/index.ts create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tsconfig.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tslint.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/META-INF/statedb/couchdb/indexes/indexOwner.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/marbles_chaincode.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/META-INF/statedb/couchdb/indexes/indexOwner.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/marbles_chaincode.js create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/package.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/collections_config.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/META-INF/statedb/couchdb/collections/collectionMarbles/indexes/indexOwner.json create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/marbles_chaincode_private.go create mode 100644 app/platform/fabric/e2e-test/fabric-samples/chaincode/sacc/sacc.go delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/.env delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/.gitignore delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/README.md delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/base/docker-compose-base.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/base/peer-base.yaml delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/byfn.sh delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/channel-artifacts/.gitkeep delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/configtx.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.json delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.json delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.json delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/crypto-config.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-ca.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-cli.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch-org3.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-e2e-template.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2-behave.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-explorer.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-kafka.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-org3.yaml delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/eyfn.sh delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/configtx.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/org3-crypto.yaml delete mode 100644 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/capabilities.json delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/script.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step1org3.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step2org3.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step3org3.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/testorg3.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/upgrade_to_v14.sh delete mode 100755 app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/utils.sh create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/README.md create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_example.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_test.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/utils.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/eventsender/eventsender.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/chaincode.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/cmd/main.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode_test.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/cmd/main.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode_test.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/cmd/main.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode_test.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/cmd/main.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode_test.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/cmd/main.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/map/map.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/META-INF/statedb/couchdb/indexes/indexOwner.json create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/marbles_chaincode.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/passthru/passthru.go create mode 100644 app/platform/fabric/e2e-test/fabric/examples/chaincode/go/sleeper/sleeper.go rename app/platform/fabric/e2e-test/{ => feature}/.env (88%) create mode 100644 app/platform/fabric/e2e-test/feature/CouchDB_index.feature create mode 100644 app/platform/fabric/e2e-test/feature/README.rst create mode 100644 app/platform/fabric/e2e-test/feature/bootstrap.feature create mode 100644 app/platform/fabric/e2e-test/feature/chaincodes.feature rename app/platform/fabric/e2e-test/{steps => feature/common}/__init__.py (73%) create mode 100644 app/platform/fabric/e2e-test/feature/common/common_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/common/common_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/common/configtx_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/common/configtx_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/common/configuration_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/common/configuration_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/common/ledger_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/common/ledger_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/common/policies_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/common/policies_pb2_grpc.py rename app/platform/fabric/e2e-test/{ => feature}/configs/configtx.yaml (86%) rename app/platform/fabric/e2e-test/{ => feature}/configs/crypto.yaml (90%) rename app/platform/fabric/e2e-test/{ => feature}/configs/fabric-ca-server-config.yaml (100%) create mode 100644 app/platform/fabric/e2e-test/feature/configs/network-config.json rename app/platform/fabric/e2e-test/{ => feature}/docker-compose/docker-compose-base.yml (100%) rename app/platform/fabric/e2e-test/{ => feature}/docker-compose/docker-compose-cli.yml (100%) rename app/platform/fabric/e2e-test/{ => feature}/docker-compose/docker-compose-couchdb.yml (100%) rename app/platform/fabric/e2e-test/{ => feature}/docker-compose/docker-compose-explorer.yaml (88%) create mode 100644 app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-kafka-sd.yml rename app/platform/fabric/e2e-test/{ => feature}/docker-compose/docker-compose-kafka.yml (77%) rename app/platform/fabric/e2e-test/{ => feature}/docker-compose/docker-compose-peer-org3.yml (100%) create mode 100644 app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-solo.yml rename app/platform/fabric/e2e-test/{ => feature}/environment.py (73%) rename app/platform/fabric/e2e-test/{ => feature}/explorer-configs/config-balance-transfer.json (100%) rename app/platform/fabric/e2e-test/{ => feature}/explorer-configs/config-first-network.json (100%) rename app/platform/fabric/e2e-test/{ => feature}/explorer-configs/config-solo-tls-disabled.json (100%) rename app/platform/fabric/e2e-test/{ => feature}/explorer-configs/connection-profile/balance-transfer.json (86%) rename app/platform/fabric/e2e-test/{ => feature}/explorer-configs/connection-profile/first-network.json (100%) rename app/platform/fabric/e2e-test/{ => feature}/explorer-configs/connection-profile/solo-tls-disabled.json (100%) rename app/platform/fabric/e2e-test/{ => feature}/explorer.feature (60%) create mode 100644 app/platform/fabric/e2e-test/feature/explorer_gui_e2e.feature create mode 100644 app/platform/fabric/e2e-test/feature/fabric-ca.feature create mode 100644 app/platform/fabric/e2e-test/feature/gossip.feature create mode 100644 app/platform/fabric/e2e-test/feature/ledger.feature create mode 100644 app/platform/fabric/e2e-test/feature/orderer.feature create mode 100644 app/platform/fabric/e2e-test/feature/package.json create mode 100644 app/platform/fabric/e2e-test/feature/peer.feature create mode 100644 app/platform/fabric/e2e-test/feature/peer/__init__.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/admin_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/admin_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/chaincode_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/chaincode_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/configuration_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/configuration_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/events_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/events_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/peer_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/peer_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/proposal_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/proposal_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/query_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/query_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/resources_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/resources_pb2_grpc.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/transaction_pb2.py create mode 100644 app/platform/fabric/e2e-test/feature/peer/transaction_pb2_grpc.py rename app/platform/fabric/e2e-test/{ => feature}/requirement.txt (100%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/jar-with-dependencies-exclude-resources.xml (100%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/package.sh (85%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/pom.xml (100%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/src/META-INF/MANIFEST.MF (100%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/CreateAppUser.java (74%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/PeerOperations.java (99%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppEnrollment.java (89%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppPrivateKey.java (88%) rename app/platform/fabric/e2e-test/{ => feature}/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppUser.java (98%) create mode 100644 app/platform/fabric/e2e-test/feature/sdk/node/common.js create mode 100644 app/platform/fabric/e2e-test/feature/sdk/node/invoke.js create mode 100644 app/platform/fabric/e2e-test/feature/sdk/node/query.js create mode 100644 app/platform/fabric/e2e-test/feature/steps/__init__.py rename app/platform/fabric/e2e-test/{ => feature}/steps/basic_impl.py (99%) rename app/platform/fabric/e2e-test/{ => feature}/steps/bootstrap_impl.py (100%) rename app/platform/fabric/e2e-test/{ => feature}/steps/common_util.py (100%) rename app/platform/fabric/e2e-test/{ => feature}/steps/compose_util.py (99%) rename app/platform/fabric/e2e-test/{ => feature}/steps/config_util.py (99%) rename app/platform/fabric/e2e-test/{ => feature}/steps/database_util.py (100%) rename app/platform/fabric/e2e-test/{ => feature}/steps/endorser_impl.py (99%) rename app/platform/fabric/e2e-test/{ => feature}/steps/endorser_util.py (97%) rename app/platform/fabric/e2e-test/{ => feature}/steps/explorer_impl.py (67%) rename app/platform/fabric/e2e-test/{ => feature}/steps/json_responses.py (97%) rename app/platform/fabric/e2e-test/{ => feature}/steps/orderer_impl.py (98%) rename app/platform/fabric/e2e-test/{ => feature}/steps/orderer_util.py (71%) rename app/platform/fabric/e2e-test/{ => feature}/steps/remote_util.py (100%) rename app/platform/fabric/e2e-test/{ => feature}/steps/request_util.py (100%) delete mode 100644 app/platform/fabric/e2e-test/package.json delete mode 100644 app/platform/fabric/e2e-test/sdk/node/common.js delete mode 100644 app/platform/fabric/e2e-test/sdk/node/invoke.js delete mode 100644 app/platform/fabric/e2e-test/sdk/node/query.js diff --git a/app/platform/fabric/e2e-test/.gitignore b/app/platform/fabric/e2e-test/.gitignore index ec17d979f..7f6283318 100644 --- a/app/platform/fabric/e2e-test/.gitignore +++ b/app/platform/fabric/e2e-test/.gitignore @@ -1,9 +1,3 @@ -# -# SPDX-License-Identifier: Apache-2.0 -# - -**/**/*.pyc -node_modules -package-lock.json -configs/*/ -e2e-test/ \ No newline at end of file +*.pyc +feature/configs +*combehavesyschanAnchor.tx diff --git a/app/platform/fabric/e2e-test/README.md b/app/platform/fabric/e2e-test/README.md index fb6012e01..6e00a1b98 100644 --- a/app/platform/fabric/e2e-test/README.md +++ b/app/platform/fabric/e2e-test/README.md @@ -7,49 +7,54 @@ Feature: Bootstrapping Hyperledger Explorer As a user I want to be able to bootstrap Hyperledger Explorer - Scenario: Bring up explorer with tls-disabled fabric network and retrieve channel list successfully - Given I have a bootstrapped fabric network of type solo without tls + Scenario Outline: : Bring up explorer and send requests to the basic REST API functions successfully + Given I have a bootstrapped fabric network of type + Given the NETWORK_PROFILE environment variable is solo-tls-disabled + When an admin sets up a channel named "mychannel" + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" on channel "mychannel" + When a user invokes on the channel "mychannel" using chaincode named "mycc" with args ["invoke","a","b","10"] + When I wait "3" seconds + When a user queries on the channel "mychannel" using chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + When I start explorer - Then the logs on explorer.mynetwork.com contains "Synchronizer pid is " within 10 seconds + Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds - Given I wait "5" seconds + # Need to wait enough until completing process a new BlockEvent + Given I wait "20" seconds Given I set base URL to "http://localhost:8090" - When I make a POST request to "auth/login" with parameters - |user |password |network | - |test |test |first-network | + When I make a GET request to "auth/networklist" Then the response status code should equal 200 - Then the response structure should equal "loginResp" - Then JSON at path ".success" should equal true - Then JSON at path ".user.message" should equal "logged in" - Then JSON at path ".user.name" should equal "test" - - Given JSON at path ".success" should equal true - Given I want to reuse "token" parameter - Given I set Authorization header to "context.token" - When I make a GET request to "api/channels" - Then the response status code should equal 200 - Then the response structure should equal "channelsResp" - Then JSON at path ".channels" should equal ["mychannel"] + Then the response structure should equal "networklistResp" + Then JSON at path ".networkList" should equal [[ "first-network", {} ]] ``` # Setup -## Pull fabric images +## Download tools & pull fabric images ``` -$ cd /some/where/fabric-samples -$ ./scripts/bootstrap.sh +$ curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.4 1.4.4 0.4.18 -s ``` -## Build Explorer / Explorer-DB image +## Prepare Explorer / Explorer-DB image + +### Build images ``` $ cd /some/where/blockchain-explorer $ ./build_docker_image.sh ``` +### Pull images + +``` +$ docker pull hyperledger/explorer +$ docker pull hyperledger/explorer-db +``` + ## Install python & pip ### For Linux (Ubuntu) @@ -73,7 +78,7 @@ $ pip --version ``` $ apt-get install virtualenv -$ cd /some/where/blockchain-explorer/app/platform/fabric/e2e-test +$ cd /some/where/blockchain-explorer/app/platform/fabric/e2e-test/feature $ virtualenv e2e-test $ source e2e-test/bin/activate (e2e-test) $ @@ -83,7 +88,7 @@ $ source e2e-test/bin/activate ``` $ pip install virtualenv -$ cd /some/where/blockchain-explorer/app/platform/fabric/e2e-test +$ cd /some/where/blockchain-explorer/app/platform/fabric/e2e-test/feature $ virtualenv e2e-test $ source e2e-test/bin/activate (e2e-test) $ @@ -92,14 +97,14 @@ $ source e2e-test/bin/activate ## Install required packages ``` -# At /some/where/blockchain-explorer/app/platform/fabric/e2e-test on virtual env +# At /some/where/blockchain-explorer/app/platform/fabric/e2e-test/feature on virtual env (e2e-test) $ pip install -r requirement.txt ``` # Run test scenarios ``` -# At /some/where/blockchain-explorer/app/platform/fabric/e2e-test on virtual env +# At /some/where/blockchain-explorer/app/platform/fabric/e2e-test/feature on virtual env (e2e-test) $ behave ./explorer.feature ``` @@ -131,8 +136,8 @@ $ npm run e2e-test * To preserve the test runtime environment without clean up when finishing test ```diff - --- a/app/platform/fabric/e2e-test/explorer.feature - +++ b/app/platform/fabric/e2e-test/explorer.feature + --- a/app/platform/fabric/e2e-test/feature/explorer.feature + +++ b/app/platform/fabric/e2e-test/feature/explorer.feature @@ -145,7 +149,7 @@ Scenario: [balance-transfer] Register a new user and enroll successfully Then the response parameter "status" should equal 200 @@ -144,19 +149,59 @@ $ npm run e2e-test Given the NETWORK_PROFILE environment variable is first-network ``` +# How to upgrade fabric-test environment + +All files copied from the original fabric-test repository have not been modified. When upgrading the baseline of fabric-test, you only need to override them. + +``` +$ git clone --recurse-submodules https://github.com/hyperledger/fabric-test.git -b release-1.4 +$ cd fabric-test +$ git checkout --recurse-submodules 64a5e04 # Choose a certain commit hash to be used for this upgrade +$ find fabric/examples/chaincode fabric-samples/chaincode chaincodes/ feature/ -type f | zip fabric-test_64a5e04.zip -@ +$ cd /some/where/blockchain-explorer/app/platform/fabric/e2e-test +$ unzip -o /some/where/fabric-test_64a5e04.zip +``` + +## Added files for e2e-test environment + +To add e2e-test support to explorer, we have added the following files over the original files from fabric-test repository. + +``` +app/platform/fabric/e2e-test/ + .gitignore + README.md + feature/ + explorer.feature + explorer_gui_e2e.feature + requirement.txt + docker-compose/ + docker-compose-explorer.yaml + docker-compose-kafka-sd.yml + explorer-configs/ + steps/ + explorer_impl.py + json_responses.py +``` + # Project Structure -Feature files are intended to locate in `/app/platform/fabric/e2e-test` folder. Corresponding steps are located in `/app/platform/fabric/e2e-test/steps`. +Feature files are intended to locate in `/app/platform/fabric/e2e-test/feature` folder. Corresponding steps are located in `/app/platform/fabric/e2e-test/feature/steps`. Overall project structure is as follows: ``` -app/platform/fabric/e2e-test/ +app/platform/fabric/e2e-test/chaincodes/ // hyperledger/fabric-test +app/platform/fabric/e2e-test/fabric/ // hyperledger/fabric-test +app/platform/fabric/e2e-test/fabric-samples/ // hyperledger/fabric-test +app/platform/fabric/e2e-test/fabric-sdk-java/ // hyperledger/fabric-test +app/platform/fabric/e2e-test/feature/ // hyperledger/fabric-test -+-- requirements.txt // store python requirements ++-- requirement.txt // store python requirements +-- environment.py // contains common actions related to scenarios (e.g. clearing headers after running each feature file) -+-- explorer.feature // feature files (Test Scenarios) ++-- explorer.feature // feature files (Test Scenarios) + ++-- explorer_gui_e2e.feature // feature files for GUI e2e test scenario +-- configs/ @@ -174,7 +219,7 @@ app/platform/fabric/e2e-test/ +-- docker-compose-explorer.yaml // definition of containers to bring up Hyperledger Explorer / Explorer DB - +-- config.json // Configuration file for Hyperledger Explorer + +-- docker-compose-kafka-sd.yml // definition of containers to add configurations for service discovery to fabric network +-- explorer-configs/ // Configuration and Profile for each scenario // You can specify which environments should be in use on each scenario by defining NETWORK_PROFILE env variable @@ -185,25 +230,19 @@ app/platform/fabric/e2e-test/ +-- ${NETWORK_PROFILE}.json -+-- fabric-samples/ // Cloned from fabric-samples repo with tag:v1.4.0 - // Some docker-compose files and scripts are modified a little bit for this BDD env - - +-- balance-transfer/ - - +-- first-network/ - +-- chaincode/ +-- steps/ - +-- explorer_impl.py // New added steps for the e2e test of Hyperledger Explorer - +-- *_impl.py // Existing steps for fabric-test repository environment to manipulating fabric network and asserting status +-- *_util.py // Utility functions for fabric-test repository environment + +-- explorer_impl.py // New added steps for the e2e test of Hyperledger Explorer + +-- json_responses.py // response data structures described in Trafaret format +app/platform/fabric/e2e-test/README.md ``` Mainly we'll update `explorer.feature`, `steps/explorer_impl.py` and `steps/json_responses.py` to cover more scenarios. diff --git a/app/platform/fabric/e2e-test/chaincodes/auctionapp/art.go b/app/platform/fabric/e2e-test/chaincodes/auctionapp/art.go new file mode 100644 index 000000000..9d0252561 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/auctionapp/art.go @@ -0,0 +1,2600 @@ +/* +Copyright IT People Corp. 2017 All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 + +*/ + +/////////////////////////////////////////////////////////////////////// +// Author : IT People - Mohan Venkataraman - Auction API for v1.0 +// Purpose: Explore the Hyperledger/fabric and understand +// how to write an chain code, application/chain code boundaries +// The code is not the best as it has just hammered out in a day or two +// Feedback and updates are appreciated +/////////////////////////////////////////////////////////////////////// + +package main + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "os" + "runtime" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +/////////////////////////////////////////////////////////////////////////////////////// +// This creates a record of the Asset (Inventory) +// Includes Description, title, certificate of authenticity or image whatever..idea is to checkin a image and store it +// in encrypted form +// Example: +// Item { 113869, "Flower Urn on a Patio", "Liz Jardine", "10102007", "Original", "Floral", "Acrylic", "15 x 15 in", "sample_9.png","$600", "My Gallery } +/////////////////////////////////////////////////////////////////////////////////////// + +type ItemObject struct { + ItemID string + RecType string + ItemDesc string + ItemDetail string // Could included details such as who created the Art work if item is a Painting + ItemDate string + ItemType string + ItemSubject string + ItemMedia string + ItemSize string + ItemPicFN string + ItemImage []byte // This has to be generated AES encrypted using the file name + AES_Key []byte // This is generated by the AES Algorithms + ItemImageType string // should be used to regenerate the appropriate image type + ItemBasePrice string // Reserve Price at Auction must be greater than this price + CurrentOwnerID string // This is validated for a user registered record + TimeStamp string // This is the time stamp +} + +//////////////////////////////////////////////////////////////////////////////// +// Has an item entry every time the item changes hands +//////////////////////////////////////////////////////////////////////////////// +type ItemLog struct { + ItemID string // PRIMARY KEY + Status string // SECONDARY KEY - OnAuc, OnSale, NA + AuctionedBy string // SECONDARY KEY - Auction House ID if applicable + RecType string // ITEMHIS + ItemDesc string + CurrentOwner string + Date string // Date when status changed +} + +///////////////////////////////////////////////////////////// +// Create Buyer, Seller , Auction House, Authenticator +// Could establish valid UserTypes - +// AH (Auction House) +// TR (Buyer or Seller) +// AP (Appraiser) +// IN (Insurance) +// BK (bank) +// SH (Shipper) +///////////////////////////////////////////////////////////// +type UserObject struct { + UserID string + RecType string // Type = USER + Name string + UserType string // Auction House (AH), Bank (BK), Buyer or Seller (TR), Shipper (SH), Appraiser (AP) + Address string + Phone string + Email string + Bank string + AccountNo string + RoutingNo string + Timestamp string +} + +///////////////////////////////////////////////////////////////////////////// +// Register a request for participating in an auction +// Usually posted by a seller who owns a piece of ITEM +// The Auction house will determine when to open the item for Auction +// The Auction House may conduct an appraisal and genuineness of the item +///////////////////////////////////////////////////////////////////////////// + +type AuctionRequest struct { + AuctionID string + RecType string // AUCREQ + ItemID string + AuctionHouseID string // ID of the Auction House managing the auction + SellerID string // ID Of Seller - to verified against the Item CurrentOwnerId + RequestDate string // Date on which Auction Request was filed + ReservePrice string // reserver price > previous purchase price + BuyItNowPrice string // 0 (Zero) if not applicable else specify price + Status string // INIT, OPEN, CLOSED (To be Updated by Trgger Auction) + OpenDate string // Date on which auction will occur (To be Updated by Trigger Auction) + CloseDate string // Date and time when Auction will close (To be Updated by Trigger Auction) + TimeStamp string // The transaction Date and Time +} + +///////////////////////////////////////////////////////////// +// POST the transaction after the Auction Completes +// Post an Auction Transaction +// Post an Updated Item Object +// Once an auction request is opened for auctions, a timer is kicked +// off and bids are accepted. When the timer expires, the highest bid +// is selected and converted into a Transaction +// This transaction is a simple view +///////////////////////////////////////////////////////////// + +type ItemTransaction struct { + AuctionID string + RecType string // POSTTRAN + ItemID string + TransType string // Sale, Buy, Commission + UserId string // Buyer or Seller ID + TransDate string // Date of Settlement (Buyer or Seller) + HammerTime string // Time of hammer strike - SOLD + HammerPrice string // Total Settlement price + Details string // Details about the Transaction +} + +//////////////////////////////////////////////////////////////// +// This is a Bid. Bids are accepted only if an auction is OPEN +//////////////////////////////////////////////////////////////// + +type Bid struct { + AuctionID string + RecType string // BID + BidNo string + ItemID string + BuyerID string // ID Of Buyer - to be verified against the Item CurrentOwnerId + BidPrice string // BidPrice > Previous Bid + BidTime string // Time the bid was received +} + +////////////////////////////////////////////////////////////// +// Invoke Functions based on Function name +// The function name gets resolved to one of the following calls +// during an invoke +// +////////////////////////////////////////////////////////////// +func InvokeFunction(fname string) func(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + InvokeFunc := map[string]func(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response{ + "iPostItem": PostItem, + "iPostUser": PostUser, + "iPostAuctionRequest": PostAuctionRequest, + "iPostTransaction": PostTransaction, + "iPostBid": PostBid, + "iOpenAuctionForBids": OpenAuctionForBids, + "iBuyItNow": BuyItNow, + "iTransferItem": TransferItem, + "iCloseAuction": CloseAuction, + "iCloseOpenAuctions": CloseOpenAuctions, + "iDownloadImages": DownloadImages, + } + return InvokeFunc[fname] +} + +////////////////////////////////////////////////////////////// +// Query Functions based on Function name +// +////////////////////////////////////////////////////////////// +func QueryFunction(fname string) func(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + QueryFunc := map[string]func(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response{ + "qGetItem": GetItem, + "qGetUser": GetUser, + "qGetAuctionRequest": GetAuctionRequest, + "qGetTransaction": GetTransaction, + "qGetBid": GetBid, + "qGetLastBid": GetLastBid, + "qGetHighestBid": GetHighestBid, + "qGetNoOfBidsReceived": GetNoOfBidsReceived, + "qGetListOfBids": GetListOfBids, + "qGetItemLog": GetItemLog, + "qGetItemListByCat": GetItemListByCat, + "qGetUserListByCat": GetUserListByCat, + "qGetListOfInitAucs": GetListOfInitAucs, + "qGetListOfOpenAucs": GetListOfOpenAucs, + "qValidateItemOwnership": ValidateItemOwnership, + } + return QueryFunc[fname] +} + +///////////////////////////////////////////////////////////////////////////////////////////////////// +// We are storing the PictureMap as a Key/Value pair to download the images on the container. +// This was done to run the Daily/Weeky Test Cases from CLI +///////////////////////////////////////////////////////////////////////////////////////////////////// + +//func GetPictureUrl(picname string) string { +var PictureMap = map[string]string{ + "art1.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/art1.png", + "art2.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/art2.png", + "art3.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/art3.png", + "art4.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/art4.png", + "art5.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/art5.png", + "art6.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/art6.png", + "art7.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/art7.png", + "item-001.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-001.jpg", + "item-002.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-002.jpg", + "item-003.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-003.jpg", + "item-004.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-004.jpg", + "item-005.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-005.jpg", + "item-006.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-006.jpg", + "item-007.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-007.jpg", + "item-008.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/item-008.jpg", + "people.gif": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/people.gif", + "mad-fb.jpg": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/mad-fb.gif", + "sample.png": "https://raw.githubusercontent.com/ITPeople-Blockchain/auction/v0.6/art/artchaincode/sample.png", +} + +type SimpleChaincode struct { +} + +//////////////////////////////////////////////////////////////////////////////// +// Chain Code Kick-off Main function +//////////////////////////////////////////////////////////////////////////////// +func main() { + + // maximize CPU usage for maximum performance + runtime.GOMAXPROCS(runtime.NumCPU()) + fmt.Println("Starting Item Auction Application chaincode BlueMix ver 21 Dated 2016-07-02 09.45.00: ") + + //ccPath = fmt.Sprintf("%s/src/github.com/hyperledger/fabric/auction/art/artchaincode/", gopath) + // Start the shim -- running the fabric + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Println("Error starting Item Fun Application chaincode: %s", err) + } + +} + +///////////////////////////////////////////////////////////////////////////////////////////////////// +// We are storing the PictureMap as a Key/Value pair to download the images on the container. +// This was done to run the Daily/Weeky Test Cases from CLI +///////////////////////////////////////////////////////////////////////////////////////////////////// + +func downloadFile(filepath string, url string) (err error) { + + // Create the file + out, err := os.Create(filepath) + if err != nil { + return err + } + defer out.Close() + + // Get the data + resp, err := http.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + + // Writer the body to file + _, err = io.Copy(out, resp.Body) + if err != nil { + return err + } + + return nil +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// SimpleChaincode - Init Chaincode implementation - The following sequence of transactions can be used to test the Chaincode +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + + // TODO - Include all initialization to be complete before Invoke and Query + // Uses aucTables to delete tables if they exist and re-create them + + //myLogger.Info("[Trade and Auction Application] Init") + fmt.Println("[Trade and Auction Application] Init") + fmt.Println("\nInit() Initialization Complete ") + return shim.Success(nil) +} + +//////////////////////////////////////////////////////////////// +// SimpleChaincode - INVOKE Chaincode implementation +// User Can Invoke +// - Register a user using PostUser +// - Register an item using PostItem +// - The Owner of the item (User) can request that the item be put on auction using PostAuctionRequest +// - The Auction House can request that the auction request be Opened for bids using OpenAuctionForBids +// - One the auction is OPEN, registered buyers (Buyers) can send in bids vis PostBid +// - No bid is accepted when the status of the auction request is INIT or CLOSED +// - Either manually or by OpenAuctionRequest, the auction can be closed using CloseAuction +// - The CloseAuction creates a transaction and invokes PostTransaction +//////////////////////////////////////////////////////////////// + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + + function, args := stub.GetFunctionAndParameters() + fmt.Println("==========================================================") + fmt.Println("BEGIN Function ====> ", function) + if function[0:1] == "i" { + fmt.Println("==========================================================") + return t.invoke(stub, function, args) + } + + if function[0:1] == "q" { + fmt.Println("==========================================================") + return t.query(stub, function, args) + } + + fmt.Println("==========================================================") + + return shim.Error("Invoke: Invalid Function Name - function names begin with a q or i") + +} + +//////////////////////////////////////////////////////////////// +// SimpleChaincode - INVOKE Chaincode implementation +// User Can Invoke +// - Register a user using PostUser +// - Register an item using PostItem +// - The Owner of the item (User) can request that the item be put on auction using PostAuctionRequest +// - The Auction House can request that the auction request be Opened for bids using OpenAuctionForBids +// - One the auction is OPEN, registered buyers (Buyers) can send in bids vis PostBid +// - No bid is accepted when the status of the auction request is INIT or CLOSED +// - Either manually or by OpenAuctionRequest, the auction can be closed using CloseAuction +// - The CloseAuction creates a transaction and invokes PostTransaction +//////////////////////////////////////////////////////////////// + +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Check Type of Transaction and apply business rules + // before adding record to the block chain + // In this version, the assumption is that args[1] specifies recType for all defined structs + // Newer structs - the recType can be positioned anywhere and ChkReqType will check for recType + // example: + // ./peer chaincode invoke -l golang -n mycc -c '{"Function": "PostBid", "Args":["1111", "BID", "1", "1000", "300", "1200"]}' + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + if ChkRecType(args) == true { + + InvokeRequest := InvokeFunction(function) + if InvokeRequest != nil { + response := InvokeRequest(stub, function, args) + return (response) + } + } else { + fmt.Println("Invoke() Invalid recType : ", args, "\n") + error_str := "Invoke() : Invalid recType : " + args[0] + return shim.Error(error_str) + } + + return shim.Success(nil) +} + +////////////////////////////////////////////////////////////////////////////////////////// +// SimpleChaincode - query Chaincode implementation +// Client Can Query +// Sample Data +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetUser", "Args": ["4000"]}' +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetItem", "Args": ["2000"]}' +////////////////////////////////////////////////////////////////////////////////////////// + +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + // var buff []byte + var response pb.Response + fmt.Println("Query() : ID Extracted and Type = ", args[0]) + fmt.Println("Query() : Args supplied : ", args) + + if len(args) < 1 { + fmt.Println("Query() : Include at least 1 arguments Key ") + return shim.Error("Query() : Expecting Transaction type and Key value for query") + } + + QueryRequest := QueryFunction(function) + if QueryRequest != nil { + response = QueryRequest(stub, function, args) + } else { + fmt.Println("Query() Invalid function call : ", function) + response_str := "Query() : Invalid function call : " + function + return shim.Error(response_str) + } + + if response.Status != shim.OK { + fmt.Println("Query() Object not found : ", args[0]) + response_str := "Query() : Object not found : " + args[0] + return shim.Error(response_str) + } + return response +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Download Images into Peer +////////////////////////////////////////////////////////////////////////////////////////// +func DownloadImages(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + fmt.Println("[Trade and Auction Application] DownloadImages") + var err error + for k, v := range PictureMap { + fmt.Printf("\n Downloading Image '%s' from URL: %s", k, v) + err = downloadFile(k, v) + if err != nil { + fmt.Println(err) + return shim.Error("Invoke: Invalid Function Name - function names begin with a q or i") + } + } + fmt.Println("\nDownloadImages() Complete ") + return shim.Success(nil) +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Retrieve User Information +// example: +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetUser", "Args": ["100"]}' +// +////////////////////////////////////////////////////////////////////////////////////////// +func GetUser(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var err error + + // Get the Object and Display it + Avalbytes, err := QueryObject(stub, "User", args) + if err != nil { + fmt.Println("GetUser() : Failed to Query Object ") + jsonResp := "{\"Error\":\"Failed to get Object Data for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + fmt.Println("GetUser() : Incomplete Query Object ") + jsonResp := "{\"Error\":\"Incomplete information about the key for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + fmt.Println("GetUser() : Response : Successful -") + return shim.Success(Avalbytes) +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Query callback representing the query of a chaincode +// Retrieve a Item by Item ID +// QueryObjectWithProcessingFunction takes a post processing function as argument +// peer chaincode query -l golang -n mycc -c '{"Args": ["qGetItem", "1000"]} +// +///////////////////////////////////////////////////////////////////////////////////////// +func GetItem(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var err error + + // Get the Objects and Display it + Avalbytes, err := QueryObjectWithProcessingFunction(stub, "Item", args, ProcessQueryResult) + if err != nil { + fmt.Println("GetItem() : Failed to Query Object ") + jsonResp := "{\"Error\":\"Failed to get Object Data for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + fmt.Println("GetItem() : Incomplete Query Object ") + jsonResp := "{\"Error\":\"Incomplete information about the key for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + // Masking ItemImage binary data + itemObj, _ := JSONtoAR(Avalbytes) + itemObj.ItemImage = []byte{} + Avalbytes, _ = ARtoJSON(itemObj) + + fmt.Println("GetItem() : Response : Successful ") + return shim.Success(Avalbytes) +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Validates The Ownership of an Asset using ItemID, OwnerID, and HashKey +// +// peer chaincode query -l golang -n mycc -c '{"Function": "ValidateItemOwnership", "Args": ["1000", "100", "tGEBaZuKUBmwTjzNEyd+nr/fPUASuVJAZ1u7gha5fJg="]}' +// +///////////////////////////////////////////////////////////////////////////////////////// +func ValidateItemOwnership(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var err error + + if len(args) < 3 { + fmt.Println("ValidateItemOwnership() : Requires 3 arguments Item#, Owner# and Key ") + return shim.Error("ValidateItemOwnership() : Requires 3 arguments Item#, Owner# and Key") + } + + // Get the Object Information + Avalbytes, err := QueryObject(stub, "Item", []string{args[0]}) + if err != nil { + fmt.Println("ValidateItemOwnership() : Failed to Query Object ") + jsonResp := "{\"Error\":\"Failed to get Object Data for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + fmt.Println("ValidateItemOwnership() : Incomplete Query Object ") + jsonResp := "{\"Error\":\"Incomplete information about the key for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + myItem, err := JSONtoAR(Avalbytes) + if err != nil { + fmt.Println("ValidateItemOwnership() : Failed to Query Object ") + jsonResp := "{\"Error\":\"Failed to get Object Data for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + myKey := GetKeyValue(Avalbytes, "AES_Key") + fmt.Println("Key String := ", myKey) + + if myKey != args[2] { + fmt.Println("ValidateItemOwnership() : Key does not match supplied key ", args[2], " - ", myKey) + jsonResp := "{\"Error\":\"ValidateItemOwnership() : Key does not match asset owner supplied key " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + if myItem.CurrentOwnerID != args[1] { + fmt.Println("ValidateItemOwnership() : ValidateItemOwnership() : Owner-Id does not match supplied ID ", args[1]) + jsonResp := "{\"Error\":\"ValidateItemOwnership() : Owner-Id does not match supplied ID " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + fmt.Print("ValidateItemOwnership() : Response : Successful - \n") + return shim.Success(Avalbytes) +} + +///////////////////////////////////////////////////////////////////////////////////////////////////// +// Retrieve Auction Information +// This query runs against the AuctionTable +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetAuctionRequest", "Args": ["1111"]}' +// There are two other tables just for query purposes - AucInitTable, AucOpenTable +// +///////////////////////////////////////////////////////////////////////////////////////////////////// +func GetAuctionRequest(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var err error + + // Get the Objects and Display it + Avalbytes, err := QueryObject(stub, "Auction", args) + if err != nil { + fmt.Println("GetAuctionRequest() : Failed to Query Object ") + jsonResp := "{\"Error\":\"Failed to get Object Data for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + fmt.Println("GetAuctionRequest() : Incomplete Query Object ") + jsonResp := "{\"Error\":\"Incomplete information about the key for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + fmt.Println("GetAuctionRequest() : Response : Successful - \n") + return shim.Success(Avalbytes) +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Retrieve a Bid based on two keys - AucID, BidNo +// A Bid has two Keys - The Auction Request Number and Bid Number +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetLastBid", "Args": ["1111", "1"]}' +// +/////////////////////////////////////////////////////////////////////////////////////////////////// +func GetBid(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var err error + + // Check there are 2 Arguments provided as per the struct - two are computed + // See example + if len(args) < 2 { + fmt.Println("GetBid(): Incorrect number of arguments. Expecting 2 ") + fmt.Println("GetBid(): ./peer chaincode query -l golang -n mycc -c '{\"Function\": \"GetBid\", \"Args\": [\"1111\",\"6\"]}'") + return shim.Error("GetBid(): Incorrect number of arguments. Expecting 2 ") + } + + // Get the Objects and Display it + Avalbytes, err := QueryObject(stub, "Bid", args) + if err != nil { + fmt.Println("GetBid() : Failed to Query Object ") + jsonResp := "{\"Error\":\"Failed to get Object Data for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + fmt.Println("GetBid() : Incomplete Query Object ") + jsonResp := "{\"Error\":\"Incomplete information about the key for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + fmt.Println("GetBid() : Response : Successful -") + return shim.Success(Avalbytes) +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Retrieve Auction Closeout Information. When an Auction closes +// The highest bid is retrieved and converted to a Transaction +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetTransaction", "Args": ["1111"]}' +// +/////////////////////////////////////////////////////////////////////////////////////////////////// +func GetTransaction(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + //var err error + + // Get the Objects and Display it + Avalbytes, err := QueryObject(stub, "Trans", args) + if Avalbytes == nil { + fmt.Println("GetTransaction() : Incomplete Query Object ") + jsonResp := "{\"Error\":\"Incomplete information about the key for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + if err != nil { + fmt.Println("GetTransaction() : Failed to Query Object ") + jsonResp := "{\"Error\":\"Failed to get Object Data for " + args[0] + "\"}" + return shim.Error(jsonResp) + } + + fmt.Println("GetTransaction() : Response : Successful") + return shim.Success(Avalbytes) +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Create a User Object. The first step is to have users +// registered +// There are different types of users - Traders (TRD), Auction Houses (AH) +// Shippers (SHP), Insurance Companies (INS), Banks (BNK) +// While this version of the chain code does not enforce strict validation +// the business process recommends validating each persona for the service +// they provide or their participation on the auction blockchain, future enhancements will do that +// ./peer chaincode invoke -l golang -n mycc -c '{"Function": "PostUser", "Args":["100", "USER", "Ashley Hart", "TRD", "Morrisville Parkway, #216, Morrisville, NC 27560", "9198063535", "ashley@itpeople.com", "SUNTRUST", "00017102345", "0234678"]}' +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func PostUser(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + record, err := CreateUserObject(args[0:]) // + if err != nil { + return shim.Error(err.Error()) + } + buff, err := UsertoJSON(record) // + + if err != nil { + error_str := "PostuserObject() : Failed Cannot create object buffer for write : " + args[1] + fmt.Println(error_str) + return shim.Error(error_str) + } else { + // Update the ledger with the Buffer Data + // err = stub.PutState(args[0], buff) + keys := []string{args[0]} + err = UpdateObject(stub, "User", keys, buff) + if err != nil { + fmt.Println("PostUser() : write error while inserting record") + return shim.Error("PostUser() : write error while inserting record : Error - " + err.Error()) + } + + // Post Entry into UserCat- i.e. User Category Table + keys = []string{"2016", args[3], args[0]} + err = UpdateObject(stub, "UserCat", keys, buff) + if err != nil { + error_str := "PostUser() : write error while inserting recordinto UserCat" + fmt.Println(error_str) + return shim.Error(error_str) + } + } + + return shim.Success(buff) +} + +func CreateUserObject(args []string) (UserObject, error) { + + var err error + var aUser UserObject + + // Check there are 11 Arguments + if len(args) != 11 { + fmt.Println("CreateUserObject(): Incorrect number of arguments. Expecting 11 ") + return aUser, errors.New("CreateUserObject() : Incorrect number of arguments. Expecting 11 ") + } + + // Validate UserID is an integer + + _, err = strconv.Atoi(args[0]) + if err != nil { + return aUser, errors.New("CreateUserObject() : User ID should be an integer") + } + + aUser = UserObject{args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]} + fmt.Println("CreateUserObject() : User Object : ", aUser) + + return aUser, nil +} + +///////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Create a master Object of the Item +// Since the Owner Changes hands, a record has to be written for each +// Transaction with the updated Encryption Key of the new owner +// Example +//./peer chaincode invoke -l golang -n mycc -c '{"Function": "PostItem", "Args":["1000", "ARTINV", "Shadows by Asppen", "Asppen Messer", "20140202", "Original", "Landscape" , "Canvas", "15 x 15 in", "sample_7.png","$600", "100", "2016-02-02 03:000:00"]}' +///////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func PostItem(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + itemObject, err := CreateItemObject(args[0:]) + if err != nil { + fmt.Println("PostItem(): Cannot create item object \n") + return shim.Error("PostItem(): Cannot create item object") + } + + // Check if the Owner ID specified is registered and valid + response := ValidateMember(stub, itemObject.CurrentOwnerID) + ownerInfo := response.Payload + fmt.Println("Owner information ", ownerInfo, itemObject.CurrentOwnerID) + if response.Status != shim.OK { + error_str := "PostItem() : Failed Owner information not found for " + itemObject.CurrentOwnerID + fmt.Println(error_str) + return shim.Error(error_str) + } + + // Convert Item Object to JSON + buff, err := ARtoJSON(itemObject) // + if err != nil { + error_str := "PostItem() : Failed Cannot create object buffer for write : " + args[1] + fmt.Println(error_str) + return shim.Error(error_str) + } else { + // Update the ledger with the Buffer Data + // err = stub.PutState(args[0], buff) + keys := []string{args[0]} + err = UpdateObject(stub, "Item", keys, buff) + if err != nil { + fmt.Println("PostItem() : write error while inserting record\n") + return shim.Error("PostItem() : write error while inserting record : " + err.Error()) + } + + // Put an entry into the Item History Table + response := PostItemLog(stub, itemObject, "INITIAL", "DEFAULT", args[12]) + if response.Status != shim.OK { + fmt.Println("PostItemLog() : write error while inserting record\n") + return shim.Error("PostItemLog() : write error while inserting record : Error : " + err.Error()) + } + + // Post Entry into ItemCatTable - i.e. Item Category Table + // The first key 2016 is a dummy (band aid) key to extract all values + keys = []string{"2016", args[6], args[0]} + err = UpdateObject(stub, "ItemCat", keys, buff) + if err != nil { + fmt.Println("PostItem() : Write error while inserting record into ItemCat \n") + return shim.Error("PostItem() : Write error while inserting record into ItemCat : Error : " + err.Error()) + } + } + + secret_key, _ := json.Marshal(itemObject.AES_Key) + fmt.Println(string(secret_key)) + return shim.Success(secret_key) +} + +func CreateItemObject(args []string) (ItemObject, error) { + + var err error + var myItem ItemObject + + // Check there are 13 Arguments provided as per the struct - two are computed + if len(args) != 13 { + fmt.Println("CreateItemObject(): Incorrect number of arguments. Expecting 13 ") + return myItem, errors.New("CreateItemObject(): Incorrect number of arguments. Expecting 13 ") + } + + // Validate ItemID is an integer + + _, err = strconv.Atoi(args[0]) + if err != nil { + fmt.Println("CreateItemObject(): ART ID should be an integer create failed! ") + return myItem, errors.New("CreateItemObject(): ART ID should be an integer create failed!") + } + + // Validate Picture File exists based on the name provided + // Looks for file in current directory of application and must be fixed for other locations + + // Validate Picture File exists based on the name provided + // Looks for file in current directory of application and must be fixed for other locations + imagePath := args[9] + if _, err := os.Stat(imagePath); err == nil { + fmt.Println(imagePath, " exists!") + } else { + fmt.Println("CreateItemObject(): Cannot find or load Picture File = %s : %s\n", imagePath, err) + return myItem, errors.New("CreateItemObject(): ART Picture File not found " + imagePath) + } + + // Get the Item Image and convert it to a byte array + imagebytes, fileType := ImageToByteArray(imagePath) + + // Generate a new key and encrypt the image + + AES_key, _ := GenAESKey() + AES_enc := Encrypt(AES_key, imagebytes) + + // Append the AES Key, The Encrypted Image Byte Array and the file type + myItem = ItemObject{args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], AES_enc, AES_key, fileType, args[10], args[11], args[12]} + + fmt.Println("CreateItemObject(): Item Object created: ", myItem.ItemID, myItem.AES_Key) + + // Code to Validate the Item Object) + // If User presents Crypto Key then key is used to validate the picture that is stored as part of the title + // TODO + + return myItem, nil +} + +/////////////////////////////////////////////////////////////////////////////////// +// Since the Owner Changes hands, a record has to be written for each +// Transaction with the updated Encryption Key of the new owner +// This function is internally invoked by PostTransaction and is not a Public API +/////////////////////////////////////////////////////////////////////////////////// + +func UpdateItemObject(stub shim.ChaincodeStubInterface, ar []byte, hammerPrice string, buyer string) pb.Response { + + var err error + myItem, err := JSONtoAR(ar) + if err != nil { + fmt.Println("UpdateItemObject() : Failed to create Art Record Object from JSON ") + return shim.Error("UpdateItemObject() : Failed to create Art Record Object from JSON : Error : " + err.Error()) + } + + // Insert logic to re-encrypt image by first fetching the current Key + CurrentAES_Key := myItem.AES_Key + // Decrypt Image and Save Image in a file + image := Decrypt(CurrentAES_Key, myItem.ItemImage) + + // Get a New Key & Encrypt Image with New Key + myItem.AES_Key, _ = GenAESKey() + myItem.ItemImage = Encrypt(myItem.AES_Key, image) + + // Update the owner to the Buyer and update price to auction hammer price + myItem.ItemBasePrice = hammerPrice + myItem.CurrentOwnerID = buyer + + ar, err = ARtoJSON(myItem) + // keys := []string{myItem.ItemID, myItem.CurrentOwnerID} // Was the original in v0.6 + keys := []string{myItem.ItemID} + err = ReplaceObject(stub, "Item", keys, ar) + if err != nil { + fmt.Println("UpdateItemObject() : Failed ReplaceObject in ItemTable into Blockchain ") + return shim.Error("UpdateItemObject() : Failed ReplaceObject in ItemTable into Blockchain : Error : " + err.Error()) + } + fmt.Println("UpdateItemObject() : ReplaceObject in Item successful ") + + // Update entry in Item Category Table as it holds the Item object as wekk + keys = []string{"2016", myItem.ItemSubject, myItem.ItemID} + err = ReplaceObject(stub, "ItemCat", keys, ar) + if err != nil { + fmt.Println("UpdateItemObject() : Failed ReplaceObject in ItemCategory into Blockchain ") + return shim.Error("UpdateItemObject() : Failed ReplaceObject in ItemCategory into Blockchain : Error : " + err.Error()) + } + + fmt.Println("UpdateItemObject() : ReplaceObject in ItemCategory successful ") + return shim.Success(myItem.AES_Key) +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Obtain Asset Details and Validate Item +// Transfer Item to new owner - no change in price - In the example XFER is the recType +// ./peer chaincode invoke -l golang -n mycc -c '{"Function": "TransferItem", "Args": ["1000", "100", "tGEBaZuKUBmwTjzNEyd+nr/fPUASuVJAZ1u7gha5fJg=", "300", "XFER"]}' +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +func TransferItem(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var err error + + if len(args) < 6 { + fmt.Println("TransferItem() : Requires 6 arguments Item#, Owner#, Key#, newOwnerID#, XFER \n") + return shim.Error("TransferItem() : Requires 6 arguments Item#, Owner#, Key#, newOwnerID#, XFER") + } + + // Let us make sure that the Item is not on Auction + err = VerifyIfItemIsOnAuction(stub, args[0]) + if err != nil { + error_str := "TransferItem() : Failed Item is either initiated or opened for Auction " + args[0] + fmt.Println(error_str) + return shim.Error(error_str + ": Error : " + err.Error()) + } + + // Validate New Owner's ID + response := ValidateMember(stub, args[3]) + if response.Status != shim.OK { + error_str := "TransferItem() : Failed transferee not Registered in Blockchain " + args[3] + fmt.Println(error_str) + return shim.Error(error_str + ": Error : " + response.Message) + } + + // Validate Item or Asset Ownership + response = ValidateItemOwnership(stub, "ValidateItemOwnership", args[:3]) + if response.Status != shim.OK { + error_str := "TransferItem() : ValidateItemOwnership() : Failed to authenticate item or asset ownership" + fmt.Println(error_str) + return shim.Error(error_str + ": Error : " + response.Message) + } + + ar := response.Payload + myItem, err := JSONtoAR(ar) + if err != nil { + error_str := "TransferItem() : Failed to create item Object from JSON " + fmt.Println(error_str) + return shim.Error(error_str + ": Error : " + err.Error()) + } + + // Insert logic to re-encrypt image by first fetching the current Key + CurrentAES_Key := myItem.AES_Key + // Decrypt Image and Save Image in a file + image := Decrypt(CurrentAES_Key, myItem.ItemImage) + + // Get a New Key & Encrypt Image with New Key + myItem.AES_Key, _ = GenAESKey() + myItem.ItemImage = Encrypt(myItem.AES_Key, image) + + // Update the owner to the new owner transferred to + myItem.CurrentOwnerID = args[3] + + ar, err = ARtoJSON(myItem) + keys := []string{myItem.ItemID} + err = ReplaceObject(stub, "Item", keys, ar) + if err != nil { + fmt.Println("TransferAsset() : Failed ReplaceObject in ItemTable into Blockchain ") + return shim.Error(err.Error()) + } + fmt.Println("TransferAsset() : ReplaceObject in Item successful ") + + // Update entry in Item Category Table as it holds the Item object as well + keys = []string{"2016", myItem.ItemSubject, myItem.ItemID} + err = ReplaceObject(stub, "ItemCat", keys, ar) + if err != nil { + fmt.Println("TransferAsset() : Failed ReplaceObject in ItemCategoryTable into Blockchain ") + return shim.Error(err.Error()) + } + + response = PostItemLog(stub, myItem, "Transfer", args[1], args[5]) + if response.Status != shim.OK { + fmt.Println("TransferItem() : PostItemLog() write error while inserting record\n") + return shim.Error(err.Error()) + } + + fmt.Println("TransferAsset() : ReplaceObject in ItemCategory successful ") + return shim.Success(myItem.AES_Key) +} + +//////////////////////////////////////////////////////////////////////////////////// +// Validate Item Status - Is it currently on Auction, if so Reject Transfer Request +// This can be written better - will do so if things work +// The function return the Auction ID and the Status = OPEN or INIT +//////////////////////////////////////////////////////////////////////////////////// + +func VerifyIfItemIsOnAuction(stub shim.ChaincodeStubInterface, itemID string) error { + + response := GetListOfOpenAucs(stub, "AucOpen", []string{"2016"}) + if response.Status != shim.OK { + return fmt.Errorf("VerifyIfItemIsOnAuction() operation failed. Error retrieving values from AucOpen: %s", response.Message) + } + + rows := response.Payload + tlist := make([]AuctionRequest, len(rows)) + err := json.Unmarshal([]byte(rows), &tlist) + if err != nil { + fmt.Println("VerifyIfItemIsOnAuction: Unmarshal failed : ", err) + return fmt.Errorf("VerifyIfItemIsOnAuction: operation failed. Error un-marshaling JSON: %s", err) + } + + for i := 0; i < len(tlist); i++ { + ar := tlist[i] + + // Compare Auction IDs + if ar.ItemID == itemID { + fmt.Println("VerifyIfItemIsOnAuction() Failed : Ummarshall error") + return fmt.Errorf("VerifyIfItemIsOnAuction() operation failed. %s", itemID) + } + } + + // Now Check if an Auction Has been inititiated + // If so , it has to be removed from Auction for a Transfer + + response = GetListOfInitAucs(stub, "AucInit", []string{"2016"}) + if response.Status != shim.OK { + return fmt.Errorf("VerifyIfItemIsOnAuction() operation failed. Error retrieving values from AucInit: %s", err) + } + + rows = response.Payload + tlist = make([]AuctionRequest, len(rows)) + err = json.Unmarshal([]byte(rows), &tlist) + if err != nil { + fmt.Println("VerifyIfItemIsOnAuction() Unmarshal failed : ", err) + return fmt.Errorf("VerifyIfItemIsOnAuction: operation failed. Error un-marshaling JSON: %s", err) + } + + for i := 0; i < len(tlist); i++ { + ar := tlist[i] + if err != nil { + fmt.Println("VerifyIfItemIsOnAuction() Failed : Ummarshall error") + return fmt.Errorf("VerifyIfItemIsOnAuction() operation failed. %s", err) + } + + // Compare Auction IDs + if ar.ItemID == itemID { + return fmt.Errorf("VerifyIfItemIsOnAuction() operation failed.") + } + } + + return nil +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// POSTS A LOG ENTRY Every Time the Item is transacted +// Valid Status for ItemLog = OnAuc, OnSale, NA, INITIAL +// Valid AuctionedBy: This value is set to "DEFAULT" but when it is put on auction Auction House ID is assigned +// PostItemLog IS NOT A PUBLIC API and is invoked every time some event happens in the Item's life +// The currentDateTime must be provided by Client +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func PostItemLog(stub shim.ChaincodeStubInterface, item ItemObject, status string, ah string, currentDateTime string) pb.Response { + + iLog := ItemToItemLog(item, currentDateTime) + iLog.Status = status + iLog.AuctionedBy = ah + + buff, err := ItemLogtoJSON(iLog) + if err != nil { + fmt.Println("PostItemLog() : Failed Cannot create object buffer for write : ", item.ItemID) + return shim.Error("PostItemLog(): Failed Cannot create object buffer for write : " + item.ItemID) + } else { + // Update the ledger with the Buffer Data + keys := []string{iLog.ItemID, iLog.Status, iLog.AuctionedBy, currentDateTime} + err = UpdateObject(stub, "ItemHistory", keys, buff) + if err != nil { + fmt.Println("PostItemLog() : write error while inserting record\n") + return shim.Error(err.Error()) + } + } + return shim.Success(buff) +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Create an Auction Request +// The owner of an Item, when ready to put the item on an auction +// will create an auction request and specify a auction house. +// +// ./peer chaincode invoke -l golang -n mycc -c '{"Function": "PostAuctionRequest", "Args":["1111", "AUCREQ", "1700", "200", "400", "04012016", "1200", "INIT", "2016-05-20 11:00:00.3 +0000 UTC","2016-05-23 11:00:00.3 +0000 UTC", "2016-05-23 11:00:00.3 +0000 UTC"]}' +// +// The start and end time of the auction are actually assigned when the auction is opened by OpenAuctionForBids() +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func PostAuctionRequest(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + ar, err := CreateAuctionRequest(args[0:]) + if err != nil { + return shim.Error(err.Error()) + } + + // Let us make sure that the Item is not on Auction + err = VerifyIfItemIsOnAuction(stub, ar.ItemID) + if err != nil { + fmt.Println("PostAuctionRequest() : Failed Item is either initiated or opened for Auction ", args[0]) + return shim.Error(err.Error()) + } + + // Validate Auction House to check it is a registered User + response := ValidateMember(stub, ar.AuctionHouseID) + if response.Status != shim.OK { + fmt.Println("PostAuctionRequest() : Failed Auction House not Registered in Blockchain ", ar.AuctionHouseID) + return shim.Error(err.Error()) + } + + aucHouse := response.Payload + fmt.Println("Auction House information ", aucHouse, " ID: ", ar.AuctionHouseID) + + // Validate Item record + response = ValidateItemSubmission(stub, ar.ItemID) + if response.Status != shim.OK { + fmt.Println("PostAuctionRequest() : Failed Could not Validate Item Object in Blockchain ", ar.ItemID) + return shim.Error(err.Error()) + } + + itemObject := response.Payload + + // Convert AuctionRequest to JSON + buff, err := AucReqtoJSON(ar) // Converting the auction request struct to []byte array + if err != nil { + fmt.Println("PostAuctionRequest() : Failed Cannot create object buffer for write : ", args[1]) + return shim.Error("PostAuctionRequest(): Failed Cannot create object buffer for write : " + args[1]) + } else { + // Update the ledger with the Buffer Data + //err = stub.PutState(args[0], buff) + keys := []string{args[0]} + err = UpdateObject(stub, "Auction", keys, buff) + if err != nil { + fmt.Println("PostAuctionRequest() : write error while inserting record\n") + return shim.Error(err.Error()) + } + + // Post an Item Log and the Auction House ID is included in the log + // Recall -- that by default that value is "DEFAULT" + + io, err := JSONtoAR(itemObject) + response := PostItemLog(stub, io, "ReadyForAuc", ar.AuctionHouseID, ar.TimeStamp) + if response.Status != shim.OK { + fmt.Println("PostItemLog() : write error while inserting record\n") + return shim.Error(err.Error()) + } + + //An entry is made in the AuctionInitTable that this Item has been placed for Auction + // The UI can pull all items available for auction and the item can be Opened for accepting bids + // The 2016 is a dummy key and has notr value other than to get all rows + + keys = []string{"2016", args[0]} + err = UpdateObject(stub, "AucInit", keys, buff) + if err != nil { + fmt.Println("PostAuctionRequest() : write error while inserting record into AucInit\n") + return shim.Error(err.Error()) + } + + } + + return shim.Success(buff) +} + +func CreateAuctionRequest(args []string) (AuctionRequest, error) { + var err error + var aucReg AuctionRequest + + // Check there are 12 Arguments + // See example -- The Open and Close Dates are Dummy, and will be set by open auction + // '{"Function": "PostAuctionRequest", "Args":["1111", "AUCREQ", "1000", "200", "100", "04012016", "1200", "1800", + // "INIT", "2016-05-20 11:00:00.3 +0000 UTC","2016-05-23 11:00:00.3 +0000 UTC", "2016-05-23 11:00:00.3 +0000 UTC"]}' + if len(args) != 12 { + fmt.Println("CreateAuctionRegistrationObject(): Incorrect number of arguments. Expecting 11 ") + return aucReg, errors.New("CreateAuctionRegistrationObject() : Incorrect number of arguments. Expecting 11 ") + } + + // Validate UserID is an integer . I think this redundant and can be avoided + + err = validateID(args[0]) + if err != nil { + return aucReg, errors.New("CreateAuctionRequest() : User ID should be an integer") + } + + aucReg = AuctionRequest{args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]} + fmt.Println("CreateAuctionObject() : Auction Registration : ", aucReg) + + return aucReg, nil +} + +////////////////////////////////////////////////////////// +// Create an Item Transaction record to process Request +// This is invoked by the CloseAuctionRequest +// +// +//////////////////////////////////////////////////////////// +func PostTransaction(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + if function != "PostTransaction" { + return shim.Error("PostTransaction(): Invalid function name. Expecting \"PostTransaction\"") + } + + ar, err := CreateTransactionRequest(args[0:]) // + if err != nil { + return shim.Error(err.Error()) + } + + // Validate buyer's ID + response := ValidateMember(stub, ar.UserId) + if response.Status != shim.OK { + fmt.Println("PostTransaction() : Failed Buyer not Registered in Blockchain ", ar.UserId) + return shim.Error(err.Error()) + } + + buyer := response.Payload + + fmt.Println("PostTransaction(): Validated Buyer information Successfully ", buyer, ar.UserId) + + // Validate Item record + response = ValidateItemSubmission(stub, ar.ItemID) + if response.Status != shim.OK { + fmt.Println("PostTransaction() : Failed Could not Validate Item Object in Blockchain ", ar.ItemID) + return shim.Error(err.Error()) + } + + lastUpdatedItemOBCObject := response.Payload + fmt.Println("PostTransaction() : Validated Item Object in Blockchain Successfully", ar.ItemID) + + // Update Item Object with new Owner Key + response = UpdateItemObject(stub, lastUpdatedItemOBCObject, ar.HammerPrice, ar.UserId) + newKey := response.Payload + if response.Status != shim.OK { + fmt.Println("PostTransaction() : Failed to update Item Master Object in Blockchain ", ar.ItemID) + return shim.Error(err.Error()) + } else { + // Write New Key to file + fmt.Println("PostTransaction() : New encryption Key is ", newKey) + } + + fmt.Println("PostTransaction() : Updated Item Master Object in Blockchain Successfully", ar.ItemID) + + // Post an Item Log + itemObject, err := JSONtoAR(lastUpdatedItemOBCObject) + if err != nil { + fmt.Println("PostTransaction() : Conversion error JSON to ItemRecord\n") + return shim.Error(err.Error()) + } + + // A life cycle event is added to say that the Item is no longer on auction + itemObject.ItemBasePrice = ar.HammerPrice + itemObject.CurrentOwnerID = ar.UserId + + response = PostItemLog(stub, itemObject, "NA", "DEFAULT", args[5]) + if response.Status != shim.OK { + fmt.Println("PostTransaction() : write error while inserting item log record\n") + return shim.Error(err.Error()) + } + + fmt.Println("PostTransaction() : Inserted item log record Successfully", ar.ItemID) + + // Convert Transaction Object to JSON + buff, err := TrantoJSON(ar) // + if err != nil { + fmt.Println("GetObjectBuffer() : Failed to convert Transaction Object to JSON ", args[0]) + return shim.Error(err.Error()) + } + + // Update the ledger with the Buffer Data + keys := []string{args[0], args[3]} + err = UpdateObject(stub, "Trans", keys, buff) + if err != nil { + fmt.Println("PostTransaction() : write error while inserting record\n") + return shim.Error(err.Error()) + } + + fmt.Println("PostTransaction() : Posted Transaction Record Successfully\n") + + // Returns New Key. To get Transaction Details, run GetTransaction + + secret_key, _ := json.Marshal(newKey) + fmt.Println(string(secret_key)) + return shim.Success(secret_key) + +} + +func CreateTransactionRequest(args []string) (ItemTransaction, error) { + + var at ItemTransaction + + // Check there are 9 Arguments + if len(args) != 9 { + fmt.Println("CreateTransactionRequest(): Incorrect number of arguments. Expecting 9 ") + return at, errors.New("CreateTransactionRequest() : Incorrect number of arguments. Expecting 9 ") + } + + at = ItemTransaction{args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]} + fmt.Println("CreateTransactionRequest() : Transaction Request: ", at) + + return at, nil +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Create a Bid Object +// Once an Item has been opened for auction, bids can be submitted as long as the auction is "OPEN" +//./peer chaincode invoke -l golang -n mycc -c '{"Function": "PostBid", "Args":["1111", "BID", "1", "1000", "300", "1200", "2017-01-23 14:00:00.3 +0000 UTC"]}' +//./peer chaincode invoke -l golang -n mycc -c '{"Function": "PostBid", "Args":["1111", "BID", "2", "1000", "400", "3000","2017-01-23 14:00:00.3 +0000 UTC"]}' +// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func PostBid(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + bid, err := CreateBidObject(args[0:]) // + if err != nil { + return shim.Error(err.Error()) + } + + // Reject the Bid if the Buyer Information Is not Valid or not registered on the Block Chain + response := ValidateMember(stub, args[4]) + if response.Status != shim.OK { + fmt.Println("PostBid() : Failed Buyer not registered on the block-chain ", args[4]) + return shim.Error(err.Error()) + } + + buyerInfo := response.Payload + fmt.Println("Buyer information ", buyerInfo, " ", args[4]) + + /////////////////////////////////////// + // Reject Bid if Auction is not "OPEN" + /////////////////////////////////////// + response = GetAuctionRequest(stub, "GetAuctionRequest", []string{args[0]}) + if response.Status != shim.OK { + fmt.Println("PostBid() : Cannot find Auction record ", args[0]) + return shim.Error("PostBid(): Cannot find Auction record : " + args[0]) + } + + RBytes := response.Payload + + aucR, err := JSONtoAucReq(RBytes) + if err != nil { + fmt.Println("PostBid() : Cannot UnMarshall Auction record") + return shim.Error("PostBid(): Cannot UnMarshall Auction record: " + args[0]) + } + + if aucR.Status != "OPEN" { + fmt.Println("PostBid() : Cannot accept Bid as Auction is not OPEN ", args[0]) + return shim.Error("PostBid(): Cannot accept Bid as Auction is not OPEN : " + args[0]) + } + + /////////////////////////////////////////////////////////////////// + // Reject Bid if the time bid was received is > Auction Close Time + /////////////////////////////////////////////////////////////////// + if tCompare(bid.BidTime, aucR.CloseDate) == false { + fmt.Println("PostBid() Failed : BidTime past the Auction Close Time") + error_str := fmt.Sprintf("PostBid() Failed : BidTime past the Auction Close Time %s, %s", bid.BidTime, aucR.CloseDate) + return shim.Error(error_str) + } + + ////////////////////////////////////////////////////////////////// + // Reject Bid if Item ID on Bid does not match Item ID on Auction + ////////////////////////////////////////////////////////////////// + if aucR.ItemID != bid.ItemID { + fmt.Println("PostBid() Failed : Item ID mismatch on bid. Bid Rejected") + return shim.Error("PostBid() : Item ID mismatch on Bid. Bid Rejected") + } + + ////////////////////////////////////////////////////////////////////// + // Reject Bid if Bid Price is less than Reserve Price + // Convert Bid Price and Reserve Price to Integer (TODO - Float) + ////////////////////////////////////////////////////////////////////// + bp, err := strconv.Atoi(bid.BidPrice) + if err != nil { + fmt.Println("PostBid() Failed : Bid price should be an integer") + return shim.Error("PostBid() : Bid price should be an integer") + } + + hp, err := strconv.Atoi(aucR.ReservePrice) + if err != nil { + return shim.Error("PostItem() : Reserve Price should be an integer") + } + + // Check if Bid Price is > Auction Request Reserve Price + if bp < hp { + return shim.Error("PostItem() : Bid Price must be greater than Reserve Price") + } + + //////////////////////////// + // Post or Accept the Bid + //////////////////////////// + buff, err := BidtoJSON(bid) // + + if err != nil { + fmt.Println("PostBid() : Failed Cannot create object buffer for write : ", args[1]) + return shim.Error("PostBid(): Failed Cannot create object buffer for write : " + args[1]) + } else { + // Update the ledger with the Buffer Data + // err = stub.PutState(args[0], buff) + keys := []string{args[0], args[2]} + err = UpdateObject(stub, "Bid", keys, buff) + if err != nil { + fmt.Println("PostBid() : write error while inserting record\n") + return shim.Error(err.Error()) + } + } + + return shim.Success(buff) +} + +func CreateBidObject(args []string) (Bid, error) { + var err error + var aBid Bid + + // Check there are 7 Arguments + // See example + if len(args) != 7 { + fmt.Println("CreateBidObject(): Incorrect number of arguments. Expecting 7 ") + return aBid, errors.New("CreateBidObject() : Incorrect number of arguments. Expecting 7 ") + } + + // Validate Bid is an integer + + _, err = strconv.Atoi(args[0]) + if err != nil { + return aBid, errors.New("CreateBidObject() : Bid ID should be an integer") + } + + _, err = strconv.Atoi(args[2]) + if err != nil { + return aBid, errors.New("CreateBidObject() : Bid ID should be an integer") + } + + // bidTime = args[6] sent by the client + aBid = Bid{args[0], args[1], args[2], args[3], args[4], args[5], args[6]} + fmt.Println("CreateBidObject() : Bid Object : ", aBid) + + return aBid, nil +} + +////////////////////////////////////////////////////////// +// JSON To args[] - return a map of the JSON string +////////////////////////////////////////////////////////// +func JSONtoArgs(Avalbytes []byte) (map[string]interface{}, error) { + + var data map[string]interface{} + + if err := json.Unmarshal(Avalbytes, &data); err != nil { + return nil, err + } + + return data, nil +} + +////////////////////////////////////////////////////////// +// Variation of the above - return value from a JSON string +////////////////////////////////////////////////////////// + +func GetKeyValue(Avalbytes []byte, key string) string { + var dat map[string]interface{} + if err := json.Unmarshal(Avalbytes, &dat); err != nil { + panic(err) + } + + val := dat[key].(string) + return val +} + +////////////////////////////////////////////////////////// +// Time and Date Comparison +// tCompare("2016-06-28 18:40:57", "2016-06-27 18:45:39") +////////////////////////////////////////////////////////// +func tCompare(t1 string, t2 string) bool { + + layout := "2006-01-02 15:04:05" + bidTime, err := time.Parse(layout, t1) + if err != nil { + fmt.Println("tCompare() Failed : time Conversion error on t1") + return false + } + + aucCloseTime, err := time.Parse(layout, t2) + if err != nil { + fmt.Println("tCompare() Failed : time Conversion error on t2") + return false + } + + if bidTime.Before(aucCloseTime) { + return true + } + + return false +} + +////////////////////////////////////////////////////////// +// Converts JSON String to an ART Object +////////////////////////////////////////////////////////// +func JSONtoAR(data []byte) (ItemObject, error) { + + ar := ItemObject{} + err := json.Unmarshal([]byte(data), &ar) + if err != nil { + fmt.Println("Unmarshal failed : ", err) + } + + return ar, err +} + +////////////////////////////////////////////////////////// +// Converts an ART Object to a JSON String +////////////////////////////////////////////////////////// +func ARtoJSON(ar ItemObject) ([]byte, error) { + + ajson, err := json.Marshal(ar) + if err != nil { + fmt.Println(err) + return nil, err + } + return ajson, nil +} + +////////////////////////////////////////////////////////// +// Converts an BID to a JSON String +////////////////////////////////////////////////////////// +func ItemLogtoJSON(item ItemLog) ([]byte, error) { + + ajson, err := json.Marshal(item) + if err != nil { + fmt.Println(err) + return nil, err + } + return ajson, nil +} + +////////////////////////////////////////////////////////// +// Converts an User Object to a JSON String +////////////////////////////////////////////////////////// +func JSONtoItemLog(ithis []byte) (ItemLog, error) { + + item := ItemLog{} + err := json.Unmarshal(ithis, &item) + if err != nil { + fmt.Println("JSONtoAucReq error: ", err) + return item, err + } + return item, err +} + +////////////////////////////////////////////////////////// +// Converts an Auction Request to a JSON String +////////////////////////////////////////////////////////// +func AucReqtoJSON(ar AuctionRequest) ([]byte, error) { + + ajson, err := json.Marshal(ar) + if err != nil { + fmt.Println(err) + return nil, err + } + return ajson, nil +} + +////////////////////////////////////////////////////////// +// Converts an User Object to a JSON String +////////////////////////////////////////////////////////// +func JSONtoAucReq(areq []byte) (AuctionRequest, error) { + + ar := AuctionRequest{} + err := json.Unmarshal(areq, &ar) + if err != nil { + fmt.Println("JSONtoAucReq error: ", err) + return ar, err + } + return ar, err +} + +////////////////////////////////////////////////////////// +// Converts an BID to a JSON String +////////////////////////////////////////////////////////// +func BidtoJSON(myHand Bid) ([]byte, error) { + + ajson, err := json.Marshal(myHand) + if err != nil { + fmt.Println(err) + return nil, err + } + return ajson, nil +} + +////////////////////////////////////////////////////////// +// Converts an User Object to a JSON String +////////////////////////////////////////////////////////// +func JSONtoBid(areq []byte) (Bid, error) { + + myHand := Bid{} + err := json.Unmarshal(areq, &myHand) + if err != nil { + fmt.Println("JSONtoAucReq error: ", err) + return myHand, err + } + return myHand, err +} + +////////////////////////////////////////////////////////// +// Converts an User Object to a JSON String +////////////////////////////////////////////////////////// +func UsertoJSON(user UserObject) ([]byte, error) { + + ajson, err := json.Marshal(user) + if err != nil { + fmt.Println("UsertoJSON error: ", err) + return nil, err + } + fmt.Println("UsertoJSON created: ", ajson) + return ajson, nil +} + +////////////////////////////////////////////////////////// +// Converts an User Object to a JSON String +////////////////////////////////////////////////////////// +func JSONtoUser(user []byte) (UserObject, error) { + + ur := UserObject{} + err := json.Unmarshal(user, &ur) + if err != nil { + fmt.Println("UsertoJSON error: ", err) + return ur, err + } + fmt.Println("UsertoJSON created: ", ur) + return ur, err +} + +////////////////////////////////////////////////////////// +// Converts an Item Transaction to a JSON String +////////////////////////////////////////////////////////// +func TrantoJSON(at ItemTransaction) ([]byte, error) { + + ajson, err := json.Marshal(at) + if err != nil { + fmt.Println(err) + return nil, err + } + return ajson, nil +} + +////////////////////////////////////////////////////////// +// Converts an Trans Object to a JSON String +////////////////////////////////////////////////////////// +func JSONtoTran(areq []byte) (ItemTransaction, error) { + + at := ItemTransaction{} + err := json.Unmarshal(areq, &at) + if err != nil { + fmt.Println("JSONtoTran error: ", err) + return at, err + } + return at, err +} + +////////////////////////////////////////////// +// Validates an ID for Well Formed +////////////////////////////////////////////// + +func validateID(id string) error { + // Validate UserID is an integer + + _, err := strconv.Atoi(id) + if err != nil { + return errors.New("validateID(): User ID should be an integer") + } + return nil +} + +////////////////////////////////////////////// +// Create an ItemLog from Item +////////////////////////////////////////////// + +func ItemToItemLog(io ItemObject, cdt string) ItemLog { + + iLog := ItemLog{} + iLog.ItemID = io.ItemID + iLog.Status = "INITIAL" + iLog.AuctionedBy = "DEFAULT" + iLog.RecType = "ILOG" + iLog.ItemDesc = io.ItemDesc + iLog.CurrentOwner = io.CurrentOwnerID + iLog.Date = cdt + + return iLog +} + +////////////////////////////////////////////// +// Convert Bid to Transaction for Posting +////////////////////////////////////////////// + +func BidtoTransaction(bid Bid) ItemTransaction { + + var t ItemTransaction + t.AuctionID = bid.AuctionID + t.RecType = "POSTTRAN" + t.ItemID = bid.ItemID + t.TransType = "SALE" + t.UserId = bid.BuyerID + // Ideally SystemChain Code must provide a TimeStamp Function + t.TransDate = bid.BidTime + t.HammerTime = bid.BidTime + t.HammerPrice = bid.BidPrice + t.Details = "The Highest Bidder does not always win" + + return t +} + +//////////////////////////////////////////////////////////////////////////// +// Validate if the User Information Exists +// in the block-chain +//////////////////////////////////////////////////////////////////////////// +func ValidateMember(stub shim.ChaincodeStubInterface, owner string) pb.Response { + + // Get the Item Objects and Display it + // Avalbytes, err := stub.GetState(owner) + args := []string{owner} + Avalbytes, err := QueryObject(stub, "User", args) + + if err != nil { + fmt.Println("ValidateMember() : Failed - Cannot find valid owner record for ART ", owner) + jsonResp := "{\"Error\":\"Failed to get Owner Object Data for " + owner + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + fmt.Println("ValidateMember() : Failed - Incomplete owner record for ART ", owner) + jsonResp := "{\"Error\":\"Failed - Incomplete information about the owner for " + owner + "\"}" + return shim.Error(jsonResp) + } + + fmt.Println("ValidateMember() : Validated Item Owner:\n", owner) + return shim.Success(Avalbytes) +} + +//////////////////////////////////////////////////////////////////////////// +// Validate if the User Information Exists +// in the block-chain +//////////////////////////////////////////////////////////////////////////// +func ValidateItemSubmission(stub shim.ChaincodeStubInterface, artId string) pb.Response { + + // Get the Item Objects and Display it + args := []string{artId} + Avalbytes, err := QueryObject(stub, "Item", args) + if err != nil { + fmt.Println("ValidateItemSubmission() : Failed - Cannot find valid owner record for ART ", artId) + jsonResp := "{\"Error\":\"Failed to get Owner Object Data for " + artId + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + fmt.Println("ValidateItemSubmission() : Failed - Incomplete owner record for ART ", artId) + jsonResp := "{\"Error\":\"Failed - Incomplete information about the owner for " + artId + "\"}" + return shim.Error(jsonResp) + } + + //fmt.Println("ValidateItemSubmission() : Validated Item Owner:", Avalbytes) + return shim.Success(Avalbytes) +} + +///////////////////////////////////////////////////////////////////////////////////////////////////// +// Get List of Bids for an Auction +// in the block-chain -- +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetListOfBids", "Args": ["1111"]}' +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetLastBid", "Args": ["1111"]}' +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetHighestBid", "Args": ["1111"]}' +///////////////////////////////////////////////////////////////////////////////////////////////////// +func GetListOfBids(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + rs, err := GetList(stub, "Bid", args) + if err != nil { + error_str := fmt.Sprintf("GetListOfBids operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + + // Iterate through result set + var i int + var tlist []Bid // Define a list + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + + if err != nil { + return shim.Success(nil) + } + bid, err := JSONtoBid(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetListOfBids() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + fmt.Println("GetList() : my Value : ", bid) + tlist = append(tlist, bid) + } + + jsonRows, err := json.Marshal(tlist) + if err != nil { + error_str := fmt.Sprintf("GetListOfBids() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + fmt.Println("List of Bids Requested : ", jsonRows) + return shim.Success(jsonRows) + +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////// +// Get List of Auctions that have been initiated +// in the block-chain +// This is a fixed Query to be issued as below +// peer chaincode query -l golang -n mycc -c '{"Args": ["qGetListOfInitAucs", "2016"]}' +//////////////////////////////////////////////////////////////////////////////////////////////////////// +func GetListOfInitAucs(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + rs, err := GetList(stub, "AucInit", args) + if err != nil { + error_str := fmt.Sprintf("GetListOfInitAucs operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + + // Iterate through result set + var i int + var tlist []AuctionRequest // Define a list + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + ar, err := JSONtoAucReq(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetListOfInitAucs() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + fmt.Println("GetListOfInitAucs() : my Value : ", ar) + tlist = append(tlist, ar) + } + + jsonRows, err := json.Marshal(tlist) + if err != nil { + error_str := fmt.Sprintf("GetListOfInitAucs() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + //fmt.Println("List of Auctions Requested : ", jsonRows) + return shim.Success(jsonRows) + +} + +//////////////////////////////////////////////////////////////////////////// +// Get List of Open Auctions for which bids can be supplied +// in the block-chain +// This is a fixed Query to be issued as below +// peer chaincode query -l golang -n mycc -c '{"Args": ["qGetListOfOpenAucs", "2016"]}' +//////////////////////////////////////////////////////////////////////////// +func GetListOfOpenAucs(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + rs, err := GetList(stub, "AucOpen", args) + if err != nil { + error_str := fmt.Sprintf("GetListOfOpenAucs operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + defer rs.Close() + + // Iterate through result set + var i int + var tlist []AuctionRequest // Define a list + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + ar, err := JSONtoAucReq(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetListOfOpenAucs() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + fmt.Println("GetListOfOpenAucs() : my Value : ", ar) + tlist = append(tlist, ar) + } + + jsonRows, err := json.Marshal(tlist) + if err != nil { + error_str := fmt.Sprintf("GetListOfInitAucs() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + //fmt.Println("List of Open Auctions : ", jsonRows) + return shim.Success(jsonRows) + +} + +//////////////////////////////////////////////////////////////////////////// +// Get the Item History for an Item +// in the block-chain .. Pass the Item ID +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetItemLog", "Args": ["1000"]}' +//////////////////////////////////////////////////////////////////////////// +func GetItemLog(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + // Check there are 1 Arguments provided as per the struct - two are computed + // See example + if len(args) < 1 { + fmt.Println("GetItemLog(): Incorrect number of arguments. Expecting 1 ") + fmt.Println("GetItemLog(): ./peer chaincode query -l golang -n mycc -c '{\"Function\": \"GetItem\", \"Args\": [\"1111\"]}'") + return shim.Error("CreateItemObject(): Incorrect number of arguments. Expecting 12 ") + } + + rs, err := GetList(stub, "ItemHistory", args) + if err != nil { + error_str := fmt.Sprintf("GetItemLog operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + + // Iterate through result set + var i int + var tlist []ItemLog // Define a list + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + il, err := JSONtoItemLog(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetItemLog() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + fmt.Println("GetItemLog() : my Value : ", il) + tlist = append(tlist, il) + } + + jsonRows, err := json.Marshal(tlist) + if err != nil { + error_str := fmt.Sprintf("GetItemLog() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + //fmt.Println("All History : ", jsonRows) + return shim.Success(jsonRows) + +} + +//////////////////////////////////////////////////////////////////////////// +// Get a List of Items by Category +// in the block-chain +// Input is 2016 + Category +// Categories include whatever has been defined in the Item Tables - Landscape, Modern, ... +// See Sample data +// ./peer chaincode query -l golang -n mycc -c '{"Function": "GetItemListByCat", "Args": ["2016", "Modern"]}' +//////////////////////////////////////////////////////////////////////////// +func GetItemListByCat(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + // Check there are 1 Arguments provided as per the struct - two are computed + // See example + if len(args) < 1 { + fmt.Println("GetItemListByCat(): Incorrect number of arguments. Expecting 1 ") + fmt.Println("GetItemListByCat(): ./peer chaincode query -l golang -n mycc -c '{\"Function\": \"GetItemListByCat\", \"Args\": [\"Modern\"]}'") + return shim.Error("CreateItemObject(): Incorrect number of arguments. Expecting 1 ") + } + + rs, err := GetList(stub, "ItemCat", args) + if err != nil { + error_str := fmt.Sprintf("GetItemListByCat operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + + // Iterate through result set + var i int + var tlist []ItemObject // Define a list + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + io, err := JSONtoAR(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetItemListByCat() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + fmt.Println("GetItemListByCat() : my Value : ", io) + tlist = append(tlist, io) + } + + jsonRows, err := json.Marshal(tlist) + if err != nil { + error_str := fmt.Sprintf("GetItemListByCat() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + //fmt.Println("All Items : ", jsonRows) + return shim.Success(jsonRows) + +} + +//////////////////////////////////////////////////////////////////////////// +// Get a List of Users by Category +// in the block-chain +//////////////////////////////////////////////////////////////////////////// +func GetUserListByCat(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + // Check there are 1 Arguments provided as per the struct - two are computed + // See example + if len(args) < 1 { + fmt.Println("GetUserListByCat(): Incorrect number of arguments. Expecting 1 ") + fmt.Println("GetUserListByCat(): ./peer chaincode query -l golang -n mycc -c '{\"Function\": \"GetUserListByCat\", \"Args\": [\"AH\"]}'") + return shim.Error("CreateUserObject(): Incorrect number of arguments. Expecting 1 ") + } + + rs, err := GetList(stub, "UserCat", args) + if err != nil { + error_str := fmt.Sprintf("GetUserListByCat operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + + // Iterate through result set + var i int + var tlist []UserObject // Define a list + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + uo, err := JSONtoUser(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetUserListByCat() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + fmt.Println("GetUserListByCat() : my Value : ", uo) + tlist = append(tlist, uo) + } + + jsonRows, err := json.Marshal(tlist) + if err != nil { + error_str := fmt.Sprintf("GetUserListByCat() operation failed - Unmarshall Error. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + //fmt.Println("All Users : ", jsonRows) + return shim.Success(jsonRows) + +} + +//////////////////////////////////////////////////////////////////////////// +// Get The Highest Bid Received so far for an Auction +// in the block-chain +//////////////////////////////////////////////////////////////////////////// +func GetLastBid(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var Avalbytes []byte + + layout := "2006-01-02 15:04:05" + highestTime, err := time.Parse(layout, layout) + + rs, err := GetList(stub, "Bid", args) + if err != nil { + error_str := fmt.Sprintf("GetListOfBids operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + // Iterate through result set + + for i := 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + currentBid, err := JSONtoBid(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetHighestBid(0 operation failed. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + bidTime, err := time.Parse(layout, currentBid.BidTime) + if err != nil { + error_str := fmt.Sprintf("GetLastBid() Failed : time Conversion error on BidTime %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + if bidTime.Sub(highestTime) > 0 { + highestTime = bidTime + Avalbytes = responseRange.Value + } + return shim.Success(Avalbytes) + } + return shim.Error("GetLastBid() : Failed - No Bids Found") +} + +//////////////////////////////////////////////////////////////////////////// +// Get The Highest Bid Received so far for an Auction +// in the block-chain +//////////////////////////////////////////////////////////////////////////// +func GetNoOfBidsReceived(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + rs, err := GetList(stub, "Bid", args) + if err != nil { + error_str := fmt.Sprintf("GetListOfBids operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + + // Iterate through result set + var i int + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + _, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + } + return shim.Success([]byte(strconv.Itoa(i))) +} + +//////////////////////////////////////////////////////////////////////////// +// Get the Highest Bid in the List +// +//////////////////////////////////////////////////////////////////////////// +func GetHighestBid(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + var Avalbytes []byte + highestBid := 0 + rs, err := GetList(stub, "Bid", args) + if err != nil { + error_str := fmt.Sprintf("GetListOfBids operation failed. Error marshaling JSON: %s", err) + return shim.Error(error_str) + } + + defer rs.Close() + + // Iterate through result set + var i int + for i = 0; rs.HasNext(); i++ { + + // We can process whichever return value is of interest + responseRange, err := rs.Next() + if err != nil { + return shim.Success(nil) + } + currentBid, err := JSONtoBid(responseRange.Value) + if err != nil { + error_str := fmt.Sprintf("GetHighestBid(0 operation failed. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + bidPrice, err := strconv.Atoi(currentBid.BidPrice) + if err != nil { + error_str := fmt.Sprintf("GetHighestBid() Int Conversion error on BidPrice! failed. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + + if bidPrice >= highestBid { + highestBid = bidPrice + Avalbytes = responseRange.Value + + } + } + + return shim.Success(Avalbytes) +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Trigger the Auction +// Structure of args auctionReqID, RecType, AucStartDateTime, Duration in Minutes ( 3 = 3 minutes) +// ./peer chaincode invoke -l golang -n mycc -c '{"Function": "OpenAuctionForBids", "Args":["1111", "OPENAUC", "3", "2006-01-02 15:04:05"]}' +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +func OpenAuctionForBids(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + // Fetch Auction Object and check its Status + Avalbytes, err := QueryObject(stub, "Auction", []string{args[0]}) + if err != nil { + fmt.Println("OpenAuctionForBids(): Auction Object Retrieval Failed ") + return shim.Error("OpenAuctionForBids(): Auction Object Retrieval Failed ") + } + + aucR, err := JSONtoAucReq(Avalbytes) + if err != nil { + fmt.Println("OpenAuctionForBids(): Auction Object Unmarshalling Failed ") + return shim.Error("OpenAuctionForBids(): Auction Object UnMarshalling Failed ") + } + + if aucR.Status == "CLOSED" { + fmt.Println("OpenAuctionForBids(): Auction is Closed - Cannot Open for new bids ") + return shim.Error("OpenAuctionForBids(): is Closed - Cannot Open for new bids Failed ") + } + + // Calculate Time Now and Duration of Auction + + // Validate arg[1] is an integer as it represents Duration in Minutes + aucDuration, err := strconv.Atoi(args[2]) + if err != nil { + fmt.Println("OpenAuctionForBids(): Auction Duration is an integer that represents minute! OpenAuctionForBids() Failed ") + return shim.Error("OpenAuctionForBids(): Auction Duration is an integer that represents minute! OpenAuctionForBids() Failed ") + } + + aucStartDate, err := time.Parse("2006-01-02 15:04:05", args[3]) + aucEndDate := aucStartDate.Add(time.Duration(aucDuration) * time.Minute) + + // We don't use go routines anymore to time the auction + //sleepTime := time.Duration(aucDuration * 60 * 1000 * 1000 * 1000) + + // Update Auction Object + aucR.OpenDate = aucStartDate.Format("2006-01-02 15:04:05") + aucR.CloseDate = aucEndDate.Format("2006-01-02 15:04:05") + aucR.Status = "OPEN" + + response := UpdateAuctionStatus(stub, "Auction", aucR) + if response.Status != shim.OK { + fmt.Println("OpenAuctionForBids(): UpdateAuctionStatus() Failed ") + return shim.Error("OpenAuctionForBids(): UpdateAuctionStatus() Failed ") + } + + buff := response.Payload + + // Remove the Auction from INIT Bucket and move to OPEN bucket + // This was designed primarily to help the UI + + keys := []string{"2016", aucR.AuctionID} + err = DeleteObject(stub, "AucInit", keys) + if err != nil { + fmt.Println("OpenAuctionForBids(): DeleteFromLedger() Failed ") + return shim.Error("OpenAuctionForBids(): DeleteFromLedger() Failed ") + } + + // Add the Auction to Open Bucket + err = UpdateObject(stub, "AucOpen", keys, buff) + if err != nil { + fmt.Println("OpenAuctionForBids() : write error while inserting record into AucInit\n") + return shim.Error(err.Error()) + } + + return shim.Success(buff) +} + +////////////////////////////////////////////////////////////////////////// +// Close Open Auctions +// 1. Read OpenAucTable +// 2. Compare now with expiry time with now +// 3. If now is > expiry time call CloseAuction +// ./peer chaincode invoke -l golang -n mycc -c '{"Function": "CloseOpenAuctions", "Args": ["2016", "CLAUC", currentDateTime]}' +////////////////////////////////////////////////////////////////////////// + +func CloseOpenAuctions(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + response := GetListOfOpenAucs(stub, "AucOpen", []string{"2016"}) + if response.Status != shim.OK { + error_str := fmt.Sprintf("CloseOpenAuctions() operation failed. Error retrieving values from AucOpen: %s", response.Message) + fmt.Println(error_str) + return shim.Error(error_str) + } + + rows := response.Payload + tlist := make([]AuctionRequest, len(rows)) + err := json.Unmarshal([]byte(rows), &tlist) + if err != nil { + error_str := fmt.Sprintf("CloseOpenAuctions() Unmarshal operation failed. Error retrieving values from AucOpen: %s", response.Message) + fmt.Println(error_str) + return shim.Error(error_str) + } + + for i := 0; i < len(tlist); i++ { + ar := tlist[i] + + fmt.Println("CloseOpenAuctions() ", ar) + + // Compare Auction Times where args[2] = the CurrentTime sent by the client + fmt.Println("CloseOpenAuctions() : ", args[2], ": ar.CloseDate : ", ar.CloseDate) + if tCompare(args[2], ar.CloseDate) == false { + + // Request Closing Auction + response := CloseAuction(stub, "CloseAuction", []string{ar.AuctionID}) + if response.Status != shim.OK { + error_str := fmt.Sprintf("CloseOpenAuctions() operation failed. %s", err) + fmt.Println(error_str) + return shim.Error(error_str) + } + } + } + + return shim.Success(nil) +} + +////////////////////////////////////////////////////////////////////////// +// Close the Auction +// This is invoked by OpenAuctionForBids +// which kicks-off a go-routine timer for the duration of the auction +// When the timer expires, it creates a shell script to CloseAuction() and triggers it +// This function can also be invoked via CLI - the intent was to close as and when I implement BuyItNow() +// CloseAuction +// - Sets the status of the Auction to "CLOSED" +// - Removes the Auction from the Open Auction list (AucOpenTable) +// - Retrieves the Highest Bid and creates a Transaction +// - Posts The Transaction +// +// To invoke from Command Line via CLI or REST API +// ./peer chaincode invoke -l golang -n mycc -c '{"Function": "CloseAuction", "Args": ["1111", "AUCREQ"]}' +// ./peer chaincode invoke -l golang -n mycc -c '{"Function": "CloseAuction", "Args": ["1111", "AUCREQ"]}' +// +////////////////////////////////////////////////////////////////////////// + +func CloseAuction(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + // Close The Auction - Fetch Auction Object + Avalbytes, err := QueryObject(stub, "Auction", []string{args[0]}) + if err != nil { + fmt.Println("CloseAuction(): Auction Object Retrieval Failed ") + return shim.Error("CloseAuction(): Auction Object Retrieval Failed ") + } + + aucR, err := JSONtoAucReq(Avalbytes) + if err != nil { + fmt.Println("CloseAuction(): Auction Object Unmarshalling Failed ") + return shim.Error("CloseAuction(): Auction Object UnMarshalling Failed ") + } + + // Update Auction Status + aucR.Status = "CLOSED" + fmt.Println("CloseAuction(): UpdateAuctionStatus() successful ", aucR) + + response := UpdateAuctionStatus(stub, "Auction", aucR) + if response.Status != shim.OK { + fmt.Println("CloseAuction(): UpdateAuctionStatus() Failed ") + return shim.Error("CloseAuction(): UpdateAuctionStatus() Failed ") + } + Avalbytes = response.Payload + + // Remove the Auction from Open Bucket + keys := []string{"2016", aucR.AuctionID} + err = DeleteObject(stub, "AucOpen", keys) + if err != nil { + fmt.Println("CloseAuction(): DeleteFromLedger(AucOpenTable) Failed ") + return shim.Error("CloseAuction(): DeleteFromLedger(AucOpen) Failed ") + } + + fmt.Println("CloseAuction(): Proceeding to process the highest bid ") + + // Process Final Bid - Turn it into a Transaction + response = GetHighestBid(stub, "GetHighestBid", []string{args[0]}) + Avalbytes = response.Payload + if Avalbytes == nil { + fmt.Println("CloseAuction(): No bids available, no change in Item Status - PostTransaction() Completed Successfully ") + return shim.Success(Avalbytes) + } + + if response.Status != shim.OK { + fmt.Println("CloseAuction(): No bids available, error encountered - PostTransaction() failed ") + return shim.Error(err.Error()) + } + + bid, _ := JSONtoBid(Avalbytes) + fmt.Println("CloseAuction(): Proceeding to process the highest bid ", bid) + tran := BidtoTransaction(bid) + fmt.Println("CloseAuction(): Converting Bid to tran ", tran) + + // Process the last bid once Time Expires + tranArgs := []string{tran.AuctionID, tran.RecType, tran.ItemID, tran.TransType, tran.UserId, tran.TransDate, tran.HammerTime, tran.HammerPrice, tran.Details} + fmt.Println("CloseAuction(): Proceeding to process the Transaction ", tranArgs) + + response = PostTransaction(stub, "PostTransaction", tranArgs) + if response.Status != shim.OK { + fmt.Println("CloseAuction(): PostTransaction() Failed ") + return shim.Error("CloseAuction(): PostTransaction() Failed ") + } + Avalbytes = response.Payload + fmt.Println("CloseAuction(): PostTransaction() Completed Successfully ") + return shim.Success(Avalbytes) + +} + +//////////////////////////////////////////////////////////////////////////////////////////// +// Buy It Now +// Rules: +// If Buy IT Now Option is available then a Buyer has the option to buy the ITEM +// before the bids exceed BuyITNow Price . Normally, The application should take of this +// at the UI level and this chain-code assumes application has validated that +//////////////////////////////////////////////////////////////////////////////////////////// + +func BuyItNow(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + + // Process Final Bid - Turn it into a Transaction + response := GetHighestBid(stub, "GetHighestBid", []string{args[0]}) + bid, err := JSONtoBid(response.Payload) + if err != nil { + return shim.Error("BuyItNow() : JSONtoBid Error") + } + + // Check if BuyItNow Price > Highest Bid so far + binP, err := strconv.Atoi(args[5]) + if err != nil { + return shim.Error("BuyItNow() : Invalid BuyItNow Price") + } + + hbP, err := strconv.Atoi(bid.BidPrice) + if err != nil { + return shim.Error("BuyItNow() : Invalid Highest Bid Price") + } + + if hbP > binP { + return shim.Error("BuyItNow() : Highest Bid Price > BuyItNow Price - BuyItNow Rejected") + } + + // Close The Auction - Fetch Auction Object + Avalbytes, err := QueryObject(stub, "Auction", []string{args[0]}) + if err != nil { + fmt.Println("BuyItNow(): Auction Object Retrieval Failed ") + return shim.Error("BuyItNow(): Auction Object Retrieval Failed ") + } + + aucR, err := JSONtoAucReq(Avalbytes) + if err != nil { + fmt.Println("BuyItNow(): Auction Object Unmarshalling Failed ") + return shim.Error("BuyItNow(): Auction Object UnMarshalling Failed ") + } + + // Update Auction Status + aucR.Status = "CLOSED" + fmt.Println("BuyItNow(): UpdateAuctionStatus() successful ", aucR) + + response = UpdateAuctionStatus(stub, "Auction", aucR) + if response.Status != shim.OK { + fmt.Println("BuyItNow(): UpdateAuctionStatus() Failed ") + return shim.Error("BuyItNow(): UpdateAuctionStatus() Failed ") + } + Avalbytes = response.Payload + + // Remove the Auction from Open Bucket + keys := []string{"2016", aucR.AuctionID} + err = DeleteObject(stub, "AucOpen", keys) + if err != nil { + fmt.Println("BuyItNow(): DeleteFromLedger(AucOpen) Failed ") + return shim.Error("BuyItNow(): DeleteFromLedger(AucOpen) Failed ") + } + + fmt.Println("BuyItNow(): Proceeding to process the highest bid ") + + // Convert the BuyITNow to a Bid type struct + buyItNowBid, err := CreateBidObject(args[0:]) + if err != nil { + return shim.Error(err.Error()) + } + + // Reject the offer if the Buyer Information Is not Valid or not registered on the Block Chain + response = ValidateMember(stub, args[4]) + if response.Status != shim.OK { + fmt.Println("BuyItNow() : Failed Buyer not registered on the block-chain ", args[4]) + return shim.Error(err.Error()) + } + + buyerInfo := response.Payload + fmt.Println("Buyer information ", buyerInfo, args[4]) + + tran := BidtoTransaction(buyItNowBid) + fmt.Println("BuyItNow(): Converting Bid to tran ", tran) + + // Process the buy-it-now offer + tranArgs := []string{tran.AuctionID, tran.RecType, tran.ItemID, tran.TransType, tran.UserId, tran.TransDate, tran.HammerTime, tran.HammerPrice, tran.Details} + fmt.Println("BuyItNow(): Proceeding to process the Transaction ", tranArgs) + + response = PostTransaction(stub, "PostTransaction", tranArgs) + if response.Status != shim.OK { + fmt.Println("BuyItNow(): PostTransaction() Failed ") + return shim.Error("CloseAuction(): PostTransaction() Failed ") + } + + fmt.Println("BuyItNow(): PostTransaction() Completed Successfully ") + return response +} + +////////////////////////////////////////////////////////////////////////// +// Update the Auction Object +// This function updates the status of the auction +// from INIT to OPEN to CLOSED +////////////////////////////////////////////////////////////////////////// + +func UpdateAuctionStatus(stub shim.ChaincodeStubInterface, tableName string, ar AuctionRequest) pb.Response { + + buff, err := AucReqtoJSON(ar) + if err != nil { + fmt.Println("UpdateAuctionStatus() : Failed Cannot create object buffer for write : ", ar.AuctionID) + return shim.Error("UpdateAuctionStatus(): Failed Cannot create object buffer for write : " + ar.AuctionID) + } + + // Update the ledger with the Buffer Data + //keys := []string{ar.AuctionID, ar.ItemID} + keys := []string{ar.AuctionID} + err = ReplaceObject(stub, "Auction", keys, buff) + if err != nil { + fmt.Println("UpdateAuctionStatus() : write error while inserting record\n") + return shim.Error(err.Error()) + } + return shim.Success(buff) +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// Return the right Object Buffer after validation to write to the ledger +// var recType = []string{"ARTINV", "USER", "BID", "AUCREQ", "POSTTRAN", "OPENAUC", "CLAUC"} +///////////////////////////////////////////////////////////////////////////////////////////// + +func ProcessQueryResult(stub shim.ChaincodeStubInterface, Avalbytes []byte, args []string) error { + + // Identify Record Type by scanning the args for one of the recTypes + // This is kind of a post-processor once the query fetches the results + // RecType is the style of programming in the punch card days .. + // ... well + + var dat map[string]interface{} + + if err := json.Unmarshal(Avalbytes, &dat); err != nil { + panic(err) + } + + var recType string + recType = dat["RecType"].(string) + switch recType { + + case "ARTINV": + + ar, err := JSONtoAR(Avalbytes) // + if err != nil { + fmt.Println("ProcessRequestType(): Cannot create itemObject \n") + return err + } + // Decrypt Image and Save Image in a file + image := Decrypt(ar.AES_Key, ar.ItemImage) + if err != nil { + fmt.Println("ProcessRequestType() : Image decrytion failed ") + return err + } + fmt.Println("ProcessRequestType() : Image conversion from byte[] to file Successful ") + err = ByteArrayToImage(image, "copy."+ar.ItemPicFN) + if err != nil { + + fmt.Println("ProcessRequestType() : Image conversion from byte[] to file failed ") + return err + } + return err + + case "USER": + ur, err := JSONtoUser(Avalbytes) // + if err != nil { + return err + } + fmt.Println("ProcessRequestType() : ", ur) + return err + + case "AUCREQ": + ar, err := JSONtoAucReq(Avalbytes) // + if err != nil { + return err + } + fmt.Println("ProcessRequestType() : ", ar) + return err + + case "OPENAUC": + ar, err := JSONtoAucReq(Avalbytes) // + if err != nil { + return err + } + fmt.Println("ProcessRequestType() : ", ar) + return err + case "CLAUC": + ar, err := JSONtoAucReq(Avalbytes) // + if err != nil { + return err + } + fmt.Println("ProcessRequestType() : ", ar) + return err + case "POSTTRAN": + atr, err := JSONtoTran(Avalbytes) // + if err != nil { + return err + } + fmt.Println("ProcessRequestType() : ", atr) + return err + case "BID": + bid, err := JSONtoBid(Avalbytes) // + if err != nil { + return err + } + fmt.Println("ProcessRequestType() : ", bid) + return err + case "DEFAULT": + return nil + case "XFER": + return nil + default: + return errors.New("Unknown") + } + return nil + +} diff --git a/app/platform/fabric/e2e-test/chaincodes/auctionapp/image_proc_api.go b/app/platform/fabric/e2e-test/chaincodes/auctionapp/image_proc_api.go new file mode 100644 index 000000000..75f42466e --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/auctionapp/image_proc_api.go @@ -0,0 +1,263 @@ +/****************************************************************** +Copyright IT People Corp. 2017 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +******************************************************************/ + +/////////////////////////////////////////////////////////////////////// +// Author : IT People - Mohan Venkataraman - image API +// Purpose: Explore the Hyperledger/fabric and understand +// how to write an chain code, application/chain code boundaries +// The code is not the best as it has just hammered out in a day or two +// Feedback and updates are appreciated +/////////////////////////////////////////////////////////////////////// + +package main + +import ( + "bufio" + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "errors" + "fmt" + "image" + "image/gif" + "image/jpeg" + "image/png" + "io" + "net/http" + "os" +) + +/////////////////////////////////////////////////////////// +// Convert Image to []bytes and viceversa +// Detect Image Filetype +// Image Function to read an image and create a byte array +// Currently only PNG images are supported +/////////////////////////////////////////////////////////// +func ImageToByteArray(imageFile string) ([]byte, string) { + + file, err := os.Open(imageFile) + + if err != nil { + fmt.Println("imageToByteArray() : cannot OPEN image file ", err) + return nil, string("imageToByteArray() : cannot OPEN image file ") + } + + defer file.Close() + + fileInfo, _ := file.Stat() + var size int64 = fileInfo.Size() + bytes := make([]byte, size) + + // read file into bytes + buff := bufio.NewReader(file) + _, err = buff.Read(bytes) + + if err != nil { + fmt.Println("imageToByteArray() : cannot READ image file") + return nil, string("imageToByteArray() : cannot READ image file ") + } + + filetype := http.DetectContentType(bytes) + fmt.Println("imageToByteArray() : ", filetype) + //filetype := GetImageType(bytes) + + return bytes, filetype +} + +////////////////////////////////////////////////////// +// If Valid fileType, will have "image" as first word +////////////////////////////////////////////////////// +func GetImageType(buff []byte) string { + filetype := http.DetectContentType(buff) + + switch filetype { + case "image/jpeg", "image/jpg": + return filetype + + case "image/gif": + return filetype + + case "image/png": + return filetype + + case "application/pdf": // not image, but application ! + filetype = "application/pdf" + default: + filetype = "Unknown" + } + return filetype +} + +//////////////////////////////////////////////////////////// +// Converts a byteArray into an image and saves it +// into an appropriate file +// It is important to get the file type before saving the +// file by call the GetImageType +//////////////////////////////////////////////////////////// +func ByteArrayToImage(imgByte []byte, imageFile string) error { + + // convert []byte to image for saving to file + img, _, _ := image.Decode(bytes.NewReader(imgByte)) + + fmt.Println("ProcessQueryResult ByteArrayToImage : proceeding to create image ") + + //save the imgByte to file + out, err := os.Create(imageFile) + + if err != nil { + fmt.Println("ByteArrayToImage() : cannot CREATE image file ", err) + return errors.New("ByteArrayToImage() : cannot CREATE image file ") + } + fmt.Println("ProcessRequestType ByteArrayToImage : proceeding to Encode image ") + + //err = png.Encode(out, img) + filetype := http.DetectContentType(imgByte) + + switch filetype { + case "image/jpeg", "image/jpg": + var opt jpeg.Options + opt.Quality = 100 + err = jpeg.Encode(out, img, &opt) + + case "image/gif": + var opt gif.Options + opt.NumColors = 256 + err = gif.Encode(out, img, &opt) + + case "image/png": + err = png.Encode(out, img) + + default: + err = errors.New("Only PMNG, JPG and GIF Supported ") + } + + if err != nil { + fmt.Println("ByteArrayToImage() : cannot ENCODE image file ", err) + return errors.New("ByteArrayToImage() : cannot ENCODE image file ") + } + + // everything ok + fmt.Println("Image file generated and saved to ", imageFile) + return nil +} + +/////////////////////////////////////////////////////////////////////// +// Encryption and Decryption Section +// Images will be Encrypted and stored and the key will be part of the +// certificate that is provided to the Owner +/////////////////////////////////////////////////////////////////////// + +const ( + AESKeyLength = 32 // AESKeyLength is the default AES key length + NonceSize = 24 // NonceSize is the default NonceSize +) + +/////////////////////////////////////////////////// +// GetRandomBytes returns len random looking bytes +/////////////////////////////////////////////////// +func GetRandomBytes(len int) ([]byte, error) { + key := make([]byte, len) + + _, err := rand.Read(key) + if err != nil { + return nil, err + } + + return key, nil +} + +//////////////////////////////////////////////////////////// +// GenAESKey returns a random AES key of length AESKeyLength +// 3 Functions to support Encryption and Decryption +// GENAESKey() - Generates AES symmetric key +// Encrypt() Encrypts a [] byte +// Decrypt() Decryts a [] byte +//////////////////////////////////////////////////////////// +func GenAESKey() ([]byte, error) { + return GetRandomBytes(AESKeyLength) +} + +func PKCS5Pad(src []byte) []byte { + padding := aes.BlockSize - len(src)%aes.BlockSize + pad := bytes.Repeat([]byte{byte(padding)}, padding) + return append(src, pad...) +} + +func PKCS5Unpad(src []byte) []byte { + len := len(src) + unpad := int(src[len-1]) + return src[:(len - unpad)] +} + +func Decrypt(key []byte, ciphertext []byte) []byte { + + // Create the AES cipher + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + // Before even testing the decryption, + // if the text is too small, then it is incorrect + if len(ciphertext) < aes.BlockSize { + panic("Text is too short") + } + + // Get the 16 byte IV + iv := ciphertext[:aes.BlockSize] + + // Remove the IV from the ciphertext + ciphertext = ciphertext[aes.BlockSize:] + + // Return a decrypted stream + stream := cipher.NewCFBDecrypter(block, iv) + + // Decrypt bytes from ciphertext + stream.XORKeyStream(ciphertext, ciphertext) + + return ciphertext +} + +func Encrypt(key []byte, ba []byte) []byte { + + // Create the AES cipher + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + // Empty array of 16 + ba length + // Include the IV at the beginning + ciphertext := make([]byte, aes.BlockSize+len(ba)) + + // Slice of first 16 bytes + iv := ciphertext[:aes.BlockSize] + + // Write 16 rand bytes to fill iv + if _, err := io.ReadFull(rand.Reader, iv); err != nil { + panic(err) + } + + // Return an encrypted stream + stream := cipher.NewCFBEncrypter(block, iv) + + // Encrypt bytes from ba to ciphertext + stream.XORKeyStream(ciphertext[aes.BlockSize:], ba) + + return ciphertext +} diff --git a/app/platform/fabric/e2e-test/chaincodes/auctionapp/table_api.go b/app/platform/fabric/e2e-test/chaincodes/auctionapp/table_api.go new file mode 100644 index 000000000..a3caf7695 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/auctionapp/table_api.go @@ -0,0 +1,484 @@ +/****************************************************************** +Copyright IT People Corp. 2017 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +******************************************************************/ + +/////////////////////////////////////////////////////////////////////// +// Author : IT People - Mohan Venkataraman - table API for v1.0 +// Purpose: Explore the Hyperledger/fabric and understand +// how to write an chain code, application/chain code boundaries +// The code is not the best as it has just hammered out in a day or two +// Feedback and updates are appreciated +/////////////////////////////////////////////////////////////////////// + +package main + +import ( + "bytes" + "errors" + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" +) + +////////////////////////////////////////////////////////////////////////////////////////////////// +// The recType is a mandatory attribute. The original app was written with a single table +// in mind. The only way to know how to process a record was the 70's style 80 column punch card +// which used a record type field. The array below holds a list of valid record types. +// This could be stored on a blockchain table or an application +////////////////////////////////////////////////////////////////////////////////////////////////// +var recType = []string{"ARTINV", "USER", "BID", "AUCREQ", "POSTTRAN", "OPENAUC", "CLAUC", "XFER", "VERIFY", "DOWNLOAD"} + +////////////////////////////////////////////////////////////////////////////////////////////////// +// The following array holds the list of tables that should be created +// The deploy/init deletes the tables and recreates them every time a deploy is invoked +////////////////////////////////////////////////////////////////////////////////////////////////// +var Objects = []string{"PARTY", "CASHTXN", "User", "UserCat", "Item", "ItemCat", "ItemHistory", "Auction", "AucInit", "AucOpen", "Bid", "Trans"} + +///////////////////////////////////////////////////////////////////////////////////////////////////// +// A Map that holds ObjectNames and the number of Keys +// This information is used to dynamically Create, Update +// Replace , and Query the Ledger +// In this model all attributes in a table are strings +// The chain code does both validation +// A dummy key like 2016 in some cases is used for a query to get all rows +// +// "User": 1, Key: UserID +// "Item": 1, Key: ItemID +// "UserCat": 3, Key: "2016", UserType, UserID +// "ItemCat": 3, Key: "2016", ItemSubject, ItemID +// "Auction": 1, Key: AuctionID +// "AucInit": 2, Key: Year, AuctionID +// "AucOpen": 2, Key: Year, AuctionID +// "Trans": 2, Key: AuctionID, ItemID +// "Bid": 2, Key: AuctionID, BidNo +// "ItemHistory": 4, Key: ItemID, Status, AuctionHouseID(if applicable),date-time +// +// The additional key is the ObjectType (aka ObjectName or Object). The keys would be +// keys: {"User", UserId} or keys: {"AuctInit", "2016", "1134"} +///////////////////////////////////////////////////////////////////////////////////////////////////// + +func GetNumberOfKeys(tname string) int { + ObjectMap := map[string]int{ + "User": 1, + "Item": 1, + "UserCat": 3, + "ItemCat": 3, + "Auction": 1, + "AucInit": 2, + "AucOpen": 2, + "Trans": 2, + "Bid": 2, + "ItemHistory": 4, + "PARTY": 2, + "CASHTXN": 1, + } + return ObjectMap[tname] +} + +///////////////////////////////////////////////////////////////// +// This function checks the incoming args for a valid record +// type entry as per the declared array recType[] +// The rectType attribute can be anywhere in the args or struct +// not necessarily in args[1] as per my old logic +// The Request type is used to direct processing +// the record accordingly e: recType is "USER" +// "Args":["PostUser","100", "USER", "Ashley Hart", "TRD", "Morrisville Parkway, #216, Morrisville, NC 27560", +// "9198063535", "ashley@it people.com", "SUNTRUST", "0001732345", "0234678", "2017-01-02 15:04:05"]}' +///////////////////////////////////////////////////////////////// +func ChkRecType(args []string) bool { + for _, rt := range args { + for _, val := range recType { + if val == rt { + return true + } + } + } + return false +} + +///////////////////////////////////////////////////////////////// +// Checks if the incoming invoke has a valid requesType +// The Request type is used to process the record accordingly +// Old Logic (see new logic up) +///////////////////////////////////////////////////////////////// +func CheckRecType(rt string) bool { + for _, val := range recType { + if val == rt { + fmt.Println("CheckRequestType() : Valid Request Type , val : ", val, rt, "\n") + return true + } + } + fmt.Println("CheckRequestType() : Invalid Request Type , val : ", rt, "\n") + return false +} + +///////////////////////////////////////////////////////////////// +// Checks if the args contain a valid Record Type. Typically, this +// model expects the Object Type to be args[2] but +// for the sake of flexibility, it scans the input data for +// a valid type if available +///////////////////////////////////////////////////////////////// +func IdentifyRecType(args []string) (string, error) { + for _, rt := range args { + for _, val := range recType { + if val == rt { + return rt, nil + } + } + } + return "", fmt.Errorf("IdentifyRecType: Not Found") +} + +///////////////////////////////////////////////////////////////// +// Checks if the args contain a valid Object Type. Typically, this +// model expects the Object Type to be args[0] but +// for the sake of flexibility, it scans the input data for +// a valid type if available +///////////////////////////////////////////////////////////////// +func IdentifyObjectType(args []string) (string, error) { + for _, rt := range args { + for _, val := range Objects { + if val == rt { + return rt, nil + } + } + } + return "", fmt.Errorf("IdentifyObjectType: Object Not Found") +} + +//////////////////////////////////////////////////////////////////////////// +// Open a Ledgers if one does not exist +// These ledgers will be used to write / read data +//////////////////////////////////////////////////////////////////////////// +func InitObject(stub shim.ChaincodeStubInterface, objectType string, keys []string) error { + + fmt.Println(">> Not Implemented Yet << Initializing Object : ", objectType, " Keys: ", keys) + return nil +} + +//////////////////////////////////////////////////////////////////////////// +// Update the Object - Replace current data with replacement +// Register users into this table +//////////////////////////////////////////////////////////////////////////// +func UpdateObject(stub shim.ChaincodeStubInterface, objectType string, keys []string, objectData []byte) error { + + // Check how many keys + + err := VerifyAtLeastOneKeyIsPresent(objectType, keys) + if err != nil { + return err + } + + // Convert keys to compound key + compositeKey, _ := stub.CreateCompositeKey(objectType, keys) + + // Add Object JSON to state + err = stub.PutState(compositeKey, objectData) + if err != nil { + fmt.Println("UpdateObject() : Error inserting Object into State Database %s", err) + return err + } + + return nil + +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Retrieve the object based on the key and simply delete it +// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +func DeleteObject(stub shim.ChaincodeStubInterface, objectType string, keys []string) error { + + // Check how many keys + + err := VerifyAtLeastOneKeyIsPresent(objectType, keys) + if err != nil { + return err + } + + // Convert keys to compound key + compositeKey, _ := stub.CreateCompositeKey(objectType, keys) + + // Remove object from the State Database + err = stub.DelState(compositeKey) + if err != nil { + fmt.Println("DeleteObject() : Error deleting Object into State Database %s", err) + return err + } + fmt.Println("DeleteObject() : ", "Object : ", objectType, " Key : ", compositeKey) + + return nil +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Delete all objects of ObjectType +// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +func DeleteAllObjects(stub shim.ChaincodeStubInterface, objectType string) error { + + // Convert keys to compound key + compositeKey, _ := stub.CreateCompositeKey(objectType, []string{""}) + + // Remove object from the State Database + err := stub.DelState(compositeKey) + if err != nil { + fmt.Println("DeleteAllObjects() : Error deleting all Object into State Database %s", err) + return err + } + fmt.Println("DeleteObject() : ", "Object : ", objectType, " Key : ", compositeKey) + + return nil +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Replaces the Entry in the Ledger +// The existing object is simply queried and the data contents is replaced with +// new content +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +func ReplaceObject(stub shim.ChaincodeStubInterface, objectType string, keys []string, objectData []byte) error { + + // Check how many keys + + err := VerifyAtLeastOneKeyIsPresent(objectType, keys) + if err != nil { + return err + } + + // Convert keys to compound key + compositeKey, _ := stub.CreateCompositeKey(objectType, keys) + + // Add Party JSON to state + err = stub.PutState(compositeKey, objectData) + if err != nil { + fmt.Println("ReplaceObject() : Error replacing Object in State Database %s", err) + return err + } + + fmt.Println("ReplaceObject() : - end init object ", objectType) + return nil +} + +//////////////////////////////////////////////////////////////////////////// +// Query a User Object by Object Name and Key +// This has to be a full key and should return only one unique object +//////////////////////////////////////////////////////////////////////////// +func QueryObject(stub shim.ChaincodeStubInterface, objectType string, keys []string) ([]byte, error) { + + // Check how many keys + + err := VerifyAtLeastOneKeyIsPresent(objectType, keys) + if err != nil { + return nil, err + } + + compoundKey, _ := stub.CreateCompositeKey(objectType, keys) + fmt.Println("QueryObject() : Compound Key : ", compoundKey) + + Avalbytes, err := stub.GetState(compoundKey) + if err != nil { + return nil, err + } + + return Avalbytes, nil +} + +//////////////////////////////////////////////////////////////////////////// +// Query a User Object by Object Name and Key +// This has to be a full key and should return only one unique object +//////////////////////////////////////////////////////////////////////////// +func QueryObjectWithProcessingFunction(stub shim.ChaincodeStubInterface, objectType string, keys []string, fname func(shim.ChaincodeStubInterface, []byte, []string) error) ([]byte, error) { + + // Check how many keys + + err := VerifyAtLeastOneKeyIsPresent(objectType, keys) + if err != nil { + return nil, err + } + + compoundKey, _ := stub.CreateCompositeKey(objectType, keys) + fmt.Println("QueryObject: Compound Key : ", compoundKey) + + Avalbytes, err := stub.GetState(compoundKey) + if err != nil { + return nil, err + } + + if Avalbytes == nil { + return nil, fmt.Errorf("QueryObject: No Data Found for Compound Key : ", compoundKey) + } + + // Perform Any additional processing of data + fmt.Println("fname() : Successful - Proceeding to fname") + + err = fname(stub, Avalbytes, keys) + if err != nil { + fmt.Println("QueryLedger() : Cannot execute : ", fname) + jsonResp := "{\"fname() Error\":\" Cannot create Object for key " + compoundKey + "\"}" + return Avalbytes, errors.New(jsonResp) + } + + return Avalbytes, nil +} + +//////////////////////////////////////////////////////////////////////////// +// Get a List of Rows based on query criteria from the OBC +// The getList Function +//////////////////////////////////////////////////////////////////////////// +func GetKeyList(stub shim.ChaincodeStubInterface, args []string) (shim.StateQueryIteratorInterface, error) { + + // Define partial key to query within objects namespace (objectType) + objectType := args[0] + + // Check how many keys + + err := VerifyAtLeastOneKeyIsPresent(objectType, args[1:]) + if err != nil { + return nil, err + } + + // Execute the Query + // This will execute a key range query on all keys starting with the compound key + resultsIterator, err := stub.GetStateByPartialCompositeKey(objectType, args[1:]) + if err != nil { + return nil, err + } + + defer resultsIterator.Close() + + // Iterate through result set + var i int + for i = 0; resultsIterator.HasNext(); i++ { + + // Retrieve the Key and Object + myCompositeKey, err := resultsIterator.Next() + if err != nil { + return nil, err + } + fmt.Println("GetList() : my Value : ", myCompositeKey) + } + return resultsIterator, nil +} + +/////////////////////////////////////////////////////////////////////////////////////////// +// GetQueryResultForQueryString executes the passed in query string. +// Result set is built and returned as a byte array containing the JSON results. +/////////////////////////////////////////////////////////////////////////////////////////// +func GetQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) { + + fmt.Println("GetQueryResultForQueryString() : getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, err := stub.GetQueryResult(queryString) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryRecords + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return nil, err + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Println("GetQueryResultForQueryString(): getQueryResultForQueryString queryResult:\n%s\n", buffer.String()) + + return buffer.Bytes(), nil +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Retrieve a list of Objects from the Query +// The function returns an iterator from which objects can be retrieved. +// defer rs.Close() +// +// // Iterate through result set +// var i int +// for i = 0; rs.HasNext(); i++ { +// +// // We can process whichever return value is of interest +// myKey , myKeyVal , err := rs.Next() +// if err != nil { +// return shim.Success(nil) +// } +// bob, _ := JSONtoUser(myKeyVal) +// fmt.Println("GetList() : my Value : ", bob) +// } +// +// eg: Args":["fetchlist", "PARTY","CHK"]} +// fetchList is the function that calls getList : ObjectType = "Party" and key is "CHK" +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +func GetList(stub shim.ChaincodeStubInterface, objectType string, keys []string) (shim.StateQueryIteratorInterface, error) { + + // Check how many keys + + err := VerifyAtLeastOneKeyIsPresent(objectType, keys) + if err != nil { + return nil, err + } + + // Get Result set + resultIter, err := stub.GetStateByPartialCompositeKey(objectType, keys) + fmt.Println("GetList(): Retrieving Objects into an array") + if err != nil { + return nil, err + } + + // Return iterator for result set + // Use code above to retrieve objects + return resultIter, nil +} + +//////////////////////////////////////////////////////////////////////////// +// This function verifies if the number of key provided is at least 1 and +// < the max keys defined for the Object +//////////////////////////////////////////////////////////////////////////// + +func VerifyAtLeastOneKeyIsPresent(objectType string, args []string) error { + + // Check how many keys + nKeys := GetNumberOfKeys(objectType) + nCol := len(args) + if nCol == 1 { + return nil + } + + if nCol < 1 { + error_str := fmt.Sprintf("VerifyAtLeastOneKeyIsPresent() Failed: Atleast 1 Key must is needed : nKeys : %s, nCol : %s ", nKeys, nCol) + fmt.Println(error_str) + return errors.New(error_str) + } + + return nil +} diff --git a/app/platform/fabric/e2e-test/chaincodes/autovendor/chaincode/main.go b/app/platform/fabric/e2e-test/chaincodes/autovendor/chaincode/main.go new file mode 100644 index 000000000..dedc926a1 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/autovendor/chaincode/main.go @@ -0,0 +1,43 @@ +/* + * Copyright Greg Haskins All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + * + * The purpose of this test code is to prove that the system properly packages + * up dependencies. We therefore synthesize the scenario where a chaincode + * imports non-standard dependencies both directly and indirectly and then + * expect a unit-test to verify that the package includes everything needed + * and ultimately builds properly. + * + */ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" + "github.com/hyperledger/fabric/test/chaincodes/AutoVendor/directdep" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Error("NOT IMPL") +} + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Error("NOT IMPL") +} + +func main() { + directdep.PointlessFunction() + + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/autovendor/directdep/core.go b/app/platform/fabric/e2e-test/chaincodes/autovendor/directdep/core.go new file mode 100644 index 000000000..a19928a14 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/autovendor/directdep/core.go @@ -0,0 +1,17 @@ +/* + * Copyright Greg Haskins All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + * + * See github.com/hyperledger/fabric/test/chaincodes/AutoVendor/chaincode/main.go for details + */ +package directdep + +import ( + "github.com/hyperledger/fabric/test/chaincodes/AutoVendor/indirectdep" +) + +func PointlessFunction() { + // delegate to our indirect dependency + indirectdep.PointlessFunction() +} diff --git a/app/platform/fabric/e2e-test/chaincodes/autovendor/indirectdep/core.go b/app/platform/fabric/e2e-test/chaincodes/autovendor/indirectdep/core.go new file mode 100644 index 000000000..4a3fa9d3e --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/autovendor/indirectdep/core.go @@ -0,0 +1,14 @@ +/* + * Copyright Greg Haskins All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + * + * See github.com/hyperledger/fabric/test/chaincodes/AutoVendor/chaincode/main.go for details + */ +package indirectdep + +import "fmt" + +func PointlessFunction() { + fmt.Printf("Successfully invoked pointless function\n") +} diff --git a/app/platform/fabric/e2e-test/chaincodes/badimport/main.go b/app/platform/fabric/e2e-test/chaincodes/badimport/main.go new file mode 100644 index 000000000..f2a4963a5 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/badimport/main.go @@ -0,0 +1,25 @@ +/* + * Copyright Greg Haskins All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package main + +import ( + "github.com/hyperledger/fabric/core/chaincode/shim" + "fmt" + "bogus/package" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/example02/node/chaincode_example02.js b/app/platform/fabric/e2e-test/chaincodes/example02/node/chaincode_example02.js new file mode 100644 index 000000000..3ace69b1d --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/example02/node/chaincode_example02.js @@ -0,0 +1,141 @@ +/* +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +*/ + +const shim = require('fabric-shim'); +const util = require('util'); + +var Chaincode = class { + + // Initialize the chaincode + async Init(stub) { + console.info('========= example02 Init ========='); + let ret = stub.getFunctionAndParameters(); + console.info(ret); + let args = ret.params; + // initialise only if 4 parameters passed. + if (args.length != 4) { + return shim.error('Incorrect number of arguments. Expecting 4'); + } + + let A = args[0]; + let B = args[2]; + let Aval = args[1]; + let Bval = args[3]; + + if (typeof parseInt(Aval) !== 'number' || typeof parseInt(Bval) !== 'number') { + return shim.error('Expecting integer value for asset holding'); + } + + try { + await stub.putState(A, Buffer.from(Aval)); + try { + await stub.putState(B, Buffer.from(Bval)); + return shim.success(); + } catch (err) { + return shim.error(err); + } + } catch (err) { + return shim.error(err); + } + } + + async Invoke(stub) { + console.info('Transaction ID: ' + stub.getTxID()); + console.info(util.format('Args: %j', stub.getArgs())); + + let ret = stub.getFunctionAndParameters(); + console.info(ret); + let method = this[ret.fcn]; + if (!method) { + console.log('no method of name:' + ret.fcn + ' found'); + return shim.success(); + } + try { + let payload = await method(stub, ret.params); + return shim.success(payload); + } catch (err) { + console.log(err); + return shim.error(err); + } + } + + async invoke(stub, args) { + if (args.length != 3) { + throw new Error('Incorrect number of arguments. Expecting 3'); + } + + let A = args[0]; + let B = args[1]; + if (!A || !B) { + throw new Error('asset holding must not be empty'); + } + + // Get the state from the ledger + let Avalbytes = await stub.getState(A); + if (!Avalbytes) { + throw new Error('Failed to get state of asset holder A'); + } + let Aval = parseInt(Avalbytes.toString()); + + let Bvalbytes = await stub.getState(B); + if (!Bvalbytes) { + throw new Error('Failed to get state of asset holder B'); + } + + let Bval = parseInt(Bvalbytes.toString()); + // Perform the execution + let amount = parseInt(args[2]); + if (typeof amount !== 'number') { + throw new Error('Expecting integer value for amount to be transaferred'); + } + + Aval = Aval - amount; + Bval = Bval + amount; + console.info(util.format('Aval = %d, Bval = %d\n', Aval, Bval)); + + // Write the states back to the ledger + await stub.putState(A, Buffer.from(Aval.toString())); + await stub.putState(B, Buffer.from(Bval.toString())); + + } + + // Deletes an entity from state + async delete(stub, args) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting 1'); + } + + let A = args[0]; + + // Delete the key from the state in ledger + await stub.deleteState(A); + } + + // query callback representing the query of a chaincode + async query(stub, args) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting name of the person to query') + } + + let jsonResp = {}; + let A = args[0]; + + // Get the state from the ledger + let Avalbytes = await stub.getState(A); + if (!Avalbytes) { + jsonResp.error = 'Failed to get state for ' + A; + throw new Error(JSON.stringify(jsonResp)); + } + + jsonResp.name = A; + jsonResp.amount = Avalbytes.toString(); + console.info('Query Response:'); + console.info(jsonResp); + return Avalbytes; + } +}; + +shim.start(new Chaincode()); diff --git a/app/platform/fabric/e2e-test/chaincodes/example02/node/package.json b/app/platform/fabric/e2e-test/chaincodes/example02/node/package.json new file mode 100644 index 000000000..2e46000f7 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/example02/node/package.json @@ -0,0 +1,16 @@ +{ + "name": "example02", + "version": "1.0.0", + "description": "example02 chaincode implemented in node.js", + "engines": { + "node": ">=8.4.0", + "npm": ">=5.3.0" + }, + "scripts": { "start" : "node chaincode_example02.js" }, + "engine-strict": true, + "engineStrict": true, + "license": "Apache-2.0", + "dependencies": { + "fabric-shim": "unstable" + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/map_private/go/map_private.go b/app/platform/fabric/e2e-test/chaincodes/map_private/go/map_private.go new file mode 100644 index 000000000..7897d0473 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/map_private/go/map_private.go @@ -0,0 +1,166 @@ +/* +Copyright IBM Corp. 2018 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +var logger = shim.NewLogger("simpleChaincode") + +// COLLECTION is local collection +const COLLECTION = "collectionSimple" + +// simpleChaincode allows the following transactions +// "put", "key", val - returns "OK" on success +// "get", "key" - returns val stored previously +// "getPut", "key", val - gets a values if stored and returns "OK" on success +// "getPrivate", "key" - returns private value stored previously +// "putPrivate", "key" - returns val stored previously +// "getPutPrivate", "key" - gets private value if stored and returns "OK" on success +type simpleChaincode struct { +} + +//Init implements chaincode's Init interface +func (t *simpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + logger.Info("########### Init ###########") + return shim.Success(nil) +} + +//Invoke implements chaincode's Invoke interface +func (t *simpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function != "invoke" { + logger.Error("Unknown function call") + return shim.Error("Unknown function call") + } + if len(args) < 2 { + logger.Errorf(fmt.Sprintf("invalid number of args %d", len(args))) + return shim.Error(fmt.Sprintf("invalid number of args %d", len(args))) + } + method := args[0] + logger.Infof(">>>>>>> Invoke method : %s ", method) + switch method { + + case "get": + return t.get(stub, args) + + case "put": + if len(args) < 3 { + logger.Errorf(fmt.Sprintf("invalid number of args for put %d", len(args))) + return shim.Error(fmt.Sprintf("invalid number of args for put %d", len(args))) + } + return t.put(stub, args) + + case "getPut": + if len(args) < 3 { + logger.Errorf(fmt.Sprintf("invalid number of args for getPut %d", len(args))) + return shim.Error(fmt.Sprintf("invalid number of args for getPut %d", len(args))) + } + return t.getPut(stub, args) + + case "getPrivate": + return t.getPrivate(stub, args) + + case "putPrivate": + if len(args) < 3 { + logger.Errorf(fmt.Sprintf("invalid number of args for putPrivate %d", len(args))) + return shim.Error(fmt.Sprintf("invalid number of args for putPrivate %d", len(args))) + } + return t.putPrivate(stub, args) + + case "getPutPrivate": + if len(args) < 3 { + logger.Errorf(fmt.Sprintf("invalid number of args for getPutPrivate %d", len(args))) + return shim.Error(fmt.Sprintf("invalid number of args for getPutPrivate %d", len(args))) + } + return t.getPutPrivate(stub, args) + + default: + return shim.Error(fmt.Sprintf("unknown function %s", method)) + } +} + +func (t *simpleChaincode) put(stub shim.ChaincodeStubInterface, args []string) pb.Response { + err := stub.PutState(args[1], []byte(args[2])) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success([]byte("OK")) +} + +func (t *simpleChaincode) get(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // Get the state from the ledger + val, err := stub.GetState(args[1]) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(val) +} + +func (t *simpleChaincode) getPut(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // Get the state from the ledger + _, err := stub.GetState(args[1]) + if err != nil { + return shim.Error(err.Error()) + } + err = stub.PutState(args[1], []byte(args[2])) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success([]byte("OK")) +} + +func (t *simpleChaincode) putPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + err := stub.PutPrivateData(COLLECTION, args[1], []byte(args[2])) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success([]byte("OK")) +} + +func (t *simpleChaincode) getPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // Get the state from the private ledger + val, err := stub.GetPrivateData(COLLECTION, args[1]) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(val) +} + +func (t *simpleChaincode) getPutPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // Get the state from the private ledger + _, err := stub.GetPrivateData(COLLECTION, args[1]) + if err != nil { + return shim.Error(err.Error()) + } + err = stub.PutPrivateData(COLLECTION, args[1], []byte(args[2])) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success([]byte("OK")) +} + +func main() { + err := shim.Start(new(simpleChaincode)) + if err != nil { + fmt.Printf("Error starting New key per invoke: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/mapkeys/go/map.go b/app/platform/fabric/e2e-test/chaincodes/mapkeys/go/map.go new file mode 100644 index 000000000..e51a8474e --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/mapkeys/go/map.go @@ -0,0 +1,203 @@ +// +build !experimental + +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + "fmt" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode implements a simple map that is stored in the state. +// The following operations are available. + +// Invoke operations +// put - requires two arguments, a key and value +// remove - requires a key +// get - requires one argument, a key, and returns a value +// keys - requires no arguments, returns all keys + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init is a no-op +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke has two functions +// put - takes two arguments, a key and value, and stores them in the state +// remove - takes one argument, a key, and removes if from the state +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + fmt.Println("In mapkeys") + switch function { + + case "put": + if len(args) < 4 { + fmt.Println("Args list is too short!") + return shim.Error("Args list is too short!!!!!!!!!!!!!!!!") + } + + if len(args)%2 != 0 { + fmt.Println("Odd number of arguments. Need to supply key/value pairs!") + return shim.Error("put operation must include an even number of key/value pair arguments: [key, value]") + } + fmt.Println("In mapkeys put") + for index, element := range args { + if index%2 == 0 { + key := element + value := args[index+1] + fmt.Printf("key %s\n", key) + fmt.Printf("value %s\n", value) + + if err := stub.PutState(key, []byte(value)); err != nil { + fmt.Printf("Error putting state %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + + } + } + fmt.Printf("Done with 'put' in mapkeys\n") + return shim.Success(nil) + + case "remove": + if len(args) < 1 { + return shim.Error("remove operation must include one argument: [key]") + } + key := args[0] + + err := stub.DelState(key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation failed. Error updating state: %s", err)) + } + return shim.Success(nil) + + case "get": + if len(args) < 1 { + return shim.Error("get operation must include one argument, a key") + } + key := args[0] + value, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) + + case "keys": + if len(args) < 2 { + return shim.Error("put operation must include two arguments, a key and value") + } + startKey := args[0] + endKey := args[1] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 2 { + stime, _ = strconv.Atoi(args[2]) + } + + keysIter, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "query": + query := args[0] + keysIter, err := stub.GetQueryResult(query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "history": + key := args[0] + keysIter, err := stub.GetHistoryForKey(key) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.TxId) + } + + for key, txID := range keys { + fmt.Printf("key %d contains %s\n", key, txID) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + default: + return shim.Success([]byte("Unsupported operation")) + } +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/mapkeys/go/mapkeys.go b/app/platform/fabric/e2e-test/chaincodes/mapkeys/go/mapkeys.go new file mode 100644 index 000000000..6f12a9d33 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/mapkeys/go/mapkeys.go @@ -0,0 +1,305 @@ +// +build experimental + +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + "fmt" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode implements a simple map that is stored in the state. +// The following operations are available. + +// Invoke operations +// put - requires two arguments, a key and value +// remove - requires a key +// get - requires one argument, a key, and returns a value +// keys - requires no arguments, returns all keys + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init is a no-op +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke has two functions +// put - takes two arguments, a key and value, and stores them in the state +// remove - takes one argument, a key, and removes if from the state +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + switch function { + + case "putPrivate": + if len(args) < 3 { + return shim.Error("put operation on private data must include three arguments: [collection, key, value]") + } + collection := args[0] + key := args[1] + value := args[2] + + if err := stub.PutPrivateData(collection, key, []byte(value)); err != nil { + fmt.Printf("Error putting private data%s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + + return shim.Success(nil) + + case "removePrivate": + if len(args) < 2 { + return shim.Error("remove operation on private data must include two arguments: [collection, key]") + } + collection := args[0] + key := args[1] + + err := stub.DelPrivateData(collection, key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation on private data failed. Error updating state: %s", err)) + } + return shim.Success(nil) + + case "getPrivate": + if len(args) < 2 { + return shim.Error("get operation on private data must include two arguments: [collection, key]") + } + collection := args[0] + key := args[1] + value, err := stub.GetPrivateData(collection, key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation on private data failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) + + case "keysPrivate": + if len(args) < 3 { + return shim.Error("range query operation on private data must include three arguments, a collection, key and value") + } + collection := args[0] + startKey := args[1] + endKey := args[2] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 3 { + stime, _ = strconv.Atoi(args[3]) + } + + keysIter, err := stub.GetPrivateDataByRange(collection, startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed on private data. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation on private data failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation on private data failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + case "queryPrivate": + collection := args[0] + query := args[1] + keysIter, err := stub.GetPrivateDataQueryResult(collection, query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + case "put": + if len(args)%2 != 0 { + return shim.Error("put operation must include an even number of key/value pair arguments: [key, value]") + } + fmt.Println("In mapkeys put") + for index, element := range args { + if index%2 == 0 { + key := element + value := args[index+1] + fmt.Println("Saved {%s,%s}", key, value) + + if err := stub.PutState(key, []byte(value)); err != nil { + fmt.Printf("Error putting state %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + } + } + + return shim.Success(nil) + + case "remove": + if len(args) < 1 { + return shim.Error("remove operation must include one argument: [key]") + } + key := args[0] + + err := stub.DelState(key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation failed. Error updating state: %s", err)) + } + return shim.Success(nil) + + case "get": + if len(args) < 1 { + return shim.Error("get operation must include one argument, a key") + } + key := args[0] + value, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) + + case "keys": + if len(args) < 2 { + return shim.Error("put operation must include two arguments, a key and value") + } + startKey := args[0] + endKey := args[1] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 2 { + stime, _ = strconv.Atoi(args[2]) + } + + keysIter, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "query": + query := args[0] + keysIter, err := stub.GetQueryResult(query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "history": + key := args[0] + keysIter, err := stub.GetHistoryForKey(key) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.TxId) + } + + for key, txID := range keys { + fmt.Printf("key %d contains %s\n", key, txID) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + default: + return shim.Success([]byte("Unsupported operation")) + } +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/marbles/node/marbles_chaincode.js b/app/platform/fabric/e2e-test/chaincodes/marbles/node/marbles_chaincode.js new file mode 100644 index 000000000..60484df05 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/marbles/node/marbles_chaincode.js @@ -0,0 +1,409 @@ +/* +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +*/ + +// ====CHAINCODE EXECUTION SAMPLES (CLI) ================== + +// ==== Invoke marbles ==== +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble2","red","50","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble3","blue","70","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarble","marble2","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarblesBasedOnColor","blue","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["delete","marble1"]}' + +// ==== Query marbles ==== +// peer chaincode query -C myc1 -n marbles -c '{"Args":["readMarble","marble1"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getMarblesByRange","marble1","marble3"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getHistoryForMarble","marble1"]}' + +// Rich Query (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesByOwner","tom"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +'use strict'; +const shim = require('fabric-shim'); +const util = require('util'); + +let Chaincode = class { + async Init(stub) { + let ret = stub.getFunctionAndParameters(); + console.info(ret); + console.info('=========== Instantiated Marbles Chaincode ==========='); + return shim.success(); + } + + async Invoke(stub) { + console.info('Transaction ID: ' + stub.getTxID()); + console.info(util.format('Args: %j', stub.getArgs())); + + let ret = stub.getFunctionAndParameters(); + console.info(ret); + + let method = this[ret.fcn]; + if (!method) { + console.log('no function of name:' + ret.fcn + ' found'); + throw new Error('Received unknown function ' + ret.fcn + ' invocation'); + } + try { + let payload = await method(stub, ret.params, this); + return shim.success(payload); + } catch (err) { + console.log(err); + return shim.error(err); + } + } + + // =============================================== + // initMarble - create a new marble + // =============================================== + async initMarble(stub, args, thisClass) { + if (args.length != 4) { + throw new Error('Incorrect number of arguments. Expecting 4'); + } + // ==== Input sanitation ==== + console.info('--- start init marble ---') + if (args[0].lenth <= 0) { + throw new Error('1st argument must be a non-empty string'); + } + if (args[1].lenth <= 0) { + throw new Error('2nd argument must be a non-empty string'); + } + if (args[2].lenth <= 0) { + throw new Error('3rd argument must be a non-empty string'); + } + if (args[3].lenth <= 0) { + throw new Error('4th argument must be a non-empty string'); + } + let marbleName = args[0]; + let color = args[1].toLowerCase(); + let owner = args[3].toLowerCase(); + let size = parseInt(args[2]); + if (typeof size !== 'number') { + throw new Error('3rd argument must be a numeric string'); + } + + // ==== Check if marble already exists ==== + let marbleState = await stub.getState(marbleName); + if (marbleState.toString()) { + throw new Error('This marble already exists: ' + marbleName); + } + + // ==== Create marble object and marshal to JSON ==== + let marble = {}; + marble.docType = 'marble'; + marble.name = marbleName; + marble.color = color; + marble.size = size; + marble.owner = owner; + + // === Save marble to state === + await stub.putState(marbleName, Buffer.from(JSON.stringify(marble))); + let indexName = 'color~name' + let colorNameIndexKey = await stub.createCompositeKey(indexName, [marble.color, marble.name]); + console.info(colorNameIndexKey); + // Save index entry to state. Only the key name is needed, no need to store a duplicate copy of the marble. + // Note - passing a 'nil' value will effectively delete the key from state, therefore we pass null character as value + await stub.putState(colorNameIndexKey, Buffer.from('\u0000')); + // ==== Marble saved and indexed. Return success ==== + console.info('- end init marble'); + } + + // =============================================== + // readMarble - read a marble from chaincode state + // =============================================== + async readMarble(stub, args, thisClass) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting name of the marble to query'); + } + + let name = args[0]; + if (!name) { + throw new Error(' marble name must not be empty'); + } + let marbleAsbytes = await stub.getState(name); //get the marble from chaincode state + if (!marbleAsbytes.toString()) { + let jsonResp = {}; + jsonResp.Error = 'Marble does not exist: ' + name; + throw new Error(JSON.stringify(jsonResp)); + } + console.info('======================================='); + console.log(marbleAsbytes.toString()); + console.info('======================================='); + return marbleAsbytes; + } + + // ================================================== + // delete - remove a marble key/value pair from state + // ================================================== + async delete(stub, args, thisClass) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting name of the marble to delete'); + } + let marbleName = args[0]; + if (!marbleName) { + throw new Error('marble name must not be empty'); + } + // to maintain the color~name index, we need to read the marble first and get its color + let valAsbytes = await stub.getState(marbleName); //get the marble from chaincode state + let jsonResp = {}; + if (!valAsbytes) { + jsonResp.error = 'marble does not exist: ' + name; + throw new Error(jsonResp); + } + let marbleJSON = {}; + try { + marbleJSON = JSON.parse(valAsbytes.toString()); + } catch (err) { + jsonResp = {}; + jsonResp.error = 'Failed to decode JSON of: ' + marbleName; + throw new Error(jsonResp); + } + + await stub.deleteState(marbleName); //remove the marble from chaincode state + + // delete the index + let indexName = 'color~name'; + let colorNameIndexKey = stub.createCompositeKey(indexName, [marbleJSON.color, marbleJSON.name]); + if (!colorNameIndexKey) { + throw new Error(' Failed to create the createCompositeKey'); + } + // Delete index entry to state. + await stub.deleteState(colorNameIndexKey); + } + + // =========================================================== + // transfer a marble by setting a new owner name on the marble + // =========================================================== + async transferMarble(stub, args, thisClass) { + // 0 1 + // 'name', 'bob' + if (args.length < 2) { + throw new Error('Incorrect number of arguments. Expecting marblename and owner') + } + + let marbleName = args[0]; + let newOwner = args[1].toLowerCase(); + console.info('- start transferMarble ', marbleName, newOwner); + + let marbleAsBytes = await stub.getState(marbleName); + if (!marbleAsBytes || !marbleAsBytes.toString()) { + throw new Error('marble does not exist'); + } + let marbleToTransfer = {}; + try { + marbleToTransfer = JSON.parse(marbleAsBytes.toString()); //unmarshal + } catch (err) { + let jsonResp = {}; + jsonResp.error = 'Failed to decode JSON of: ' + marbleName; + throw new Error(jsonResp); + } + console.info(marbleToTransfer); + marbleToTransfer.owner = newOwner; //change the owner + + let marbleJSONasBytes = Buffer.from(JSON.stringify(marbleToTransfer)); + await stub.putState(marbleName, marbleJSONasBytes); //rewrite the marble + + console.info('- end transferMarble (success)'); + } + + // =========================================================================================== + // getMarblesByRange performs a range query based on the start and end keys provided. + + // Read-only function results are not typically submitted to ordering. If the read-only + // results are submitted to ordering, or if the query is used in an update transaction + // and submitted to ordering, then the committing peers will re-execute to guarantee that + // result sets are stable between endorsement time and commit time. The transaction is + // invalidated by the committing peers if the result set has changed between endorsement + // time and commit time. + // Therefore, range queries are a safe option for performing update transactions based on query results. + // =========================================================================================== + async getMarblesByRange(stub, args, thisClass) { + + if (args.length < 2) { + throw new Error('Incorrect number of arguments. Expecting 2'); + } + + let startKey = args[0]; + let endKey = args[1]; + + let resultsIterator = await stub.getStateByRange(startKey, endKey); + let method = thisClass['getAllResults']; + let results = await method(resultsIterator, false); + + return Buffer.from(JSON.stringify(results)); + } + + // ==== Example: GetStateByPartialCompositeKey/RangeQuery ========================================= + // transferMarblesBasedOnColor will transfer marbles of a given color to a certain new owner. + // Uses a GetStateByPartialCompositeKey (range query) against color~name 'index'. + // Committing peers will re-execute range queries to guarantee that result sets are stable + // between endorsement time and commit time. The transaction is invalidated by the + // committing peers if the result set has changed between endorsement time and commit time. + // Therefore, range queries are a safe option for performing update transactions based on query results. + // =========================================================================================== + async transferMarblesBasedOnColor(stub, args, thisClass) { + + // 0 1 + // 'color', 'bob' + if (args.length < 2) { + throw new Error('Incorrect number of arguments. Expecting color and owner'); + } + + let color = args[0]; + let newOwner = args[1].toLowerCase(); + console.info('- start transferMarblesBasedOnColor ', color, newOwner); + + // Query the color~name index by color + // This will execute a key range query on all keys starting with 'color' + let coloredMarbleResultsIterator = await stub.getStateByPartialCompositeKey('color~name', [color]); + + let method = thisClass['transferMarble']; + // Iterate through result set and for each marble found, transfer to newOwner + while (true) { + let responseRange = await coloredMarbleResultsIterator.next(); + if (!responseRange || !responseRange.value || !responseRange.value.key) { + return; + } + console.log(responseRange.value.key); + + // let value = res.value.value.toString('utf8'); + let objectType; + let attributes; + ({ + objectType, + attributes + } = await stub.splitCompositeKey(responseRange.value.key)); + + let returnedColor = attributes[0]; + let returnedMarbleName = attributes[1]; + console.info(util.format('- found a marble from index:%s color:%s name:%s\n', objectType, returnedColor, returnedMarbleName)); + + // Now call the transfer function for the found marble. + // Re-use the same function that is used to transfer individual marbles + let response = await method(stub, [returnedMarbleName, newOwner]); + } + + let responsePayload = util.format('Transferred %s marbles to %s', color, newOwner); + console.info('- end transferMarblesBasedOnColor: ' + responsePayload); + } + + + // ===== Example: Parameterized rich query ================================================= + // queryMarblesByOwner queries for marbles based on a passed in owner. + // This is an example of a parameterized query where the query logic is baked into the chaincode, + // and accepting a single query parameter (owner). + // Only available on state databases that support rich query (e.g. CouchDB) + // ========================================================================================= + async queryMarblesByOwner(stub, args, thisClass) { + // 0 + // 'bob' + if (args.length < 1) { + throw new Error('Incorrect number of arguments. Expecting owner name.') + } + + let owner = args[0].toLowerCase(); + let queryString = {}; + queryString.selector = {}; + queryString.selector.docType = 'marble'; + queryString.selector.owner = owner; + let method = thisClass['getQueryResultForQueryString']; + let queryResults = await method(stub, JSON.stringify(queryString), thisClass); + return queryResults; //shim.success(queryResults); + } + + // ===== Example: Ad hoc rich query ======================================================== + // queryMarbles uses a query string to perform a query for marbles. + // Query string matching state database syntax is passed in and executed as is. + // Supports ad hoc queries that can be defined at runtime by the client. + // If this is not desired, follow the queryMarblesForOwner example for parameterized queries. + // Only available on state databases that support rich query (e.g. CouchDB) + // ========================================================================================= + async queryMarbles(stub, args, thisClass) { + // 0 + // 'queryString' + if (args.length < 1) { + throw new Error('Incorrect number of arguments. Expecting queryString'); + } + let queryString = args[0]; + if (!queryString) { + throw new Error('queryString must not be empty'); + } + let method = thisClass['getQueryResultForQueryString']; + let queryResults = await method(stub, queryString, thisClass); + return queryResults; + } + + async getAllResults(iterator, isHistory) { + let allResults = []; + while (true) { + let res = await iterator.next(); + + if (res.value && res.value.value.toString()) { + let jsonRes = {}; + console.log(res.value.value.toString('utf8')); + + if (isHistory && isHistory === true) { + jsonRes.TxId = res.value.tx_id; + jsonRes.Timestamp = res.value.timestamp; + jsonRes.IsDelete = res.value.is_delete.toString(); + try { + jsonRes.Value = JSON.parse(res.value.value.toString('utf8')); + } catch (err) { + console.log(err); + jsonRes.Value = res.value.value.toString('utf8'); + } + } else { + jsonRes.Key = res.value.key; + try { + jsonRes.Record = JSON.parse(res.value.value.toString('utf8')); + } catch (err) { + console.log(err); + jsonRes.Record = res.value.value.toString('utf8'); + } + } + allResults.push(jsonRes); + } + if (res.done) { + console.log('end of data'); + await iterator.close(); + console.info(allResults); + return allResults; + } + } + } + + // ========================================================================================= + // getQueryResultForQueryString executes the passed in query string. + // Result set is built and returned as a byte array containing the JSON results. + // ========================================================================================= + async getQueryResultForQueryString(stub, queryString, thisClass) { + + console.info('- getQueryResultForQueryString queryString:\n' + queryString) + let resultsIterator = await stub.getQueryResult(queryString); + let method = thisClass['getAllResults']; + + let results = await method(resultsIterator, false); + + return Buffer.from(JSON.stringify(results)); + } + + async getHistoryForMarble(stub, args, thisClass) { + + if (args.length < 1) { + throw new Error('Incorrect number of arguments. Expecting 1') + } + let marbleName = args[0]; + console.info('- start getHistoryForMarble: %s\n', marbleName); + + let resultsIterator = await stub.getHistoryForKey(marbleName); + let method = thisClass['getAllResults']; + let results = await method(resultsIterator, true); + + return Buffer.from(JSON.stringify(results)); + } +}; + +shim.start(new Chaincode()); diff --git a/app/platform/fabric/e2e-test/chaincodes/marbles/node/package.json b/app/platform/fabric/e2e-test/chaincodes/marbles/node/package.json new file mode 100644 index 000000000..5b8475d8b --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/marbles/node/package.json @@ -0,0 +1,16 @@ +{ + "name": "marbles", + "version": "1.0.0", + "description": "marbles chaincode implemented in node.js", + "engines": { + "node": ">=8.4.0", + "npm": ">=5.3.0" + }, + "scripts": { "start" : "node marbles_chaincode.js" }, + "engine-strict": true, + "engineStrict": true, + "license": "Apache-2.0", + "dependencies": { + "fabric-shim": "unstable" + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/marbles02_private/marbles_chaincode.go b/app/platform/fabric/e2e-test/chaincodes/marbles02_private/marbles_chaincode.go new file mode 100644 index 000000000..656761309 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/marbles02_private/marbles_chaincode.go @@ -0,0 +1,628 @@ +/* +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. +*/ + +// ====CHAINCODE EXECUTION SAMPLES (CLI) ================== + +// ==== Invoke marbles ==== +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble2","red","50","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble3","blue","70","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarble","marble2","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarblesBasedOnColor","blue","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["delete","marble1"]}' + +// ==== Query marbles ==== +// peer chaincode query -C myc1 -n marbles -c '{"Args":["readMarble","marble1"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getMarblesByRange","marble1","marble3"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getHistoryForMarble","marble1"]}' + +// Rich Query (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesByOwner","tom"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +//The following examples demonstrate creating indexes on CouchDB +//Example hostname:port configurations +// +//Docker or vagrant environments: +// http://couchdb:5984/ +// +//Inside couchdb docker container +// http://127.0.0.1:5984/ + +// Index for chaincodeid, docType, owner. +// Note that docType and owner fields must be prefixed with the "data" wrapper +// chaincodeid must be added for all queries +// +// Definition for use with Fauxton interface +// {"index":{"fields":["chaincodeid","data.docType","data.owner"]},"ddoc":"indexOwnerDoc", "name":"indexOwner","type":"json"} +// +// example curl definition for use with command line +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[\"chaincodeid\",\"data.docType\",\"data.owner\"]},\"name\":\"indexOwner\",\"ddoc\":\"indexOwnerDoc\",\"type\":\"json\"}" http://hostname:port/myc1/_index +// + +// Index for chaincodeid, docType, owner, size (descending order). +// Note that docType, owner and size fields must be prefixed with the "data" wrapper +// chaincodeid must be added for all queries +// +// Definition for use with Fauxton interface +// {"index":{"fields":[{"data.size":"desc"},{"chaincodeid":"desc"},{"data.docType":"desc"},{"data.owner":"desc"}]},"ddoc":"indexSizeSortDoc", "name":"indexSizeSortDesc","type":"json"} +// +// example curl definition for use with command line +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[{\"data.size\":\"desc\"},{\"chaincodeid\":\"desc\"},{\"data.docType\":\"desc\"},{\"data.owner\":\"desc\"}]},\"ddoc\":\"indexSizeSortDoc\", \"name\":\"indexSizeSortDesc\",\"type\":\"json\"}" http://hostname:port/myc1/_index + +// Rich Query with index design doc and index name specified (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":\"marble\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}"]}' + +// Rich Query with index design doc specified only (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":{\"$eq\":\"marble\"},\"owner\":{\"$eq\":\"tom\"},\"size\":{\"$gt\":0}},\"fields\":[\"docType\",\"owner\",\"size\"],\"sort\":[{\"size\":\"desc\"}],\"use_index\":\"_design/indexSizeSortDoc\"}"]}' + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "strconv" + "strings" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +type marble struct { + ObjectType string `json:"docType"` //docType is used to distinguish the various types of objects in state database + Name string `json:"name"` //the fieldtags are needed to keep case from bouncing around + Color string `json:"color"` + Size int `json:"size"` + Owner string `json:"owner"` +} + +// =================================================================================== +// Main +// =================================================================================== +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} + +// Init initializes chaincode +// =========================== +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke - Our entry point for Invocations +// ======================================== +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + fmt.Println("invoke is running " + function) + + // Handle different functions + if function == "initMarble" { //create a new marble + return t.initMarble(stub, args) + } else if function == "readMarble" { //read a marble + return t.readMarble(stub, args) + } else if function == "transferMarble" { //change owner of a specific marble + return t.transferMarble(stub, args) + } else if function == "transferMarblesBasedOnColor" { //transfer all marbles of a certain color + return t.transferMarblesBasedOnColor(stub, args) + } else if function == "delete" { //delete a marble + return t.delete(stub, args) + } else if function == "queryMarblesByOwner" { //find marbles for owner X using rich query + return t.queryMarblesByOwner(stub, args) + } else if function == "queryMarbles" { //find marbles based on an ad hoc rich query + return t.queryMarbles(stub, args) + } else if function == "getHistoryForMarble" { //get history of values for a marble + return t.getHistoryForMarble(stub, args) + } else if function == "getMarblesByRange" { //get marbles based on range query + return t.getMarblesByRange(stub, args) + } + + fmt.Println("invoke did not find func: " + function) //error + return shim.Error("Received unknown function invocation") +} + +// ============================================================ +// initMarble - create a new marble, store into chaincode state +// ============================================================ +func (t *SimpleChaincode) initMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var err error + + // 0 1 2 3 + // "asdf", "blue", "35", "bob" + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // ==== Input sanitation ==== + fmt.Println("- start init marble") + if len(args[0]) <= 0 { + return shim.Error("1st argument must be a non-empty string") + } + if len(args[1]) <= 0 { + return shim.Error("2nd argument must be a non-empty string") + } + if len(args[2]) <= 0 { + return shim.Error("3rd argument must be a non-empty string") + } + if len(args[3]) <= 0 { + return shim.Error("4th argument must be a non-empty string") + } + marbleName := args[0] + color := strings.ToLower(args[1]) + owner := strings.ToLower(args[3]) + size, err := strconv.Atoi(args[2]) + if err != nil { + return shim.Error("3rd argument must be a numeric string") + } + + // ==== Check if marble already exists ==== + marbleAsBytes, err := stub.GetPrivateData("collection1", marbleName) + if err != nil { + return shim.Error("Failed to get marble: " + err.Error()) + } else if marbleAsBytes != nil { + fmt.Println("This marble already exists: " + marbleName) + return shim.Error("This marble already exists: " + marbleName) + } + + // ==== Create marble object and marshal to JSON ==== + objectType := "marble" + marble := &marble{objectType, marbleName, color, size, owner} + marbleJSONasBytes, err := json.Marshal(marble) + if err != nil { + return shim.Error(err.Error()) + } + //Alternatively, build the marble json string manually if you don't want to use struct marshalling + //marbleJSONasString := `{"docType":"Marble", "name": "` + marbleName + `", "color": "` + color + `", "size": ` + strconv.Itoa(size) + `, "owner": "` + owner + `"}` + //marbleJSONasBytes := []byte(str) + + // === Save marble to state === + err = stub.PutPrivateData("collection1", marbleName, marbleJSONasBytes) + if err != nil { + return shim.Error(err.Error()) + } + + /* + // ==== Index the marble to enable color-based range queries, e.g. return all blue marbles ==== + // An 'index' is a normal key/value entry in state. + // The key is a composite key, with the elements that you want to range query on listed first. + // In our case, the composite key is based on indexName~color~name. + // This will enable very efficient state range queries based on composite keys matching indexName~color~* + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marble.Color, marble.Name}) + if err != nil { + return shim.Error(err.Error()) + } + // Save index entry to state. Only the key name is needed, no need to store a duplicate copy of the marble. + // Note - passing a 'nil' value will effectively delete the key from state, therefore we pass null character as value + value := []byte{0x00} + stub.PutPrivateData("collection1", colorNameIndexKey, value) + */ + // ==== Marble saved and indexed. Return success ==== + fmt.Println("- end init marble") + return shim.Success(nil) +} + +// =============================================== +// readMarble - read a marble from chaincode state +// =============================================== +func (t *SimpleChaincode) readMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var name, jsonResp string + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the marble to query") + } + + name = args[0] + valAsbytes, err := stub.GetPrivateData("collection1", name) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + name + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + name + "\"}" + return shim.Error(jsonResp) + } + + return shim.Success(valAsbytes) +} + +// ================================================== +// delete - remove a marble key/value pair from state +// ================================================== +func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var jsonResp string + var marbleJSON marble + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + marbleName := args[0] + + // to maintain the color~name index, we need to read the marble first and get its color + valAsbytes, err := stub.GetPrivateData("collection1", marbleName) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + marbleName + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = json.Unmarshal([]byte(valAsbytes), &marbleJSON) + if err != nil { + jsonResp = "{\"Error\":\"Failed to decode JSON of: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = stub.DelPrivateData("collection1", marbleName) //remove the marble from chaincode state + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + + // maintain the index + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marbleJSON.Color, marbleJSON.Name}) + if err != nil { + return shim.Error(err.Error()) + } + + // Delete index entry to state. + err = stub.DelPrivateData("collection1", colorNameIndexKey) + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + return shim.Success(nil) +} + +// =========================================================== +// transfer a marble by setting a new owner name on the marble +// =========================================================== +func (t *SimpleChaincode) transferMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "name", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + marbleName := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarble ", marbleName, newOwner) + + marbleAsBytes, err := stub.GetPrivateData("collection1", marbleName) + if err != nil { + return shim.Error("Failed to get marble:" + err.Error()) + } else if marbleAsBytes == nil { + return shim.Error("Marble does not exist") + } + + marbleToTransfer := marble{} + err = json.Unmarshal(marbleAsBytes, &marbleToTransfer) //unmarshal it aka JSON.parse() + if err != nil { + return shim.Error(err.Error()) + } + marbleToTransfer.Owner = newOwner //change the owner + + marbleJSONasBytes, _ := json.Marshal(marbleToTransfer) + err = stub.PutPrivateData("collection1", marbleName, marbleJSONasBytes) //rewrite the marble + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Println("- end transferMarble (success)") + return shim.Success(nil) +} + +// =========================================================================================== +// getMarblesByRange performs a range query based on the start and end keys provided. + +// Read-only function results are not typically submitted to ordering. If the read-only +// results are submitted to ordering, or if the query is used in an update transaction +// and submitted to ordering, then the committing peers will re-execute to guarantee that +// result sets are stable between endorsement time and commit time. The transaction is +// invalidated by the committing peers if the result set has changed between endorsement +// time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) getMarblesByRange(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + startKey := args[0] + endKey := args[1] + + resultsIterator, err := stub.GetPrivateDataByRange("collection1", startKey, endKey) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryResults + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getMarblesByRange queryResult:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} + +// ==== Example: GetStateByPartialCompositeKey/RangeQuery ========================================= +// transferMarblesBasedOnColor will transfer marbles of a given color to a certain new owner. +// Uses a GetStateByPartialCompositeKey (range query) against color~name 'index'. +// Committing peers will re-execute range queries to guarantee that result sets are stable +// between endorsement time and commit time. The transaction is invalidated by the +// committing peers if the result set has changed between endorsement time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) transferMarblesBasedOnColor(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "color", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + color := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarblesBasedOnColor ", color, newOwner) + + // Query the color~name index by color + // This will execute a key range query on all keys starting with 'color' + coloredMarbleResultsIterator, err := stub.GetPrivateDataByPartialCompositeKey("collection1", "color~name", []string{color}) + if err != nil { + return shim.Error(err.Error()) + } + defer coloredMarbleResultsIterator.Close() + + // Iterate through result set and for each marble found, transfer to newOwner + var i int + for i = 0; coloredMarbleResultsIterator.HasNext(); i++ { + // Note that we don't get the value (2nd return variable), we'll just get the marble name from the composite key + responseRange, err := coloredMarbleResultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + + // get the color and name from color~name composite key + objectType, compositeKeyParts, err := stub.SplitCompositeKey(responseRange.Key) + if err != nil { + return shim.Error(err.Error()) + } + returnedColor := compositeKeyParts[0] + returnedMarbleName := compositeKeyParts[1] + fmt.Printf("- found a marble from index:%s color:%s name:%s\n", objectType, returnedColor, returnedMarbleName) + + // Now call the transfer function for the found marble. + // Re-use the same function that is used to transfer individual marbles + response := t.transferMarble(stub, []string{returnedMarbleName, newOwner}) + // if the transfer failed break out of loop and return error + if response.Status != shim.OK { + return shim.Error("Transfer failed: " + response.Message) + } + } + + responsePayload := fmt.Sprintf("Transferred %d %s marbles to %s", i, color, newOwner) + fmt.Println("- end transferMarblesBasedOnColor: " + responsePayload) + return shim.Success([]byte(responsePayload)) +} + +// =======Rich queries ========================================================================= +// Two examples of rich queries are provided below (parameterized query and ad hoc query). +// Rich queries pass a query string to the state database. +// Rich queries are only supported by state database implementations +// that support rich query (e.g. CouchDB). +// The query string is in the syntax of the underlying state database. +// With rich queries there is no guarantee that the result set hasn't changed between +// endorsement time and commit time, aka 'phantom reads'. +// Therefore, rich queries should not be used in update transactions, unless the +// application handles the possibility of result set changes between endorsement and commit time. +// Rich queries can be used for point-in-time queries against a peer. +// ============================================================================================ + +// ===== Example: Parameterized rich query ================================================= +// queryMarblesByOwner queries for marbles based on a passed in owner. +// This is an example of a parameterized query where the query logic is baked into the chaincode, +// and accepting a single query parameter (owner). +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarblesByOwner(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "bob" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + owner := strings.ToLower(args[0]) + + queryString := fmt.Sprintf("{\"selector\":{\"docType\":\"marble\",\"owner\":\"%s\"}}", owner) + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ===== Example: Ad hoc rich query ======================================================== +// queryMarbles uses a query string to perform a query for marbles. +// Query string matching state database syntax is passed in and executed as is. +// Supports ad hoc queries that can be defined at runtime by the client. +// If this is not desired, follow the queryMarblesForOwner example for parameterized queries. +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarbles(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "queryString" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + queryString := args[0] + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ========================================================================================= +// getQueryResultForQueryString executes the passed in query string. +// Result set is built and returned as a byte array containing the JSON results. +// ========================================================================================= +func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) { + + fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, err := stub.GetPrivateDataQueryResult("collection1", queryString) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryRecords + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return nil, err + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String()) + + return buffer.Bytes(), nil +} + +func (t *SimpleChaincode) getHistoryForMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + marbleName := args[0] + + fmt.Printf("- start getHistoryForMarble: %s\n", marbleName) + + resultsIterator, err := stub.GetHistoryForKey(marbleName) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing historic values for the marble + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + response, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"TxId\":") + buffer.WriteString("\"") + buffer.WriteString(response.TxId) + buffer.WriteString("\"") + + buffer.WriteString(", \"Value\":") + // if it was a delete operation on given key, then we need to set the + //corresponding value null. Else, we will write the response.Value + //as-is (as the Value itself a JSON marble) + if response.IsDelete { + buffer.WriteString("null") + } else { + buffer.WriteString(string(response.Value)) + } + + buffer.WriteString(", \"Timestamp\":") + buffer.WriteString("\"") + buffer.WriteString(time.Unix(response.Timestamp.Seconds, int64(response.Timestamp.Nanos)).String()) + buffer.WriteString("\"") + + buffer.WriteString(", \"IsDelete\":") + buffer.WriteString("\"") + buffer.WriteString(strconv.FormatBool(response.IsDelete)) + buffer.WriteString("\"") + + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getHistoryForMarble returning:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/go/chaincode_sample.go b/app/platform/fabric/e2e-test/chaincodes/samplecc/go/chaincode_sample.go new file mode 100644 index 000000000..e6587ba16 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/go/chaincode_sample.go @@ -0,0 +1,180 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "fmt" + "io" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// cryptoChaincode is allows the following transactions +// "put", "key", val - returns "OK" on success +// "get", "key" - returns val stored previously +type cryptoChaincode struct { +} + +const ( + AESKeyLength = 32 // AESKeyLength is the default AES key length + NonceSize = 24 // NonceSize is the default NonceSize +) + +/////////////////////////////////////////////////// +// GetRandomByt es returns len random looking bytes +/////////////////////////////////////////////////// +func GetRandomBytes(len int) ([]byte, error) { + //TODO: Should we fix the length ? + key := make([]byte, len) + + _, err := rand.Read(key) + if err != nil { + return nil, err + } + + return key, nil +} + +//////////////////////////////////////////////////////////// +// GenAESKey returns a random AES key of length AESKeyLength +// 3 Functions to support Encryption and Decryption +// GENAESKey() - Generates AES symmetric key +func (t *cryptoChaincode) GenAESKey() ([]byte, error) { + return GetRandomBytes(AESKeyLength) +} + +//Init implements chaincode's Init interface +func (t *cryptoChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +//Invoke implements chaincode's Invoke interface +func (t *cryptoChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function != "invoke" { + return shim.Error("Unknown function call") + } + + if len(args) < 2 { + return shim.Error(fmt.Sprintf("invalid number of args %d", len(args))) + } + method := args[0] + if method == "put" { + if len(args) < 3 { + return shim.Error(fmt.Sprintf("invalid number of args for put %d", len(args))) + } + return t.writeTransaction(stub, args) + } else if method == "get" { + return t.readTransaction(stub, args) + } + return shim.Error(fmt.Sprintf("unknown function %s", method)) +} + +func (t *cryptoChaincode) encryptAndDecrypt(arg string) []byte { + AES_key, _ := t.GenAESKey() + AES_enc := t.Encrypt(AES_key, []byte(arg)) + + value := t.Decrypt(AES_key, AES_enc) + return value +} + +func (t *cryptoChaincode) Encrypt(key []byte, byteArray []byte) []byte { + + // Create the AES cipher + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + // Empty array of 16 + byteArray length + // Include the IV at the beginning + ciphertext := make([]byte, aes.BlockSize+len(byteArray)) + + // Slice of first 16 bytes + iv := ciphertext[:aes.BlockSize] + + // Write 16 rand bytes to fill iv + if _, err := io.ReadFull(rand.Reader, iv); err != nil { + panic(err) + } + + // Return an encrypted stream + stream := cipher.NewCFBEncrypter(block, iv) + + // Encrypt bytes from byteArray to ciphertext + stream.XORKeyStream(ciphertext[aes.BlockSize:], byteArray) + + return ciphertext +} + +func (t *cryptoChaincode) Decrypt(key []byte, ciphertext []byte) []byte { + + // Create the AES cipher + block, err := aes.NewCipher(key) + if err != nil { + panic(err) + } + + // Before even testing the decryption, + // if the text is too small, then it is incorrect + if len(ciphertext) < aes.BlockSize { + panic("Text is too short") + } + + // Get the 16 byte IV + iv := ciphertext[:aes.BlockSize] + + // Remove the IV from the ciphertext + ciphertext = ciphertext[aes.BlockSize:] + + // Return a decrypted stream + stream := cipher.NewCFBDecrypter(block, iv) + + // Decrypt bytes from ciphertext + stream.XORKeyStream(ciphertext, ciphertext) + + return ciphertext +} + +func (t *cryptoChaincode) writeTransaction(stub shim.ChaincodeStubInterface, args []string) pb.Response { + cryptoArg := t.encryptAndDecrypt(args[2]) + err := stub.PutState(args[1], cryptoArg) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success([]byte("OK")) +} + +func (t *cryptoChaincode) readTransaction(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // Get the state from the ledger + val, err := stub.GetState(args[1]) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(val) +} + +func main() { + err := shim.Start(new(cryptoChaincode)) + if err != nil { + fmt.Printf("Error starting New key per invoke: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/java/build.gradle b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/build.gradle new file mode 100644 index 000000000..fedd5cccc --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/build.gradle @@ -0,0 +1,34 @@ +/* + * Copyright IBM Corp. 2017 All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +plugins { + id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'java' +} + +group 'org.hyperledger.fabric-chaincode-java' +version '1.0-SNAPSHOT' + +sourceCompatibility = 1.8 + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.+' + testCompile group: 'junit', name: 'junit', version: '4.12' +} + +shadowJar { + baseName = 'chaincode' + version = null + classifier = null + + manifest { + attributes 'Main-Class': 'org.hyperledger.fabric.example.SampleCC' + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew new file mode 100755 index 000000000..cccdd3d51 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew.bat b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew.bat new file mode 100644 index 000000000..f9553162f --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/java/settings.gradle b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/settings.gradle new file mode 100644 index 000000000..2f364bfc3 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/settings.gradle @@ -0,0 +1,7 @@ +/* + * Copyright IBM Corp. 2017 All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +rootProject.name = 'samplecc' + diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/java/src/main/java/org/hyperledger/fabric/example/SampleCC.java b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/src/main/java/org/hyperledger/fabric/example/SampleCC.java new file mode 100644 index 000000000..23b3f7491 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/java/src/main/java/org/hyperledger/fabric/example/SampleCC.java @@ -0,0 +1,111 @@ +/* +Copyright IBM Corp., DTCC All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ +package org.hyperledger.fabric.example; + +import org.hyperledger.fabric.shim.ChaincodeBase; +import org.hyperledger.fabric.shim.ChaincodeStub; + +import javax.crypto.*; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Base64; +import java.util.List; + +import static java.nio.charset.StandardCharsets.UTF_8; + +public class SampleCC extends ChaincodeBase { + + private static final int AESKeyLength = 32; // AESKeyLength is the default AES key length - java by default support only 128 bit keys + + @Override + public Response init(ChaincodeStub stub) { + return newSuccessResponse(); + } + + @Override + public Response invoke(ChaincodeStub stub) { + String func = stub.getFunction(); + List params = stub.getParameters(); + if (!"invoke".equals(func)) { + return newErrorResponse("Unknown function call"); + } + if (params.size() < 2) { + return newErrorResponse("invalid number of args " + params.size()); + } + String method = params.get(0); + if ("put".equals(method)) { + if (params.size() < 3) { + return newErrorResponse("invalid number of args for put " + params.size()); + } + return writeTransaction(stub, params); + } else if ("get".equals(method)) { + return readTransaction(stub, params); + } else { + return newErrorResponse("unknown function " + method); + } + } + + private Response readTransaction(ChaincodeStub stub, List params) { + try { + byte[] val = stub.getState(params.get(1)); + return newSuccessResponse(val); + } catch (Exception e) { + return newErrorResponse(e); + } + } + + private Response writeTransaction(ChaincodeStub stub, List params) { + try { + byte[] cryptoArg = encryptAndDecrypt(params.get(2)); + stub.putState(params.get(1), cryptoArg); + return newSuccessResponse("OK".getBytes(UTF_8)); + } catch (Exception e) { + return newErrorResponse(e); + } + } + + private byte[] encryptAndDecrypt(String s) throws NoSuchPaddingException, InvalidKeyException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException { + SecretKey key = genAESKey(AESKeyLength); + byte[] iv = genInitVector(); + String enc = encrypt(key, s, iv); + return decrypt(key, enc, iv); + } + + private String encrypt(SecretKey key, String value, byte[] ivBytes) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(ivBytes)); + byte[] encrypted = cipher.doFinal(value.getBytes()); + return Base64.getEncoder().encodeToString(encrypted); + } + + private byte[] decrypt(SecretKey key, String strToDecrypt, byte[] ivBytes) throws InvalidAlgorithmParameterException, InvalidKeyException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException { + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivBytes)); + return cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)); + } + + private SecretKey genAESKey(int keyLength) { + SecureRandom secureRandom = new SecureRandom(); + byte[] key = new byte[keyLength]; + secureRandom.nextBytes(key); + return new SecretKeySpec(key, "AES"); + } + + private byte[] genInitVector() { + SecureRandom secureRandom = new SecureRandom(); + byte[] iv = new byte[16]; + secureRandom.nextBytes(iv); + return iv; + } + + public static void main(String[] args) { + new SampleCC().start(args); + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/node/chaincode_sample.js b/app/platform/fabric/e2e-test/chaincodes/samplecc/node/chaincode_sample.js new file mode 100644 index 000000000..2a20b93b4 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/node/chaincode_sample.js @@ -0,0 +1,104 @@ +/* +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +*/ +'use strict'; +const shim = require('fabric-shim'); +const util = require('util'); +const secureRandom = require('secure-random'); +const aesjs = require('aes-js'); + +const AESKeyLength = 32 // AESKeyLength is the default AES key length +const NonceSize = 24 // NonceSize is the default NonceSize + +// This Chaincode allows the following transactions +// "put", "key", val - returns success response +// "get", "key" - returns val stored previously + +let Chaincode = class { + async Init(stub) { + console.info('=========== Sample Chaincode Instantiation Successfull !! ==========='); + return shim.success(); + } + + async Invoke(stub) { + let ret = stub.getFunctionAndParameters(); + console.info(util.format('Args: %j', ret.params)); + let args = ret.params; + let method = this[args[0]]; + if (!method) { + console.log('no function of name:' + ret.fcn + ' found'); + throw new Error('Received unknown function ' + ret.fcn + ' invocation'); + } + try { + let payload = await method(stub, ret.params, this); + return shim.success(payload); + } catch (err) { + console.log(err); + return shim.error(err); + } + } + + async encrypt(key, text) { + let textBytes = aesjs.utils.utf8.toBytes(text); + + // The counter is optional, and if omitted will begin at 1 + let aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); + let encryptedBytes = aesCtr.encrypt(textBytes); + + // To print or store the binary data, you may convert it to hex + let encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); + return encryptedHex; + } + + async decrypt(key, cipherText) { + // When ready to decrypt the hex string, convert it back to bytes + let encryptedBytes = aesjs.utils.hex.toBytes(cipherText); + + let aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); + let decryptedBytes = aesCtr.decrypt(encryptedBytes); + + // Convert our bytes back into text + let decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); + return decryptedText; + } + + // To make the process busy, We just Encrypt and then decrypt the value + async encryptAndDecrypt(arg, thisClass) { + //Generate random AES key of length AESKeyLength + let key = secureRandom.randomBuffer(AESKeyLength); + let method = thisClass['encrypt']; + let cipherText = await method(key, arg); + method = thisClass['decrypt']; + let plainText = await method(key, cipherText); + return Buffer.from(plainText, 'utf8'); + } + + async put(stub, args, thisClass) { + if (args.length != 3) { + return shim.error(util.format('Invalid number of args for \'put\', %j', args.length)); + } + let method = thisClass['encryptAndDecrypt']; + let cryptoArg = await method(args[2], thisClass); + await stub.putState(args[1], cryptoArg); + return Buffer.from('OK', 'utf8'); + } + + async get(stub, args) { + if (args.length != 2) { + return shim.error(util.format('Invalid number of args for \'get\', %j', args.length)); + } + // Get the state from the ledger + let payload = await stub.getState(args[1]); + + if (!payload.toString()) { + let jsonResp = {}; + jsonResp.error = args[1] + ' doesn\'t exist'; + throw new Error(jsonResp); + } + console.log(args[1] + ' : ' + payload.toString()); + return payload; + } +}; +shim.start(new Chaincode()); diff --git a/app/platform/fabric/e2e-test/chaincodes/samplecc/node/package.json b/app/platform/fabric/e2e-test/chaincodes/samplecc/node/package.json new file mode 100644 index 000000000..921ab2186 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/samplecc/node/package.json @@ -0,0 +1,20 @@ +{ + "name": "sample_chaincode", + "version": "1.0.0", + "description": "sample chaincode implemented in node.js", + "engines": { + "node": ">=8.4.0", + "npm": ">=5.3.0" + }, + "scripts": { + "start": "node chaincode_sample.js" + }, + "engine-strict": true, + "engineStrict": true, + "license": "Apache-2.0", + "dependencies": { + "aes-js": "^3.1.0", + "fabric-shim": "unstable", + "secure-random": "1.1.1" + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/sbe/chaincode.go b/app/platform/fabric/e2e-test/chaincodes/sbe/chaincode.go new file mode 100644 index 000000000..3fd6272f0 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/sbe/chaincode.go @@ -0,0 +1,151 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/core/chaincode/shim/ext/statebased" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// Record is JSON-marshaled as a return value of getRecord +type Record struct { + Key string + Value []byte + Orgs []string +} + +/* + EndorsementCC provides the following chaincode API: + -) updateRecordValue(key, val) sets the value for a given key + there is no return value on success + -) updateRecordEP(key, org1, org2, ..., orgN) sets the endorsement policy for a given key + the endorsement policy is represented by a list of MSP IDs + there is no return value on success + -) getRecord(key) returns a JSON-marshaled Record for the given key +*/ +type EndorsementCC struct { +} + +// Init callback +func (cc *EndorsementCC) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke dispatcher +func (cc *EndorsementCC) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + funcName, _ := stub.GetFunctionAndParameters() + if function, ok := functions[funcName]; ok { + return function(stub) + } + return shim.Error(fmt.Sprintf("Unknown function %s", funcName)) +} + +// function dispatch map used by Invoke() +var functions = map[string]func(stub shim.ChaincodeStubInterface) pb.Response{ + "updateRecordVal": updateRecordValue, + "updateRecordEP": updateRecordEP, + "getRecord": getRecord, +} + +func updateRecordEP(stub shim.ChaincodeStubInterface) pb.Response { + _, parameters := stub.GetFunctionAndParameters() + if len(parameters) < 2 { + return shim.Error("Wrong number of arguments supplied.") + } + + // set the EP + err := setEP(stub, parameters[0], parameters[1:]...) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success([]byte{}) +} + +func updateRecordValue(stub shim.ChaincodeStubInterface) pb.Response { + _, parameters := stub.GetFunctionAndParameters() + if len(parameters) != 2 { + return shim.Error("Wrong number of arguments supplied.") + } + + // set the value + err := stub.PutState(parameters[0], []byte(parameters[1])) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success([]byte{}) +} + +func setEP(stub shim.ChaincodeStubInterface, key string, orgs ...string) error { + ep, err := statebased.NewStateEP(nil) + if err != nil { + return err + } + // add organizations to endorsement policy + err = ep.AddOrgs(statebased.RoleTypePeer, orgs...) + if err != nil { + return err + } + epBytes, err := ep.Policy() + if err != nil { + return err + } + // set the endorsement policy for the key + err = stub.SetStateValidationParameter(key, epBytes) + if err != nil { + return err + } + return nil +} + +func getRecord(stub shim.ChaincodeStubInterface) pb.Response { + _, parameters := stub.GetFunctionAndParameters() + if len(parameters) != 1 { + return shim.Error("Wrong number of arguments supplied.") + } + key := parameters[0] + + // get the endorsement policy for the key + epBytes, err := stub.GetStateValidationParameter(key) + if err != nil { + return shim.Error(err.Error()) + } + ep, err := statebased.NewStateEP(epBytes) + if err != nil { + return shim.Error(err.Error()) + } + + // get the value of the key + val, err := stub.GetState(key) + if err != nil { + return shim.Error(err.Error()) + } + + // put it into the json + r := &Record{ + Key: key, + Value: val, + Orgs: ep.ListOrgs(), + } + rBytes, err := json.Marshal(r) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(rBytes) +} + +func main() { + err := shim.Start(new(EndorsementCC)) + if err != nil { + fmt.Printf("Error starting new cc: %s", err) + } +} \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/chaincodes/sbe/chaincode_test.go b/app/platform/fabric/e2e-test/chaincodes/sbe/chaincode_test.go new file mode 100644 index 000000000..b826954ee --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/sbe/chaincode_test.go @@ -0,0 +1,68 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + "sort" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/stretchr/testify/assert" +) + +func TestDispatch(t *testing.T) { + cc := new(EndorsementCC) + stub := shim.NewMockStub("ecc", cc) + + res := stub.MockInvoke("1", [][]byte{[]byte("unknown")}) + assert.Equal(t, int32(shim.ERROR), res.Status) +} + +func TestCreateRecord(t *testing.T) { + cc := new(EndorsementCC) + stub := shim.NewMockStub("ecc", cc) + + // create the record and set its value + res := stub.MockInvoke("1", [][]byte{[]byte("updateRecordVal"), []byte("foo"), []byte("bar")}) + assert.Equal(t, int32(shim.OK), res.Status) + + // retrieve the record + res = stub.MockInvoke("2", [][]byte{[]byte("getRecord"), []byte("foo")}) + assert.Equal(t, int32(shim.OK), res.Status) + + // verify record + var record Record + err := json.Unmarshal(res.Payload, &record) + assert.NoError(t, err) + assert.Equal(t, []byte("bar"), record.Value) +} + +func TestCreateRecordWithEP(t *testing.T) { + cc := new(EndorsementCC) + stub := shim.NewMockStub("ecc", cc) + + // create the record and set its value + res := stub.MockInvoke("1", [][]byte{[]byte("updateRecordVal"), []byte("foo"), []byte("bar")}) + assert.Equal(t, int32(shim.OK), res.Status) + + // set the record's ep + res = stub.MockInvoke("2", [][]byte{[]byte("updateRecordEP"), []byte("foo"), []byte("org1"), []byte("org2")}) + assert.Equal(t, int32(shim.OK), res.Status) + + // retrieve the record + res = stub.MockInvoke("3", [][]byte{[]byte("getRecord"), []byte("foo")}) + assert.Equal(t, int32(shim.OK), res.Status) + + // verify record + var record Record + err := json.Unmarshal(res.Payload, &record) + assert.NoError(t, err) + assert.Equal(t, []byte("bar"), record.Value) + sort.Strings(record.Orgs) + assert.Equal(t, []string{"org1", "org2"}, record.Orgs) +} diff --git a/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.pb.go b/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.pb.go new file mode 100644 index 000000000..117bc6c09 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.pb.go @@ -0,0 +1,55 @@ +// Code generated by protoc-gen-go. +// source: data.proto +// DO NOT EDIT! + +/* +Package main is a generated protocol buffer package. + +It is generated from these files: + data.proto + +It has these top-level messages: + PermissionedBlob +*/ +package main + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type PermissionedBlob struct { + Owner []byte `protobuf:"bytes,1,opt,name=Owner,proto3" json:"Owner,omitempty"` + Blob []byte `protobuf:"bytes,2,opt,name=Blob,proto3" json:"Blob,omitempty"` +} + +func (m *PermissionedBlob) Reset() { *m = PermissionedBlob{} } +func (m *PermissionedBlob) String() string { return proto.CompactTextString(m) } +func (*PermissionedBlob) ProtoMessage() {} +func (*PermissionedBlob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func init() { + proto.RegisterType((*PermissionedBlob)(nil), "main.PermissionedBlob") +} + +func init() { proto.RegisterFile("data.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 96 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4a, 0x49, 0x2c, 0x49, + 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0xc9, 0x4d, 0xcc, 0xcc, 0x53, 0xb2, 0xe1, 0x12, + 0x08, 0x48, 0x2d, 0xca, 0xcd, 0x2c, 0x2e, 0xce, 0xcc, 0xcf, 0x4b, 0x4d, 0x71, 0xca, 0xc9, 0x4f, + 0x12, 0x12, 0xe1, 0x62, 0xf5, 0x2f, 0xcf, 0x4b, 0x2d, 0x92, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x09, + 0x82, 0x70, 0x84, 0x84, 0xb8, 0x58, 0x40, 0xb2, 0x12, 0x4c, 0x60, 0x41, 0x30, 0x3b, 0x89, 0x0d, + 0x6c, 0x94, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x0a, 0xe0, 0xd3, 0xcf, 0x58, 0x00, 0x00, 0x00, +} diff --git a/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.proto b/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.proto new file mode 100644 index 000000000..f0de36901 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/data.proto @@ -0,0 +1,24 @@ +/* +Copyright IBM Corp. 2017 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +syntax = "proto3"; + +package main; + +message PermissionedBlob { + bytes Owner = 1; + bytes Blob = 2; +} diff --git a/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/plob.go b/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/plob.go new file mode 100644 index 000000000..2c3704ff5 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/plob.go @@ -0,0 +1,182 @@ +/* + * 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. + */ + +package main + +import ( + "bytes" + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + sc "github.com/hyperledger/fabric/protos/peer" + + "github.com/golang/protobuf/proto" +) + +// Define the Smart Contract structure +type PermissionedBlobRegistry struct{} + +// Init is called when the chaincode is instantiatied, for now, a no-op +func (s *PermissionedBlobRegistry) Init(stub shim.ChaincodeStubInterface) sc.Response { + return shim.Success(nil) +} + +// Invoke allows for the manipulation of blobs, either creation or modification +func (s *PermissionedBlobRegistry) Invoke(stub shim.ChaincodeStubInterface) sc.Response { + + args := stub.GetArgs() + + if len(args) == 0 { + return shim.Error("Invoke called with no arguments") + } + + // Route to the appropriate handler function to interact with the ledger appropriately + switch string(args[0]) { + case "query": + return s.queryBlob(stub, args[1:]) + case "set": + return s.setBlob(stub, args[1:]) + case "delete": + return s.deleteBlob(stub, args[1:]) + default: + return shim.Error("Invalid invocation function") + } +} + +// setBlob expects 2 args, id and blob +func (s *PermissionedBlobRegistry) setBlob(stub shim.ChaincodeStubInterface, args [][]byte) sc.Response { + + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + key := string(args[0]) + + creator, err := stub.GetCreator() + if err != nil { + return shim.Error(fmt.Sprintf("Could not get creator: %s", err)) + } + + valueBytes, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("Could not get state for key %s: %s", key, err)) + } + + // If the key already exists, make sure this user is the owner of that key before allowing a write + if valueBytes != nil { + plob := &PermissionedBlob{} + err = proto.Unmarshal(valueBytes, plob) + if err != nil { + return shim.Error(fmt.Sprintf("Unexpected error unmarshaling: %s", err)) + } + + if !bytes.Equal(plob.Owner, creator) { + return shim.Error(fmt.Sprintf("Not authorized to modify key %s", key)) + } + } + + plob := &PermissionedBlob{ + Owner: creator, + Blob: args[1], + } + + asBytes, err := proto.Marshal(plob) + if err != nil { + return shim.Error(fmt.Sprintf("Unexpected error marshaling: %s", err)) + } + + err = stub.PutState(key, asBytes) + if err != nil { + return shim.Error(fmt.Sprintf("Could not put state for key %s: %s", key, err)) + } + + return shim.Success(nil) +} + +// queryBlob expects 1 arg, the blob's key +func (s *PermissionedBlobRegistry) queryBlob(stub shim.ChaincodeStubInterface, args [][]byte) sc.Response { + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + key := string(args[0]) + + plobBytes, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("Could not get state for key %s: %s", key, err)) + } + + plob := &PermissionedBlob{} + err = proto.Unmarshal(plobBytes, plob) + if err != nil { + return shim.Error(fmt.Sprintf("Unexpected error unmarshaling: %s", err)) + } + + // No need to check permission, anyone who can read the blockchain can also read all the blobs + + return shim.Success(plob.Blob) +} + +// deleteBlob expects 1 arg, the blob's key +func (s *PermissionedBlobRegistry) deleteBlob(stub shim.ChaincodeStubInterface, args [][]byte) sc.Response { + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + creator, err := stub.GetCreator() + if err != nil { + return shim.Error(fmt.Sprintf("Could not get creator: %s", err)) + } + + key := string(args[0]) + + plobBytes, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("Could not get state for key %s: %s", key, err)) + } + + if plobBytes == nil { + return shim.Error(fmt.Sprintf("Key %s did not already exist", key)) + } + + plob := &PermissionedBlob{} + err = proto.Unmarshal(plobBytes, plob) + if err != nil { + shim.Error(fmt.Sprintf("Unexpected error unmarshaling: %s", err)) + } + + // Make sure the requestor is the owner + if !bytes.Equal(plob.Owner, creator) { + return shim.Error(fmt.Sprintf("Not authorized to modify key %s", key)) + } + + err = stub.DelState(key) + if err != nil { + return shim.Error(fmt.Sprintf("Error deleting state for key %s", key)) + } + + return shim.Success(nil) +} + +// main function starts up the chaincode in the container during instantiate +func main() { + if err := shim.Start(new(PermissionedBlobRegistry)); err != nil { + fmt.Printf("Error starting PermissionedBlobRegistry chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/vendor.zip b/app/platform/fabric/e2e-test/chaincodes/shim-vendored/plob-1.0-shim/chaincode/vendor.zip new file mode 100644 index 0000000000000000000000000000000000000000..e49efee6b2bfecd0df88790887db748d30411164 GIT binary patch literal 1927136 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éJ7YSEu>UM+oRv;4EEnvLt~WHX3c& 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

6baf2bm$Om#MUEQ$c=HX}P_;lrA0Q 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 z zE6p9iNEY9mkgEU!yfVKW;pX!!W~=I=qPwYKut|Nxwd8$G1Xq;gq4@%IgQ$~{^F^09 z)!DGXSi(~j$I8d6Spy+hLG;Cg*{!iwSj*%rBDW_*0z#;$X$=Yj`X~mBm>sqSgE($X z-PQyuxp?&=Z^|5oHmbHAf(BMA2BORNatM@7f+*SEA``t~7$Z%%cU8{TRiLDbp6rt@XzKkfS15lF9oN zoYi`Giv_GmT%WS)*+QStUP0Mht{>HUu+IeOuvH}v@#1bZ7se$x6|_W(}pBXGIO1>*^Q>O zOO?}qVVQ!3aqZv%!KApKX8zAFMM>|pDyCJ@{42(Jdc{&&*ST3U7elqOks;xDA8J(A zn2Xv`xbmf@NFrq!I`|8pAp%zEQo%e)w$kZ2;lXm)h=`=4Eg=IDD;j5!mNo4FgM0$V z;fG=RF>T3;uqmlTR@K3JHj7E z?B!s&-eyL}ulALAim+Hk#S4D8+~cV0q&blH`FH65c{&4c>OsLo1_I)?{=eGu{68E4 zv;RFu;96JH?qA(a-`83TB1B`z2A1)gL8DW{{I@ZSLyb^!$}}GURRx`c%pWjB?hXB3 z)n&*|kMJV;S%eV*q|A$oi=T_Dpz8il)R!FH;CZeWjLD>Iy{!6sd!~#!hau3H`%^@} zTV}Q=AF*6Y+7swF{kN_-=K@n4Zl@l{gHrl(6ZvX)r3OH`GuS-lm5d{b)&y zPoxnJ|GNl+@|IvE%qJkcSBZkw$N>(Qz$WoDm=6BQBg> zzF6DZ(Nc=i#zeQB#Vme+g}0ZB%R5Kc-!FIO3>kSjc`Uv!HUeF~9obuKW8?(*L(u`O zr%|s2BubX}&9F>d>s4dD2@D=t|E`}?UMGA39(YBtr&CuJe0V#tzwJWrs7H$eu?B%C zZ~t~fI&xz<-;NKlkWRPfA|S5U;4n4qr(C}Rj{SMTO{U)@a7K9GIJ}-0$O|NQmf#i0 z%Tcpl7vQ1gt`nnWgFXB$sT63$U(-uT8SV098nLGAh_6N(Jofpm7~zBB;c!R&r=1f0 z2@L*zD-=jVjcy(9z_#MonIWw%1lV?wEe8R3VV&cPrhVAoSz-kj4~6mI;He_3W}v#q z{)psb`WFUH+p2U@$?$HnwwOqP34s^s#;jIukjEDdrusYY9b%VWL$UI*UiUn6020Dr8wG4NMyuglLkI@4J>p&5*=rF_>?u#j%H` zx&n^201#T3KWfU0tgC>m9n-jIb=|8rRziPSpmte-3o!}msVq)X;sQ)u0Taf zA&X+X6gJ7N&L@ws5*tNXLMMhLe@-k^4Ov>PjM5KlEgWARJ-2gH2cfG(1hJbsW*O^o zUZ5UL;s^gbb-w$nD8ZL>2A>wWf95{S>esy)R;=rwA1>^*MKRk8NmJnS6Pejtr;WDh zz%)gUGD%=^nlUSTvR=G;;`QD_(=$gv^w~(dL$0AbhKA$le&j{Bei+GiVCC-nQ#>tuYpz;K%&YpVvs#Q`aDbRj`KEV@GvH+sN zw3-xfo2=MwD#yXb`7uGMCh8A`aF)gz6631av#Di_GX30Ghn1Uty#rpgUEJ_{w$QJ^u zw12E7VcssyGzAn@Vv|hcQ>b+TFB2%3tJF)UZF&Cr5=P+4`A^9~O#?&lzsRsJc2@5VS^V4MwtZlDd|Zt%nJOdT)jU z==D*4SK8Gj!8X}Wg?4IjmS>*{9P@_{KEnbtAsfdFB)xJgzowKB^U}a+N(F@Egwsv? z=8ZZM8?P!rSI9*&evDT6T%QZ!s#;zG_=I`FE&CFe0-~$piQW$)pv>v%a%hbxwLIy? zC*a_hRR{Y%rJINdvELtHuF)qo;4y5X0rnCY()JdlMDG(0j|MqmGUG(UK2b0*p z4Y3KDyus8A4P*DPhM2MBsF{LP0R_gz6NGNl)}ZW9Cs&RWQyeXCH&d z7jJ|Jk?@&Bu(o&1n(Hiem#4W(N?kBc_h?}@>C$Kx)x(x_kYLR9Nmv_2_$lAd;mGH4 zxN8mF#G3ayu~%1J(HkL%(crc{K_Wn14#g9&kxK;mQi|I$#qB$L@_#(#@o;85s2)lG zRb}OP29Z#H*X&-fBp0c5=CZ``YNS0j%5Rad@yMg?AT#2cJMllSQLio8Q_BnFj<$HD zk5A&w2inkP##-pow)Fv$Tyzzu&-3cIEkWUCLVnjk2v)T)Z4}ZBkxM2)0s@W0slE}f zXLMt7uB^mZ_Xvk63zVAH6FP_%F5YT?n^dq1+M#^_9a#@tX(G2%(lCt?o2F2H}qiYF-Lw z{?5{?T$N=8dd%j@R`lBtGZY^+Tth7*)pVV=@w$!=E|jr;Sa0HSF8aHKinm^b#|x6? zba~=QUTByE(Hb=4`cN%`jPmqju6Kyl&0r^rVce@jsUVi9-UyM}p$f`rwv1MpWw8I~ zv~^+XMCr0&=z3&IfT1h2dWFszgC9)J!}uip)XNu70$V?3>^Rq{!imp#<;diM@zYk%>b-_CK znVVoEK6(_M_3%MYjO^88o@T9wdW&-9m4teAO5huTONa6sJy%x#Dn<1Uhon{jjg8Sk zfC{uMZy7m6N-t8JmJWl5YzAYZlr|B(nO!z{^v-QO`GoYM3s6N#M1vre#8~DK0BM26SM>)qR^5uwPZ|d_?8jH zKNTW%z(PZJG|uCi0&`CoJozr}yfJM>;^^mw-1>cvR>0efbcIRdG`GE&UB)VcAanjcQ2_ zz#}mpQpw4Q@woj?&uXC0bN9wKQ>z_u)y|;Zya#epdfZBpE2IrsMG&i@|Bmr+Zwnt> z;JG2}e>w}S7eDhi?MNA%GnTd@O;-13`QYnml*92?YRQC+%4G~^WsB9n2Ihl4r^=Jh z!ccri+9^%g@QYrMUp*~9`q-B-dpIL?J_qegO~7k)*{7S^uR+wI$y-~?8qoSfU{74|fLDHf8Dz!c)MmLU*3FB4rB z^k$nwb1y@3c2B^qy{^Cpa~vzr{Bo4}Bdqu#BB+c^D=$k9~Gb*;A33d zhUwY{kitYg|a5HdmHP985{CW|^+45KvLuV7T)uE+FN= zzxc+**B-em(x$9%mVFpdWvRTA;(DptQ7CUjq>*1XEuB~jUZQJ6Lo@mo&DE6)HHUXi zK|HChRE6!H0k0I*JzX)XYp@}X$LXO<(5U?9y#hHOyW*RG1^64+dSe{)3t%}M4m9IK zL!5B?t3JUy7~J*De9ESipE7*-bZfG#t z3rgN3bk6EV$qS#=Z`&q<`m>IwTDQ1`z!SBW^JupRQDr7>K{&0Agsfw`u8HWrOUbkzna37Lrl{CVe9i#R%qZNatH&c3b<~%h~t2^^|EnQ;4Be+>1Bsznx)!Ho{LkkP8Df6z= zY=ARStL(iSh9I{V!`y}%$VNA!GE#eGOB8>5SgwlC*4txGVY|v0B<&2Q_wV%cPxe_1(-P?=K6me>%NS1{o>b{eAj8w^5CDddYD8&d4ppR z19CtAO>|UK)P_~9(m)~4|Y|M(&L@@w)R^2OEM zWTcAoH_I!@sHajXCgQ&}9VH!G9NUv%z{E+^i26VT#yhTlUN3Jv49pnak&3e1FO?#U zL72aDZgL_i@J4AW)GOc)XJ^dpgrERxxOO>zxLysM}0E#a|pZvdrbun2b$B4l`*(} z-QApB(6|$t$w!fN2SGGafq5s=j^&JO!otD;^U)!#QH?zwXUU6qiY!UH2Qi3W*?hRn zq$n!Y@qFmd=yj8zK|ueWbuL2Lkoc1!1Qr${7`pE zuNx=H+%K=+XEqMDsxz$b>>h4+cav?yK6D2^{tCBch>fzO-56DD_*%+m{gQV{hrl*4 z6t9>(|6!VaIb?x5`1Zyy@g^iwE-K&d5+UBt#@@~w^rgvj?oX8DdnS!dVAPX)@7Zob zFSod1+5EAZuqzBM+~e2LZ}{`R_jWXW{ysjP8FwnaT8eoZ6pcAa+wQA%r<(%i#AkAh z>S^G{$Hm>XrE;5zh*^5NN|`#X06}^`73}Qn?)vh9^s^9y1aI_7^UM6j2O%($;&2`D zrID(cFrVj|a*{02b)^y0=qTEpp{4baL_3txH%k7h^}4#PEq$bsD19U=;;&C@x9OaZ zldGqTtkgvA$*#@cOKu#W(=TK(Q56wExF9G<*1(_}j;F({5tgRhA^=SwG#4o7Kl29S z0L%D3B^EL6^x`=a#7RKbSqgkOSuh_~1An*CF2bJ~I$}E4pZhB~sxM4r59h}eOuH0G z4G~L62%SNTNmzFqBiMBsdo@7X(VjsngpVgT6)s%Z9N*Tb;KUv}>667SsN||!AZ_6^ z4TEomiGV+yNf45X1P;#$ zQQ%WV2mleqJ{dND@cu;@M|OELfLy#fk3XbD3akeLx_vtQmQl`0?**&j)<#sCzV6rG z;1VE2mfk*)@TUh#*9x0ClH`z14k*744ql2yQDd&D8^;3y$v~0D*TMN1U=el}`>qHS zLI{4^?X)%aJbyL$#LXq~lk@jXSjiKc3&=`OWmwz`)hrAPO1`mLeSMv*dXnzbameVu z{|aD%m~rhupH4bL8?E}*N5>HfV2b<^2pb$Eks@uikH2wq@w4p3gM6ItoXm`JTM0iA zS|$}0<J2_$G17+ziQ0e(x8iQL-Ix zF71-+mh?>qGD?6WxdS7}*tejH}9Q>GHFL}gaK zBCTV0Awp4UqhUi)F$DgiSQ_ZkBqH4l41?1{=OI)d0oq(Q{3wm;;}(ebHnx|ro$9~; zIXW91d|a%2Wnbm@AbxhnwAJoG!bb*BG*?;w~$4 zw`g#QMPX6YBzusbRzg>nF_3uJc|QGO4Cu3Dm@Yh6&8=qv>JtvE)Hls?S0|jgu5B z&>bMOQ5y=Putj6lGb7Uj{ez>n+ydhku`v4sPFAeWGuzMWf+Km*Z-cjW%yqLFh!W8a zv~C?maijISNODKP2u)7ikq)nJ;K=+IN_ha{M+g6NjE$c!bTH;Dl5JsdrRTC4YpB^cOh#E>zlWcL2lIe` zNCwhhXo=84I*Xq+GN`cxEVj#c2hY25u{G#uIdcPBynY4rFOvqEQ+qLf2M76@_1E^@ zzm14%1K4W(ag8{nZ%H=!Ssdkf^b8$C)`yr*v8($f{+`4cnlE4}-X2h1=+4OR1ACd) z3cu-=kg3e)E3yaoG-~Z4_AL~%_v+2lQ435X01oq#qsIB&+d$;bQ}@32pP!GSe;O*9%$sQ5 zh+5jJ;EoC{dJUo6fvx+qP}nwr$(CZQHhO+qN@rI^TU=V^qHyqpJJG zM||#xpB?AK+GovmvCb}?L@1dmj=I=VqE8nr@1mW#j;c; zQ~yRPS!#HE%HDIGAma9SzolC_y!?;k4R^I|O`(|(fK0orD=cFew-MeF)N zy%H2KhIJHt^l>UVfjg#N6}&l$4{(Ppim}nE6CvU}uc~n42fWlSoQyc4t7;$2v?;eQk;9GloEw@J!<^rYqZ~%|Rz#gth$N~^yCSbvG zy1R->CRdC@x$2h`q~x$*5XthaB(e@Pk0ts`rLxcJk|~v3k)ki7y80IjxrYdvs%%K* zr=E@+1rEf5}yR%~%C!-}dr zrxv^`J+%01T^rs)Z{0g{6Fs6KgL`>fVeafk8NHT@4WzwK;)oE_%-!3PCe@Ow?qNx+ zJUM_X?ID4=3fpmdr3 zk0I`kO6uz!=8gFL$~hcK_$}7>LQaQ|bPpD5T!V|8mL;*T@F00aT~oQPu00N(Iib!3 zu;CcX4$P!+mv-c>HKDH9(- zn5%H17}gVOCU;0Sd@6e{$d=_%K~%%{aMSs#g;K^>C8??5owZKk(rA)b?w(5ZRAY^5 zmtwHWPDS931_73Mqy?uZp-wX+kEuRJ~0XuP7SYc{#1 zH4Q_}D<;mLuYfLlsWbhPoW*g5by{yncd)gCQ{sPOM8%$B3$#V9`r;c_JQ6xK-H*`+ zF0H12T;e-ZOi7aH3>*m}@%(69S;tN>T-lr7?EVl!S6{sR zslHlvK|I!mt(e4TISrJi8*{O@PHkIT-b&I9K}&#Ge5u@e z5FiXz;7v~WRUh zDWKdf!9;EA@Ys)ZXNl&6R?Q35nzmS=lD4?;M_eyX+O{etsnS@=6(ZNPcT!BTOwTF zoi9sp7M}PVMTBe5cTaa#KKnsIcX&1`h@D(6#xXbtu3E}mmL#N z2LV^b)WXYZ(#`{nu6#C5e)LTUGa#JNnmL&C06iqCrvxNaIMDkG(&0l~ey@acBra7V z8%(LLy&@H5K7eIEm*3lo9t0n?`+$2S(YZK8KwJ^;(o=%@D;`&5itkrLEDJr_XeCJ# z1Dfze{Cd3HL75?eh%(I$??Tc8T6(8+n%tH-850~c@S0YP`~VB^9s zZyQ^;x90<<{*Lhs&ido@^zicZ`tW>*B6=^%?Kw17HBk^odpPvGXo?;No{CbzvPfJm zJ{PcD*S<263@~qryx2gn1Z=?)&D^PwQ7XB~BGaD!+Hh3`x|24EAQ-Gmp|}8?r}OK5 z=w+m9Da(oSwFtz8JGo3U!Uaa}q9ImHV?rV=t%GO{YYFXbLz^C5deNkym=SY;rnD@ zj^rHjji-zVO0(gGuyCP2<+ecu0km7khbNQYq(S6u8?v1OHEX~d!0FRe9XZRIKUjYZ z?U+buArWhL0!wrHgQ=I5xn`y)MGcMjH|D$si2t_hWTQ4$=PG*aq#`0aa8;+Xl&Uf* zECX6aIloH9OGyYdcLt3PX0&AIiU9ijrW`V@5j<4jEv18kUQnf9yg^{~ijmr;0q#E= zh@)XGH5E}>aBXCi{~G{Ey#%dJi&(=#~;^#{7KcHD>~w&765x2AtgqlZx1KhGSG=hNi*PFrNF3ky9a{`v-MV`T`&$v!pG z(i|15syG&v)KG?~>Y!C~qo7vCt-q;jC`$>p*|ylX2y^M9GH;C?c`JUbE0R~9EZfLD zw!j~3a6c9Y?FVSblBW~z!KSpUgK-#nUgeenM6R@;Q=fYYRB*z+_eIOr=$y60KV>~T zC5yQF+Ps`O*2u3`m&z9gL=VpZ?0DtrlTvU)!J^%$F-64<4W2SFbxVZdeAHy|(Y<9E z{xke1E%AKQMA^KiWPe)%$fI!aVN`o4!>89sNV}9kl}eOGG&DV+UaybosCu|*ovw~v z7F?LmQW;*GKTHq^$>RptI8GHxOiRex7O5(s&Hi#sr9o*E$crpY$b1U*DZwl`&h~wA zdg{@xs4~%3-i@ax*)t%(+HU|-74tpTF~x>(JabCU{*dkbV?pIEo0+iM$i(VWzu%k# zW%nd9=6}-DnkusgUnYzfj(T1ukv<^(K}Q@0kV=_;%a#ee$Azjrf~E);K|$2X6h>YR ze#iUj8YY2)mzE^qLbj)F<`9cL8{lyxjy>XUU`9R>qQCLg)c>Rwzipo+xY#=5GzcWd5BBCXl7DQmrk(!LLKG9&+!5HQPsS}vQ&c)Y#9XCcc6(=Urt?UkZHUFw&PCYT$6;`v9oUXWU^pS8Ct)MS7n$FaL94Y+vyX*9QnI%8A zr~<&u+t7|`{-OT-7Oe^#qnm1BWSO={j6+es+2CUBFIzbQo-^EH@Cz4|O=N+mHahYs z)5y>vSEULPrppblH`GH+snli1fXGZaPA#mtyhzg{lM@-qTkvF0$S*as#MA3B&vxf9 z*K#4JI=W2`N$`^CCrt$S#n!w;!xV0|pi_WxP+CNL5dL(emYE)Tmdw!WwyhRt>g9Ox zp!}ou2pS-EC7*rnBL?o9Is*MOD9q9xsYZMB7TMVtUC<~k@VpNs!qGut)P-CgY=ED0!nYFj}IZ>x*n!!rH zsatpa0+ye^{c5#A`6ztWnz4o`&W$TBcrP$S@Zxk?v~gwdt{gzRx&nzk3Am)jMFJmP zOBJ$~$3>94bAuBhc+V)E)Ixi4-VF( z-7vA)ogmDLHLfCeLNncV>tDs0W@QxL zwC4TT&#FTE@;PiO5|@@VSzuaVefDZ%Zmp${xyJ`H#F@$5;ID&PBBuU$=`3!?2fW9Emz8aj0VJfpZ2 zoEj{O?X3HWytu`qml_h%6_U*Sq|+XhoqhMM1EJC#;tzh{=i~K3U%^s5mO*jSH``jp zz!wj+2oRpr%)qEPGCW-WVZ`z!l&=IOA{HL!`9JJmm_phFvY$qaLS9F`P51{1nxJ#gKW-RU`ck#F(T5jAg#p9=&9nQN)sO#}_rj zxlU*G6ibM10VM6!z5~g3l_zUEj-MuVrQa=}ZJSTM{PW?6B6B2GdB#XJs{{2n@l*A# z);+L6K6pa;B#JjIpOHpAlJssAJOXl6b_>=)Gummdg3fblC7D~MIXB$QYp2kK)v3S? zM0!7&XbVG?%&u7L`FQBowHGC6za*X2v_PYJV!25Thd>jcS7|b z^H?b}53XjahFhx0)JW;fO$$kyHux;bxXm}~&A9BodxYAejrC?EtX0SV5ZRf=avyC1 zkm=<;${Njdy6yjsVj{(uLoy=wQ!KyCNxV<{fiOmSwF~F3iizBW zAf}`CXoWXE(o;H92%0TYJkyhf$JAJ(Sq3jyN!}rXt>H-L8ZCs08AaWx=D@UhIhR7r z&L>XV>Y-ri->@t)jP63!6kH+|Qiy1gBDRF&0Ezfx>cqo#foO3Y0(LcRS5DY7#%dz) z&bfq~&bI_2mfXI#kn){3P>;~sY86txT3z8%q|z3e&ihXtHrMu1dwrX}%@eY~aXu~| zBd^83qA15AsT8bEz^_T5B)C2N3teJgv*N2w0|`j58b2_{_YdySMblPJz5sO?4Xy+l zC`Yw|F$qOSdD(8qgRJ~|+o0%22YXRXwx8hfN6g3m+NhLA@R(D#+{pVYFnheWw{B=h zCtwWF*Ju(9>R|$BLz5#0m(yq;;gOY=ZChoH+zhyKj}fqS#KSmOx=60SiUY{i0yG7P zJ>{SN3ZfQH*6zVy65hoQ4SCOjc9AWY=d?lSX zKYs5xCaY~3d0~!W2Kj>|B7pWeku)ca^_lZoj-yAj1g`rEWlO4RhEj*_rr!$0`%Jfj z*JZ|@tU8b4B;Rs_t1|nOY1#_V*+X76zk-hx%BF{D)8_~?HB`F@`?JKVf0oKKY%#q4 zsr0(sP0`5tN18(BhD_>mHu;17QXybFSY<B{uCZwlNOTCD^FA6ZZ|D zDCNL%drLlRX{W=|B=|$UBHUH0t(19;A56qi=aWiW`mV!G??re!i8aPPrNDGrp8gul z_y&_$K18OD(RY}EkE7?H^$S@?HGuAV!KD*s?+Zl7|!_HA|OT%1ZcPC9^<+A1%+z` ziX1`ZtfdI?6S+(7GzFHMyez3lbo@^2=Z9Ul6>KP0@3%3rfhW;qx;tovu^SpAC7hQ% zhtGaDnAJO%O2Z&8)8AM#D#|sjmTJC5w?8hq{e6coUY&uIKfi7utwiVS8}`@(LFuNh z_dqmGfpf>8tm)WaT%LeOj}#g%z43ZR<=-!pVdv>QYrZqqJJ_q4;dLK?oQ1WflkqJ= zzbSpFNbqs8 z&=707TDSY#Z#P2?>;6WD4!C>|kVE90%9wGXO3fk4NI`R!Zi-tGRV_4;_Fh&k9qU-= z%Un)@G!wbp>`gkXwkOuCtXFGoV)I#~CpC6RibSvwIl>?M)$EP%X|dCatZdoS{AoRn zD3Si|D70V+b?;xjK8CC#`O_2Npk_ZPZg}D;BVs%ue5FVmdaD~lL;wiT3{-`B2W%Y zGfkOsKO!8yETlE8;F(i;)pkNb1z4f(AIus};(jd&5yhnHsC!>r@42cUY;V7jU*o+O zG3#_#_%kl+xuU?y^@u7S<<@QepfQL?xD-$)d>rS#+-@4N(UYvO_6%2l>z;U@&NEwR zZ^~UZmBh{}3UEkE4&T@vZI4#BE`x#!(C+Z} zkp6Avz*LRZ}XppsT9uvZ}7~wlDKm*5Xrwud&DYrLp>|U zovT`viWpSUv{lTMvoq)2X^`F=6UwCc$fC1KVxfH70=r5Rdook{_7^YuU(cjIIn1&* z9B`G){4rpUZDR4l>3KUL-xkK017mw2KUP^2>`INI1)d-{$5N#~l(2==$`9Drf*9!) z;(|;aaME>a8qN6?|E%?Uq$cHZHZ#Gs@~3n<9s2HWFAl~`FI;Fa5;7rhct zL8^MSY~UD=aKWiQn$yb@d@~ zQn;A&05LdfMlvh5PX|fEbUCPkbN}(WmfHUFyxYaYPj=Bmy$km3L5jw%#NA)Ea1S;9 zCQ!nuODMM0abZsED=AQCn1`G!VEJ3XRK`04Zw1v*Z0&zg%n?$cU>KPZqxG{Wc)d!F zF~{R0VOgx^k@>*jrtA93N&n{K=;Y=#t59rc$66WWAebM2u4oTZAfh>P?5iznAAWh! z=fF6$Twy2F`yxyjM!Xjq>@pT zp-xFk*mW5{b|alG(lRN2%4s2r7^3-p3`S;fjx?!&F!r9+GuB;mB9zDv6(>SFY%ZkL|c<~x)z%jAfQQ+XEZ;>@W;7Uo+< zz81%SgA}}0yiyzy3DO_FQaR1*VwqF}jbNn8G9b0;We$hr=uuY4S3c&kvITZ0P#pQh zcq#DVei1pCQxo%=n;&lunhpc;bvDFQ3USV@LX!Hf+ZzoRy)Y(Zb=SSY?F2-Z#g+5T zGP-6m`&jN~{CUNA-ug|KEs|GqP)fV}jb*kh@OybFgvW>7*x^CUvIvNlBjuLi-hJrX zIi7iVuu~>UrZbcJ?$L>U?#fl%FN-I3^3-Hr)52??b`_B4O;xahW@TrqQhVcQUu&e{ zT1~|jXF^jep6wn*U8KbnyH!H03Jw6mM5FH5DcC z`)Zd|b?^q8uXgh^rzoO<70av321R@8pz3l=T#wz}Gz)|(p0Ul2lGITPA3>pl-}Ta~ zK>DhzH4|IwvNhd76Xo-|LtnM1Yqp56ov{{h=b5DI6g)C-y~NJ@4Mi=*mFDh#{QGz! z)zwXS*eNX$wCTg3)O)YSdh-Pm%=Hw{JWlqBcQnt`dhbDfxW+1X?>9#MH#=R zP4|42M)0LTQ7}8SKQ36c+*|1B{n0hL=L9fl2^Ht98y{og;n zxACz~o1daX?}p&EZ%qsSl#_2q0p4))JX-;2F9WYwlrkJ%ZU!TKut3zlQgIzfk{mFCt2>WDfcdGcpVc06_YG--}2~2#LrliTo!(;J<^6 zC{EdK(ZhE?QK9mXgzWd)-bAFDXZcfC5~Hk%X%r$ArlN;C2Y&gaMI&+91mJo$P|&)$ znz}l={W5QCbpfdDuz3HxT|iaWy#JB1ay88cyO>vak!N3+}LQy$<@Cr9Wc8$AHr#;`0g^o54yV9b+rK*&(DG0&a$W{NXNY; z`>XH89o)sbA14q$G{Cd@fXd1C%F6n_E)0g$iwFd8cR)h{XZt%?>eLf(a1Lw2N7yePqkp;MnTQE$qF4Nn22EsOQJSH9nVJHI&~-PFg_FM&qdP0#Q0jiAw!h+jv% z?$#E0TZnjH%+foKL#Z6(X$mcmL9ES z+P{}Y8w!?X9leNr#K;Ri_Bot&j-r-7ENEA5?0=>iiKSZ)bgDH^1=dmCmPn_Dsai;# zuFPKrWJg8w-n}45`4~%i?VSeMyb1KFAXSPC@yA;y4SN7yXHn9rlyP50mld=w6$2kY zSuiQFu4B|p)7auX&jug0-jq@AfGp=J@yaH%ZND?J2~`jgk|ibcOh$raIi@?wbx`@*D=4lW0#s*-M6&B6jHo@aJHZ-gQC3Df?hCRNqzLGTY=kSlxn8f+Hyw3CFW`;pK3h8&?;dXMI|{B z!$8oM$ov`KBX7WT(M!}9@c(VH{|yEC z#{&7!3;n-sGADae1}3`yY^&av08JNnC;&i^^MAehzi$6?Mcn^GMOO=Z6UYBu_rKwN z{MXNcxA2kC5%RxBvj0!NCjarK|55k<7j)=G>nav&Eam6MHxd$utC*jKC9x-h3_f~6 zy>X0cN>Vfx!5pSxoHp^q!j(a1M`$4wpl=kYi|&kU<1Slig-x-Mt?zY=G9c`_meb{O z+pfEXOQ}-L&;6ym)uXhQN@wLK?4h*M^~amFO47&bd#6N3rz7`$=kj{sI<>X<$Cc+D z=ZbVf=p&7o{m{w`O2sBx)7H7<{!gC?I!e`snXQSQ^d7u=v|dwt zOs;q5T3h|)k+`j}tDHi!%I;lq)&1zMjG41gq;k=Ed39x%C$kb|*XKbA{(E$oRd#^f z(%8YVsUNAO)oBRjS*fL?*~8vY&aAaIFa91>H@#Z*aAcW50e_CDT=5i<-M+TsD8xme zF!F(pO5R)I(m@lgdE)8QY^YGDT6(R$+D+i7DM()j$Uq+--bo*?t5(N`lAwenCDqj0 zO9?m4RmiG~jc>t2N=ina2WG&*9QgP>x(~4^C@54_GbPQTPsd+1jnen?n1^x;OBu<& z@7-hX!onWz4&U*qwu|+*db=@H+IemZ>#h}Su)XrNli7l*9ZLywvzg&twz!9IBr16V zdpN4u^W<^+CZiD_EH(%}r{pq%rmw935JC^aMXeSfVwh6qw(Qd5 z!q&z#oHZ2P_B-_+=&UdttW*TVKbz!La2K%ztgIu)T>WvsCw`}fLdtUu5T}*0k4dVl zk#y)=3K5#agxtyEQQ{1up1BPkH^G{7)ZFd~*tlYTzh5@(4VdaQV_m;Wli%1*n4Q4p z4gbt|f3d9MLv+vI8YO@OzI`%&HHhHhQ3`mW<`wL*g^XaS@>PEuO#B+8O8SCm*CwX9B7WG+(1yN`pEABf$Dvk@$lY4&3Z6$}sL8*Aha5@dClrqFKMW)iih zlDpQ17SYE?H!9JCqVWJKf55=}7Tk)F-axU&9O*@rIZG0hx=R{NO>e!QokN1Y3%Fu- zWz-K+q3=OuG4pS=jRhkEXYdnpBs8DG_XN_rnoDh98B3e771e87b9_4ODe!3Y@aO7f z@zCjo1QyQ?)`@74Bq_J}(_0Mbny9T2Z(f}aAp=l5QaL@YP9)yL#@4*6}PJG%Pk5u1Nm>z*Sm-E#ml+&0^Xe2%;yPB+E&Zc=K*#B@%V0j*1qA#=^bn(MXB zm8eOHWlkJhXYj1GgA#GlWx=H`d6tK zG_oRh&|sWcqc5{UQ--0|iZF^H(ddGH1{(@REEVAvZKE^*5BTQM!nE=f1~(R924F5> zxN{Ni0=x3Hf7^(Kx!>32mL2ZgB0yX}Af{G$sAkGeqKcq>iV1wmA^gRJv9$i-%DWKB zyaYroB!~XA8wuKIb-}zrxT>LAN20i|`VZz+tP#9PQ1tSL7b_D~Go^}a>w(Mqc% z-qPfX`?IiGJoWCHj%O|J<0T)YID@VX>BN>>BsDn8>I2C*bp(EY_h4dwrB}z7yfX!J zs92={yt+$jPcDggrnwCztqtb*fa<}X8Qn;CBt{{BkTkh;ilB0!%W*QRX;!7*K1wjh z0!IZ@26QXab>&X4e2fWK2tHni;Jt7pSo~m(8^kq~aL>_#fSnV9+WgZoq#`SN8i-Ul zeSE=Uf*sJ8KeT+<&JEFUXkNqUBg>bIB(kEjHhsutf#=K6p?t;z_q!yWowP@7Wh3jK zh;xo{(5Ysyl(rKL&ZcOrK)dsBv6qnao#x z%=JA2OZ=>)bGs|!xCct2-c1Trd20lE5IKp0f$#E0Q=me^ce@itx&Pf0IM)g!lIw-GkhL%f8%#=(N)^+@`~mz;rC42@{+ z1l+oPVHxV}1`8$r&g{+5u1TG%fcN9PUoX8OCVS6x?DvXInbE0?L2N+^WRoF5E`}7t z5;SX}y^;~7CAT*RJ_StO*^r$&d2flf)oIBM{0YD-6-+)-tPDKvf(D1yKXlMp_gf`Z ziG!7x*<30b*M3xkG-Ve_00u-3jrwjRy zFI5^>C2@q%h&7EPCXj8+wY=k$K$k+)HvAJ|kvqyAPH5Q}tR$<>jqX1*)P;`U1LXwx z6{`|6L}CuCTS29UIm=Fhl%ox&D`C zeMJF4w$szH-mee!PtoyhM7jg%qM$I`JM##j>(m4b%6%$CV)ulhGA@G(abvKCzW{St zU5z^f+!MAIfwRxT@!7w^%ZfC}v<-w$Z<{EEP#Ee^Hyk1T{8lsa7;YP99-3fqL-RpbXL7oFJ^~HX8$s}R*scNrOs#d| zrxPF`N#GHZi0lT$df2L)@UGcB?qbpp!BOow=z#^)*0xlx@=#Rop~$<-Ez0NU0p-{- zxZHlTRi_cAtELU+kC%%yk~>zE)|VoXG|)OBBt3cf&VzZ606=^#Y&br7uGIqc6Uvqb zDyMHCSLcF=NzJPS;ouu_1tSK3wlQ_yM#COu0yqpkTTf!7Wjij5+PUJVZ45L3)La^h z#VJnSwBmhamy6Q?lSbd2r19L$3vINHEiAdk+2H@^+BPL;Fyf@Vr3{ z?{kE>78|$}&~h$xS%*&9P;$`-A`CwO%H?!bxETx-qjgJ>TEa5b&Qw@UimkNNW2(6l z_(pSBMRN*}q()Kdb<(EmMA>d) zStl>6e=4cm{ZTanT+bMxj<`hm)6nXqHrtbR-Lpq7k&@_4m0U-$h@q;LQA(_RtxSR1X8Gξky2S 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 z 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

%${qOovTAPF49Ddrb}p6C8!B!xD2! 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%0AR3;q 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%0D(*{h3fI@N)FD3!_((MYu*~C^2eCflV9@f@22h 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/rLL$+zYHP^FCQvyV)tq^hH8ol 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

L*NG*d$@hlVYhbT$u@hRg+KvPiUF+ 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%0D?gE%WKfN8t+<)&_1+vF+GqIuusEN$eGNEZK*QK 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

Jp*7M>3%O*cP=>~ zO~6+{zI+xiY&%REWU1ESQpd! zHZ6KeQ0}|vfsRvY6WNRq$rlHYBm#jmDXn?HOWGu4lwAfv1pU41bH(Rp`8TYfArqle zpv}{+E?1O{xmeeXh9$C7P^aniaxm)i{kw=+CNPx6=j*@i>~^2mM#AqcH8`Zkv35_MGLAY zx-ti>@P&_FIgFk|Smav`MBA++ZDdX;q-VU?KJqjQK+z(zerpB{S`x-97$uHcWz6#z zs85iXU+dn~@0)vqb%p!|$C_t;X1PoHS)OQb`hgr3Qrpuo#@*%l$T!lS4#|o_j=Y?X z!SIc9A=0zLVEVe&W3r(#aZZi~!<@$zm2#&*Hk66|!k*UrzuOjhqgLg~y=TY(#-()q zJDylJt-178Yq$2>@QVE&eB=1k<=C^?MTE&N!sX?V9Vl{e?G(YeJSakg-kIGZg9#fl zReAAz(Y(>y_SyN%-juDhMMhf;CikvIkMwv^-SwcG+u8cFBc?mWwinUlNYm$iV$=v_ zB8QGkIC1n^c(FBIWiMMGJ_Fqtg5QbT(iV<=Ao`04lHiSAFIYG>s#2qjh^(x5= zMl`|Z|Hl52?AqFR3qExyPvsi8p-Fq`8|Js<6N0T1d}Of-e|b+sEa2j=&D7uIW;Y*9l*yBzBkL?!e8m zj2hiZ4j0-SK*DbQkjx+5=dDrgXsAT(T=ft|H(#)AkXl?{R)j)oDdQW-vUEZ0Gk%F3 zXyAhEt7n5TQ|3`TJ39Q=C1ct<*pTcZ|4c<0RcvZbyT(<7^B!CX4)qHSpH*TOd}ph_ z{|hXQtYKG5+lA{&OB?Ui+DI^0g0kdZ^S-Tt=n5^(?=OI+#<1winPg{Har9Ybf61h`%)ZQ?*5|>*H}L;0&A%&!jV6-= z0YNPQ{r|JKjQ%>fn%n68cb!>MmWCrWTYPEG$v@~}?x#WR77Y>+1$#rha1{a#-ljG* z$@3KGuz2oh`wiq1w|$rI4;Yf)QVOG>VhGK||B$4J;zp%uo(^IndcIdaT5NqhKfYFO zzTb{U@X=M$v%)oLqVv&oI72<_d~{*S>qgVdB`-YVt}_~5dm=hD7N=?v0SulBJrmts zJ^$Xmn%zE6_U|X~Bk;Z74z4~AKK4T}DcaV)|NUjq`Fj2Q$np6+LZCR@(fdAG+1W<> zVQPK(Z0mM^_UQS1-yikp(S1MNPkikAcz-|P|FF2;U%tN%HgY0-KEGyeQc`xjKUV1V zc3&cX5L_vbe~PTN!U<`6==^=Y>(sx9HGWWALw^D(g}Tjd6Ipo>w#{oz#s}KttioAE zZG0ye2tPGrkErei0*F37KjoT7Bfuw!mdDwEMC!K&vC1M)G?GL|aeYfp>Py4&1a3ik z1tIISs^bH})ie`DmK=?FK+ZH0>q=#yZG0$cu$#wk_*tE-(NB^;d;2(>~R0g&Z-g7H=^!Eg!VE-84`p2fms8@CC( z`Zy<%SG3){Ik@C(`M23HaZ#xgx$AVAC}&xqDu5`?YFOY_gslC5$5M~E45GBAtqi6x z+5LMH!5>e`thl+-P{;0kZ_%vsL)C~Tloa03>b>%i|2jomt&`|Q;3gK?EE-;r zUN+odwvo*Q0-32xu|htyoKz`W4Q_1AE{|2>Hn2qn!uU}?5H0DNRqI3&aL4QT?k*kL zHY=OCrtn{ia;G4eHTL6oh;mYpMiAf7M^Z%O{(+--w{=>nz95W7y~oBzEBS!h>#wx_uqzD%y8Xz#Y&+aUAiA(1D=IAYbTlxUF-iL zOrfig3I!#qpZC(8-z(s+SC@rnYl?Au@xQ$&c(qPG=Eafn~dK(;f6YVTo_tV?LA(a6l8~ zr>P5lHVrtGQ&3y*-9LdemVNhu17qWTpX{x!77!-(`=nbedU_2s#n5&g^5eKSn4 zkcZ{y(aFPW3yYog02brwlV@3uLnB%n^A9V}GGugS($kZnegfY1B2ISx+8+}9w(VDu z`ZF}krj8mBZZJwPl)GGXR^${BMnM~Bsb*wK%T8G8xvyk)V16~!8fDcIf{OL8g zQsYWN<`HLAE2ht! zK6e)t7YUDfR(?*ni$x(=khE>R_v-8JHP{%Pp`^$I)ULdYhQv{4WF+hwZoN^17V;sr zzZ|uw#GEfh><%8ktv~=^jJ!j+7y588kC*btS~qSWnmP`Ah1vAd9~c2JT`2gMbe^F2 zv`uunmojq_;&v}Rvz?hfedh2}EH!i9k&j%@&TTv&FQ>R0R*QiGSwxw2Q#-&#msul5 z*gjd?qLwES4j-_!gIVuWy+$Z!=lcrFY?MdCe)W+lFWXR$S&y!R#QH?`3(ROm*n~v( zp6+Owl^GlQa?ISaHw)zKYu7&sVIh0{!*Lg__Y%d~Llx*)WRnm0RvxEy3Y!VHsJxDg z(Ir`ep`JGrH6~FuVTct#2NeCZ(heXI0xswrcywzw_K`3mcj*~#R`7F33-ukJQ8x0N z(lP&or*4gC6fu~mppX0H`rFEAg6?G)75zjgZ#luz@i>96*TVnMPfNzz_bjS#z0@{C zpW1g*LvdP*lkXXXMnRlW7biB1^kZKgd73a*ON{qLg9%(msX!D9N4ET(>Z&{Zg3=WX zZHc_U=3_hFP|h#iv+gi$WApvjaSY)F8TlgAXcQ@ahyQvVh@$x&M|@=cI3SrfS{zgB zP}yeOICuCGH64?rFJJD3R3d#1Mn3}{6O}c!Ry02USh6ue@yEuL{K*hz$ORX@IN!Bm zO(+d74Gt_46GtkO@z3RWt;5xY99+jgQgK!fx+ym5CTn(EgY9)$qkOYBF!cn7>9T5t zX3%9Ro%4lWa&_mjn$dd>i7OwgIOEFbzl3<)hl&l@cfvPd2Pm=n^x$-44GQpqt#bt^ zv0jRe=>ZPI(B_L~KIWgnBoZ3;sH2KQGXdh5H;xAZ8cGOx$~>}a&S+;9^}jCfyWHiC zc$-786*nOn??XhZQ2`Vd%_scbAZ39FrYWf=*S?p5uNk>3+=$1xvGZrgnMMS8Sz-)E z^ZW@m*o}@MM#|!0zYG%=7pLBHFdB(g(TuKUM^WRQiI29?Xw%X*I|;^GU05-|k?fWGc7nc>XmXI z7N2}MUs~fpPP-5qg1b46!U;_r%xB<;+#E=&QYmou{+LAIt%xK zro~v2LE@f-)RuBV42^i8#9ek+%(IIIqv7BafgS7ciAPkJOX2J1ZMq&3;G{a9roUNf zl14hOlO%srT?jXD!TF1?UEf&cIVZR{{hkz7O;2dWvL5A3D+8w0L+0Tes3p&(%_=T$_D|e8zn8PBkR`%b{_qcJ2P)6A ztV{@{%*1LizrT^whC$QwSTn3G_^&nrM)yd~tPr)sZfb{j`9Pwb+APcxXHLOQLdtOm znzBWZSp49^0womgXPz4&u0KroItl)=ks0d>lKw0m^2Z?Y17VXeYpBY8A&sFN;}nIj z(@^8$!`#ML+NZFsn(s#03}5Ra31Y{fX%7jgfN{CV=>rD{{kdkRkX(n$*|L-98IUj` z08xjvIA~1^7+(N_l-PB0g>!n!nW-blF$jdXPXB6&7t%7>Y;+XyMs?{t-J&kR4eZ*b z(NzUwtDb4UeGEw=-hm*3QG0iWU!aO0!Xijmm(wFZs(SS_X^!^lU*d_x4eMt(8XQ6b zTcfm8p@cfPR!|RJRJaBn7~}m%6+8kT^S@D7m1|tc@*fps8KqbJARF~9uqdGoEn7pq zY@iF#63YT3_H7mqtE_npYj-l^FZ#E!J&!ljm{NgEJp7Z1XBE+4{3RUcdDBQ^6}C1)5%zoVca0~ zg1C#eDs7$PF0pth;sl!d!!)X;!c$+I`RHbraAw?nc%=)Xxk)%_yd9WA5=t*e6TDwx z$k(06(Nt-d!9;5hL}X9F`m#IVjd$?Av^`7>f*!Af?M$=y#)dIZ-4Qn2~CrJd6>{YvhL3@>QvK(%9T( zKQ40*Au$bC>beMe(-Zr^h2zw|FT@koBXYWsuQ~|$H_b)~S_J99bomyJ74hy^eT$uUV;8Y~^+J0;SaB?^+6KHfJ_VO;(aT^G z`nOf}#aJEsfjjw9^Z1MTNJodCUZYbO~C&-*f0Lf~wyBE5O=pnlF zu0=1W)PS-7um@9uth#S(=U?>0G@T0{OvN|gzA>mK4@OR>GX~G5v0}7X?s~@i;@h~T z=_*r;Xum4l8i$$LEMbjc*ZVw&91`2>)zj@*nTgU6a@V9h)9}my(|hpm_aWjnjzlX{ zk_1PsDzEtQBMtneSg~p$YJ4N|+blVUq#b}#DFF}v#WYqu9aK~cLnNt2!eI<4rnL@& zdj`v2N!p`UXdY~hoPM6rw>&*O-A0ta|XKmW=G3wdIr6H4@0_-{YJl1AHTTbhz8 zUSFrNi7tg*{9CW-8f9kyfX6isr$2&+&GeCE>*UTf_1U=>7aw~ZVz#I2tgdYLu3U1a zx_Q;iSR+lRrd|U3%k1Fw55or@o+)}1I)v?JdZcg0FDu1)$APIGE;A8WkHm$U#+;Ry zN>9)En!<0oG3L)aY{X8-YM?zvG3?&)dt*LQ+YS?UrkFA51z(oo{W`;3yOzdxTqdu9 zrOfiWTP*hD4v-OIk3V}K#?IrNNL{kNNJ+CdaXHaQ&vyOAJ@(?S!@$FG&1DnR_An8- zwNSsC#waOYNdGFfPZ7xqoy{H+IgTWl_QE^nywxCHxaV{xAjQkjw=iDQi5;c{C4bC< zsoiAdJ{sE@^zvwUc#^?(ev(fn=tALmmB8aT=y))efa9!FtoCt`oodrQiI785oI%#L z_O;qDBje`&Pnc||Zx%p6?Y7#I(!JQI$x}J1z6i$^&qzZVL3O*G6QPGQme}?*s>uyk zGCQ5F#TskX1K%fsENGWAoW3l*t^G;j9-n_aK$Ik^E^XFgNj$oH)38L6 zrwXv}&OD!UOhP6s==iw1rC;)4KYMSbvUI_^rD8ywgGGhP#OVL9E3-e2tsGqWcLH`WwV%rZ>$&Jvl(#^aW*61@dnyet%A z;?yeL-3{s6zmyyO97`S)m!5{?^H$Y`B*W^1G_A|a{k)^ZN|vqi@+58w=yQ5~pXzi! zVPP}PYU@Hkm$tg-ss>7$tYqgPqQKh0Q*wHh>^rliy79Q=HN)hWOyHe~xDfmr2H=@5 zfYsfXj%M5Jd*ZMzL#iP&Q(v&l`u5sT7fv3Kyu&2D3i~%om=i2#8{;m+uA(#yN79v{ z>CK4*9MK z*dP5JYa3jM?!)K!M}k;s@$t;t67Fqi=cVLL#ksrszT(_U=SXd7t^Hhe$pS~Xb#co< z7Q7-S?oOkHu_0Qg;&aKp-2M7106kYC-fKo+SOy4SHZX&FSm#!PMjImu+USwO4!*bb5o3oi`=)qFfN<3;{_oV*NxaJc@zarl4Z z^8d!^pLjDbs>JS|H37xXNcPOnlU~VoGBVrAbpl}R)cXJD9l9K<%nGbd&pzn>fa-Y5rEFIdzQ;?CfX9d1c$EnFv+yn1B#g2sXpDTGi;x3>6$8Bs*Te5}GEgDJv#}}Z4(1iHN z*eD?1h1RR;b>b)QdP@46*}*Xu+C|#*ytrbt1aZy)gks8WyOzrt@_GM6VNvKcl@p%O zH%3IGeqV#QbeTuOl_+QZ(JiT8tU#lP5zDBi#G;}}+k(|nQ*^_cN$ZG1v|FZ*c^7#O zU9E#mj!_l;o=-N4l=iL|vv zU5i*QSG@AG@7Hn|10*DG@#5@;w^Y23#b^{s?&hAOAuR+)%vI>eRAxRl{ zj=RoChO@ZjkDyFo;nGTiuV|B$Tuy!-5W=;583GMNbMB~##_@3t?yFZ+^ljC4^7$*) zHXk*v9{=A+y3;s+yg_QaKvD9l%s!^Lc4q(4kJt-|>XOZW$nRe;c(pxK>?Y2RW-M=^ zv4I`vl1Ha>4I5gbEq`3>9q?uPNA68lmR|$>!F$# zqqAv=KPy}D3y@2Yr0OiDZxUs^m&bHz9B>2#k&-_f3r!#y40i81p~Lo?+EiOUN;z@s-T!N1i9Y7PkNl) zNRt&q#qM>0Ea&|qy+r2XrieeY_320(Xij;N!uIGzMegUEZsU-Pd5 zbA)@wf@^*A^){XaVRJZ@R&ix#)QtnaLSkjp3D*UT;Cl?NqB|E;(ggtek~djCZW5?keX`YEN&qEY6gFUi=q3iqQpVdzUXD)8Hn4nmlH(NT)q- z2zrSg99-?HBHqttNme3-HyleldUhSIf6Deeo$_a5?D)|?BcYe~jy`v7RQU({gx9uI z9p1#NHai zAKp-4d|N<$ciOv>_LqL05rKwCR#=j?xlwKB+`f<-J=eTAG0si5vh}S-fgbyu1n8LR zT?)Jl5bNDYi?faBS~AglWp;y@wOT1Qaa_vQZx9z5veHlMMIfLwh^Z>@QsnWwQ;Puo z#V0MIQSZGGm*T%UJg(NtG3juWZ@H~-^RyIjh;ZE?kO&kj#3$WbAQU=brp4Z;lMwN9 zqTRr56z$%n;>)YtBCI-O-gwyi0HadvmlNt65)9g9AtsUO8}?YAWoml@pHK(5+((Yvn1t6f&aji3S$u24>aM%hfdEJjC;(u^xh@t&qI*b3#8IN`||9oRsMdcDx?@otbNIn-80_58%jhK!_b z3&C=%C<^eb$2;Ko`l+7F1~Z{ zQ?>s0%lnknX1cSCsNR=gJZcek)<7fu(IPv`B=bBTLhT&7Yt%uF8RnWWo|z2Iy7);) zc^a-+Mvro<)1t~=WYj8V`~x?)Ox&Skmg?X{RJR#I3stY5C&6ficEC^`a@~!y#}+-j z*D@kHdJV8>P>S)T=h|@o^x=NT(f`=kv zuAN_%r$kv$WvdOR*~UPB?%kaH3puqXXYO6`53^5XYWeOEeN20^Ss$lOOBYYV(++%= zf0ZBJKVe{IMt~7Bey0XZO5v7b$fPl?2Md7uOY@=yNP)Tdf4GPIkithNA&{Yf*#5?hr3MUHcG7Q|Y$|*COJ%_NgN-8zhgs%cgRJ zSgfHh!w*>5Gq)(ZI1DfDydklv0lFi6(Z`dC^a>4-fAC4Ix>5kKe~N z=%veTx{bwZJN->rxw}B0@G0t%+kMSS@JXt_X1=ffOmc!vJ&_@yKWf_s{Nrcdxv5#f zbANk!zj*W;!}=e_-Z40|pj+3CZQHhO+qP}nwzFc}w(Vra){1Q>C;Qep_tri??zew+ z&7M80W{>Lb8r?m{`*_^Z zZsqM~zv&z@AOGz#Z<;~zw&!#CelJ5W5vO1DbyjpSV%MtoxbOtD`4i{k(z9myR>b$h zUK>9ZefahSv^vH;_HY5(`ZIH%_yjby%ayB7@8GMi&DW@B@qImVkLVqD@7d-voNMfz z{Ym_c^OXTUC4Sj)>@LSgnnQFu>3)da@T1Y2Y`*nfb$`Q~+wwz^mviX(5r6e-Kck-p zAM(8NzOv7gr>;5YXZ+2>$)DYs-SVE1x9AId{Fb(HYR^h<%eMw-{A>14r~xWpB_qnn zd3pQ@@Fc${hkYV00O#We9kTBrZMOsS?~WX9;3RicG`ealsrHUJe;b*bkf+$oRu_ab zU>LH0*ZU!97T`&(gE2OoYZ2N>pX%Q_@kHtVHtq2w&a=ZN%z-`o5Bn2HLOo{hR3cev z|Hd8|HW#W+tk&hVPK6p8Ocj&K8PJ*ct(9`b}&E~TJb!){Z#=&aUQ8>iDH zXuEzlrEqgp&lD5jzG(=k(yhy7lOMN7-j~>|fxLD`lcJn4s^IBUm~4{uJ(p)F%5*Xs zuI82HM*;Ot^RgD9rx>9Ert`uDHxZT6A23~uGpS!2@rlu|QzfRHzte5B{#I2hcX$dYZPAYcfAdH zdpfMyU*5-s?YwAHeEEjr&n`pHtP4z@NT=_NwrAD1w9PYz~$RqZk?Q1Yosy9D5jx-{#z z#T)g4jb*UK&r9TCsAI_xQ6-6&C2S9F2cIL z44#w&VIKg^vPH0LFkzp#=y3n&Ede_wE3_d|-{kIrxYgh(sZ8RO`H}{hr97$fh;y3bM!ze~BGw1ZM^#%l?zK?I_bu}HFOS_#u@CLuzDJ$kC_UT- z{`Cp^MC6j`c?_(o`M0b-0@j0$$w}I!Y3J7X*>XgjSW3q)=-ci{Z{X}7-`$Aw5Bw}K z{c8Q-^&VcF^X(=rEuQBz*r)K#N*{~3 zsiqWFw#@~?|Jaj-wfx)!Zkko+L3)Z=ogd{UIQBgWblX8ZC=?znIhRg@0YlznqeS41 z{(w}_AC02XOgqD)_#J|kdCWJ#i)e7M*3Ee&4HIwSW z9Yu?r3amd9TFu|!;}7i~qGm7Ni(?MIF1AlwWz*>M1#xxX=E0Y+z6ELKuUIcg?kiFo zoVmKmaeG|(8+^~toTEc{e@gn{@jPFM#l>*=fA*V-n_F4W$xX(3-_P6kh*^={XY{UX zGxqXCn@vnSUvg8`K8w5Mt1XLq=;!jE?WA7&<@`l4S#K8@9DOM~l36VD`gy(lC!+Mc zArWjo6!rKM@CTX-=TjN}0QQEmJs@x9lrezn1kSI%hOn=iE|#yb3iv5(2RchzAbJ{A zK5;tH%lS)<&YBMek&s(+sQyixw74gE;?EV5vQn^|?uA!SOie-gDzVJ`a|qoQ30(X~ ztWKaLbv9h^1^p5402Dpf4+tI__sHe{m=j*yKg9}j;W^zOez3k%lztJ^toX)M;Z@H? z9rSn|vmhqq<-YLJRN;?`Jq;r~4(C*L*shplEBF9s;&im--F0K7Q)inUt#+bRu$CQW z2Rhz3*6pUaUE1IFzi}k5heAFd&tq*j`gH!E-(Pbhzje_XSLV@6{xrQm4}Ef8+#~ z0xr+Nd4RIGmo==jdF9Jd)MVoWeZ<%bTB+yBL8?H#E6(W0L8w64c6oJC1O)m?1RvE! z1v1W;R4mSt-+0I64TF_bAoyEkHZEAZ=R;#56TM9P<~NHN_nwDIX%il6W+1c*PA}df zfTb10MWJ8HY?p(ZbMksEuKDpi!nBV5HS;VD2%|wnHgC1X^(>2pI8phitE1M5w%2JM0}T&hR@FP8W8)tEW0!&^2vsxr^4R-jy|!j9`<{^xz_hQ80UBD|NQ z)VrSY+8j%$s5}6PMg_oQwcoEBDGF4NB_W6400y9bkfN|6QY?VDNN=tRtT4$N7NyKp{!x!9fu3@}Np zPza^5g;-EOAZ8aaYpFEJI~`$!yL2@K5Vtp;0Z|x4wpqMr4U9#EKqTK8I-)R$Tv8dZ z4OnOdxT)wj|9_7F^ev2=@`MHe=)?yAp!`qC`L@>oB~1ORHAm-Q^ZzFWc%`ZByf}{J z*Xl1y3?mVFD7_|(DhUH(M5ii1k-c5X>*(;C-HlFnI3kflBU7O1_8!r(IL#z=(QF7Pd%}Gb+Wt z#{v^r#!68T+KDCz+~Kzjbii1wTp>7?fdz>%5(wavGrTG!N))h<3O7JUbcKf|ubv>qsKFWj=OXZ}K@F_Bad^D%fhi`!**;Gy| z<%>CC0dz=%Rl*b(!4SLXNyO6FS@20EF!wYLKP0$Ug^kHd)&S0To)sZM!H=2=p~MJG z6l91aQGi{oo>ClG2QuyRv`j;lf*1!oA|h7(BUY;HkSU9DL_j}5{_9i`91?pDs9+2$W4)7Vo$|k1p1HWr4{ah>oYV;37#bk`aRXB zf-p*1K;RG?4sGelZkpyI4S_Z+PyuRLWZi~B1=qxCx_>X96^sRU1P87x=8Nkw#*Br; z5QejFRd6d#Bq`HC_-LFjQZ>7TWM8bXYeGt;kU1xULO@ioRDwd2%5H?>Fh45xj7&}e zLR4xk zkgre%$jP!Jj71C+;t>R~z%qx5Q!2h{c^${9NV6ZpwLinRrD0b>$RQulf0)S$f1rq~ zo8#;AnEmDtCx&+{4DAD-hYyDcd_KS!j6r~yeEI{U5$n=`69LlMq<8+OBu*@1veCFY zvtQuH?Z0$jB>$`MjQl?Zrhln)K*%eFaX@wi52RIVCL6Sgx#_jl3BEy23|?R7@AkA? zlo}l=$iYv!&%`ZkMdgn$5;X!Kp1{1@LwQpyv7%^^*jkuj)CAxpy~)ExC+}$-H)l-u znq@#+yF8)BX|>luyEqq^)5cycLcKz}AMh>wI4zhQgEmP*cSbZ{9?Tt>uH=UitA{s9 zJ)wJn3;aOSvm3BuM^*C_(b^#VyA&3_UN_ss?Pulr`@B9Z2HZGrzqtP$p7i**L^}Rew7C$BCdJ|NDBu1`ri!Dmx3ySVPe4jU%Z{b^>R?q1K)hHv-4+(mgGq?qg#g_C z{JZKsb9{~gx9kyvHZ&w{P0e=H(Y{R;ZS`G=48xnwaY0fKC$^6^G$}?JDq2h#==~45 zZFln_z~6e5*BYS#I^GJ_B@y4quP{Z+WRG}j4=i(%2~`0FC5*eRO%4|)<+QqXpr&Qv zTG*Jy_CaOqI1;!?k76s?+-A-KYYqvDM(4&4ITP9MTZn$fXANNdjU?{Ih@6NOCPXHN@55x-;nM`o%$8D~XfnV6#r!4eX2UOnJNjv8D@K{rDqd7~(P)u|> zMUAp13$u78H{3J=zQA$Hy@X$Ux41H6o`NeBs~CzruFT?d$AF#I#<`gA4JX&R+3rQx z^%44N*T%y;-utevUrPL5_6aY$G4A^bU%KAS%g)~YS8Br~C}1VlqbJRR_UWX}SIqC4kNrVH}Sb|GvH5KAzx?0g^f-8_vM76N=oKPp~Q9 zKn7Q~=j<4s!#8x0?PH!eEmU+XISKs_7245T)d-LtRPsOCqg1(p5GGc$_B@%gkeZAo zIA8)Y)1BpD$G75a(lPLqJZ4M~gQoQazj6JZf@+GK>FQw0K4?&)SswN-<&VM9Z8u)G z@7o`Adq3>k@!NA{=-bR5Z``vk`^#_P@MZXOdyhf-^t1f9L+hMAJbeMz>s`^kcTkqY zf4eBmp=Eup&CUY0BrpSHyy7@Ry7}F39q=vSU&=Z6E_?=&t?+Q}%yhJ@H2e2;Zv~JK zfnj$Qcsu`k^w5C%D(hFWq4j1$ZDqGZGX~uU&5GxRd?yGrv5vIV*-(`mkT`)(jDWP; zV2RU*XRZsdQnB@*-Y9n#%@?bTl~9nX#%X0~QcLsFgho&o)KMl-CZXG0lZzgRAZDlt z2+rlIkX<`Ou?1y~5v~v)y=a+GWyFROaQ#eiy^>trtkdd9GV!vq8Klk3^Ga53(fs|^ zVBssEXOP4`%N^rxE4PDEkb!fiKt4_|_;!Z+6UA{=#=I{>0I0KY`vBIi|aSw*`3Ok4KMOmi|TE)^KvPAoT)@ z_{>OYaegcdBpWl$6+)C*yckC4b771f+2jEh?*Jahyy&Pn_|zc%5G(*$LwUsaSTQ(! zD(H8*XU5HhgoJ+*Y!ik(UCDqB>f@asy8J->q-z4IXgrUJeulAm_<+}$z{SKlCB$C> zEFZ}~Oc9DrsvHRJv+dB_Jqn-G2DJr$fJfT~7i>O1d6@ggZH=_`J+#42q`OziyMuB; zGy!kamJlA?7ZTOhbQ6Q=)~$@Ck@>xN6^tYAw=Z&t1`DftUMhdrYTBHZC~0J~D;gx_ zn`OFTN3;2Kxqdi=8Xemr=3r&XjTv6KmDVQl}F-x1{BVir;0Ol~kvT=4Ux&eOb{#G#3BoT9>VN_qc zh%AgbV(wQ;ucZj6qiFRw!grd~W!Mb$c2%97%cqa3V79_E_X!+b)mk!9I2ZjBhnNh2 zVcnZjbXjbBb#C3M?O?Nf{@)^NqI_F~&%1M?k-2jEC?lKOf=^2d?KW0svpvr;wJup^ zwCZBqajec;R3Qd2zG2nG*|O9?wGP_N#ZIN6{ zS~7*b{A(*C{HP($^utO>rEhV8(JtnETmyecB>~=_ojwZy9jvsR6~^ye1!`gVj}KAe zfLOtB?$W8uZmwQuXMt=f8KYDD)-pD_fA_ahONTL-RO`EX zoD1wGb9Y-|@Jj z4cb)xhY%Fk*)weUP)aTFD$(ac%UnuVV!3rk--KxPQ{Rtc+KJ~Hh$HJJQG{%XnS7PE z%lui5D~MZnJR0F~q8$+V?oNa56;ps=Dc{eVJI4jL?x0s~>3CYz9hPmxFPqwy)v6tN z<2X(bqp;}F)QO{A3n~k&S;1=!(`oGd(B5zXS>j}d91L`2iO-|shI~fKIu%-VsZK{o zZKzO1CArXb=uGik3TFB}$a^;!TTZr$QA420j03+abzK|}x`wup5SyhOB;wQf_??wU zieoPG$I{t{tc`wB=`6SiSG38|NMO}`b7RVmaPJ8+@PsSEdJnsM}( zIT*Q!KE5_~>GA6NuNQ$G<0e_sZ69VQx!Epr`uOTuGY3-`y#5@%PtV(9*KyXJ>A!cV z>UO73dGRcaj* z)BH;8ogw-ylT}rPN2+=Vxja9h|J}D&xg!ih`}OUWXaN9N|C4Y3e}uPeEbUx9^#5nt zXReuw&YSIsV|f?y1!Ha-+}gz?(TfwnB0)&jNCpB*t?z@9$ywINNbJshbIrTG8c5Iq z{eS7@!uWxQjT*XsKyPl?cm2ITb~i6RUhXzmSATPAJ`XpKzrU_tKI-c7`g;7|j=rzP z%69qj-S}nY{okLSzP=YXUp`(|>weRL-rjcIUtY4pj?$%WXELB`HRhsc&RWmteTL-j zC)qn}u*jnN?4ddk8+UID&u{i_zTfL!>UMi=ra}C($lAL;?#>>5nKfUgMdtHAAD?-v zZTxKhy&uZ%7h)q_xfOm(KeL*;_S19WGee)*eJWpM-*5HnvvblFx#K60adS}jo?QI? zYN~S;CtYtHHXQ^%e*FA%*6WG>{tSmrmAi^__%pi~=p<;bhR)e}tEu^`=`(ZSf=C;D zD*-%xO29U;pbyfDlt>Z?33DN^ECx1fJdlzYn!wyR1)6{{sMcO^uo%p_I3jHfUxUd+~=VidWqE@?xpbTlirsj}yIC5(KPizdVkv zIG`9@k!}%S3~m?p#Km7ZD&?b~38a40=cNwdy@)K*sK!cT@NG%St{M2`IyEC=#v zWam?i^UuJY=pIIuA?ymfA{9{eR1WU|MitVB+%0CFeiOiEU99QcBzO)HNO52~A(rbI?#uk1zkk8{xbQcC zaVb@<1B(G~IjCgZy#(Y3J9Dt&jtnhNFL<)G}WZeyg74|WkXz>6_C>7IcnatPKvcE zX^ZwY5P&-21343`xkk7oVMO|T|H4sq8qPo!{dHI&h$qX6UZNe#OH3By`^dIRo&@Rvr=_0FB7n9gA zk7f{$0+?(F2=n;Q45<W>1K*~`+T zLsG~QJ#B4{+W^A@#0P_b5LwAX?Iw`M%01LX=840=gKN#jhzaZ%{Z<)^e+jp}N(fT# zTP+WKs?+~roQ9?s&>M9D2a4XH3~Ql{vl2X)53e-itc+A@lH&E8=TObIwK9>Rb0cPG z(=N>df=10t+h$jB)Yvp|(1qvrCD=zT-?>mp(rAM4P z@iaAq6zwDo26&Opqt-f?C&N^YEZqsR%k_yBiY;Y#tg22)-$p?PH7*YcT6W@o4UA6P zf<A$_T;WlDn?Hu-mh_3n#D7)9U;)2;Mo~4rqG2!#IqrA=iNd(N?$f~ z01g_#ct;DgpEr?arVDuJ_9&=f0L}H{g;*#61l~1k6C$Z_q>wO#G*nbWSK5P#1Sv+X zE>r4EisTP2aHepy3tZw1&?#QvL&TIR)224{qXzclxL#OcMg~RpH_;z0&c}(?`m6g0 z{&w3roscFiU>wLuM_^usjqPggUm)P%8j4T&))$EOt1@;z4JA=a)l+J&yn&j1McjqR z<<+(L!3x4?sV6PyHkVkci4U($GjO0#_ba$cxuGS5h}kYN(m1oB_S<4)>;dp^L(sZ6 zsQt>hJ4yBW?yw!h6J))**qAiP%3@{36=C-Rh|RRi2q8D-7S zaRn)A!BiHgZ<$BSy>p;BK37IY(?OO?98 zvCg}o7_owdRPmj4G6=$|pjDeYP9Z{c=TW)RsjNB>5p+XWcDN|WWOvB7XB~b*b}>#d z!tptlMvMh0K##x;FOU;W0VRTRwZ*G z$WJGFc4(TRG7%u4%jwT7FcYNP-oe9(U~GUMXJ-d!=xXY2xRj%p)PWtT zII)<&4WrUU{1<$6U5EJgS!s1b!SB8BFM`Ljd@2F|A4z;2TgbKpFHu!LZ6vv>Iz(?C zSbCmSs<2QiTHku!66?pzFo!lQPwwA^ZuKC!*H$G zgI1gL@6wF1!LpGWDF6$CpND|nCIGT+H2yZFsQ^5aUO3z%9)(q2Qdb?oz-D_!O--<6 zYvLbwLmb%ORArAqEnOf?eyaR-<|Ln_x#Zo4WnmVQ%(lgXHR>i$2RYeq-%!gpIHN>iPNVfmp+B%^)A>!0hJP zpI;J!#;|{nOK{?Q9?XQsjE^}JGgj<=v+eIYod*QXqT|kM+@t!*cBshB3H!jo%%rqE zI@#9RwcXU`_AX!k%F1s`jcYwv@+cMsvM4faDf#zTQKnjyimJG=`(pA5{AKw`{*qiO zSruU=FX5ulzL)f@aW^!i^HY}VrsaFti&-5&N~bIPnzWv0UJR+Lm8#Xpqq+ste_+Q* z-FB{8HQvZl4%T7eFrJ>&2j*OPh@ zt=PFzuLmZ4_2>`v#4X$HhyoEmp7q3EZBJ0SIa1C`9&}%aN`I$g@sL+n`c5ALjbK<@ z*_P!?AbgkM3D3HkdSX4jnV;r)18hGD-yf?Ny^f^PUtMh@>@P|E2J+}im_H}g{{%_P z1YZ!sZ0zCi-g6Uyh9J6V_u<1P8PJpPpgkB-Jl+Hp5?-^H;`Z8qKptihunbWMOuL^H z4?GBOItRZhV}NSJ%d_006E;cqX%y0<6u^TN&fU*@^o`P&fRPCyQo@7R3>yKOydJ6up~u-Hx^!gj6at{99+I91vKgQR zrefe8$y3te!UY*q0{OJFaZk(-k4*LmYCC1zLygx)Yl!WE4U>e)L(W8ceaiGpHUG&1> z{?Bv}2KnDEBh${x62~4M$6bkat)P#qJr{RW@J8c`dEJ4J1Q7sCrk05(1mrYtX>f-q zJsq0}qbe--#9o(T$(HJv3O`vX%CH!tNah(Z0AtQse)T07wYY%JQS#l{1U`l05$oPY6Jv zNk(-Q-CN`?W0*FxF^%hxjOqQarWkGlo+A5}uee8IQ*3_M4A0sx^PiLd2j=1cq;S9W z$qv8^rLvzbt=yUSp2P zoVd(QqeuMURQAIp4zGg#DG9*nFY}VmMGLi~j9%n)2jjNSZG8AGmjpX@L_s(AkKPt~$n-m724pB^v%M-3>hA zkiLcwi7gy#7;o5aiWE5*7sS{8N?>~)y}DHS$q>lrn_eb}(WUzRZ#n3KFkhn0ghWJA zO`M^aeu$jsjb1@C&KW)~3b)7^=1!8_^u}M93rSwVRHNhy-eQbi#~e$Mc$`J%iSwiX zDn=@%iHu6aEds_--d|4V0bqzaxH2kitGOZo1TCz^Ac!i{`RAEiH7FsAt|||Q{R&n% zquAF@g<%mwEe*E2@vaoU!Z1sS4+^*i$?#(5NkT86hSLo=!z3qV0&b$t3`QJkFT#3^ zu6x4p$TDVd7`L4lY+!%M1$m%Ds($p}YkeYBwv1_jMU;=UXc&dT?v_$?G9AV6$cFMm zrjKn%?r}~Kg%=wMP<4&#SI`-4BasBlKsFG4Vgv>7^xB7E&XZv<`sw-VyvQn z-akf)xUt=@s9B%SKpf+K*$TTtMm)V0jX@JV{)Ya_5O8O$JSI~3mh+V^_ULRTtaXg0 z7kW=?&HBByIgpk5+uBS=|H2u#pKPHPza{Wg@CGE2#1tYD0}}&pKv4gi<69^5`PCU^+7r$JHb}ro*_tJ(oAj$roHnv3Jx%kw=^$;E}H( z@9mPf`O`RhgLiuJA?CHU|JFM6a1Tch$BH{CzfJAQq~O&^i2tWZX!vMZJ1sMFOMVuc zMQD3F$N5FjTMKP#nIROmeutRWAw541iaB9Wt9F2>N2M|V(_ z4B%MF$fkP}Cz+#KR)Z$mLi*1?A%!?mvICnqVH^!Ioa9v1B0(?DL=nt$T^@p17 zlzpyM0q?{u-n#v!hpYm=mozkUx}}$-EfL`)Rb`Ei%c|sGKz5da`xy+D=X^W32~KhL z#mKl{edbeOV@-DBqv0>2TGL%DpJ8E(!XZbd2}6%e125e|PfQ)9dRw=;N? z#5RYs}aH061<`T-}gn6j+1Bx8}h329x%hSt@XIb{$t`cAjB zR6a(k;?6Y`sP9C9lC@WRLt0)W;A5!woe9BB+Uo0NbPkenAt!R!u@%Uc{b}j?bFH`1;8V$mpsmq;^R>>lb)Mplm5AvK$ zmuG;sq(}ioHN&cMAcs*kpZ2U9hjIBILCn?(GmJU%KDZGKd1?DQM9eyo@on{)VcC2C z%w4ca=N@qTP8iNxWT-Ls@SsR2mnxNf2QwVvgW@$}=(wj$@?Ug0oR16rTp5tABbFm0 zgLCVs0`#JLGpN80+N4dqyhGY_K!`;nusitC467&|mCCjgmFz#OIbcf0gtI|kF2J^> z8~-??&zsn2XgoX-8z*s9f~LZ9vy|--AcNY%Zr$9FIySwEedqDHbF^!6&$^v>m3NX= zM>NTwqMchgLuE_+WMJOL%&87y8O{`mcNmjiO_Zk*lV1zmEzCreUy*Tt03>~2x4hj2 zB655(?Ti=*P zKeTGuLmNR=-}Hfu?|5W8sYvn*i{VopPJT!xrQr@5AG=d)m3AT;bKoOsbIN}Z1c+T4 zaIoi+)%h7h6)mbbGSo^^N6y(%tg%d+I=I*9<}zB{Jg!x*i`%ACThki~3VY^#1*2({ zas}whOUXlV8$&r41u+JQd|?dqpN%0cx%Z|{#ywL zxoPtt(-4Ck5UY-YF$oyZBbA05b*}uZ*0q#)fv4XumD3Ew@FeSlky`~bctqSdWI_utf1Pc za|G1sO4N=l)8_khd)=gZb}dicb5#81c=eGdTq<#cl_w|#s(Q6__t^g}p!4*RkFqZ= zHAjz>=ssvEop_^FpDN=~dF>kyeIU;CSY%;(j_~qTSBa%3d1ML{S8;TglvVM}GD738 zBvyqaq{uZN<`N}kZHW0$i-8A3eHjU9pKD0nRj}Vqb-fI=_alNoL!$Kc2u9@aGcI-p zQ`4hQz9#C)E|7uY{jFY2M8{5O+3l(nSPQcAD{uN;mXQWg?NI9VR|{z$|uiK(ww?d3?M-;n(jd zwNLC9s%+|vGq+19GcYjR7OH z>*)3*ohK+=r8Y)5J*sFI5)k3wQIdF07#rXSLOmF8b!pEK7*g_LTc+#dOQ#X_?RVry zWXA#Nr9i2`Es%w)V_&ik1P(?i5mZbQZYmN!?j4~)u;pAyWEL`V;clYUK${c;RES_! zB-|woHw4t(^z!1Ngx*oAAaLP6WN?(RBhOhYb;Uv=L0 zJLNo7)H0g?j>*W^$+7*puO~U6vK2-u65#q%NMzh`386ZD&lVCa&`iud&ba;Jwc?P5 z$QN*+1sefPB*6wiEl9L6#+WEG`iLp1j0Nk$z~UHuvJeM%hKebGItBKw5+39>6z;&u z@P!}Znt7xWiyvJK-zZ2Ev&cttue5+S9RtoEB(BMbS*oI9VI<<2G0<0}Px29dJkf)6 zi+A~g{*gUWMousOlM^rY2aOXPS3IYc@EYaNM5#MWu$S`()ID(hij(X%%!rqQ^!knj zy_xhj;~!0^-^jlw+Il3gn;tiErVs*beNTBh>wiGjlkd=&PXx(mODA zRIA8ofsgCLsrVjE)$LA!fa_!`p*_d{~JRuHDT1QjdMFK8wyr6NTAxzYmAx9+!LS066Il^9Sg4R zh3r2ax=0g53?C*ee}5j=hAMEwEU|g75)e$6JrGzA1!!u(0{>iX1*SFRuO4E#S6)c@ zr-H`1;J4mVg?j|?j<${v8(?*!dy14)gZI*u)Q-2PVRR8Gry2UO6*u5w?$mQE{S*6P zkJUdUB)vES5vi?@6Q@E4AAdA_9Y?W?R>jbvU$FzNHXPV{HwG>=TsR9i4gM{v`h^$j zPmexZ1%C@Cx5a!54Hv%?%io9d!^c*!7Q?+|VF%Ud7Q+Q>{GN(=`3rj3s4&5F_$ssh z4Te*5{4bpXeIFHUE@+u~b&WA$dr=qNmvRxeiDIqO3zW9%IWjDVf2o{y*t2+jsbwY& zCt+!tm#Lgq=R8FGYPDn_8m_yZMHW;W^=?e%Igcao9<~_sX~0){h@wiP?!fmPS5qI2 zy~jY&7JaNVHOqeUgDJnK`MZNuLC&M>OBW=pt;E3HxL#QqmQ97%=s|uj?L^ZEUXw+Wj3=*&u6K3Z6ZMyij?@NZUB z?Z>T|+r2GbHx2k+JZw8_&EI>7_DA5l=+30qGQeeA4YshR>ORuiNVmG_Dw*)>%F{?4 zDJqWAJ(x#ge#vUirqYijcZ~%%5RGky!FF^oA#`UX!U?Ccw=Qu9)PSt9;Fj*p{{+3Z zO>FB3%c^f&2RM6giOzk%!Ns#nuewzDVZ%)znMH`I(->9M|;WBq{a8ahv% ztGs&F^6a};qd~>~Z%~@#Pb5I?FBaSb^nVa8@V^6r_0612O^uvQ{zsH9TNPRRO$HcV z@xCDH`T;rSlOkO<`0;{^zeF0Vunt~p6%ICBh*r{pB;Hd|-!F1UCKT^j0~8uMjCbqwWK;rX2hv+dxbOuC9D)nt*RiwpRYbgsNo8S`tWu(jY`>MB{W26b#84Ir?PF5FU_@ z`9sU8yWBlZSaW~&mah;&ox|KJ+Z65+s{s8S&ZuWw!h}%26S;FnLpz1cwIWmonp>aH zP>6=9Q?#xWd+g5$QBe>mo;k53)&EA3JGh9~_7C-()=b*7iV@o4p6#Hr^h7tu84{5+ zHl_;t<1PX7UT_2`wfh%3MlGD=K?~ZDD(=Rqk)blxL3Lv7D_3360$pssKp|6ci{S2Fdfzx!_7i4s(ii6-8nr^6E9 z^RRic@j*=gd|x%!j{2kKd|cRBRi7|vJ9zapp|*GeJyW_+)+9ycs^(I8-qBM(E+KEf}z z_S_s-F~k*buHL#UiNad2gt!SZ6LXX1-bdi|luP1u^2T;lsSgzpwPdzE_0AvdsADO} zUq!_KevEI?oDG+T3IK2>|3C1{{?Fuawzn~KvUL6re%UgQweu!NQeKUI;J@H-7nG4_ zlOE1F4tKn<+0GS5okZVtt@J6;#DrmH&|3(JsAskx-!5$UBqYl92@`jFD!gQX_rPnh zq6LfhWokE~2hqg1(afux>u>NbJm+V<#={D{DWRt|$27)swd%bnbmrVgt~$L2?2!x{ zCSEyIWhbrS>=CAY7(H>PQRo3=HjVm-uND6nr8Ch{L@H@xIsm13;+X@9dO&kwPE<%~ zP!=aQM?WX8b$-(!mct&nphr_QR0)#;mOKE3G|GcLEXhNTV$3N?xOm8Dlw{GQsB(=x zo`f>GI6N6vX;!#cCelD1I9RR5319-TViqetxkJXOA|Xf7&u%Z!?f%w)7l<_+$AM^x z2P}S>v$K8%SIU;0oFwGhMaYfpbgF~YU1i038OsgoTx`=mO!2d3cm=ke)wh= zt^h5xOwgQ~6Dz_4^~AJf7C*T3e{p2b20CKi?@coKu-)pUY+63QJ>E+A@80A-5O2D6{lb*^YK%T@v$Z}6NN z=fqq3={`N;W>4S6_0H*birqMC`>zdbq@cFVuhqI68E6P3tTpn46C~!GI<*zXd`a-t~RUnQMcf;W3~ zU*|MVCs}9;q!DtmW@)HmfO(C?k^l+2ws}dc+3CaG_j7W(FujL!UviuJetPbqZid+} zEilzbsjI;B1kvgB-Rd!$-wr@|FlF&HyI`wn_v`9Axw75#y->B1>%)v!VB66d*CrRU z!8tcOw)?vHJHpq486l0iPJ{Qv(F$~z)y*!iaxm4Ni!!H$Cx?=nSXpgTTTN<8V-bm;g=*#!e8jo~dNL*GvNEhqINT zREFKMr?}8{`rr%~S?U0%%j|%4-QtZ6<+k5xR6&Fd&_7VufO|UCHAwVl_xh-&1bU|2 zx>OQi|bn}qjDtPE$S12di$`y4r|Av?PCAi;n5q&QyhwCZoaG>$*{WMcw;s6hGU zzg?-gG>QtbA+~aB37y=+hp{>pEF83BUDcWgckwzXlVpf_;qq$Rv!)*Us-xtp$DtRn zJq=NWefq2JvOE;_jEcuFYT;q;`$6Oi?lN@UJe>itqb3s~vYhH~%8YzbAN$H5qZ4`z zyhVmEYEDej2eb3OFUnByCJNmO5Zk@TN8~r`P7oAIF-NKTA&1@u)4**JJ_^hXh|dsx zx0nQyv1bHK^)8yxZDQNSSPyN23t&m0SVE=p-D%KtiNZIh;bYgfrp1(>w*@s zRzFaw2r;vZ6t>+ISlW#V&|S%7xS94n02*C~N)-uQMBInZlP?-=`yqeCkNpb>=O}P0 z{^+~XiW)i6;vN7PQa%soOQ(~gfI4R#CWS?0b5{sy^T<;vZe@O@?m0#Rq9GfxNCqnu zl=wvSB8WBW3y04r^YC%k!jb?}_6yo$EO@5Uh|?G-6c+zmEQ_s?BU_y4FNOATaUEkdHp9z|J$>ZD6dAi}p z`60dZ1f5@r=#2zhM_x%1vz|?Jk!mn+S+0t`lW`Oqk53C?#*(<>dC!FaWsJo0aPT%4 zfzByN|E25BH{)hd%o6%_v<0nWVpH}Pv4P{DZ@R3*OrRxV3^)SFXlxM3}_53KaQeu0R)F zAD$Uuq!+Yh#Bib_=Uqg`Xhs5si@EVpylV#u^zFO?DH7?nO4z5+EO*GnR*80f5a2Mw z!mc3j6BMOsv~C^s@XP@q!3g#MY5xcnyYF)*j2}LM0}!~r*9sx-BOq0 zGPw0mGQ48k)Nl*%ik9rZAIps8kFu4XXbbaxex9)X@j>%yLZWPj5S zafhJ-Q0O2(<|c@-GWeMVIVk;SI$N1g@V0B3`mDb}`6n|1iBV_{gGuntj*wiz=(*C+ zCLXgq8KOlXA{`9$Nw*<$T|C@6O@KcYz7*`ukRAJ@T_LRO;K9cRl6@|C9(tg-`9PlM z-9)2ThbG5wy?$qedMm<`7N+_0B&kgtAGhHx@3uC&m@d0$ykP&Ck|Q~AR=A5Ip|%y! zy-kD$+`3THSeZ-@0~Us^Yt;}`yG1_GlwR;fog9NYR_9C{E5GY01VtM)orI+a^4(qz zFCnx<08_pme1V@w*ubzE2pV%JSNm!un$u=9W@)!c@>7u)@Vtp(E)&8|&^m$dlE?aw_ zLxu5U$|rl9a)=zPh{+8M{~bww3(jGr#F1&K<#TS_di?Nb(I#v%tR|6iSM$p}KH3|Q z;}ew#LpQxmWpTs+t17z;sP%^kOZt>j(E(F%7i9mTyW}nsr7+@8MUcRS5Zonct{XyJfI;hw?>|cvjC z{MpGmYf3_CjJkz>q6oA}qT=7B@W-7Qo7qWxPGyS@ndx30Mt=txXy!nw z?^hoS6y^fUHAjmL;9(-h%{79NKJ!kFVPOpowET0cSjY6W6%r;OV6OJ6I`s`tuVwYy$}RjQ*pOE-bD!wWUC+sS-$ro(ieXT*N`*6*iX z|AQ39891JEJk6-j%SM_M#M*f>q|0cW(gz3ESi7~{11cZN!JN<0c?5WPd_XAJNKPIi zH$gu0x0p73$oeF_oE}2C0C<`fubeyq^s!CZ0b=Jh)1WYkm||LRJ0-HjE0hFmGvRI`(N@mF{Eg7G6&C;!^78A-*y`dx*uY zB1{+OR@(yi0`FHFYurRN9@WN7>9tgpr*=3 z6HwBp$ODs_$EE3B9w-8t`dNa;#-qdYja8I$Q zb8+JB`+5uQsjqVxcn5Aa);zc&%z>i%scTF-b4KkM#ULQ%QU?VQk%Ieq{yI6S#q^7J zxxiz_XN;X?6nt^0trhU?WNbU6j`gescW?K;LQHh-X5f;Bs&aK23k~iQL__);rcWMW zd;nNYAT#I^XO*nqzo1#!(e*kDttt+k+am|B3w{(~K-Y00Y8h@xa2q&W7mLYm-%q&q zRw`nF%SSWhBKNLZXwmY1SlfFNM!`Qi?$;z)o>NH^kJa+FTum0QQH5r;@vzfGj&{1C zTeC9YaNF-lkO-q>z^yK4WiM9YF+By09$Np)_Ya56>^Pi3$5ZZLaaF4s9zmGC>kX|7 zFl&hzo+ZjrB|)-rIH$q@E6Ks}prxYAe((zO50RDN*pq@Gfu!S=sR@VlG=|69EPq1Wt6w(xP z)eetQQ{2u?D)#yL6u<7pb3)IhBUDxq)NEAhJ3%= zGMy5O(e-=bSQ$!@+Ho{{s33SEB1ujB9}ytt+>1!*W#Sc8^w{VAHbu7Fgeu!uTf^xM zGLHX9Ocm#HDsP1@1WR{Gbp`bPn;}WteEBW%Y6ca~_M#hbdu6=;m-jfvcV7QiI}<|n zBnqY$(C;cHPzDxfZWruk`;A_~pxsH)EAyF&oupQ&anbr6rm`#aAvx!}TfTK7OICL` zlge>6ro8h~Ofa@Q5w#h?L#&jbF;V$#i*%VyKY!=?fCXxfeA(Sq+Aw!5XNHMVIt ztD(|R#un7CmDt^^8_cKneaa}pLg|Dq#A%PU*BV`K5o5`_0Z zytob*s344%2bv<4DG#=5xK#_1-7(U50H#Xot+YJ`0Z!Pp798QZ>s4)TKf_U%)sEwe zJ#H(JzsEMn!0Gjt5rdSGz+Mn&>peYXN1NyXNODI}z3`UBQ)aL)WG{m)lXAfYe(Kn- zY5(ei-e@y)c;+M+!7N=WB65(jf`ZfJoAS-NJo+CyX}?jtjrly1diBuGWp(uRR{-YP zX$+cCH5H@73lr=Ot|^#o%=#VY6Iq=o^nVg(dpb|J(?+Q=fj!1hq2|V!Z{k!=I3<*zYY}1!{W9XqEAJ4dz>2h{2a_!-s4c=l z=qbjhoF|=Ya#fg*ZdK7iTgY3ar;}BvFSg^=uFSV;EROoSiGLtYOL(DlqYA{@^+=$N zfmO1pL(LXFzDV)8uFggc4=RIHDQdS$@eWVahC}M$S2Pvv#s%rRN0!x{k@zEl68C67 zy*K1SohOAV+#6P`)nw|XJ!pA-fEwq1e0ewL^Ebcx*@_U<4X^rnl;}ak8b+1&Z6tMN zU$r5l9w(?ctFxh1#60^Hv{tK0MV>%>Gz?cTfN3*xPw+&K9k>&YHrOc%0Tyl&gGAf0 zD=C4cY2Q`3@41xgY94i^LFEM*pnyYmWFQFOR?B90x$E2pchH|6uz7R{b13e$;7_%- zq(ib3{h0~QLDXzixQ$H%%mNX;lulo^D;N!?--YhF{;SgrYHmzMQX( zz?`cq1~6a2ZD4I5&on7=xopr6yHGJg&<3H}vK?6IFE}f=U9n z>gXh5>jzIw7vAoN6GdU8)-~kXZSa~&Q#(}>H8O&PW#bCqqbtgLLPg61u#h&9r3G5) z(DpvAW=pzEuH3CWw=njS()5dhFhKu)^Vpc08?c16mPs1qoxrEa(Biy|cY!li_b@5u zHBGiAv1&>=U;;UA9lz~QgxcwVgjKS}C`|;q<7t;Fvlg49DlMU-QMN`FWj5P~aBQg}zz6R+V`suR>v$p!_>k2&ucxSBTdP`*p(P6EJFSTxH=Ox;neG5_a{ zSAwq))i(ZE8tTYH?p~|jl(AQlAzItN=+(yyJ*MQqKBq@j%b!rHCRg^{T0F7f+$$5hg>Mz6{gDOs5XJ@7ab zr{T~DO9wUHHg19KU#;iw^wyMi5kyuN-Lg5Q@kSWsGWJ`C`^!4uwo`rjf+U(Bn5 zApbl5)dBB;mx2ZXsmBEYVfimv-s}JC^8d$4`)?2Tw3hBaVIIS`)-Qx`)m9&k>aj8G zC%M8_c?-d;Tc@$G5i^>(bAohAakiQG_q#`*lm@C16XM+92h!|*$D>kM*mxW=2kqn0 zk?ox-(i!?-&(M&W6v-a5BB4Q|t$d=pP2x}>#ckqbmYG+RTrJ~b$rd)+t1RTY%;aBB zd9NNgvp6HfB;2A?117Tc`=hWOywI7JvGs{Kgqd)UDbk9=mc5ZSBZy84Akd!tO^`hkk1ZZTaTZ8}BtBJbgN z+D=x8mi7z{I{fFmO@9NpIrNYn)sXaVy>~;f=X7yUPrfc=t4t4K6w0;;<-ZF36Fb@I zg__6F%#lmjLGke*j=xkoitFg*BEBC=iC6PA4i_Fjjcr07$@La(u_r`r5M)kPx}twV zK9m7L8Wv9|Hb@EoT4*g6uQVhH)c0L~E&oogYZnQ@h+*K~t5O=J*rNEFrKNw^4Qi3D zv5L4eg_mcMKIl=&(M{%3qWSY_;F250`{OQqlfJni6}~_RTHvam3FR11^6{_8l7>t9 z(wj(VLQB8o2^Ze81cg>t%#J|#pEWKE%zWku$Pd&2_s@53H&zA6C{kC{U&i8P!$DAR zcJ=e^)YJ&tm{4vYDJ+~K6lO6#ML)aAPQYpWqR>1B<2jRcWkhkc&bY!@Gz1-c)=km+ zg*4u_?}fZh5eU95wuAA9!SdHFm2FtF7h8C)ri=xBrjCZ$Rc!9j&duX z){ldo_~#lRYaE0MZeUJj+p8K&+`>G71Zr zu3GQfvfS>yMvU_SV;sNwVA2ryeo;zt20s4F&IcmR{CRCUUo2sBoIPPKd+Z;$@Ih2` zWnn#-f37dJ9u@GqWl}Osy@)jqYi6ZO4FvT%R~V&Z;%wgyt7D2iA$_en^o#?1fi@Al z!)o+_>Y1WtQk`+t6pK%V5rc~Oq$Rrp9$(nt3StPglyH%L2SjxZK#&?QF2X2GopJdl zq6VbNEwg-VP+FosJB0xVlsxuaDMw(=3?+sy(ho}4@q`CyN!BPHoCUD(old`?v~E0? z$r~9Nrk;ZGA8VY-`Q8P(@8oFB&^|a_EGI%862cZquEkew$;koaK@h00n`YH(j+;xi zSB;7xus23HyUH;rz*e^3N0r_|NZQ1C--+%dp~dQqxm*MR_n6<;?Ldu1ff<0iQ^lKi-UGYoO2REp;^Ls~t-FI>1+;Tc_fiO4E8QK{SkOvE=xDxqxW#e(fD75GELzIe1@0 zGkxs8KdDZ4U@xiOebY$4v~j~>w=EFk+!9Syrrhg4zZb`iUL?kR!rsV+NLoVw5KBAd z$yo&k=O~A`i>)gexwxhJhM3C}$MKf}o;qGNnMIW6{$CaqT0W}=k8PDo3Wsz6aT9mY z?6s+Wz0p3#jESO~{gZ^sWgmmGFEY6p9xK3-_%)tujdp08_Eee0i5 zfa#mP6VB8=e+n`fmWawerrNRnF&;$%+_-V|W0suo*xnMa{B2D!89v0#ambs-TAdMn zmk&Y?Re6Vtab=A|mxK4Qb+bC2L|lvu~Rw5q_(n!%I9oH~!~l=k}|e zo&{N-sn!a;^b}i_za==!Ut7U0UJHcnwxLQAMm&*YT_lAfmyBddswOI&B#I>62sX%e zFf(|(@S?z}rBfiP;!kr)H`_3HhE9$VdlBgpNmIxniFA8c4iljU{L+kSK`YQIC8w=k zM*v?jRvbC0`>=a`tOZ4V{svPO7eYj`+sE`yCp4w{jMDM?cL}eZfvYI+ic_YejZtb) ziy($o@*j#hhuR!$EZ9!eME`X^`5*UIQl)an)-5H&b5`M3bq(f6{fMb!wv@tMMX#@R z+L5$mCzTb_lTFvsN1rE{BEPrhn`}?GtPAxE;{R^{em+Zzi~tD8H!COz+kb7pmpK67 z0B|<^zw!x3M^jGr|9BZGIl9h=+>QBpUA`fOxhKQ9H&_+F9kQV#3vJz`$)k#GS8Z*n z&7^N$tkSLzW&b?cXMgtshf~m4_jAHB(ibfC&?3Z0Vaa{JI{tjd9ZpUzPF^b3_5Jbv z5Fqq@dp+IZm1cS*z0@}o*Pya%J)7=(-k7XTOTBbeq4yf^?wi&fA z`y*(-drO4Wb9(ye@%I+_Pu%VIpr3+aY**W1f&06=!}q4@?bvQE(pcB(&c6~wY`xPl zq6Uth>#y_s=j*cFTmc`io$K$lPq(Wc!JR0;ZJ(fEPxrGx-`8j7?oWR2uP4~?9YKN5 zc>1>Si$cloQ$ep!zY$Ydjb&P!q-AV0eCgT_1dJaeXtt}%>JtH~(;WQRh!h^^aep(R zfzz5<)eMs>y9)Go3W2V@?Z9?0Dqx9p?-5vWpsQ>3lMP(u2hS3?5#& zPP=p+m=Vzc(|Vf_ddWt$Mse!}<%B@p1iSVfDWk)$RoG1STnO9DlGxPDnANY> zp}tjGA}ksCEU!QRFwhHB;L`4_cuZAd1BpwdOXnfBNj+RRksCovrm&C9o@c3w%qpy4 zUHLJ|XvkqMbDnn5h@WycP=My5gUn#FMg1E#5&_H4pukg}Sxx^h6vTyNGWMcbD; zexId-wko*$P?knJvP@IZ?lqu<-=ScF_YN)Fx`e8I!*G)6B1lB7jA#_^{LC4z@l zud$k@J<0xahR8BvMFXLIs!}I;wH=FVJ^{iEn`IYn8Ja15UfL%+iK|P|$w`ARFdwzQ zm>;7PwFl^_@!1Q3_cYkzUlOD9JRLO`-P(Bx4Ph86)03PPokx4o{O)8FJWuhPuG&X- z+V11?G#z%cY6gk1%u(hBN6u@0o>JJ=qu4F(*9j+f2k}vmc1Td48KP+7v;a%#g_M+H z4uY!U%tf=Uwga)WM7}d|E|ZEYwghD3WP+8 z#~YFJv}h~o7n)WDS$~Me7KnrLbssto?T;D!i6hNOk6Z15Yrluoj_OcC3c$_!Gzhd?9LqkY`QT1ntt2it1HM)JZY@sFYEfCBjCSvdtHrEqSp=@ z&fW4S8{v?1*|=sSD7tWc>ozf4J03Jl11z8qm6P2mA{Vs;!3C4&Jt`_Ekt0!l_X+N(l>R(VL~_D(;+5))#pISAdVfj*_#weyR4N z?V@$ifm3U9&daiPqsh^h;4uu3;%s}9{n@iN;JSnuyZ6K@s;E87T));PZ^P|vb0?n6 zWRgy-iSaR|+%1K|^>^d6W&&n*Eyitwno|4PVUAT$#K+n zQhDFyCxMWeqMBhVeAJi)_FG~)!AcTNbFz^V-(?#nXd$-}ma+6w0s(A1$I9Zf!Te{9 zV12b@rPOX%7P=au{ZE)8@DSgA?Kx@=6(ri_eEY2AbQs2pkY#V;8-IMCA3#SybEb59 z@@QQ~=y(A6V^pBCXms7u(YM)4Z4Rk!Ln4G!cq7=FJs4ODWa<>65s3lY0w;=OsH5 z2?fqx)thF*<|bN{sN-@no)us4GrlBE&eHDPUv|^Kckl(ZKfiZ05k8bZH1ZHm4IE4l z6>v$m+#i`mhuI_MEfuX9kQq+e! z?!m1s{~nha-R};Ad7H*AwzzAtduXcfQ`Tux3VvC?XxH!ShnVu?Z^H zO3IpiAVbO@<_d7kIjGF!-CD!^)pO_b*|yc}AfzMZ#-i~{c_lc@_=LoNbv!Maw)wI^ zru$?Qmydim5EyR~q-w$S733AGS-$2bJ~F#KAZah`XB(p*3o~^ty>4J%WyhYW0?*az z|02U!glVy;y0>Jvg>#(uOal z@VV8#2()uMv@5-OyOt`FR&ll#yxz?)Hi?xg>T>z*ZZn73@h@{HP=HOxk=-CXewaLJ zGf!-FWfnIYO76fy4Y1%_s!fadj<2&lb2-butb7_}qu|}bOBUobdK17lM;oJ6PP*fc z6QO&^LRdjks3FgogyYUehfk~u1VkaUnN6(@IF_uvrxd@2PyH>%V|A>-*vWsQk-x5_ zjTLO-zuA;-2BKRhsFtI?6-u?j_l?rA1LiYhb79zT@|#EDm!^uuMMr0qizVVRev`uB zUjEA*9T?ppSqw6$0{Y9282p_lg9{p>f|Uz@ewQL8cSCf_BrxZfOP&%FfW z;xodOy~wxdPYYWOSS%9f+QR8QZ+6(2(2ExCXHuvsY?=N%( zqT{8b+NrE;MUC4oHEX9VajBLlStN3b4|4P`?J$NjH#PhjO>DuzNgE7}m5@+P$CGI+ z_}#SE?3!4YF7>q&Sd3m<9(0C#c3=r57EYBizw7LYMM#X-T7Es@Lhq4FD=w9{(6 zNQE-jWwG%z-Yft(;4YloWGI#jZ%cR#S+D0yU)rnZOI*r$_&s?HUAPMu zg1o7>H$AEZ(XDSwJJH~pMa!e3()h&^zdlWiVTTXqp3qW|Nj42x7z932(-_>nOs!ik zdj!@$K};RnuC~O62XS;(UU84b-c}Mzbp{D9%-!B+cXqakf+b6yl^v(K4c2Bt)~~T9 zzJ4OBvuHNW5?`VOEfL=ihRCr7(XR~sgy#yOJoNXhc6r?kbxG_fvz~G^6Mm!u6MIEW z-&qQMEcB4$-iZ4RKcVqYCKID#E5m->`sXPeM_?vfeVx)~!`(0tn%FSBoMYj5;%OrzX+%kH2g|4b?*kIXXEm5E9 z)DZU*tl#)ljOdw5@1becmdt2JpOB#)fSx_7&fg9XGs;`frJ`5-D$p`hCn zh0ee}z*?AXfQNjt`@3AzFY2elbk);w-s^5^m7BT9oFCXD&`8O!3R-`7N(3`idC9#Cjke2i#7FFPZR?`! z5=(Q%yTN7bTQ)2-O$JE8-97$b0$XdGIY-&V{+-J5Nidp&d?e}-ol21CvIVG}pcytx z4{M%%QSUhdS6@qkk4iTB$yPQ?HGVT(nt4g?j-?$)=?~Mc147{Wumsum{#csSob0Z= zBNXZv(E%VM3y%7yxwo}BJK$$yyfxKq2k^BFN~!;5hB%6&1S)?c>2}N1x@_Sa={K&? z6x#o`=8ifjv;WXt!Db+jPNEMhip5O;aOLj z!XLAaOTa*|(i0pce$PS0p31I&{87jZ1&hl->fJN`CKxeC{S81@$Uc&%XYn6omN^;E zh5hdZ-cP;J)?feJ!4%OHe_iQ1HJBoh!DlvfVKDX5@E!uAnsn3$cdaHFoOUEekf5-# zEwy!DjS%Pw8PZdyEGhq@R1833W{zn{Ai<28`_SRF&eO1T87W}M5!6b3eqnL4xCvd{ zF|1tqPx5wXy}y*NVV6ayh2p^OXy2){x0#jYfKGLoX)32Z`p%BlUg5_BQ_0}*`Su{w zEGGBck(uokX(=(+=8nT}AGB_#0&Nu9%Fv;0GZ^Et=gE>b@=+WZw2r5Y`x;a^UX3y2 zOO9u1qdT^8invfb?(G$ncoonuPa<&yEJe6zNC+{C*q9lfD-ijv9kWG*c3=_hwbY|| z_a-jojnJJ=3}gP8d7@}^Oh zq@WfYT&(nAipHqp4?m?2H>m!zXhHw!KQ(#x@#KX}SPYcryryUa-=bmcnOb0)4z2bm zY!}zpP@C3jxPk2ed)lg?60%-H;BF>1EW~m%;Lz@@nNZKo?GWVl@OtuPFm_k>euVU@ zXKP~wZtbug7??-g{rV6mZNK&ZBIN_dqd?C znKUnUfam53izq2pk#<=zMX1Vv%wR~$|C~m2L8qIyIcs+O?8y(~)4iY0JOOyl!~Lmo z4jO3T3ZTXfL4-^nud;}{yB&oakmM*@DfS@gBR$4MjN#PGfzz2T)cH5~9 zm97mS_xqxBYk$#Av71$Ja+&BVV6YpTS>b91y-rt@S-{1&j#D z@%9Rx&h1>?4qqq!iZhVAX&8%o^2BVE)I~J`Ju@Bq=#PQv*jmV{I&An6OUHQ58d0GF zmBRBBWACP`Qlb|g;wqocTVbBQZ`)<)E6Sm*0mKg(cS2!Tb4x8^O%!CHD@}4J!iOy6qHF_HPVqfqz2rL}9DDAt|ugY|sp=NJ#koG(P|7S7l4k?fBb zTlP#ONl_w$eN@y<+wK6?@20eJ63^_bnx- zf+vrJ1CcV~;mi&NEKQSn9ou%@P-ag|AXRk-hu*x3xOLi+zgmJdCZ}G)s~{xpII(+2 z2e5KDFGcm$GqJ07qWfM^TCc|?;Ig_GnAq_rK2%3Mo=&FI`gn=1*1%a&>DK^ER$u-O zg^DPBNAy>6`4+)Z=GCPHJ#j~!eMunD4z6>|+Ex69*RZA?6bFQgGid8v#cqV-ubuwe z;#m70DP6Df?r@DU6dJ-xsrje^BZ7ZpTv&!N=uPMc{x!85r10pag)n}ehN~>vQmH;m z98vkBXXdub46n@R3}^*eztLs}wmlk<0jtu(gbp-Ivt!BIn^s>W< z>L`sI;$t1!j;qp%S5gY9DTV}(8cT{Lz3>$DuPAO%Qw&v3bYP>_iQY|Y1<9tDYJHeB zd0YSG(=fbQr)XrCLij0ubSEq`{IOV$b$#u4Q~He%oJ)ofc|3Q%(G&2XK#aYCa+QK7 zJ*R_YuF$N}muG@}t`UKvJw-3YJYZ}ZLomamHiBN@`%pnv!B~`=L&< z8m031=NaJeTU3FLOLxq1UejBIaU4dWS90u69~rBteNOndt)VHv2`P#Pc-Q%A*5!ZOyj>=0lT!=XveYml2>?Ng5C#==$Nv7J8NF41`r+3f$lk4X& zEvRjJIr>RN0`y^up-EN)?^wau$vxT;3Sv2$hu4X`=H8C&ly<=AVAV+f=&B7 znSR*Q^3=bE-&8c1Ak13;^+bmX9x}cD`3XQT4_*>_?8liC>6ur<3zf2vFdvv%kCmm+ zMV6gBVJx05(h+^pqPY*2Y&1TBEh|FSD||LLK4l}ajmRX&9F2o&_;a+($ko3(x94t8 z6~z;@;SQe%wm@wk`ghTWH!TTsV!>1;9AMnBDirHF9M^5(oxdv8^9W>QtW z#OC#fF5QbZydhw|K$r=e<5M8I;?q<*F90Gg`#gb0*$$hB$}GPFy~%H4B-8ZG1c4y% zvO8Y{R=<8PNk%*~Xm+VZaMb2EeJBOWdA**w=@FrQr5U1`uF9%n%n+UQ319+NIxL@$ ztVZguzl?WL90G95XIVDjsGQC}=e%V!YmWgliicucb}IJGc3(c*THI{VJ=&kV&puoX zN`t|lZawQq<1k>nx9jL?AB0H|P+=I}^v}Vk+BE`}zL>$z0mIh=NO@aKbrl-$InptX z#(#%PaJmU$!(&8ItEv82UF^)?+e&a05uDGJuENXdGr;A|ar@xg zG~MF`!hRL=PX@Fk@xrzVSyXHdQ`@Sm5{SveWRm+7$ppH+bJIU;;(T&}I(|+~p{{|B z#_kv15gt(iyfM2(hIsow@xV_Dsk(NPS0DU2C~(ie)?T61=DltG{_7rLcQ2>y>}nD zV(^pg+BqUQH4k}bvo93Pl))tb0!^o8oa)DyEXUJ@U-TCJp0foq5uumVwM)I-$lu*c% zsaJYxGL(=Av_TWV(`3~zlIOw65?_$$Xd?8hLaq?gmL2fF5}xI+bf<>PLaeC(|>Rp6=dB) zB(Uq|*h-_X8Wtn7r&mCLCc^F+;h_`?q~K4B$gBMst7a=(jg_&+@jlb0D-T^eu0nbb zy}}O|kk6TR{ze1>UpjiKpN{UAyPJ%9*WQ}+Nx5D7Tkg~~2>l4F1UiWmcIDqyBFXZ2 z$H1<+9pDfS(DN~7c&A$pfqNuw6c_#vGl->?rY~G~mP|diza>E!n^cLmw$O^i4 z%joDnf1N?D27)oJwR4+04=GI^hfE~8-Dc@2s!3H4(rE;;t0YnfU1eWe8UFmPepuJI zw`9q+t>#vy0-g*1ers;=n^%!3x9w&J#`DcyFkh09d*qKBxj;9}OGit|kQx^2z^I68 zNh5{^g8fyrP1M(5){Jd4&e+kgdz{{%eVf6jo%BDnibffMHOg-PN?)n@{(#BO4nSs< zjL~Wvoi}VuGyQCwWjG2%*Kn->NV&ZSL+-o|#Ewzwi^H05*>V^E7Mf=SjXWepOSDm` zb3Z!_4&+#eH18|!QC1;og>2=Yj$l1KmF#!%Ecd6iV_Wa-1y$Wu*8x{RkR*!d5+;Q` zFtWYpu|wwO-uLb@v@`C?7K|AC8~mv6ynyDyv-@=Ersb5YnLN$d59t#Z?H)F~uMjKw zOO=WT7=U#4de4r5Ai#T6=$fPd*KTMIGA$*Jjcwi0V1luYVCJzqpuvD(?ohR2#$|(= zebXIFw%{K2f)A~7E+^`Zf?Ril=CQKC-19P!mF0DPb8d7#m3T*>jtg_$y~?(`?kC5V z%n#Q9LW&t2!-1Tdj?fNxMUWvHCGf*`dvrWAA&1d|eViZJ*8kQI zNgY)K4%6c6KGv-^>=>sRNBXA6fKzAwR?MMg>2f0%gl0!A>!fg3@U5PA9dc3ZFTE()BhlTe@YX8x?7T_K~1L$?YN-V`ZVs zdsCaN)c2wjpldy_?3`Odk!|3adY!e;udm`shs7ZF+gz z1ux!deEXy$PLLPVf{uCtyy+nL?rQ5ER)L2|w0MhT+z-=LxrYRBvEK3Zr&^K&%C}3_ zj0<4d!9onej78zk2N2xw0RWZdD=UX45O_v*w}lZbqhEJNxMclvXVSac{ssFaL^QWbLMboGset)0}UM4_V zFpgMw9kbyel&~Frlu_%O514|XXGF>DtR+PDtwir>^_uv|A@>5Ho zX#hIj?LXo8Yp918LAPyunp6AVj}GFpnlNKesbb_M6j<978jxGq*K)_5huhCR_2*oT zrn9zJ@98R-OGjw<`6yL3({KeQXuHzMMb3fHM6zx2q)B_`er)8Sfw#*$UUy?ImpMX9O9_*>Zdavncj`zOrPqwoN+T|d zLSy-w*HHbA&kEqNr$Uf$JOO)EX5zKttpp%U_fnvgOr@M>?u%bE23SvrY@%WMH8K|! z#G6RtP`h@`alYWWl;`GW-0jBnjMaWe2Gc9A~}KY#SZOcxm?|!Ks1UZ_s;TyOM0fgB8r@RG3UO8 zKSOFZ6cKqs9S$v`@{z8=x!gKnXrI8Wn0}|I2wVo(op6fkV%s8I4dT^Jo==E&8>p4L z1zd8NLRC~GQusG?+DkM^0>_lU24-T)GYC@Jn(p(Wjy?IY*@v_aRg8@vgML184vCn5 zQ>OZC-O$j;o3PU7{GqtELVDKRLT6g*hEj3KRTId{d7F}VlX;q!R?S{q$-L2SXNKk< zI0R6)RTRg0ps=N0li8(lbGrSJkE<(3u#VL2wm@;zH?`-!Poiqye)Wq_RBX%zf*!Zz zz*5&;BltB~8u6jeJ(yzKo{FtZ8(;Y|>|>u(2Y`V;j=E7YJJ?!+J&tM+q;s_n_jfBF z!18VvML@vszuiS{wh`C04rI>G$9yq%^+-+-iFv%TcVu03W!2^$lf5sM7 z+6S&&&HQ^T-VbKx6&S3vtCdw-2ngs+yo;OY`-J#IF4NX-+N!$5(X_`oTeZl$qcIpn zgOQ9=y^GPFW8g40C8__`LE`TKMTK9mSmjN_Avr<&M$V&0@+|m%d7PYEnUyQ|6Bt0A zRlXrihAirNM-Eh8R}-m=R!qDlX8h}Aycprw*thg_WB?b1EBegvMf|%ZCsn5jyQ~11 zy#2K@BQ$hzYbDGM&mQl6*eVLYo6v^kWwMmCAr@F`PEA`yiMmnnE*Z`XF~*>3E*Ym&2VK)Q3c|C+N(-m&+IhU+Rw6@T9z< zmps(VbWU$DHJ7*%naX7d2v%!YUn7%C=Tco2(#2J|Do4(o6~$ zg3cMubUtov>l0vd$nRvr0D`siP)j(V0@ssHHw6a z#?)aWjX%>$@wx{!M#RLm7h-2U%U16@w_S6egM2hdqIR`VV)d<>UlZ==?i0~c4SGP9 zh)|(|q97{O_+?80VkL5hH($6EAj~x06GXerNz8;boJClv+p2cJ7%fcY2D5_WnkL=y zJR_{@U@ad+NG}u0t=>i&^q{FNR?%8xLL{6$seV=?Ob0+nuD|*r|L?V=t-vLK$}p7{&jgQ zPsZ<9o&;%8pk{E+d=NeOc%)aZIAjk5mBuZ+fYpL9z^E{A-~@`X#VMi$1)uf~s+3mm zyJmJ<1j6ZMfF$tI#ajPPBVhB1^)Oc}K~EcQ8;hXKoXi|X`$Xlz7#`zg&i})v?@TM% zqi-^8avIbfw;EhM4&evzt&z)UPuzsY9$2i7PQ^n}4hNAZz|i4M0pMLdU-lLipp4|4 z+Ar7auJ4x$s(Q%e4JVy0gCda{%}$IuYF}C}9S0%?-gA+=zflT>C9zgJ^oj^jC~!8; zrdxriv{Gcfpbf_S!|fmqW5ssmui^GLVS@!$Kdn9h$OBc;niX+~xs~_ecEV9oEiXOM z5jLsId{ybe4!NAT-9FxM5&j=z?-V3j&}HkEZQFL$F59+k+r}>2wr$%sciFbhTYq<) zhdvLd@5_2x5gBV`WM<5fb9^IOuc&|SHJ@z+T#eNIG~m!s|`$G#v<=-Z@=d!_J zVBPZK+Kigs81N>RaPF_JY;n0%K-gbQkpw>KqjJpD4YOtO=adLOPbl#C5c!0M$B1QO zTV3eDdd`Jn=Pg@c)|MluKq=63XVQMYTeN-CyF@F&m{oUX6G4CcsBAgr@9yV{i;s%l z4oF8#y(9>5AoINTuC+l^stOzW|i|}1<0H#( zqo}9$mqM48lt^Af_8&xt16LPPbn5geY6AP2(DfAyYXR^X)V+ssQ%0FpHHmhxI(UxX zH`AU0oq2AvB_-*D0@wFMot$gu7y{TelK1c2v#Bk|aA9z1+-Lus`?;nWJIVey-ikjW zG3o4??o3XTpnG?#Sh9Ap4pvQBPJ-Z=Rv#>&MboCzhZ)IQzA&AzQiY6p}C=Il+ z6O%jV5vIDE9fG*YTyL6;om|i4+5cVtS#OFEBxuEWbId@*LHQv4aK)+}rlT%~#Ji9E zNGZCpAH!W-BF)_FEFE%KtBm&_IGi5&|H14YPjY+RZpLic}UVigM;?SHx$=yNwea z#6Ycvq(4_`FOy@Lp|OMOS#c*&uewbi5TYAY?tl@B2FDJ3RX^w-A&5z6rwpter$`Sh zo|t4l0+Sf`u8@}-djT1aN1^yAh!@`5g~}T`Kte;+J+WsFB4!LTqy4FC>KiTaLOa3F zN7};1O8Ob1k-GjJ==Yq*&bI$tm%}GkfW@TT)2UjZx9OgdqVgn|s~6=Xi4MOuJS`+> z(%40g_JiCUOcW|4Rcxkywjm3ig^}e-gsTBnXB(t^q7;cPS~!C?xN$t+NLN%2WXe=f zsj#ItRuvET8mLf?4xqo2>#?H{;=-JuX`>u z4eDqqQqtEqZBWcFGR`eqTGEY`vkxql&a^3*@F?s$b-}-%4s=)0egW5+! z#Y=|;456D{PkT{;bMOtwFa`;j{JWI&#a*a$Kfuc1@NbUyHdj)m*knX3Ms_9R;0F*n8DJ|KY%(X)Y0Gq&cu%3T%-CqAB>wDvKg(v6K;KCm=}WXdFkSw@Q(b&MU}T_J zVaoh5uy4-tSX?eSHq(3n9Nu?Ah&UU`VOzPYm4{y+vQmxY1EAbgp23SGJhTZKGgT|Q z5sz3oTU2&}QFH>eb*b^zaa=B2vTqL7aOGrCTi*4Gx^Lq42! z*_EXqGj|k1D!Cr--&n-Z&1L6p(u>lY8yHzUO$GK8-^#lzIG&9K`1+A_xg|K>Id*Ol zxAroh!oywUq5inJ(a=lb)mdg=h15-Vs?V}Jel^sdMs^R;oqh1Y#ZsrO1$Zp_pl{pH zQ7~NZiaW=4?c_%ls()!c{k727G6E{^x(BFTG~(oB3a`~8Uj{vkBWVUur%?l;Sax=+ zi*iu0%y{yQ!O#M_{j^3zLJ|G_KkXBe*G^G)Rv@Fi{4tyAj{QYhbA46EioO`JHxobh zKBOtnK-95j%U~S%o=3vD}mETveL6I#dGms*AN=`Gr2oxlJrm~`*LA*ai%vYeU^J4;R9UC8)zw7)I;zVDG8$%G&aw^<}|pi`w<(vSIl zJf5B8daeCe`+w=z;=zU14Sufg*#323!q2?d*N025m;0+kT&&y=0@br!KmdIStQc;b zCe6^)&S^=m(t)~>;c7x9iQZei|4@ym^<;?9P>SJ2XZd5fpqvGwA$m6Q=*cRrBK2Ic z9WzTm-c;g@l;X*%epwx9(2Znf+JwER<4EK7=KLUA8?y z4YTEh@GkQhUW$TCp@G9qy8MdHFE_<+)v+WXBZrb%I3%l(eV>&%6w@lZ@NATDb z9#xI1{I{tq_H-Juhd5I$d1Nl6s@?}uSffzD&}*D+e@;WYT5<$zR4aX^~oA5 zV4Za~S2xs23zZh9Wq4&5*P43IV}GoQWgRCTTwE#|Ew$sx>{1KM`{wI~%X#>%Kuz~< z1f;-HaUQIirfL`Zc=r*@3Py6p%l;;QP1gb82?mJ5WWVD2e4NV6n3DrUdU+F4Y_&TX zUJQqdnI%u(|`?5wC&++TDSSaf3*;_oCmNZQ7*oaw@ClIfTP! zYN=9eZ3mc&mp~-YMlTFTOFC)Fv|LaPP1mblRKxw2=Q9T#cn4(VEWMAg3V4F%UGxl? zl2xwQCue}Ny@_+>r50k*w3lx>v8yDiDHlZuod6tYcrZuv+f7d7J$s1QbXJ+p$)s6> zTmt@m6wrkXL4f$h$VA@(= z`+05hu-}c4^@<;}^IYaih^NZ}sG5&*_bC9KQ(C|?#PfTG#}mT;1q2~bg)V>)8jDMb z4I`~jiZ~@KL265?Oss`~q(I&U41uE11d_Lre;!jC7C=@;l-!&^@c5e!vJ~|IPyv-J z6krj=a48kgrV=#ea!R~ZR(T_bXGj3}WZ4cb@4|eQdQ|bWJih{B+vOcpbBJB+)i#MN zoT+eL3HT*vLV$NTe9 zif;&lm+M)3^ReUQ_5weeL-At&t;_^ z{iwCHbbD~|!0z?~#gFg%qU~mjr`vmnqj>hVbYn}v^~~OTt9O&HcO1X)o4(=v>*fU> ze5;Un8Pk7=HxiAzyEhChe4CrE`%?EB|NFX|@A`Xli|_APJjlGy_6?puNx`7p$JR#u z%h#(;I4w}SkElU!PrxPo=%^RvBLqokwUZ}y^ew&!ho8Aa7tYUxPE^n*Ho~eIHTmMu z#*3N;e%Qqy*Oym%LMjc4G4ZIr+|JMsA-kXZ$M^R_s)N1nJ9uH!-Yi%U%aDYGQ*AYT zLzMZii?!ZSTOH5UTXYmqn5~zsgB_mym{@kY+U^gr;y+=qkT8BY;|p%HhFv*&*8;0A zav!bW7+$Sw6s4^Pz1xR#R(C_H++{)qJ_)(!*L*kpRHL1(cyK9{2uDsoxAvblFLPcz zcnX$*JxhsOd!wad`8euzR}%#1&Y;H8-57aMwt6|=2tHmtej`|56ggsqHK|^VE>WkR zhBJ>j*PfxJH=Q41B%wNr6#XB8d%CW%4RV1BV&U)w$z`gYe7V=~irHXB#4)2=FGgm% zuw;@Xw_=8AI@S1jZP(lQFC#gdety2}f?g`)6!e9dVPP7NA%zT=Zby!v53jdSHhy0p zA6JWmU)vFu7?rBt=*Y$|8;GP1-obBkULRVLwqXg#KAzs4zmUy=s@LzwQtMF!lja{C z>A3?Txv@*tPhYBXLP@C1`N;b6T0g#PKR*x8t{=XNw0cso?j1Myip;_Aj~l^dG36)1 z32;sU)$n^n$38P6t09A9umK zs1ngD{`MgvljcQ?n|bNX(ausamgr*t(cr=x3_**WAnzEiEVl#k=KDIY4VPjT(ekdX z$aZ4m`>LyR43Ppb3A9JcC~B&G4A6TWnCY*=I*wZP^0}|p9g(lm*4`Z5Iie^9{(-Ph zz=;TCA#38HfxL483!bg-(lj)A2=nty>(!yMsheMW;*~;Lh#F&Ahd)KbmcZxW#@EHX zhJb=}E&WdJHhy-oUBLYspU=!fJAWw)w*l#G9r>h;iQ>9N*8p^RVlU8(I z-0yNtmu|Y8vWGJrcKO!ba)`a&Q{O%Q^LCKRES03QqDFwOUOYYHRQoaAU|jZ|r>fov zsi}k5`^%_RVISWtGp~pyD4`7KEpTJIOpM3GNyrz zJ9<00!L?<^4A`7s{r9toNj58NH$VrnxNe;{yCFG7$QA@e7~aY^&o?=AU_XZE-^15{ zn`ylQ7en^DH-E%>T?J44yq2E7R-ZIJ1m|-9eS%cFy1!p2d?UE{x%;6cL;PEqapH6J z<%5X5)=28|L$Z3(h40c(D(pdMi96cb&=VXDJ`Xo_-QB7_Eg=bB<>Ttr$6Wn7P?(zNk^zy<+J-0?b)8)YtF@ldDEbv}jI_c>vk7osfjiUxtcZ%DG7~d;e z%G3euKe3~)?(662a{)tUZNhI#UjUIN%R_KTPheL$5JLs&^D$ipd1=F$@x8(UBpCX1 zPl4`jPz`U%t#9_Q_RgXyfBu?51}+cc_7kn?hUeFjg|4pzq`5 zW?;FCuL7U{?*df$&Z8s7uugus!8Sg=vxkv&NRxXvUyNU_RvCmVckUkfEfr2Ic>rzf z8{k%S>OrodSb=YLx!%vZzrvT?l6IQlfbs>80?0=0tRPPe0=2v!gjddN8<>&N&^xjA z9r_~9>U)+b(U9xoH`=n}BZBAC{V3mcaVKVf$!X)J%u7yxgpkqjf-^sM-thO1?Cx@S zNY{jT4I9oq=I7rRv(0rEG`7vIzFvrONxki@SN}iYSQP6qyi{~XhWXsz-qg7 zQ585pF17vTO>70FH|Kh$ucZs8KSC`hJNEqV&)}aw@z6cp{w5y2eu>uJ@0l=+auAJF@M`_>H{ZT?r^`jL)}-9a1Tch?*0xetXg+p1JU zySI5gXjjW+Teyi(0vkFFS_sj643?H6Dd(ED!%sKKlPFbzE)IE8D}OEZ1k|vHsrU?x znP~4fl?~p&$sE(lMeMg`1Um7oAuI=2k%xt8JDvcJd=Hu-&;g6xj zwN?aZ%?`W(e+m2Wy+gG>pgOi&bJ_uVF`Qyzv8DvH3Hd(C0ew&6DlWJ%r4HeCG+DLCkOQe{V(x4KXUyKR+5@}9N6%I09yUM9`|O8CKszFm3&k0_$xcKaimWDc9q{h%p_v@d*Yt7d>nXG zYduHmn?#!47{mq6ja!N6e6l>sV1Y0dR`Y#j?5RHjmEPeYlFEDnM!H}H3|_MIWVsl# zOVg&11&u*q`hWt9M8QgN1?{Cja=nm=X2I!@h$KZLKo8Z|-B}5id^v>{61clNmzMVI z><5f)olDA?12Y}i3{)3Jnhds8>fsf>Fc)dT$@kTdKej!iF%TrTFgvi;&2ZjId{+eXE_STl9?occxR%}U^Go$zD8SNHf3 zV_Op$him}Pu^6sgnttu(lUuHoJ|8h6xuLf`Ct?jn4G;-@n!swJz~|yWQT_w7J~KR& zKd3zSSBG39(m)poN!;zPz#zJ%hMJa=c5!-MnKCk6zcO-A1ZQF+tYQJ5-SSzBwiofY zhpQeD$omxuJ+RlBHN2Hsb|>oOuy0cB3WH@$k8O?UhB>7ch=1?!hBU<=_e3qlmyI>I zE;il_D~C4hgYbeCk#>Dx(hr+AO9~`+W`ds8M(Z$TlzgQy%llnX2GC+4Qabu7*KL{uy+gJE&TcQ#{HJ%x5UI}+IC!g1*@|$z41Y3+B7jW~yd<{ciF(=bxfs#~_DJkyG65R( zE1`C=t;?=Li;2{;Bu&Rc1vf{wnKEqi$K(wit=8J;R*^pxk1hV7Ogg}O;QA#Fp|@+` z9H3dK7q(q#H!}_95FgB=L{#Tb?kP|1BR7mdhGyd#(kGTS2Q`~E@B1r_Onf@m77b)w z11FlVlj;0~*BWR^FGm>e(ZLHBFVvWu%gK3WKiC(cd||GlpLu);G47RME-L;If&IO8 z>+f9X;LD7t-Ta@T+r45PF4RF~ejFH9p;RJY9{_ewSA7abtoOjcj#nD+W4Z%QiY@lU z3sijBB4j46$_g7fmwIv^YO6{84~dF;1v8V=BgVZ5poD5j;&Kl%23U$!+PX?%PYNH?Ry^;?q@*Sx-+Bb~)V}WEItKrFo$8>o7Z4tDi8KZT4}z$C1ARi?BRKI>l7k z$2@8|=ESn^7AA9Y%!`$MRAQMuatLAjGhjzk`cQIm#RNw_uEHrI7N-pbtwvRWhEho{ zNr*y9js2d~m_~sD$6{}IgD^Ps_PdRr&Nu2W4h&=6sbdK5&GRAQ<#QuSHrAV_g2Elw zb2jw4E)qZ0ab*;~!Z8x`5FX_R1rh{v$DVdYhmbWf+K3SVQHQ9@XljAUs;|!j?}I@M z`h{|L*-Zuq2${|skU#FTzpYn@;O=!U2e9lPL}c;X7_(3RztpVkO!}K)a=(O{x90p-78OD$iH`JPTCK=w z7OaFTm{?R|3#>(B&g+Htjk4@&*pzs5OE^R)M9y57ppFdg^|=JP69Ehml@cra)xC-z zdZT?0#sjr}P)5LF4YxiLsa;~l7{ap9@cYV2E`qH9ywjsC2FW|6PI&_KL)qDyOJ$#| zMA97yrHIzq`N(h3tea-D#NaL2vlc+**sGXO)%~Emo4aEHCfiPYH2ddwU3CIY4{DW+ z6v!PLH*t9C0*HL;Tv_3!m=^$sBrs*Qb4AZB4-t`6#A*__qJg4J*Pq;(Sk2kkE9=PU zkBOt&Cx2KlvtP#wHU2(rQ#8}?P;yT)smWg;FLIh`_FlzR6*I zoZcCt;|FADyoLF35e?KcVS4pq#<1s!ULWQ5wXz0NehiliL=orA$0i zGl7p81=c!a`Rn6eTfzVQfWj-GNcV4B*duqqsMcOEk}3u`@5)Acbl8ztX|nG2DOGD+ zlo4!E!mi4&MU|#okc}PWsvCVk2E>NOV#rbeOlm&H!7P6Gd z*bpW2T`uwY<3bv!gK)f}lhlTH%AS$2j~XhihXnQvLna(}w^k42H^nwT|4@g9bRu?f zyIQzKjH1d3MTUagfJhSw0Lb(t`*$H^zsmvNLU_bBq3cT(40RtWOu_IE&w_(%n*9^!S2Zy7z986iK0~mm#r9?4gxx+aE*TEJ^eVH-2nee9k={oo28rxz7Qz$zlaQ(yH zzV_+1T@~JKKD#uq)Shq5Xf&c1Kipap@auk;HUUV{H{oWG_}y9%iS~?VUc}at+UgI1&}=^E=TXCXfSjcMDIq!K{NA3*kkpKEE=b_?&5R82rB=uDLnhQQFOMk zp8aC-*0)cfPy0LvIoarjpr4F^U}(TwNdO4$?*RZaB9v5T7avWXs%&lrN2=u7gNe45 zua?`?sWKlTMY7XSz;V+HTWLL0Y9FF7)!Ux&I|r24KWgMWROX~=6MxQCE;Be8uf)Kw zmfgyGL3ZjQN0L5*=7G=@NSTbM;khAb#0jHsn($82Sy@mz zAPhn0(kS8?5|<7-abtbAQ8ien(}63;iVZIC;L@C$pX?18?%Xps2!xeAn?{RqMa5|d z-P2^Ahmtao=Rx8!blFOP%kTAyCRD?Wd8uDrXlw-alPQH!l?cxpEqR6Iu0}8OB4elR zX;yC&WCuP%$UekRfM=QJ+2&a{eRG#g8WBP`Pl zmJDzlW_LSjw*rNS0KSLTn4@om$!_htApQ$sRg)s0fbOh(1ua}N5`5MwQ7!0 z=lS6Xtd9-vq~(|Pu*uMB$2WyB^{#%L=M7GBa0tq32DoFLRuG4_O27dneKd4dT?|QHNEA&w^X!UU&daW*l&_5c4vbv0D_lMx45~=M48ovev~l?&cQ2N- zohJ}XHA0D{utC@DrRojg6jnvpbDkT{#tESDk0%44ogbmCTq%{RRco=@ubLXFmP9W? z7>zb;Cm2=nvw(G||5QJkr`9$=hQKAX1--s6%tS4YL^@F{REPC{XwpmBtY1(e|s8?z6NhC@q>lk$c?w3M#m0yl}|Hj?PK-`24j#)OqSwPVs1?Om1gT zJdY($m3$<9r0rC8DQ=r=jZMqF)oGn9j6%`~6;)W3bOJR=q=(s4O-92t(l2nQf#U57 zUX&B(oMe7UOG#7&mkk9B{mhP;oDueUg&$4+33lu^hQrh(k9<9l<(1aX5-=xX0kTP8 zzwT=Z%=y6aNx`OX-vaH4MsFO^+aJU?&QOpPT}z!5YBbgyH6kSJsxHI9+H>26;deD$ z8NCkxdhpIQcP#azX6SL!<^p7oz%dyc11JG$%5i)&se+4em;y~K5r+iszt=|ZT-yc- z{Z>{EU+#>p)El`H>L?xG<0Da+AsBR@P{XE8W^HTR34 zssbzw5v(JEI}{)gX}mPhTEpTAe5w#D8fR(m-5?y1LwBU^{Ijf37uS5W__3VWm>)wh ze}W=kHj%k}JT}CNmSm{dt5mQ-n9M!yxq)BA5U$4{0su@ZR1|jbwO3Tc5_9l+a{Kut z5n-ovHpKJ*%_f{$@*<(U=ZEj{#3kuDxv^-Eu(O(1<9y7+Nz zgy=X;`covHJ0wYOHh7Z{BQ)mXAD1#2^3Guzk`!b+NP)N{25!+RmiF>jc1+Ll=Ug9P ze*<34a_mfk0Nxb&0{1dtBh4yjd*0-}6OP8vFt(&ylA^-MA>PGuVem z&%Lsb3XH}aXnATqLzN;#J$}x0++Q%K))n{8jWANKLKI6gf~e)D>D2}?oyYwjht)a5AG3tVwu|5xgA zr+iwv_Ae*$Kk=8e|C{P#;AEp`{NHTnU&V*cNkthF0N9$`OY`x`U(>}M8UPUF6c_;D zzaG(X)3QK}D8VaJN;rNE*8L5`KLiOfS6Yv>gb71(Vx3 zH(5@0t&vtbY@#T|LcMODF&YwW|1jLuERDD@#KZr!1`|q|3TTj@x!zera)wd|2mjl) z2U@`-!-FX!(_;IJ=YAU|BMgb@rTG+^q%lUYP`BrH!9 zK6Jkho~l!_*FDt(Hmz_SnNlnxSwoJH!e4O1?e5fWC{Vf<;;j9qUTpfDvSRM(M z4(wm_!Dicm6TmEX+veCaT2UdmSBeM9+YfX;}oSx+&;_s+<<3Z(KeRd%yBcgNt2X41IK9%4vS_BLA8!VzK@b zt}SOBkCb_=YK84y9nrOEIQg=<{D<{1l=4H}O}9Dlqv9i!?hW`qd6R9jq7wT5`R%{q z*$n^N6xvw*DtERnHvcESl+NDz|22!j$~I2xq6ptnzQbUD0#S4iyIi^1ZA{wqO%2EX z?laTE5)Tx%IBnPq>SvOOuRth@ z#W5*DToSdIf)Md^W|o6h9PkPkN7bhk0n-r96|X2@Ce&$+c~M9yT?OfMA~ni&|I}JA z0}?7(C!Mn5k`-7_N|C7Iibq1Gvjf$r)rmO z3z1kgI$%_m!ia--Ahgdn@ShyQ5b7)jBT>ACY0tU094+7VDcBPkUE`E(@zPQVF z4CKXba6o9l)AshiO%SkW>@c0f)zJYR)CKn>#)uKr?-n@4&^FQ~IRlF6Hs@{mdoFrs z;~Xe|d${dj*q;oxLWmmEsH;G~^`OVY6h`yZ+u@hpGV^WguJkWW7VD8@@brwA|Lt6M z1-ABUv+@m0kic4t>6ccX52b;yBuOCAKKb>-#AEiS^+EnmaPf z`NM|2;3xZWLLkK=IJ~;<%7{WnZi|5SJyt-SPjngnjeJaK-uBjE`Swa1kABKkij;KJ z%ZB4rVMgLfeuRA!kb$YX)s>`LEf>)i(dksQUDEJ;@Ol-1@R;J?fs#3(S+xX)wzs~% zOpXywx>7UU7i%a#DoT}_xU8hn$;f~;8%Bqm2jK^d z>09$!KXBSG`-BAtmFwJ)|*`4uja<6{R?I(&Ib~yi89%e?C}*@pKRxS@Ajw$3-XM^*707q5)bmp z3t1+a3%Spm@7cl8J%^RGF5a(=gT1!{yVudz=Cv-i&Y8j3ndgoAhlkdKnzddRU)wL1 z15Li~O%1!)S-YEFZ!X{W$A-1<`nP3g-W+)8!@aYk*Z1wW&*uZ1P7m+T&okt>Y(MXJ z%8cs5;jX}6R4nIK?_fSaq+$Hh{5}{cctB+h4^W`|-=~JQXiEE{wus|^9)O!cKpjW; zwsFJcB@f-s3rL_BAezN9?tBnkKyFeFvUb988xXb4gZ;mWM=6VAiwN_S7A&Mmu&7Ba z+QY4Qb5Jb zKvUils5C%Ai6ZQ{T`4jYwLf53QNXlNL}FU8NFr|KWvNjT^Xz+=YPsod3EEYn15+F) zJ{tPGu-1vNbV%|h8mBLEMzHMCO~U6`YxS|uP%VqqYS;;bMP2ZIkMFzT65n@B@rR2Vd!-9oAu z>E{Gg1I#D?0g$voavFyf$dDdfP`G8bVL6kgsyf6t8n7`KH;Y4eF_sqn@rGV#GUJR+ zZJVmII_Jy*Y-1o8|2~r6PNDx?`JI_izt* zj6rE=cig0>(YW13p?Nk4F+jSFTjjNM$)_C2jK%>L`L*08QKEAl0W~hB?4; zZy}+Y92P|)u#Q)77(ng*5ORz}v182%noJC~35bg;6A49oO5r;tC6zZ$Nz6IHAG5BU zZ1(MB`0vsw%!L#Z`=R<{FWSUA1%;OmTS^~nlB#&`Qb0SRKf>OO#DP5FSR(0`5U^g$ zd7?9)O4_G}Z8|(QEVOfa5qF3%5oSNqQ{&DVq+U9OJ9=H{>EmdN;Wa9cUkokUsxY(d z_5YjOunz%)dXhR)6`Nf8O=Lr5VY@u7@?nAlRxF~)*ce?^YSI2kJ3K|nBTX3XH*6^> zIq)O}=!2|>$WNdEC>0l1%iBkz&bW}e<~Fl(0;WV5&zi|(lHsW|;DJ<}?CPk*Or@I# zEmBQX(o=dz`rK-jENDA~o-QZ*iJ`x5$^87-Y&|aLH>RuV_dldEMEz&`r$x0?V4M~L zw}s=U1HnGr4AG?sL~-()fkwg}^D8IyVxy>P;ZwRr<({cSu90d`jW;Tj4mma$7S=u0 z2s)%igl6%wL9zt38_1oMBiEI+Vi&cCV6&laiU*$|?>uc2{W>W;xd-$s|Ipi}JpqVX zFem2jmnTq9-j0embh%ww{^U3bdG0l<8nCd3JCC46&@5dmWayD-nrdFsp}%@^q9Bhz(N1~~aKP2e^AmhC!ES^oPx_u=;$Ml3!D|rJ||0o)9E+w&DMed=y za<+i_SUlUp!HOkzbRUIHZJRMw@DC_k>cTP6%QI5gA;?Gk0AZ79_MUULPGxvEN^8_Z zxrOX(p;nHA^^7ldMNM1b*g;X{qD|f3v&zD<($@ru7J|o3jzf61@XvJ>rlmBhw$Jof zd8H>+miV==>ha`)Nk{eb@{4&ah6iTlvP*~lFkM1fm0Zd7L}L-6Wm@!4X_*5?WDc1N ziXJ&#E&}6b$eSsBLad~EqWgNqN+d{nM=Kf%$9c;|CaK$9*OXce^H|wHNj)yDRGWyA zSC}ZeP1c;K`vBTlL8OWeww}uCjL>eM75Cd|>lqOh^3Y|H;(FO)nlulycB(>D?Q{s* z1Ss7tRIGKq3TLmVDY5J8(c#K@i({#^CTs+1P1G_$-I@v*?Vz{u(!#(M4Sjr(rix&p zyK6Z*%z?=;C*aWxO=Fj}eeC2Un44_JGy4p6-*`?g4%B^sw?KkAy~ZI#Uq=KYejR^x z>3Kjg(C+OYvJ7Z|uKPg3zr=j2zzo@D%Flot(|CP;h!4_QhSOjO@MAA%9O|{)6DUAV zhP+gu&m`j2C}nSg+SOFOL(`?XB~P9KIGBHS5!znYPxuJ!7nd%~`lc5!c}>ef!X2O= z38MCex#Dm!BC!G0j%uz*GBsMrC5!Mp*wf!iAbcQyuhP!gGf>_P z}|6ZKTgQBDOW1iKZj!sbGNY(j)iIee_ z`H?V8gfoN|(2MbR3(AVDjh41vm^=6n0u}x z<9C4qsf}YkK?=&wORaMz@my;CAnQApN!v!tHn}LL6sk#NnKBbSw0JtUdy=8K;jUS^u5cSMTsRnt>(5FsU5kYB{aZXf zcQeY))cuDv-0NoZVbQMZAr{0IpAw>QB9Mx%WxIGv0Xb-G>&M~a2DfJNPMNA9#(1ur zhB&;H%fpuydG{Y zCFm?QD(sKlj2%K#j{T zkZGDAssQSEX6OB}qwryvqavO8iCk#q3|Tfwq6;IPs0N%Tk*;QgxTTw@GYY|3qUwk= zQoJk7VfEN=`Fl!SQ}mI+9g}Z1@WSG;EZ`1i?~VU!pL^f8mL$E40IiX2RScI>^Sjeq1|le5$t z_uuD+M&KEzO@QbIC9y0cQLI#Dx=6xtRND<2O!a(>D`{hC$*eGB`TI#UgQYQyD1#}{ zAbHmQ1AG#2lc1nl8foNA=&*iB_O)|)mdjrsrVN)_gl7b0TDg9$GHLCAiiiWT4zsUSsnHq+pO8AC?p(c(J=n>08Vf=+r1PG}wazag zOu9$M3EyZBN1GV^a0cq+V_r{n97<;knnm-_LiOZ!CrueN#pOs>iZ@Z?_%&V(nGr*y zrh#TU&Xm)zRK zsU_xc8TL#oZy!0#*={nAq@(xON-?YIf{D~@)n|8KL|Fw9+bOG_Us73+G-}A8+8Gv! z?fTiPx!QE^`Vb(4k7;*EO$(d!9II(EckbWT&8&Sv2O7rWzh(hBPKc3r??x*Zx{ zW0nX{hJt_KFvbF(HPX19bk)mFbJ5L~8f0VN(TEfzvWX&si3X9z;S&SRCx#<}qQ@HD zId|DQD=;E&-3v(YdE8#EeB=d!IRzT8<5DM(wAFyos!Ia!Qok9+lDjP!W5Gct^;x@M zy&*;{a$`EjN`@VkqPR1Ag=yLlr?FE(|eDHc_$0|He>SA@)kt{!sY=Lmm~ zD0HIfd-k`AjUo%6cd8TQ|LQGQSscM=ST&CE)l4RL@uFb4X{`65k)i<^UdK zsUIF=qd{dEUS!L=>-&EuC0q3c6wro`XRUhRXlSE#DiN0%n)|Qj(^9MfnVB%_bsY1| zp;bn#()s~j!@5s1DKyQi_7*MuAri=Ry7m%KVnqwyA39zct5$u$cFQpU`2`h`~-4gVRX?ia6_6TvmL6-{vF<9@JkY8=h2$RL?r#CQN( ztvoGbsn|)Z-p{HBTgU-hmRY2%ymP_su0fXbx-|lB;MrL+OgCHq6EOq;W!q%ZmnRlS zasNQ0af6!DwwwyXe$8p@X(Si&)7=>`M;_%h9B9SF!>o&JN4I#ToCWFhp;qP3a~m22 zEtTtoz;7qO+PgWAn_EO6YW8n%+bdW1&uc{*csHhP$2&)fji~8TUflbvg1Mv@p)RQ- z)lJeiwEj53ZNt6cfTdzkRCebkOOeb$y#yAF&!59o-K$`d)8X--_OeWElAPBVL7XeB zD8wTabItYtTVA7yB*tsCnI3?0EK72^#73}T{kyASO_o4{{Ad9oPVH}$l4g2Zk{M%k z$ZwGeqDM}w%hIg64A6|_U}4UN*0Icw_OA8Ia{=Q*D~*CIb3?vXyD!F^ys zO{Vx46j}k*$5^~61na$8+c(-|D+HORTGUc|yJWbX36eUM;14AALSlN*RiHAN0XQC& z0K#VA@f`EolmtlVbIv~}hI8_zIG5sfERQUeUlwfscGbz8Ro7IaW4D8G(LO}7t@=Y9 z%Qnn#IB)qRMde)OIN5^>rztkdNb^LQKP2Pa)^430e>FENUs6_uaHv<_i{!5sNV!`RX1Rkz zrR+FaW|=xGRxWhBoP#|Ih`_rz5%0Gah^?FaL#A15PM`5Nyf;XalMO2~;uWTh?S}lo z9{ZoX_Noza4o3?*sZA}32HZZK+G7dCcKp|b^r+qI2=3}lI1u76q&DdZ4xJQf^EkYdRp(I7;S$3dpk6wsmnT>3EV4BhlmA3grNuZBQ^n62UH7w#$rwT0#$QJK}}s4XJJ7ped5eQ^0wH_<66 zYw6k12IAOMtKLkV(GxHQ=cpvre z!8z_19%b@2B8l4v`H53@wd0pV#2|h&ZN<>iYJkzX^GY!>9}&e6F3Kx{l*vS^GB^GuozAs1O$9XJ0&xT5XQ)XJo{E_<=3s-E~ z1xg1IE)<++fMQa4wo@|7aAbs%FMtQTg#VASa|+HZ==OeWJh5$KVm`5LTN4`-JDJ$# z#I|i)lVoDsPQJXS&ds?x=eyavx@uQfb+7JKYp?#VU(X!@Us1D0&M4Zvji&>o-Z6dP zq3a9n8h*4sO-8|izRxn;CS)z~Ny($VL+aRuX35B?mSV`@NM+&ts7sOv$9OdE*sRft z;m4(HUA88UV$$4ii>+;%YQ~G(t78E-oS^C6w|xUfaCR>s`5@>4K1@lQf20zNGnifD*f1jLe;;hH!-rmGtww=+ zONE3mkk7DpU7wWDYg6u1fbHxcpc5esxU>Ihvb19#a&H+4U2uo-;4q{@s$YsU@l;3| zeDM59QW6uHX>NAmeIhRZz!r9)BFUtti<)Zi`|pi(f%dWTHhuOr`&ni~l`XdgyKeeM z8Y%6spf^gEjEehyUm|DiyBm?;WpDg5wP>T?~!s4j9&HnoG*u_h~QFuE2#A zsw^{>bHB|uG^gsywlz|T9tYN1F5eA?+{)?K{a}%mMFn&{`P576p*%~O0Mi5;SD2Mt zP4cOUhM}6?`YPH0SHhNFx`8TI4qd}oTy237XpEzE6Dp3W6{R^$WSo}P^Pf)5t=m6Y z|2VCYYBxk#1b5b8AYOjYUMw8-8Px4#GI4`q#H#Pt}LMXjp?TP_I+5b z5$0r}GR&hMOh(|w{)*&{@GsFVzB%TT35@mjx6j5vMYwLj54?mC?X1b)#u=)0#X&B9S4|*rI$am(Bt>Ii$%ZJzN%eF{@ z0Td5p+}(dp<*m$csk!&d^(CIZ4=<2ukl0%2>(-AiURjXZ5;qxB9Y>4yoAs~Z|6Mrk zfGbUlPaK!Gs`1av;UV};-4qhxGfwA7*-p@1trWd=yXg46k6C!M^?GKZyjIDU%IWXD zMd^AmVa57Sl+CE)tREF3H9gu59T&)IrKK%!o`4U1-?5mNl^{`55n;!8=XHTM@|sY{ zaiLwo6)Mg+o)%tW`F@wHp6O%3%%yarvmipsqK~`6ZZ~bAQ-9tqL`=G$&YARVZ>xF=Ghh|xo z_Os~}jog+2q@QiQcA3t;`*U0shlkZt)T6v8$9!WurFnNM!NuFn6qO1o zK1$WE+C$4;Ei^5+JeCH|gwX877kPM@WcV%>+<%26G71S?YPkOjf)Dhi+RSDq?in#} zAR=Bm9_`SCw>fV?(YSNq-nQONL&3V+AxLyIoQVAW=2=*Ou8PDb{dkd#!i{DK_{F)3 z8@ZT(1f7pViD-Z2hIf~OuYqi$@HTwUVO{OK>g+iAjr_gDeU-zH*A}`ZAX9LZJ>2&e zR2l>Sv9EAM99DRLP1d{WDhLeH$QV%23Frj|&Ei-;BP4>KXFF6k>O&@Q9Cb@@@$Kjy zDJDbNPCqb|HA696nhF9D`2$Ua_z%wzR?JvyrY8v2iAVXi&V!)_-bSFZF)VJ;|E_L4 z48s0YSk6<)g3V!=W~m(Id9+Q!DX<=pFUXJn*S=nehKTr&A@vCfwKqldVGPLO9wRSg zg5hG!Jg?iGrXF!u9y47{9!_Wt;rK4o6@%<#46yMOwd!NP>M+(ZEoHweo2<02Fl#T&M79i&Q3qk zwb^N`r6<#x(GxQY{WhHOdrqZgo&sIN@JZ2Zo#Mz%WGEyfGoPtp0zlkGKk{g2ic7|w zvWjAH^(#>4N1|NAViyj0*oQ}-tIJHI_wRpm$wq{&&q!PADj544QB&;dgK(40Q#Y=j zpODLd?)H~jcsu0=)qK3bQ0>Jz1&;YGp~?y2S~HeX8I%06qbq|=^6Vn})09+aF(bVnMA_dks_7TynpO*^zl9nf`y)*_Ub~U2L$Z?^{wn~q4qdkfMRS|fscQ(a9N!x7yV_hyE>J6Bdb7lNQ8*T&CoeV} zxRu6JU{Ux`pA4q4pH8hJ@g6`05-qy#(gtQ`Vs4BWAIYI7Mroi6nyg!^$JGX(ctWc<61E)R;Hx-w27QLu@332i~3wsVc^an>D-&iWX-HjFrn6o*i-a zDvlxCv;AwxFJ#y9BsWJ$$LV#i*;ZCKGX7r;RDN|vor@{&w_l*<^j~>XmDa$&ldlYM z%nk8S{NhHD)5Y&V1%2WQkz&hOC7X3(JM?194I?4`@8$#ctO>t3Kj9gR>%C@d{Ba#& zQH~S8$;l zO$!?vFR)ZY(QG3%)QP$DsT&Dd&NghROZ!8nQ_1@p{3D@-B~KXxcRIE(y*p<_UJu}{ zZ}_~BWg4;mZyKyZ83l;q-Z0?V`+@pynBj7NK{j-@S)IO11y&n@d{b6ZgN=nQ4dn%% z^)WRILyaza?(;GwV4^*K4y1}U_eS`M8bdO^K1Q_vhJ{FVsaq4mNKe~1Xpp%f4IMks zW}BW%5-u^1z2E`B!|SDoNUf%?_3VTJg_R0Q=NO)#nv5*gh79?V-)XIFY`AynX`&}J ziP6LSWEhA@s22i~jr!upC*~1I5IhtD#}soy3I${R>y^O5f94^$4;kqA@+sgz?y>1>0%%5KpQ3>YZf?6^Zt+@}sq9*UeTQ{@p{F)V5fTy5$H zZzz>z$-?`$T-noP@wr%MNj5gzGzQY6oU)X^3&-pksWN57U{)MrgkgzOtjekTspS%T zbPJFZ5S}5DORo0$O?R{%;_gslE7ztCVA1mumuadhD^XKSn@9BIuX%G|7vN>|3p&q1 zfcolTn6o#g(PTZVzvD1ISfrZxiruaOBeZ7uBC+v2jY|6{x)IV7fePA&`I33j=V1GC zp((0X;7gEmVs1jNLM}Kz7xDDK;2%U&qs6-%4gVYP=Ud` zvZ+0p&=#hwhGQw$+FU(54SeG_W~!hpCS^aFxU70PQ4#4DsXz=4=|eYZH#D#V8JZ2N zmpHQlmep@6oYcq|qU9s8VAv3_1_PM3Fxh&C0^GyYtS!C!G@`!+Lzqr;cR|`~cjc(6 z_~wGFkt9!GMUnM@+BPyEhbA(30t{oSB&h+c+gZL_^IUY_b!sC{zO5*z47DXt2Z5-2 zs{o!7rou~qGRm@Yl7ek|ETYPOq5O0{i>^uO5jtv{0KaTvaRX@;nE=#3f+ip$Hq#2z zDTEOLQ2ZKyn{n^Gg^ZYbS*K+7qq0GYfH{rB+^$_R*lsvm^6JMOXHI%5&a2in#LSA@ zq&)*Ms6Z8A$lD=;-7FPigaTQ0HQ}87B(SR&3pNYYOfjA9X=D{rZ(uZ&-%xy$1Ox^0 zI`M?n%bO*_t^&(u1lcA?jN)u(G-TfOJZ+}eqOJ3v_71rFvW^m9Zo8O2@yhiislI&8 zPP$lUmj1wx-yYl_)b;X)%ZWpXUcG9t!HZVe%2?ZGjcD6Zutj}F8sk|*D>+4diiL|M zK4v#?a&yRqE~;tD$6%RF)Gmc{MOToyUE&kL&w0V)A&{ruzEk2Ya7A_xXXda8qgM=x z7KZX&Z3W`Y!)^9Bt&!awPizD!gCO@V^U1q>7L9>b)a@C2Ol3deQOIu&%lQoq_iZoU zBm>E>I(d-EkC!~Dxpp0)=#EVCTAax}uBr--Gk)14g7>KE9VGNDCfX*UA0kl+aN#FbwC=0QM2m!=jvrrkh#eHVq< z4knNp^R~{9(UR3giB{>tD7lv~|3d;U0o%xRE5qhAYV3^X_W=}X>+#j=^PGV6gzPEj zu_&zRC}8Es!jI2AbL$!TAr0z2tbfJa z^do|ipVR?ZCmDq}+u-WtgBLb~Z(q(vWTeI3;k1dq+)SPFWVflUO4{-C3f{U5JJxZI ztt~E{ zsJW!OtD{{tDA2P-W1QkxXljD3moY|0i-e$l($B>U^V9JlbR`@^qHwB~Qtdv94f-gy z_H_G1?-nqO@rJx*t}GmjCA6US7$zwuTy;&Il^t&WI$H<-)jHEbMz zlQ@&pV35F>G5#}~}F6K#DJ-PMP3r(M=06ivkwWvIf>m;9I;H8BtKJn&p_ilK4UdEgBEE+XL z>cOB&U8heq+TaFAVf91po4QvW z=jtM`316;}&yf#Dwe?}{G$nQf`q~e(Ni+vj=TVuPl#jTzqQ&MYVT=dKx^p|6dM$^r z*xa41@MB~z+yf1T4R!jtx@gjod-8S`OSM$GBLc377zD3W#_Jz*2p86kw`$vcc>-nN z(bZ=VT6>LA)$PQ;m86RVD(F`Bo?989qfY}DMR5WI*_Dd5Uz`xNV3#`K6QI-YRk6sC zaUU!o#?5O>-WXJ0U0sE4iER%bdBzV{eI(NZoHvc9?F)_Hwatv-aXP3-)p&95-NAc@ z1TG+-0S=!K7@yc7W3SD>LQ0;!V*A|l`y)Qc;IC-jIb=@HtWM@zLJUBseIT~FIK*2B z=)Cn0Rj(vFm0C;6P`9Y@1vAa|ctb2E8`Ynm^vMO3Jp?itoZh`Vd)@V-x6D>4TPS=g zt^@sMkb2x1ZlFVcd8w%v*En!Q6kT#l@hP^Bz>rU~IZxDh6w<~_3=r}Bz;`ZQ7d!M`Egxb@?Hg?Y1lt@P3zOkI@V|CKp zy)7eSJaYg2CKHFF5TMLg#Jse>;ya{B)y>XjcgA3dLHgIG@5(nMfth2$o(Y#ogktXF zIg;Br(DPN2ea$%W!Yu6!>hPRQGL#NYhAl4}kgO?pbddD7e&t65uU$Um9R10Tdj$d^ z!ktgZtw1q&=={77fm|uO+8lm&?Bk5WfAo`yo!x{6TLQNKkvaaCf)RFort3@M=wf8u z?e6&*o-8-^%h2vx;akz07+K&3lq;D$(S)L zw8$4YJdDEx;jkx=;2k0K*LIM3ja1Q?4U}4Z9iHJ{K9jK#H#QNIqbcu6O!JZ43a}+t zPcVCgf_p<%S(P+Sc9ok8h@hOjebia7z_xU+FYiupg>T3IT}UrK8T1|_4-(QlB_jP- zT(N2?)tPn!EQKl6bm>(jz)XwHsF?ES5py$LNb;Dh59VyZ1!D2a8a}oQSkIRY!L1`( zehG_nH{{4*ayaYD?l9DB(L!f(BF`U4u!<6HGh!c-iwRmP#Cd=@vXx-*YqEoz(; zsJybIdY+KGWp86rcAZ@cxS*iSk?qfNLAN|l>7n@jK)pIb+F5K{zk;S|?w2w+cLP|* z5$8<8x|-QGyY^5#+iekL{9{qwR{I6{rZj0F5RMC=fD zk6)?fF^rV}4isLCa>1o(v4n#F6D+8|{$sp!fIg)0F={Iyz-#T;wj?1YC6K9CxzN*j za!yN;S};fNh+AgvNK)nvEKv*dl$F`AF1`5!gCZ>Vk-|J$gVBbXg-*4d+2LriLSLzc zZ`=v)Oseu>%19#LB%nzk_dE_0uCi%tyVni1!M%t;?iiLn|Bg({{A{s?Y#t_3j9hwI zjjVQAxUz6GV9;jIRWsAZ-vOs{7CIyz)QhexQhtmB%z87{Nwtcub~iL>8JT>z2D7v! z68|67nK}jw1%qN5)xr%absK+YT@Ca5T#k5U zz3FS0Gl~mg0qzr8*03vcMcck+0u37O_du z4qmY}U$WBp}?KcoALUm_(fAX1Jds7)F`=CF_u z?v=Jy(5!t1@;R`V)!%=as`meagxlfuP4Oj=1F=86x{4PW0eQb-G+-z`oaU&1b=?v$ z{_fDD|HGz<*dm;N8P>S1j>r4gKR)fVXf>W#%5B2K83=L_Drii=2tJSuVnuVuL6b2Xy0zI1wR44PV42qJdCUuMK z6_s?I0PcefgMFW8ftaF*#Yib88wU7<0+15`GwN+HYiCYZV?y^3#DZN1Af`BKK0kC8 zr&-%0{lC@niXq-ZHpu3lQKe{;-WZDFk|f};s_g3UR#>ixztzbt{bkxkYDLHUqHha}UTG(4VDiCOP8K*pmT~L&VyPlCEe#hl_2nOkyVzGRd zbg|ESZt?MP@|D-+7rCr z2^+ZMrF-8Cf!)XOwa?+{oX5wO+&O-r3>9^>g9fP3McVv&TLybV9}Do!i}{ z>o~6WhTXr+X_Y(jB}|7dA1Je)F2~KQjH4h$uU>ZOrUq?1gl(eqEWsom{midVLw=Ia zP`dMmxy0(-fsst=*ow0sY%MRDWzsMQJjVRjM~64HXEp}0_V$7@II&?zf*?3wZp$c! zILb1Wj<&yGgv7#H8vKwi>Q!6%nDXHMxhiBH5fPZj%*-;`XAd+q;`F}4KnWrR-%r7x z)ugU~Ydr3>`uOep*lXb3-~W66U~JbfqhdP+#WQ|DdzWPYG8<@`Ki}e=)zT(DKDvHh z^piIH;@}#L;vUF9Bdb>f zeaNHjN^tlid#}5JSHKo&2Kcy6{v$9}Vyeq7M=aATCe?xpQllcnT#l~iDp6w`z2jq73*f(#5JO@N7d4tA<+{IqJjaV;S{uVOS_@`<+ z>oj<1Uk$GG_zgPgACMU^{>jUO1hhY`;dw*GnSibr&OF+ahrw$Pwq2^xc&xFHl~9~9 ztR&s~e5U7D9kjznYgdm#iw|S(TJx7d1lJ1KJoH&m9|YjO`x@HyWxN##9|E-L9+)7y zPFi6(ID(r6SgMF}w75KjgwwTp{45SQulxuM`qsi`-7twhx7}bkX3Sye4=0>}C?jEC z#+Wl94rJa~7#;J=*FJa4o|b7VJ$0YT7!W3F=c|I9ME`KD9U$1dx&#OWbE=ds;O-mv z1^9jVetbbA2NQW_Z)I2jyf7NiC*E18Pa=kX4?OL`b8=iJ7m#Y?l_kjGZ0Tn(I2Tnt zxO>$m#K3&P;2Qb78HK3eL_Eo+^3KVOE7Sl*0G6$fniuJH*U~!D-K?O0vB`;uJ?3QB zg$p&vQ2w@tE*-C-6w_+6rWDrK<}whirQ`5(PQ@HiZE^B>^AQrRrXhh^LC|90%cNts z^Pk!rW4*Z=`=*#ShVQpPVa8K<4xP4Q0c%{uULv*kmL=9jwF8m`is^my*#9CEu+fCVcC{XXS;Kc;56#v*%T;)vxFdFiW)afN;tXg;?du=!kX zfZLSgCAeS}^Go?0EBt%;ywdPYV)=D_GYMx@Ty(o@XZg`>GWHifv6H{v$fJTsA30Sh zl_vAV>FX1#!O`5SGK0b6t~Y~5viNaknTZ%YV~dTois&5*d~jgIcSam6ezwW^k#XVe z$ejbT$ML~cbJUxg6>ED+u{}X-w6fz@$S3H^HZ0$(+*wN4-n98lXT{$0UCR~Gm3aQ% z7JZMWt>!_d1!kP@8MPKuEGrJ;^TyCJ7}32O-w2=ws)XmSb4cWtM~k;$cUKEf;*4_Z zw0=6wr96RrxIt@oG^|eX;Q2)+2bzGbmDa1l5sU^85mTo8a40s+4ZZP|Y3_Bzghk@+ zwc?cUt4V{W0L%!|Grjn<=w%{(S6GrOmCsw=V3e2)#LY6Ft$sI=7J)pyzk>DP{t!j* zjP2ra!e>V2Hs6Fb&*S%}k$6N~dZ9oTv3KgGQ3yhT9L>%bj}$=%ibzRvKNS&U zKr_ZjyVp7&t*1z7Xt-ClU_iaj+UmDLazneE3_oHex~4Bu*fG*O3!E0 zPQXJ?uU8vhokLYIA878Tw>jnfbrHx*n78yD&ahD_0$z}2@ke>ZfCWbhJfcmrr^ogl zw<&D4)8icxbi5pt_w?P%-V3rh6K$B$*Rb!afi=yt_Lc{lb;C4d%#8Q*mq);uwzX`~ z3CtH(v1EMqx(avBfMcP_Qph5@I1`5eM~?ur%9jWi?He=z;RZJ_e)0z~&8tU4sGy_) zVJsf@)sTTRnWqvYaQ^^KaW2q$yNZP-(b9wpa5&kt>AiPHn?Lsv8hum%A1{ayV(!PA zX&6XnuNgB8Mb%JNm-9)989f+l$V@+B`tu-XEOLt=>1W^6b2~0_ z7`>7gPiG50y0@I{+*;=}@xPVm zdi{5W?ti28Y)$`Hw4Q5*UhH}+MraLhPk*Xj<7%C0tf1mKq(p(O8@aNKQqJ@EDCKXC zRdPKSH~)(srr1Fd<$Wc)1YoSx>C(;%DG`yzmhZ2(t@WoT`==U%?w+rgy(1yKC+|V2>hFHo?m3|Qcwg{GXP}x!2s_5mc!Lpb@oIZIs9WVzT zx59kWU`V9C+3J1tkAQKG+M}a56yw!=d4!p1AXk_ zxhT#8SiL}`k(1cAlg?LbYp=2s5~P+mv)pmElNzt6qb%E|K}yK2)9l7*9-rG%#krno zc;Y(*;qwx7m#OCdFd28D(Uz5C-Rjt6CnP5%)N;co^_BBF1nag(pPADNC5bNym^^2ON~|#gbC0!q-VU2mNGQrM+?L@fs(%V$=tx%YJT=-z&2HdhV)pMN`3p{ShaJnQM7P;FeIFd(4Q%- zUYfOTdbt2C#SREA3cAd|I84`GU1dqHJ3_ZsCdomtV=8+FF-_v}K$w0o{V{cvoW;XT zA*sk(5b-RT%TlVmdosoUjC6{0I|<+1(;Ojq6)`|VYp-i6ARF3+?C)Zt7V+vILNB-J zsK;=v*($8tq#?0y`x=3IHglOD%8yT5sw;75REkXEj6&pVruyPUkCPrr+Pq^Qg|Kus z=w=Q5niygU%*(=t2+yOYf&$&$wm88IHwo_(9flZ^h1uKGvZy8sClxh%)q~3|#*^zr z0Az-broxHB99UF^R?kF8E-MkONh318> zmiAj0Da1URrX^ugOK$*OkQN=!3gnWj!J?e;6hjVPSTsl9b?M-A)qY0T#C6>*pVXsE zMw3@zCLz^<>gSA4X_wU`VA0cqL4YZtsrZ6@y9H+nty#lT{tX8I=QN=U8r8DIR9OHu z-=?IZmUK}Po?G#oR8s*Zb!AhT5Q;L!!vM_7?yi?tYSRvIotMm#N8d@DKce6dEXG>O z?0jT=G`di|aR?q3XBNz6)iF zLUAg4gI`JDjGKL8*l+11?+x5@UKQ{pBLBCMkhn^S_Rg$Ni$w!%%_VZlM=M^9i4A1;Fs+8F;9CYyk-U>dDc+F zvvW+{s)%XgQx~N)e1R`7{&CG+6R58LeiGr4r?w_fsssuwP{IXKC zGLwjV4c%MIb^}XRF+NgH){LzA+9b@vhMLMugsm))R6xYv<5qpNo!4dTD!XdsEga_4 z<(!G4L;y60}v2zGMS6JC)l}%)}dM$llGE?6h)!e zN{lojU`JtWo{5l?&7v{R1i0;4@sEakL`KjkQ=Bg9OIA?_yS-6CBC+S$T;8zgIF$}?Z|_jEE;BX2m>KZ7HBz5GrmROq5_Rlq=vuO2L6$NYPBf41iXzpvH1D8_^7 z@J6UC_8w6mE%y%MWP@G57q|7l%O3CcB}+sP*(z0ry`u?^8^W)&;c5*(v^kRws(9m zXVg!OR(qh;X_IW(i`0jrts?bOSUcZdVPl2FE*>QQS>?KQjD9t>;0gou+sPgO76S(7 zG;$vim=RyQB`$fRnqhVXT(gw7H+#|`LAmLcc~g*^kWw?t7Rd zcH_{w$7N8D8{S#)r@bwXkB*j}47NU>9``=p_SRR3uKeEb*ISnE-q!tcdp@7vFFq!i zW^(^^3-)|HzdpXD=6-(MzjyxB^u$Q0Vbpb+^3t!8e^T>1pmS5^?50&)VAlHZQ7cPU z{fN{k@C)pDI}_aM@qMfJnut9U{N#{-xW8X7nd$L;U16g8(f!gh^YwD`_;xy@;CFht z8RUolLHluZq{iVRNcSP^yCu8DZh`T_pWEH@bI$qn&F!^Xn{ljXOKxjI+jV~ni_352 z$EM(N6gf#^lyNJ2m zYNw>w>MV#3e!dn+W&CN3voRJ_ZAa^MH^vFz5dDG?mtAsR7O&%X040K<``lwjauNZ@ z;~&i_7ZG`**m5&)pG7>r-}-FiaqD`u_4|4fpv!ng#3@{0%Zr913Qvv)u ze@q8y5gmH>^smD<>{K}6dzbARaJ7wLK~@KTipkhJTO-3Gr2mBlu`WgPJOiy|T#5K? zT1J83;9wyHow7Mu$N^!9MWecg*39A0U+GMP1)}@M@lEFR32Jo@S5rbi%Q#v?fljQ= zC!m9QC#;ieXqZ5~egt;(W0Rb*1hkp3^>}|2al2(LzNLeD!>FzvOPaFxAL!<6x}vUF zukRknGwnVFlv7J+#p&zn6Jo8af3+Bz1s?eM2FJr}9lU~n7kIDzQk(G;w}XQUJ%~i- zCL+d^9P6kL2N?|b`E{!&gM4rqvgN79@~~SD2o{liqXYqxFQO<2v;Ss@)cfKGCk=ei z3o*?g$g)**zS&qprwz!j4T}tBV2noWq!biPmO8vy{TDwNoFAtZh|j!k*kvS( z4F5$N#JRHDkf(e`2Z+~)u8JiJLSyny6ZmV|Y*gP0nZap$igXiFxXEpJBXXUqpv`#* zX`CYc&_|`@!>zzDh@Z*p$zw7ZeEzjLB;^^?_&DXs8kDaLayCJ94gxBJ(^`6?4FxdP z$aBh89^_g4qpFAyq2P{lokT9E53EUI;=0nxil(K%Cr>oWjfAJc@c?Ncqb`D|%f^+j z(BCZVz*6Ou6fHpG5I|^9%y#N(K_-brBR6CT9mcP zO?5hzFwV5vF^MbvqJ||YumEY9nC=~SV-d#wqk$~DY5XXeYuKW?TSkkFHJ!N52n&_z zDC=>pii3=}Chy43WQ}BzmQhKoVS{?t?U5Q@;lmz=Jl<^Qdy@F6up|M%WF8dl*tj_U z70%g1pk}5trJ9B_;gB!!Y;ndy0f|WdtI_sr4itd6Hc$nANJ)KlbKH3)eQ8J@B6!ob z0!!5|R2#kAhqMtqK1`IW7^>HgUcwJU^~v}6~D+-#A%g!*=_;33201fE&GgDb(_7YJ!8hIROJ~v0~+Gk3)f4& zVE~_Xxer5+P4mp^A04yx5|MBLr3#*3@ee*(@Bym@PUI-WZly_>u(^0C=5>#yRuC}O zv3IOS7fQeF0)Q8a3oro2Oh(jdlC@Gi1pskn%?cYB1P5jctU=|YiwI(qh=O~hf3G+1 zeFSymAU$W=p2^XV(v}XY-HkZFD*Y+bzOX-Vs>U$#4?PH}yXa7de#I|g8v-NDKKpn~ zFykW&9C^`?9-$E9@Px616&fQ3sHxKtu?ov7pyqE!Ng;K3i9tv4LGEEdsUjsQ!b!~N zMwNHk9_M)XywCs&jB2flOL!0~V7b_2NU|CoV_bB#csOe{WH5v@GMxFcQcjKt@D`Vr zWCK?UvS$HI=k^T)rp zTpOx_go%2mA{jG(gJMSruMFiJmicDfqDfp4vDHanya#x{fRH*vJUoI74x@I0I#|H&l5lz!#h5*yqy@t3g#rT~WhPNnmn1fB5VM40A zFj4xaI+lhwhHD}lH8d3XT_%+hGX{-y0u&N7CIBBa7a!Dyfr$!9>>B>bL)z>N=JqlE zdV3nNnKdg16D1n(x(62P`-7?}xQV6}c@6+Z>TM~BLR_mIluDHVEHb5ae8`vvhcMs2 zQ7it9LR=|F#Ys8h@W8;PBnf8FT8csm)^xDAUbMW!Q={UXN@4MfuXU3nSjfLOXYYP6 zX*$7VX0CKUBh@E9D!%5%HIy;Y-vRTiI!Za$b2gdn^?@yo4m^^Y+*`vb0@(F$dC?gg zFkM`q6@?Ra>ob*gK@Y)#lh5&N~trrCWph9zyTxNC}y@I zh8F>Y6cqI@`Uy4}Ca%UBxIOluLZTBk@-}st*4#J1?=51*-slMzB^qDeZHajQh35ZuFUbD z0YE{5Em)~v_#y>nq*~DGTrO+OsG2*}Gz$_r@vC{`CtkZpir-E!@ZECZiIdp-U)WGN zhdQ_CvvUCCe|~xe4v)lUOZIeC2K#in6mp)$cd@hJm&PWZto@oT2s&ORP5Vw3O!9K| z!@5~!+LSTQ~sj1-+%j3{E7zv4PJq0f#Jioj4r zCm?sRW8!U~UR%!`5E2{&ZwfJaQ2!O*ui3HMFN8Eqy)#)(pQwu)V*&Qt@?MkPU2PHo z?24cFsU=_F|1+MgoMPr`LjVEc_W}W7|G#8XO^j@84D8HYjGavljQ$U~)B`;o=k<0J z-xy!W%&?gK_K0kA)&;i>9I*nMCDgJ6)p=RU!h9M@bFp{?N$rt~tS^0#&H!|wc%FLD zH$HMG`|ZmXEP8*v(~nDt|S+ihXvlsZxlslY4S;@I1E( zZi+QGBuQ!$*v*$8hrCZnGE$R%Rq?n76i$BQN|yJ1^+9FWUC1(2$v=&VeiU{F*>(nTw}Kh2 zmN3_9pGnv}m0z=v30624M%3WVWX~if%pgo&ST?quj3n$sR+bc$eKK5=8I}`&oAms~YEc-Z26sSa_5vB|c5<|@44jtv*LejjLlmI`->%4tPoRNAu5k!~BArmGL*8Ze#Pj zHv3bi5^7eM0}l>Q8OtLCEJL9Q{4wz#h*W_riQjb+ zH#x^}QKXLsq!tmWdenbI9ob(R?KE6?5Aw6=UpLH_Mqw{%u&V7g5SEULUaq%{jh!+r zH{i_RFVwi)qlk;lB_ya+r~%DJgv&yK&CF$aTJAbYC|WCM>lk~%CV3zHWVkt5HCol# z7Rz@r&lBGUuR!dq>-sltU>XAV$SFtzVe<3X!S4zoKeW5hyMVkf*whjK2N;=4yUrVu z=f2IuoKT(2d5%(IR3|Ji_LrU)BKsMo7PRgUuLF{mC_Cm-wt3iK-0xGj5*z5AdUcKa|2t!EE|@7xcc8d^Uc^KXpr6m zALq3O?5maG280KuVj-)tYvLFxbLVP{?!LeBVU_JX^9~OVGYh6|=;RzQKf2Q&d}_SWo-V$j3?l|cNb5e6%*ZjFCBm8-Z*`CntItGb!>-Xr74*Lm)tpe z<_KIu{yc|v(&BWr$p%4bqnDLU{14M;+ExoaAgS|XSqDtmVaRyM+0(N#x|s9vHqBT` z&&%(H=v=o$W;@s%KZle`q@ZlKY&fP%@SW=MT-HId<)Kf?4PIgiZ-dEJ(wdOd3~vMB z1hV<3UI#$62kObxNrTPED`5+M9^^@i;T?HwM0u+F^RwLu0-2yi zzis*zTh>f@x?{-bFtF2yn3s61Sr|`?0E|Kx; zm+V?{vd352c48uHy(In0JgRt6s|<(=Flum4^(W*xuspOvd0!W%)JE5KnfIeRz`(&d}W{ZkC( zVPft{HwZv{6}D0#bZF>IrmK3?KDM$)(#0c3Sag0NH5z5iT6m~B{aaOBLBSNv%$ZyU zC;%QKP&_v?tn9a$2T?>SlLXMG7m@O~UJ+J}0;uP2QSb@(qatSaF?q zjTMkDN%-SOf=ZmYEo_XUDZe|1K{)SZQ=*Q!b^v4$rXc{KSc+om8|DgIm5bChn94B0-Q0 zjbS^V*gQir70}i<(RbWt(~tg!MZR@RzIB*Bg`MzdJDD6b*KLezFd>&vsq44x(=HQ3 zXcetwTiN2<>sj&HjJk-JFM3gY+_?In)uU@DZvK5}wYWnadgxLg7iW5gJ)$knR1S>8 zw!&IihguV6BDpYb*IJ`f5cQYXi+|+-xLKoyO&3vkY~vcr+9xmLh-%@`dH`5^(-Nv` zJNP16akbSSulqK35>@jDkFi=dX;DMCnZN+lEKL{geX#aEUjL7>dkpTR-}XQsbCSt~ z6HRQ}wly&)wr$(CZQHhOCllMa|9PIh&))mobLyV^qPwd5MfZ!Y>aJeD@A@q2I1Be% z1L!1?y|2yd28u;bk`*YS+2jmTOfXr2zl>ou!6)aS2p$iTcQn3jBIvQw4NOqc8ip-z zgIm=pNG`!*0lCW?$D^6-TFfXOa{;N4uA2|$%qsu%z#n6HD8)RfC4Q0Gnow;m{kk5C z>ocD34%Fnrsnl_3dt&U<5|}r+KUnsyz!>;e4u=}528&U`P6}q1HQoBg9DjLAy95n1 zVY)X^EBt2?I+$T*LZTO9zj_4-f?){KuGg7f;fRNlCDxt<&QETUaZ8!>D!WO?>B1Wo zty-N<)4h(Lsc4ib;(p&W5J#N2SJ8uUoz0-EjI7>UT?S4{lxxxyyS11ry(?PlN?6y* zo%ae(PGVIaz7qw$?OAp2*!rH$L2Z&fP>Y)MKtEFRUoI2jNl|z$}Wx%0;Uq-%zFOEO;o#u8dAY8k;@%iZYshARLaO9q`);1}k9|2|V z9^p@fXxy8ex``RaBi6yv*onG4f4NSL+S|x$)PRjjYelO}$MnnZ%RiR*X#D$|y4zE? zS>?=xSU|&gK7j=hmiXpPOp%kMY)&MBDen}m-if6NzJx8yGD<;FXldZz8 zHh*R8Br=w$AyE(dM+;{HDsk#keNBTKJ2szpext+O3D1K%>q4Hb)E)?$>FutO=^eJQ zx8lN71Mc(Fcq*cdeLs=aDTT$I@r~M}-Nz2?f)J~34pdebmL0=X5v^}slPt=GCmJT4 zCou00ohRqNld9oXT{+aEJ*v+a@7k_qwg&DD^h6!gi4_M&Gd=rRzr~>G`@!W>c^zN9 z+-vX6H=1OPK9j%GYSEL&%j1Q$u2c9(!;uF!_XgEg8_zuhEG~jagkuYOP)y)qwmRTb z&UeM*yCewfHEuxNC0PuTXpib0IZPsQfR=0bOgcg`1IN|X_`lcv+1q<)ZrOl%)$nFpXxI?c?e{K2I~i2%5C;~!l5`WMvj<}`lIG%4paDQRa2Ow(HN zH*H&0Y&23dM^J&qy7K-pZlVmmAl!(^Si;Ob`o78%Bl@tItK!|J?JFNeV-Kt0_yac- zwZ|VX*c5ev&0jyr(tGQJNyPZ9&W?$=*1ty^C0gF(PCbLI@DMFcq~O8M%FA(2+?e+k@xsqSj1l%| zHZ5VR?>ij)kOga@BTOZLnQeZiBqw1-ca)mLQx*`3&qUER6q1uxN%e~nK1?@IRy`Z7 zvj0KB%L%7IP`R%%-J52|iY2++drLv5awjv~pvQ`qZ{m_NQ8v$(flS3xQ`YYrG~Z?- zuPS%X*ifF!K}ZS}GPrVeC;f#&SVU2iY6Dm-y6}#@PhN4x776i0UH>jF-$uedJ-)z6 zJ>M;oNE8VM$-Fjc=#626!Rg)oZvjlSe&hfCe(DtCc z`u-P#U6UG&cUC7cluNczkRx!9zBW2SJ}$pB|0J?t1E{!7aJW{)bs~Hxtd4T~%E`@O z%NR*bzzhv>Nc&}?SB>2D%@?%qkV`Q`l!~bw*Y)avr6Xr+raR{J93TF7`IdzlfRb!u zD>Na=!QPb>-sg=>7IyeR_YhB&WK0asu4){zZ&RIKSuz0B0S~>BUoE=TS%BT`6lu=gMxkvOj|K_|`S)TTG0&mnXQSav*qbbu@nmdhBj=eQ8 z%7f9`K3$}O9ox7C1}%*wbKj9pQ8`$1`Yt}Xlt@8VO}zj6``7d#RJT}l1itZ$jzG1= zru1x87e~%`_{-qHWss5$Fl@xKHOekQhI{ZnZki@;?RC~9688dW!+GhjfWbIpz5qmu z17ODc03@5uwZmm&EX7*}%kpNz z4B;?z_N2vwLJC(u;eUA3?ZaV(!!`Fqf4pg-pAG-vO{=2Vs4bl~Yk2?dO)Fwd{C98K zu5Y+skqbqduqjn(pxrjbvaDkQ=KLE0jnP8uh++A%Du&|3$h@XYA|pRs-SsCj6TIGx z*s9>Q)X5F>w?2#HOEH4yVt=NPq6*gz(dZO6B>tE@%eGDzS2S(qf!-Jhbj4-H#wQ2)~xp9lwfSzb{GfgDSmw|SHpQ#BU(*i_N z_;vWkMGCqz!AcT9n6!gWh0c?jpYIfA%Snbum_gxv!mQjskU*03wRk`+Q>CuyB#1=A z({hd+kV#g3&bn3Bp_*H*E#y|#QJaN4)6kseU3{pmomjZlm%U!dBCLW3Q(tVTE!*wJ zD{(sxF+``^IKPocBbE$7OCNUnchdC4-k@OL&vH`7Qg#W)Ih0sWNFANJ?0?7CA2hO~ zyvzDpJd41@5@nm%y)a?Yip!upaj?)eod^cNmfoqciKxO>C@ZX$TcifXAjSHJhdU*eAq{I!)V+-Iv*how`ZgABEvqTT(JkXm;F$V>vNJP>vm` zB}_#_iPbgcINH_}Li^zeCl>aFam0{9sMQvSvre9Kgqgt{czGegVW}nahCsaN6PpF#A5l{#F162cM{{>Y; z!s%oQU{Y@Q;Snwso)V$6ArpyiWH`G?i};so=qd={2DN4I%?O!)YjayY3XUS;mB2`E z!O-i*O9zWKPTZ>8XlV&%7C0Z>9ZzT2x3M>8wcjKWSKe+<){k(5!&%MKwA7kBxyO=0 z6MmP2)s!t>lt*`gh??2VhCPX2F`i#Q!R@pMf?bFpA4A0Cv1c#iMa@cA_pA+bWfsTE z__3mKu2qqM-{6BQoj*POooiPxa6a;mXsioYLQ+Resk2uOUmHEhB3@K=kjqc0v%H|F ztt4{9n8QB~7cm26IWwak@tnZnhaAdu0Sk03VrgFmJfT!*We%?pBnL(uy^fgEfahWByYIMTb-PC zs3k4>*c16DW!;+kjN0~+-X@Lt7iAr$z%?>43-z8VIWH@gzlc*1CISD2hJq{`gN?<7DJ!{k(M1$ z4gt9nldBq+;z9R$yx0M342;H3GUYN)SvvTb4`27m?H@K3mUId7{^HGtl*j zrl_1isS~bG(8~4c!%~Z1J4e|;Xe~{ixR;eTw&N0(s0NZ$f|zTg#P?Fn_mugzNmI-I z?{BgzE+`Dl4O;Neh94`bHf5oz8Zl-Eh66Nu1Vj#*Qy9v%CiRA(eDRVlvpZLcD^sx& zW8@J#sSrkb_1$T@nZjc71^24d1q+}$T7>f?W;wf|wIheB8?2Mv!^gPI^c9D47wa-; z5lT7}MJHlE*>-bhS*)elX~IqrsjYH})!B99Xt9A~wR6Xgqosh}A!)SMDmChMtp5B%tfHuW#M@HG%AZycVm9B8Mn)p_0>< znzpR(BTTZf@b+YjEoJytF4VUai48L=L?X1Att@wJ0LEu~if8mw_+*JQwJlO#Rh}qS z{!vH8f`sKUp1nYF@hvcYI-D@rOKPd6JTTQvDiV-m)TcwFfnvtr$i$b@T9*V5a!u-X1=G^XzARG_F#;ixf zupRyK9g)fuzOubV!!Z7m>W_g)Z}S0!o&%Fq)|Yu|jK_NEF`u*mFM^-8lm!Bak&Z`< zWey%3zgAR!W|;l%r$S@GN$5k(*ECqMz-hK9HZf(8e)ORP^lK(rYVS9(%@uo=4rH&IMc1U>$y>HN< z8*BQGpaT_cVVRj&Z?xMrtfW6T2SiEg$M4sA4CxRc`Ha*strrk`cG;uyKm zgKq>c9^EgwK;k~s5n@D!rH_gb$re%GqPOHwGjKjgL$O;QpDD|YM~UBzva^(L$O*TU z<%{0JW+$Qj{pv}Byp5Lly>J0}g}G+% zHa%s#T_sz)SS3$!B(|eag@D9pA5nJ7+lJ3P`FcVIoOsz24Ecu&F3;2nMl}HU)OD3g z*Zr=l@uN+F`!AsTS_J@f7b)6vIaNsTs+W`NI@Lp6>2zZz*5*Ytz7XYAI>M}`+kM4O zt*znR??lJ5HuhPXFOWwSnb12=jPD;%_DB<$1mSJb1D(XoB?2u|n0EWc%kl_8$*{}1 zc{K`B1BL~Xwlmo|UEAVk0RKkMb;JpSVWC)4nj~0t2B$IA|wxh{w3PTkLs= z=0tAIr=~IuVl-KUQwjy&fmPXOjirmnpBA~FtUOWs{A|I<&ifrcVX3b9Ch2a`z62xPpH~F~W@=0+oWT^M+jrKG3uX4eRr#YpfFG7zK8^ykxzxWii{fuG$#$Ciz)d8K8 zWm#6<09hKo0pGcEXIjlC#1af$5Q?%um|^u+W*$CYpsQ-2;wuRWZHQ87Sv-k=8D*xGfT|Sj0oZ-=B2D2fngq(nSr+X3fP6RVh}Wpj>au+qe!G zY)Y3QhA|^M>55kk8mq3KQiNr|0gC`qe2wsl9o@#Qp`jL{cp+GUgTe2>^GyW8gl>o)MxV=BMy5ic9RQgU#LC7Uy6ZMz8evw`y-!F}@ zbPQl0B&K{}V~Vh%$%GZD9hYdU*KfVE_{7@2vey}L6Y+16TNnz;=DG(01G(p+0kk+| zEJw=wVlMbJiO{OZJlX2J4XiP;eHtuK)pV2 zkg@LyiXG!xO1&pKYICBBPQR=M#%wv1tJN2P^ne`gIJ|)%I2bNq^ECD~hO}l0JFO32 zKg!e}C1`G|9X4$O?SaY#o18mgKPc)%u%>8f?+#0RuGlYSy9eX_qjVE56HwO*fFdC07|$SNP=Zj4jF6<*f7)0ESVo^bLqk@T?N&-h+pW}^^Vzq!nXSsiKn1japb4Ht!j$#)qLdep<+*@|Ky0T*RBLQSNXe zt`zgy!a3eeo3>M?(YWapKdd=7Mxvp(>LpUA*~|&mbu-V|tKSH3wj3VKDyGETy!h(T zA-6b4?ja&2=a5KQ{I>eZ#>Y>>MKy$-iQWnBRpB?J4D-qFd$enKtQHZjC;-u;7Du+z>(}x7EtdSh;}-JOsCSjyo{>LItyR zP~b~3hs@Jb5FTl#ScCsn0<3mB^yNz*O!}9KE?4_`WkLf{;%?BV1R*e8DX~;U7J|D{ zXe3>t5zdj0Ytx}#*K^Jzm(}db9@W?1YwkHwi%<9|n&7-~<@o*>W7n=QvtS^86KmmD* zG23^PD|3mJlz&sQ1JK=L0{HmY2FGzrO?v(EK+!vRy7RE3tw&DY?D zYuXYL=1<9c(2gu{imwKpR&%1Vriflf1Wln|zoJ1~ZWsZm>X%hFv^Tf#rOv? z$hJF#Ty}|?&8*}1JnjJKZf&q@^KNM@{W6rHn@rA#wA*?9NlhkY52_5K*KAKvP-2$_ zRxA9tIQfZR>NK+%C`tSykra*#vFRX1EB;lLTbbvJV=E0irFZa}%Pd%&so|S28%(%f z0*fv?lOd&bw#}KkMn9cUm4}#I$u@?qn+Eos79CE(u}FD#DCcxPPd9C2>RczJjKE(w z6Bqi}czTp2QH?xodvnS@NkS`QTV9DlW$O!g>C+n7{ZC~mk22l)h?E8?X#-Hm{^;FQ zw#=0}EW2uxBO*9Q0|@}VTiN}O-p$f>#_aFz*kb_|eS1)6JRzTVn$DiJhKA*Zn&apZ zP|EtP1!c9IL>rTtMNGqq{(;Fg?&lN3_trbuO7rOR9aYL1d@4EVnqr?ez)U?^m(hSw zg4J9vI7+M>(vFvvqq)D(}i`6hIys8g-pJK}Zqr`y8vOX=n?XMU0ygfOvB zSlfUu&0|=aX&Q^zt>dV(H3$sC&YPb*3f9Yzx{I8Eex2f;MH*?bJM~{qs{SU+*wOnd^umK2~ibpT+q2<$f=)^Gs$X`@s|`bq4oQwz_UIXtWn#lT5I_V z2X}L2n!O3O^kzzECEfvwcMM9wt3o#OFzbiVa=KJ9X(c4qg-K-JAD6EOiBJ^?g{%qQrm%w zdbyq9#W#<+F;UU{qxlE@m^vFju9D4~^`y9CW$Dl_5kF7H(Az2}Ws!)CFp#N=v z*}>+utA(MSW_O0s;LwNGzHtkc;wAwvbG_fMVsq>~U5WF4cGJCEY?tdcF+p+W7~5Ei z9<<&CIKLOI4!-)Lm(H1Yvg;ZsK;vP&^fi)-EeYkoH*ohUE>7B@Y0N;=O*32jP@{T}D0*;!N+PPoJV&@@h=07mV0#snU{ zq9p;JyNL#MJ}G=h8*e2~_b>7-j_*EK_vB`swUUJJf#YAMNV--HSJ&Ai>kjP?^1KG| zE*G=xq+LMMP6Lcv`WPmuF2(Jh!i-i~eDb!WAQg%aH_gy=uu5P~e*a{cy-tr`J*}(l zs2x>7wUOFdLnM{vbPco>|Irai6P`n!+CVdQE)mJ@o?Rz5gCT^Jbnj1varvW63j8b4 z(<%2KjXcVB*+P3rj;-VXH*y%Wf!FC8NDFwljdOGf>5)xf194y?*@QsE2qcYSYEs-fI%Vx!Px^+CU|8GW>I*M zcqCJ*RK!%`z9gD@x*qrDBJSQc*1gMbax~7JNpZ`^^utMU=A7z*jEr{%Zh1F?*&b_q zUV6A3&{&gT=kG}G!JeF70^4@bJGnp2fg;VmPa_=%GK+$<>xE_VHr4UrPoKkyK(g;q z*=Hk3nLKsy7^q1d08m_+8n7ShI%d(RD?UIu=!Ouh+|v3Wk^99fx!WhpDG1H1hAa-Q z5mL7SuVNLrDcLbati*Pe$uL@?&sW6wN`c%Xi%-t7Sm*t;cfuK+;{AcVXoSE zy6-QjUQlM#O7O5%w18z6-Ga2mLOru9#WFjxAZo{eDsTlZPduAFKv|-2gqF!Jl7Q>_ z9S)+x54`u2J-tv(H6!vLfIC+iR~H!+_R!8?1945f+aq^&tmn$ z%I-)D3D8-HZt~bD&_|t_WwIx(y?^aHhZ2HhtKlfXv zb!EFcI>?cGl8pu7P(%1{;YwSRO8n-I{o*8nvxgUHE((`U^}2X1a+^kkjX6w;NNu*@ zGu2@gQnpL8!BBNwWtp)UnC4bT%LX$`(iS1Dq-DbZTb;=b0~cTH8`;Qt4ad|tyG<54 z5K`96Q2~yITOXMi@R46K({H*O`-0I3W^=7+@sRlm#pj952lOb~whRumr^r<;p z7|8&|90u*Zr$eeTA6fW8?h%>B_DyN6bKr)hIff%xiVN)2V~yZ=bs>1Ae9j52F6Wv` zG%d0GQYw6jruJ}L zW1}IFM*s1V8i^|5(9Y^%IIA5td2}m^*n}cbKDCgkPv;R^?|%{I9KF~#=ee^f{2^tK zG9C;x!EN3@NnnvXR0o8aGz(NGm4~mamXIGgJip5?Dn(as3R8V~Kp7eQwr&#-0p>aa zij_G|w3Q}99ubnt8nq?U6-Y6X zDOgCk?t{38bE5Lv=(k@6L|3-54BsEae5>Tx03DpVSfD7Uguv4a*IO9>rXUJ{m>24{ z{DqhoYNP%GG0&(PNkXV#9Tj6%%{08I&o?k#a)(R!PsH3RLs96GDY<`{jO3q)dC}2d zi1|iSkD>2+$SjMHTlxC&jNSo2HmCUOKolUFn>VoBp5uTe*S+~M*Hr?WFq}5=_Kpi< z+7@bfLSgJ3@8$#mCwpr%ZjatYd^}60^adwdrhc|)kQv7x(&mXVL)^~SWcFvwEuCiGq?G;w)k8t?pV|?UNzAHO^5sl3LhP&uF?K&2n%d);ZhcKSGNoxC=Pn%-ePyNwUqZ zWr#MYrXBn!y~lS>)4=OYKj+S4`?_@Gr4F&~GvZ8b2gk|9VpS#GvDp7s%teeu_A+Ba zAs|B>FNs#i3GRZM1tCEkI+mP$;aw4>j5ZCy0f0Hhd~uVidI0rxm@1fSw5wDtSw?#e z%oifH=S)28uLbj`u<;8?#a$phym?5oZ^CvbUd3{AW`I69zkJGji=CU?K}?Jl{8aFvl!>MgGN=omXL|>`dK$Iw;T(Xc z9ButUS#P67kvjueiDBYg0kGYVNvB}biIc6 z0Z)yQDUI~}TgpU~@T6O<-FgYN(>X(;*sG+r4y}R(20dY7Dx`?VT8_ZBJkk=S^*%4Y z$M|j8ow%)Em`)<7eF9u_$At4XS!rjBS>TgfUH5pk0Y^G{%Y&he=M)jMadb++d6ZVe z)v_|fP;ICu(CBXeSH!&QOKPhOU!}?olZ4KU6AID45ObMlgOymq%}-f7q3vnq%fAqF zFs^{AL&xrg-)Qy5lW@pO)gurdb9S2Ji{CnJ3W*Q&#F(AIiP#YJV+V)V+EcNh5Iu_J zVmczgJk)752Xc1xMaCBODW_f42*L{4)nb)>^IO$q_}PXzf>Fs>@0j=p;J}+;{zA;v ztD)(;d?WuL=4hq)27W!bwlut~qaDIZ&p=>Yy(sx`UGwyPTBN??E!j=mQe{hV>^ntV zG1&4g?md9TamwRc1fTtOsunaIpT8Az-_H1DRtg6sC4gf7lu45M>#=VXoM^BH?=JNt z*9j7fPD~N*8~9Ox^Ve^X0fwQz_w*FlRoT_xAB9rkT2>{AAVi`(o}dEeJyU&3e<|iT z2$oF8E>1_d-Q*PH`~OtT!SCrZXwS&Cq*0H}u>VrbQ8xZ4=H<=*T`?C&a|ku;cIDMn zruY!QjW?|`hIJR|=jl4Sw7WT|Vy%4$&ffopsn15$RTj(lrq<43Ba7Mn4JOqM1{hgO z?I=WKgIT1stqfq8y8$qBbucJfxGBnAlsk+})qaX&CeFHGzs&@vdxIs8!QnJfzF=dgJ+xmdk~5Fe4^ClJc<` z)e8C<1j*4*i*Ly#F*nHLTQT@pB%%d9tx`BaVNbLun0)Cb-_O0vj@uH7epeGhWEaI% zA|J8kp_mKJ+%o|z-bMsIL^Ol7TX11&%&j^0*!J5K&gg9AqnzzvOzQIVD4)&AnC($@ zp&2HM|8mSjhyfYRzZ~;irT=uywaZNbj(L+H{2#|WIXc5*e)m^tq>E{r6eKLEqNSB3-BSUGrTOSX2f*Xg;A%;nAaIx+W8rS zO;rLkQ57s$DZK#KL3Gr_ZpV`_-96bHe;x_@eA%f`c!4THSH6BYl#`HVk8d`YC>K>$ z+Ih{!5;uT2`r$pJYs`K{Kh1Zd`2BLA6Pj*fVy2uw?*emaBL*->G{ zfvg8b(yS1h_;zk(B^?UceQ9C8TKycFAjQZcIFA6jGAr#IL8@?l(JGxbgsq^&Sjbuz z09n^qa+q@4qZ|THbh1XQlgdhZxA^MuZK+>$XJXvxoO);oqX-8yzIj$y@lj;Cw{-qi zE7w7dZHt%DI9pD461SlAWpSWBBxY(i|7XBWY)&(7oS8A=hJ$Jyf!-WW(swc`4n zXR!A(05gbj&km?zx7=zKF|$V-2X>wo!pSczxU?v!m)2K5W6XICrKUhlJ5@D9T<7ph zm4GL2&*5_^Cgz`3dP?N)a#l$~gqB4s2xBvRjn959{Q)V;(ptr;OI&=|iFgMF({liB zv(rLgSU1MyG6AMA;AO_B;=u;_tJvFkxC}0zCdXXf(=F1AD3i!egomfq@ zB*IX>?qI#*JjSgzM%d97nSNK%dF49z%P}v*{x8Rz$pNYTAC5U1#r31>i(jVja}kLp zMdIP!S%hG^b%)cG;iGMie4~pBHe>>)B$bUKJoqsvzKlGALZQR!r{e(UE zOmoA#vrO%l%C^!AJZgT~7d-dBh6?hyla$DJd%Xduu1IOEhy`d&rI1ncKfR z=KBE0{8d`8nE4p~r44vnH|qh!9g4L}6Q(P?SKnjJub08SV`#fgcBlU%Cg2fy((0yD zj6A86>J7&Fg5c?*fv)vjWoJo|?>@5s5$2ImaThaSDaz33`EWf8>7O=6cI0B!Df zdH2*1tozc!lV+rat@>;e49&CD>66nEVwZArk+Olo3ye{m$_WQa2qetocc1hoHbeJyQ+ zucb&~)MJOW%9n`~;8mL;*mDMUJ$|+@L|SKZq_B@;98oSKM9N1BwszYTM< zSYP_+&gcgNxo8Mm@Qi`Lz|?*a(!2e&6+82<@ievII`MCaB&X=8e;MZ0o3SjUe+=^p zO;vpdpFf7VftXO5I+Vkhp~Fi+F9d>7ZF_m>sd$I(Ua`824jeW{esuxYgkv!rC!U#A zEJrEC&kc6$^XjXJZndKcECX?q77vxJ8R@H}wL7y`a)v*KIW{42<==+6`G{5UfGhHu z9_r>a^U5hSWfP8%jXh_7qv{j^)jDi>?mLlx;$$r}W_L-X@^Zg;9+u{6Lb3<@jL$ux zq1RuA`NH3Zx$4E=hI!rqe1Lbr_#C17_sm>E zUcokO^}O)~mYqE+@@SM1i%^gJomqZ?htCKltONS@>Sf6_&(P7GB99Q&y#!cH@o|_0 z>M!eTkEP1<6~Q;Yy{?F69iJDZ_5hY!;Q`(xr&}%U3%ofAotyINjDKdgJUdUUL8J6L zJAOpAieRq3<~jJHTCf8$TXeETJG@yO90Ii;nrjs;J+Bp!;vCru0DQm9!%{qjDQ_n# zxCafnmVuqu6oS8ub0`~2jzuLMk2Am_T#VjRlM#CrpRDBHQ4(UnyX6Hi>0y5v=B8(V z8|JevC4U>{OUwT-%r$H3eOcJCP^l{_YQCCsyqMbkOeU2_kq#VR%a)8^we}7 zmnl-*+7u@#2$7L1&noVvR#y@`#6x?4hczFf5(cf}dd8QKlz@qlcHA0Rm(f%FCbJ}^ zz4(c|*fpC>wv-cHVJ!^D>iv80Ly}4gWCA zAOFiR5B!&5eo}g$98S;-Z7TiM!($p!0V4xe;~rdTCBd#9X#G-uXI`$MqZjcuvR=Rf zgd)@>zE0Kq7#0%Z#aL;gUv0~}7%s2@-0M9;+_{Pu&wXfWwki*Ld*bbb%l7!Y_vZ#m zn5u5)im+0b(m8=+B&s(_d0`kjo4{F(G{RWKeP7ejL|((DiqX;x*m~bvinsppe)pH% zWYA?;-p-nRph_@=t?toiP;YQB>2X9sf8zew#4spuJe+rX1Onjo;F%F3ejs`VXY)L8Tech zpy%`?&}f7CiF5l!*0E!95MnKAev})OINOGHz!1x1B9s>s~K*x2r3CO3<%qp8)Ep>n*G4aVhA?>hp3=rpHQh z`e<+L!{PSB+WmqPXN%+Plas5x>(VLf^L$PQ4`^y=a&73r?da;N`I5G!EokZe;r;2w zkDvqf=EimXVr%p1tH;yM&T|IJ$8|5*4NTW%*8jqoH+|mzf)%oIY*Qxtgo&OwZHg*- zzjZsh_7OUG+^e~DcK;ak!s)qu?Rs3B+lLGC&XEFLY@02MQ>$f~rZpdp-$sH2Ijv>=g6TilitZY!24jiU0Nq4PtJEtgdu zu?BDrt1P}1D=Ur1w)flr0WyF5yzg=4e}hwAHp(N>9C(dlk^7;%WMq8tVO2gw+HsygcI?)(87eQjlg4V;MA(2udy7=-Zi?#l7uGDkD%U3nou99o_8syv#`B=e{U;<( zF{U45fo29?&X>GKCO+9&K|@3DO%r-Y7G01P_pQCs%xzgwQ{$|>)h6OJ#!LaH7-}=1 z*c)9xK6NbIT%3InU9&Td3M-fXMVaUPq0E0|`kXb18G_+NrMhi!hB4nmP!Vj_sQIc| zd~kA~`Lo>zs$oy16?u$Rxhl&Oy+x_8tSN1QI$(2WHnC@Na&~ZDxOf!kPbW2g;Y~*C z5TLnhv*+fAXVUn0T9=OH_S z!B^J@8qW4JRY?nxA>d=Fcg3SCJiTXLCF5K7b?9FLN!1lE_oE;8=hsjt=;4a{99UTe zL7~fVdi+bFHuyKyg_kVb@_oEYI!!KH^(b`y5M4a9O*#`Ea(H%76$vkBzMJ;zV3?Tv z>RHK)|Dl;*Zhf+M`qq8TIj7`)>p4d-&zwL|8BaR!#*cjb9HGpF-4TAGCU-2T*m*sy zuy z65bD4IF@ltbWo(6jR(c3;a2`IuHsxkMWmeqWbq~TD?+<*p+(M2SqzkgMxW{38I%GF z75bQ*>he@#)Y*7==Hn~&luW0U^OLiCvymP~;)`%mlzGn^+R1-qJLV3BxwoJJ^`N`e zxlS&^Z!f#_Y8Pm|LW7Ofkf}CNuCO(`7k&b`|dWBpG)h?`APYK%}Qroy}L~MHTXoE<12IM)o0wc zLsN%!pI*Dh5_rQ%KRND3A@|(dxOsni*gTQsme^r;Gr(`=aA3vr+<9RpHcvsUYqDCE ze5x-n`0bTJpz+(iecj2Hxt}-K=$jkKtG|o}cN%g~kSXdc&STmUmb~1zf{lHa56q$ zSZi}4h(u`%gK-K_Q@VqqNKmb~GY`IMgy18NY|Tf1_qQ0RsocE4NodFWDInM}iSzou zfaZ^0wa`It4wPQ+W__TiUcUFXEV?^tQZ9gdJ&#N3PbGou z#`e>A&}S4{a(TlbV{+t`*RN3Il@_jqJvJ;Bb|p?|(3u3ZwQ zkAL+I+RX$E;{@{8b!AA=_9U=Sis<=qWX<(-*#JJVWk}}LOcGz(gH|MGkOwOy%j3>I zJ!Q8={m~a^zdqCGJt=%U{lq)Dl{t>Cd2i}T1!vhiHRZ&r75x2sr{f@d+e|lf^3Z|Wo8^5fXzB5*r9%-Cv^5jzY%F{*s zYClat0s&EA0s%4pe>yz&F4hKi+E&&Emj5HebARun=HLtq1Ppcz3Iz1mZb4PT4xbH? zJ54)hFWkupj&aQSt6TMT*`N+o_XhUqaWR4-`E;`^U2OM*<((H!hc+^%$4cMJG@mC~ zfqY7d`%i5R?{7lUc>w#Hx5l!Y=Cn`{1+>dMjm$Zfy60S~@k~QQQ1YWjfYQn_xLoDA z$zd)A_M>)nuNBN%9Ujt)sa@I#GEBKySV!i{tw@2<-{wl;D165&uQ1gHW`2u@@9}*$ zH%v;PMd%fE0_xEW5*3?8--D7bH#Bc1ivzo)hLZ*7U_2Bu`D#=4*D_4fa#3fmDTSJD zpHCm7fS%F~qSd#x91vRRM{vl`-|19f22R{`e8*c`e%O#IS<6@M?Y}yWW+Oe{8PM?a zU4`SLt^FmpISj_N@fh;+#{3QGxO(zSU3mMp2wp-udNiA}%1;WN9q#OL=8zf<^TF_> z!URaaRza7iP!!XHrQ@ss-I%(9ko z=BGoOCY*tj0^B_oqib^7ll`=mVYZK7^HLwEM+u1gQzlz^Xfe;?$>l*+{!1UAS# zcV;*vu4;L@vfhm=4roLNx_StM@{2S1DZjqcvvcY3yJv@3*cklUkwLm%! zVQtmw^%H01z6R}6D}T|o2*c`eA=`;I3{P}-br0)#w%637@FNOIKwja5@$JV`v2IM# z#SJ;@YDrub2o+Z-=GP{QJ^OF?AfPIM-i2IJWOG?(@8(EKBE~)@T@i^gC1Axgpa;HC zme7{?+9+AM9&uD?@19*SrZB(002IWUm5&8+2I@vjeq(?`_!RN*6)`s%uO5 zf<)wxA2=C5;A8hXKzh%u$VttoF(T~sT?+!W%7pOPn>AF7y=L*Ja`Rs0{CGR%iX0$G ztXx3ZeuD1~2^!`LUW(KJ@D#m%S>OHd4S~hv|sqSSrj82N`ghFW21G9wIapFGb^7S1JUxs?8D`)Ike*`D=D} z9;&SD3(|%WW6!{Zj!$=XOK^XY8RJHY*K$Qn$ciGhIDKy!q+h7(@9gV94P9L+lRK4C>6=}ZvQeHdNfknuh1 z;<_vEJs~1ORfJdLHlmuH9VbjH=VC>qO@;cF3v@*)PK0Zhp?#ia#q}oijJkZ-5W!`C zhHo&I1VQQM+^4GI9+0 zE{8|cF=}I)48ix#N6~sNDEI~AlyK|BYczo-UB*`WEW3r%cYOoSWHwu+?{Uj&9V{5y z>bH#q(Jh0i)EWoq_XWiA77B-7$YGV4=%sw}g?^lYuYs?86-}W^9a_Cp&ILMJA}!1T)zJcG%g~6*Ku=Zq_i#TV^7X zxn1n1FGq7P)8Y4;X>m{Q|A(@73=*YX*0j4<+gNSewr$(CyI0$`wc56A+qP}n_5`4?brr1CgHdSn+Nj*C zi_i^dtc_Lq&9R-J4-->&!8$APmM5ALk9^^m#S|5|zVBTPitDo7#NTdhs18{vucJukroO}CnC zvNF3L0Opz;k{;&wWS`jA=Jz5S$xRrzu@2k)>nt}{WO+mQPFkkbE`Os)?}fK_@5YlB zsLpbLdGaUI`mE;=Aw@*c%-3(^-ja%ryO+R3!DeB7Y)cfq{lkj8-n}H4yT#pynh6PP zix#041~MNM*;rYjgUT?$w%ZSn)yv;)SyBSYy~{tYhf!=X2|*r}7ltd} z3TV}66eEpxQmx-JDP4L|^Z{9gb7)c=$^=sQ^J8tL1+ znA_+wva!%OC@Vn#09lcGXgvI%IYU(JxXdqlq~PTV#Sa}sW&(I60!a`9rtqQO0qfI@ z)Kcd)aoRnuRFA9)lqeB_yzwmWZ6BIV8j&`eNHU2K?`qb83L-6w3=dTcLr%72#By6G z!K4XFrGz(guy7 zff+i36rShs;W}+?0-XuhLm}Z3wE)yYR6U1F?Sb-|L906^OX}_U>4(pUy&UdN$!psx zlgrI5`EM$7?d`4RuC(vHrOnDb@dH>peOVi{=XG{BvwvCK=xMP7=z{(CaJE+sx|)Pr9vh zeO4(c_)bZsy=^18%QN9YQ~iuQLEL36xlK2*`fj_hi$EG#JN})pGbsCg+{=hFNl3>j zwWDS64(7gB4UpXaa$AGiW8Z@=ajnvYmx$=Y7nYEfE@>x3<;Tc|DW^ef)Pq*=#Qos# z?NTfOG{2TAw|g=1^gv0~1mrF$&QgLBzA6Xxm497(HOZ)bw=fWn21RgPBM`gvatIYL z@Fg3JbIwQedS|h)fe*F1uzORitaj00Z*7g$nm+L{w`{_6t?+*l7+qYPi|K8zO>sED zYNC9Ex^dMP{r&|1gO8 z2gJ^(QI+M+WC4PZUNr|}dt1Dd@2}%A^^x&SJfj@=ABQv@gWgvEi@>N`@-G5o`hO7^ zA%u9HMc<0CalElPAm}qUup!tNrw51-pG<8JjlWMEH z91Mf;JP5$y)}hPIhEaBMvV#f!Bnxf}GFOpIB$25(U)Y5Ems(LkIDWrz+lD{~L}P;g z#bDH!{TG9A`ri!3GA=lLe3$6ck<7f{a%_1iwOXL0OuTa4PFDdL&*I#q*1=|!Y&yr=&PGeFO3FCNN(r*PY9#gcB25T6Xf%3 zoz%;SJx0hP7*Vta2a$uLq(kX4F#LR1Ria0=SD4|Qg^|oE)AtT;`VEO%p@LAz+#r!! zC3VVg!g(!~t$jnrR5QV%Sw;(cTv|V+kB1XIFL$UDuACn9xSJcxiOyCQEe2-E^!9YE z7=%9Ai)}>RXzbulKpi9rR1OYsPdyet)~037*K)2&kaxK5BlyVD(U5l!RdD84&Tv#n z1_?2gVR}M3f#S~E>p0OV6I^Vh_JJ#O?D#BJeX#v*X&=E5r+^BeDs*PI5$1eNnUgeB zs0SZe++}tnDW%36c(liE62qf#On4n^3FW5$pfFxy?rJ~^n6;O$wA{>KfYrKtYLOe{ z!BbPEuiV)b(4O>B1p*<3m>mQi972Sgzz*bDat4kDrbDhG%uYVe3N2Ci4X!MvW0CNn zv+LE2XB~rnG4S)kM5_B%|FV!1Dzl+e2M9)eFN(mD8|!ElhlOsD;E;+GPM~p^Nk59p z5CG`p!Byx*PU5urUl_&)gmyZ0#Iikf9aSlk2@ytioWsGpK)0f%(@|z#*!Cg_fB)oF zR}{QEGIXNuB$wWCR*ZU=UZjXKiMA!58u@1Goj?&R6#PSyPByQw)m+E-?*W`bM6A2D zHyQf&p!`3NOGz;IX~WX1?#-Vc12U~u+7M;Boy_P;Gb9}TY zbbGHOTbDwo-5{u|n)|EfklSS0K7Fb&rK#6I@-%<@`4uz*12Nro$U={mk%f6Rm(N}K z+mHscwCGeC_QnvmjeWfju2bwVk5(U!>+Man@aq8JZE;5@JXkU}g;YXYW7w~5KD_lw zQV1>YY@JtF{_qN^2}mD{C;MO=UW`d~_%J}SbCc&H1lxi4`Td2#yhZL%!F&mZIFU?E zZ-zz!xIU__X%_EC5i;7eM~pC)NasArEGs5B%zmhF0|#f;|tG(_*zc@rQ)X2daab^QVO;mqs#Tj=E_Dwd21}uTlBsrizbvS%yBCowiWP6!VCV9NdR>0PQG4pu-gB2pal)7S>sFxZ{u^)cE1`_twx! zRiBf4uq`v-xrTh?v(&5zFZGWB=JM>;FI{)UW^vM%Jd;vtkQU=BOMjpQqhltmbu1(X zb6~X%p~!((`qGthMMH}gii0{ihRNcp8$(3Xk^-tF;^GB5apMFzs-t+(mp`EnLJF{O zMIj3{;)f11tu4lp=&T=)3<&8JC|y=teM%66k({YL<%kttd26DyLe(YOifT<2%a z+{PRwJ1na(-o#Qew*blZqin;Zb3wshymGoBd+LJRoSHoB-n_?LvVAuUWcqICOvdg# zDI&DM>#|j=EkKK1(jEqn+4w>}k#?x8hlIq=Lyk^7m$^rj2g!r{SnAmR@Pk}E!o4mw z=c3+*7o7+Iyz8z`2hqpLYu_5&h-hORkmCoXRnZjBxmX+Enr5kdagtNN_4lz*^vpIm z@oIcX-&t<9sW>TmP34uOBcr!I8Il@jyGtiA4o>Il^V?vU*s=%c(*>fb1X^ZpP!X@l>U>JJ6&BjSAg zg=gLZFQ2jfjgvb~7PBgsc?cr#vq;#0#6BbCWTXnlH*z9LVJ%>sFokY_l$pm2Z1&oE zqjgmRw!=BoF3R^BS9%v5jLzn0cCmQN!KVNjkK;uY_K`dvY5~+=EgQ8k zG3*$USFSCB?;sg;=3e%*!Hn*&A!G#pdA)gV@Nt-h#PePKbTGfoEM<@(3w2Fjpv9*NhIcm>t*jR4+EoxM(z_ z+)=tyt94u6nSUXm|7F_HcX+OD5Te!E47i)E{9!L=A`-lip=N$-ZMyUa?WxRrReH09Bq zmYj1ui%G8O9jwl#O7BLNr~+@;|8@|aJJrW-rIyV_by-MC&=WAr=k{Z5#7vAzLkz`b z4?{=dGC$OaTE~TPLuTYlk1sj(JZd4jUzY`j$}FS6N+Xi3vqhuczQYByk)r1vXy`Yf`UdEt^ocWd_7}R7$C^~>7OBlIvPv8HlzsW*XA+e^7+!pf{gYX@*6Zr-DgYs0LePI8rs@RQk8U^>yrjTylswV#fwLVbApU#Z6Kr`d(l0m&W2{DEtrB4&jc4wtjw!{ zImGGk6we&Dh7`^BJ-imjenSoSJ;&Ymd=V}JT( z?!YHno^L;KUL6D5xV*sI5UQao=Dx$Mazf*$l%`0zNx+T(YNFclsE|#1QfD zwX0~}>orsR;qW*=|p>Bjt4k>ZQ>?uzil!Y*K5j-$CI@O)I(@^qP0y*wQ&<1RVpAwmZ2R+ zThUNNJvU0@N*#EQfui)&df<4CM|yfJ@5x7huZI?j1^<3~`0Zp2ZcJkhadGwlMd zgT1G^Zg}Q-YyCpV%FrcA3jR7bCzHOQoqqqfpKN(xetx5$DoM;wm4x=6ezFa$oQxf9 zZ5_>Y|7{xk52jt(vAy>GbnwB`lZqF$IAwa89%q0Al@kE^cuk^Ue~^n3*@)QQo?w6@ zE~#IgzgKO)R-sGSbkgqR$Wk<)e!2SH(Daxq<72Rc6qn`TN}9`{8Z1g_;LT@>}<1dp8(k`QLsBlt1PW9(1*N><{weAe4TY|^G zDMc;Bxfq8mE{JGRj*tLXK4E-CwTO|b_Q_9N1ti8Fruv?vH9NoipoM1@2-8xEKgdgh zyc*3M-w*uL1aY(w2B_1Eu^RpcfL$+|q+qh*X*7yytY5OaKe90r@!nY+Hyexj5{b^$-m&VYk2^z~Cd#A4_w+2w>Ua(Qs z!ZQ88b<3J(m?_AAT3ZvK000dC6wLo!F!`^tm%hFAKg82Z$y#=u4*qN7BOG(Cs37qH zW`(0v3>s3v&`e>spC^~8wE-mzdsU_l_IBH)X}+KWx>V)z-eH>CrAw<1=@ z1`|wb*DcV3VyAQVH(9z-IMK_pbzpKrLZM9yAH zuhtK|Ymzo5am&c8g8_w*RJJpmX#gPvM1Vpf3t-Bx~l{)$ei9h!RKK+G+bghUL1T-aJ{^fEZ4Luri(2lXSge!`tf!dgRB4sMKDv1ngR z3eo>CyhS5lX-v*doT}>yKas^Rtow-ghH_ihrAp5_LWc?#llRZu6oQ` zUcs4$y$^Nj(g^mIlc7pnphjqfwldm@$(KrwS`;f42V=*{7@%1US8!x5z3B;W~+Q?n#^?;d4I{ zC`oJd4@DQH`o4}eCoRx5^%)OiE{~QAV?OUrn6yF0+^gs@XvwHN?u;CQN>np|(wzIF zKQ&Pc*d&%5#lr{iKg*b*MrSjQH~;{Kw*P}V^#6V-|0nzF2G^&>8qs;VM0w69~}kc{_XqaxNBcql`}6tSiz}Lp*qj8*O|*hR%I*hgKuQUXooc z_laaVvK8U#`AfKVt39whWzkqD-6>qPyOaV0P(1!v_)i4HAr-M%7*m9g2Q*nVG>@)> zTS5sxEauur*DMC!!6Gg(0X!6bevG3%uLOqArlzKd^@Rh?be#%!VJe54G`%tt*XvfjM zLL)>aWJVtp5CamUF-6|QoVd{TXHQ7B!f&~1K_|50iPB}~20YFi2b$kJ2%L|gWOmh4 zPb*-2xDasOI1A?qt&ZyJPQvkQ2(s6{-z&-UBBZJxn|*FUfd|}@P`{$p>#nuCiu!G#KSfSg>IMjB){tvb4+R!u|*Y)))7RN z<_wH`=sm42@yS_6;>T#()HIOX4;Umc!@p=m0PRG^UrrF1sb1%mm);bAscJfzLG%(0Q`KPuQ9wc0ZRsG z^8&J%fMYsY1(Go!nnw|RIQB=m*D>Gbg$kNiI_;xUmQkLEWkFw)^Mv?6A)tET0rUeh zGin5>80RS23vhj3H7QVB@^#*|XjwKvm~i2EnW@Jp$jXcSc64%vcG`3>r%CaSU+9rB zl?-m!rU51&|3pVAQ-Wfx`l5qp9CpntlkHGk1#@|6P|4I41&Eh^MUlCf-bBqLzOf5Yq;(;5( zyZfSflOv(ds_Y9@BL`(T=!Xx%Ooyg_Fl#4dWGjm{o1_dFfssdthk&B#mmS-xv4 z=+6r2kMZ)B0dteV6et8^eu+3I40MZi%q`Ho{9Wk9Ux~tH0xxD+I(xogNgnO(-1in{ zCz?y{(h!;tKMqLCWWiMOILlHQQ}UP~VfSR;!Gwj()>I{UB7wl!KA@SO`=C@>)RDw6 ztuhmraDB)CL99Nt#$dCYsyXYLc)x{qLne6UfL?{Bm=_f`K&zp6$68Zll+WySzZDcD zVJiSdD4B3-3`SLX5RrHb@(jcitel#_tln1^>48Hvtv4t<&Mp9AnYq7ozC_OO^?jYY*KfK|%_>L8I5@`{z)$h_5kcvHSxel5AdbSK0h$;C5IgYb3GB@HEQ~8dYF$|C~2WNGvnT%J>z4%aKUFhgx&+aJ?x8)hxu5b5VX^>!M~Ui zIrEII(Fa-ul5n6_7}G(uBxDZBS@p_}k~gqS08~Q~;d%K$_)5z;N0MKBXy?r4m&8BF z)tk#=Y3I87`3Vm(kP)TAxx9?&A%Y=CbOpeuLGLtwOP~9%n9zDc#UUU8Vw;C ze^gF`?r&J$tvF(Rv#9Nn#ElTPo%X+jV08*C)P;b=kRIdkb^In4m7uO!L%UoOa;A#e zC=$rMK1G?OAZ$#a-735X@%91YNlQ`-zh3=N3i|Prz28PQI00?4!Rc8u#v2CF9*{9M zXJdGAI-8zSPS0mfpfIqK!;HpCm)Rg0_MiJ+UrwJko^9xTZPm!{1q5bkhU1zlQwjtl zv@2mS+@me(KzQ78=4-iQ!}PiUfY|`E*RVbIdxq_;u)6i!_lGo?GvuXNXI} zZ^yV#C*6;JvKkVH7+@6bdZP$f1>6gZ>&<2;6Ca#%0j$x(ILzE|;D;W-amyu3rw+}7 zljFpp4)BsLSWu9Wh6nkQEQbJ{g7@)oR3D1B2A(;zp+_R4G_*P+#KBhP2eDJ?CwHQu zT=YJby%ndWw{V%L50HrHL7O;#!`%yG$(P*!z0>dkuZ%cszyY^I`3TaN?N_kpm;WvF zEnWJAZC6GP4ZC}Jpyc*q2kMhHasRs{W9st&mK~U-hm&vxm_)2dc?5-rRHx!##BTh> zvREhI6XJs%e{LH-3Xyyu~i$+=Vys@6ubY-pTwN15s=weS5d~r+@bbTF^~qV$uT$$1e!5a+74{;X9oa7lH&D(b z6IlUM>u|Onrk(ZWeMKP&c1^6%n;vSPL)_$Zs(L|hzX>Z1n6{0YS5QdCO#U#)vN44z z{@zTPb{Uea0L2dp!h=s6_FU!IXT(KWBCYUpUO#sct>Niw%}7E;l1^Si!GJf{2Zk?Y zLT+-Rg3=39a%#|6B%>Xn|K+>J0=_-6bd&~}RK_O2>KD^D*AUO1vLEvG9d4%}XHVZm z?bLVPElb+*_12lQ8)AbNrn#*M`E@N9p7p%!GpS?R2RcEW^cSJx4ZCYNKfcS%K33;Y zAv%-wnUfwO9s*&V!;iFBpL?NuVsRYQV>Eg~fpQvRZ4$!cb{dr!XEYCwO|VKvP-=hH z07_+h1CEXZSO#rue0T@HHQj)P7DarH;O+h00^&9ioyhOf3G!1qWIxHi2Nz@t;&!9Z z{Eh>5ekN!}IzTyW@PRh#M2uL~zLy4P zF-Ya-LU1A@VN~~8sN>KmiQAcoq=OE9`VlYtxorUOp?^gwjgn)dQz#rd9~~ zd8;K2I6in9Jw7aNW|4_DI3Bi@6oZ%aN)cN7p!gg;=x&APmJ=-V*BJB`MMS9pD56d~ z$pD%!G#6wf5>J6DQyH9Dpz|5n<>>?+2qN+$rI{Bq-00RpNBcQ&Vvg#pWG#6_P zgPwu4qZ1E3(uB?-ZlusDt}#Pa#f`0Gs>5)yO%TLP%aGb32qXVCf_WbT27rB#y3>IA z-XC(KZQujNK-~*1w?ZCASatn8Dy>{v`b-y7v}6Z}FgUX*8qyi9$wY^3zpH?rVlK&s z2|nc>CFSr=N~rhulPn~q!fou7zVOwnIB=$sUWU94;V%`tx&2zO+%PS0@eq8>Hho^H zRidY$haQgk*xg%2Vb~Xd$SSk5Bv_v;08&-T$Ru=Yz8 z=d>YoBPU>adZG8cI`4<9q*RyMc%nKdL!+bQ!E;&vwRm&%_GUp>=RlX`6RprG9nKkM z(vS3@km8{_r^2R*N@}Sbjk6Vq(_={gD@VoN;J4NWylvek+Ugca35{JlIM#j#)2kQw>#?;xU8-&TISiWUfo`!}eBw}gPb;J}ORSSpZ| zik(d;Q@Xn%2fvjZx{4{%DL3D5L>iC5@&urVu-SFw@0)=lx$qVOSQO3v@2U={aft-5jgz;5Lbafw`>#@ z*ou-aG{O9y#IV&;d$R;C>a?gJzX zsf5W#wMTm*zBEdZpa(hnQNQ|cO<>u>X*Jr8J*)BwK!1@NvRTczk^AxB`LVj0VG`k# zjuTP^komlV^biI4N#fB#Fu`F6)Kb7uc93X=oV#Ej-?TSnCT=MrAR%Y9=PAU zHju6(DGP`s!|mvjLmhRXrW^zy+Gp+6?xMiS-?@Rzyf}X!NqH*9y_^g*s84Hgthf^u zTFBdgO0*}By^38@gO@j9>BCVv>1irCNJ%jWm6+Rj$dz{mh}6w= zq`SVY-u}8o&y?je>HML1Lj#-+=|8KnNx3$*GMe2Lz>7+U90N}duB6JM(D&l^ubS|dE3gQ_?2NWqnmm>4v*uTo84H}CMPN9&Ymy#6VTCcj^ zT6Qu(RzjYSbH$1A+M)B_Sk`$S2tg4cM=mEMSdBcu z$7^mt-6)C~xCM3d2k2&%(cRrw*pmX>CUTlv&mE&0E@uS(w5%O8k(-4R_#T`SXk0S3 zvTafcNYRY!TYoYBuyB!Ydg8B@T zVXSZ`+I?flPWIV;hrtpXTE}BX3;+tISq~KdEvHaiWmDS02sCE65rJ(>Yn5Zke4f>p z{IWzhWq%ZUU-$MhSts0ni?w3yIH}yS5wpevzr`rKb9a$Fe5bG2W%}k;Mq6iYj0Vn4 zO-6W!GJ=dKNEVr1AWvbI8JG%F!T!MKzObEYKc^vIVSw>=#U=Rx@_yscG*=Se8vK6pp2H=bf)|K<%~Jp5#p22;++jBvy& z5+727)_pJvFB=|nf`ZvRO*?RNVLHizV;<~pY$}5|xUQ#A=%-N0njXGE_f%r|Q)q*4 z}eX>U$C8<^;@?=ao!8NgLB>7`E!r9DER{XffHqln_ zF4@f6hLy!z3Ts~tli4x@0mXQug2)@Lua#%YF_*mCq#}P@#!GQuP?N|hT-nu?v3Ap} zU+nd#mYe_P$PcZEVC+#i3$~nO{ybaPF(m)WN#wMqH@s!t91?2Lbk{mYttWer-gBUXzw)G#SRoQ#-_8XoT)KF=lf`R{YMV7 zxOnnZ=e2c?#jM_XlTyOEIwiAYPJYFq%+7XV9cX5H#E^?uzXPjLAB|x!E~&pzE{hGu&{<1P>-pP6fLR*+kpYb5 z36JqB9!8*mk;EAgN=~+8L*80eP397;Hg|LOjkM=B5kU_YRB5Nb>I~&pj@(&MzGGQ{ z3>t|{fhejd;^J^n`(n}jleNo9*3wh#;f0CX*-0kky9Fq;T%3t48?mE%<4c|*J>=@V zh!(~~vJdPRbF1WxzUTmXRz$%w&*FSK#9@?yOmjnP##vx|8<}5f)Ue%D(U(ABbk1Vr zmB%!J8Y_iBi>Fc;YZP&30Lo`N)aQqP_+>7o%iRy(pC&3+go9e;3Icwh_7nz@JA&sG zbkrgAw{&K0VP**Sh4ou6Z<}3R~|5Qd)1I%IO_vL;(m`DhR5`xv* zLdAndhhBK(&3-pJJ9b*H_Z&Z}zL?+m=dG+&z+peZGnwlTL~D=Bs6q$iiX~DHyp@Qt zKY4#%MKB%C$S7Rk-(m~nloGn(ez1w(Tah!-dzdCBOiaS_-pIJ}#-${8?@aA9oBerQ z)@yp1VKVJwu&)FDmyj8~E*;fz;390YJyd9u7tCnh_MB;s z1^Vd=C`|HK^gFTzZ%m+9^*t&iS@jdW4$e-M9V{0oT8ZO{oxzOxH`jPu3P#~ZI7p<$ zZcF}647qB4%(zr`^bLPPHW1sHC!=bcCAT z`nuxfb7_nVC!Ll*_D`2vRUjAIV4T-_-674xmF3vikMdp=C#f(nS^xpE)0cAGG!s`b z!LsN7J8zZMM1~uIZ8n^hmCvipy(-j5Q!>>ZwJ_kO71ScU7qf|tL~3Zx&}Z0;gFxy z(U^H0hFFB$7i2n*>+)1UxI*2|u4yA+a_*pSoM+Fv9rEd9>_zE~XDocP(O@s;k6i6J zWn*#z%6Dz*5bZS1I5pHM=#BjaV#&0lo;?XE9V}>n{d(d@;IMGvrEt9=0FME?ew>#o zJ+-@GrZEhDqpwrv;?ZIQ&yzXw%Z&$P+SbGt8>BNFbCGvd-r+&=J+H5)<;XQ7q<2T5xC$S$-)ZsJiTNQcC$(4-_0$$sIjeJ2n9SQld%CK<9fc=oWVGxa2I`f} zhZY_9JhzNgmpm>T27bYp^!05F-PdDzHr+XxT-Qqk*&_7o>GLB`-S4Jh^LncJG1n@B zK^=Vr`JWuKlJP!ZFLeD~#G;m2ZB1%9CT!f=fMzqOLCd%4;3;}LYR@sja&bGma4?W4 zCy`-yZ0I=Rp8dGDf&6i$M1s%K5>gx8`P%A(TK@5uMTtp9%V?n)|M%W6dR}$3h&{(OE z+GqX*u_!ZUy)o&Q!|4RrFpV9WFk!X0WiFn+MR_!s%u^%Wg22cc8>o-MyHIv=YmHFr zU05T(shSPtlG!`l9QzWI8iG)n5A)85^rfKrue;3)nU|Wnf2n1l%6|_X0 z<(D~m6cjD^Mo9=XvZj=}EkjiHH6r3~Iyg!?kRCe%Bvx|7`z*aRXrdCQ&Cf#RNgLjw z?uNf%K}c6_gOr1xfg?wMv5YJJOb^jpjFH+KzsUebV(v@tmI9sw2l*&-AhGiGK(FlU z{mS>-Mf5c)pJ}ltud^_e-#pV;kzk8HT$manQ!hnovm#(QAlm{>xSx{+)#RoP`ojVf zBZ1=WKcu^(vX58{Lj-5H53#?vzCgxD%Te%5tx82h05at_Sq6Cu=xf9UptSgFCS9X~ z^D@8R92Z;0LuzCms%udIqTGKN0ibD3Ic|+ellNg~jc=Od*}o6X@D_!8fcZoWj6u?c zgYb^+3p1$#*0}dfZU=`3kIDL!RQ*=U)zQ~slCdGOm!)$a8L@z^qu$wacr)W-su{SC zY2+HbF82nZbyDbT%ip8HNZ(oW1f$zTl+Ft^#vMc0L#C0&&I~C33+O*v+a!4OL0Uh< zLxn%XLp1+1Z}KmR)xX=?y88ci{{2UdRX-iP@baXp77ilb8#p+HT2hmMFbIVLQBxJ8 zICQl3ptEFGB)4v`HoQWjbvC}??R0G;$u4Q>gJf!3)+O_5f8^+N)n_AqS9+Jjd zr8hnDsOd_&7TibLwG_z1Euh~yoTgMd+O2_$Y7AdP_Wq^PHPO&Qt%*wUbrX=4EaYE= ziT9n1#ja@SlQ4ai6vY)}5X9xTMGqKOxtTDor|;9lwD(KLqIa3z85hFggr_?$rF)+;k2fSEojYYryWcjf6n&So zQo6g%KFp~vdB*!Z|2QDy;>2`*jyHd^b!W&tSBt(J9~?ILaAJEr`#i$xW_$2@d+}sV zRd?cY`p~va#qd5kha49#H)nV8_`E%M`Mh|2KQ4IqxW7CX%ffAU@pgASdb@s}Ki2qo ze(cVZ;(7RdKQy~`MU313Ww||bn10RvzIgn`en3|LYg0tr??;f{7y~WCC!?C)Kpt)~ zIuhwC6<=ZQn(6^Uv!8d=oBPW_1ZN3xlwdy%wxH~g%4TmGom@4Z6;djp_y^E^m(!zs zRDOui!-OW>B|!mGILh%9`x_uxS4CZh4bIY61!a5B`G z(z+^~NXJbKV7az=w`3v%4h&DBwPxmxDW9{NNEAa$>5sS&jB*R4hVbPjk3{m}5ay;5 zYIV4Df_qxNk`igT^kxCFs$}6~S`@8B(Ot8<@`n2eyySGN4D127Z#vh$)M}b%!m@E% zO^(7F%cQCB;7&!YeH<9;*`J7yH;+s`6RkLZ6`FxKB9*)XH5y+ksihMIT?r$h`j zvk^@5Yb&Qi>t_d+Ob1rY49*$%te6nqG88N>VhIpZKo3p~{PKUt_Qy)0GNEGu6YAqE z)}qMGZBsik#2X>qD(K&&3E?@t_&IO-E{uYeaa_p~x$m2!G)buR6az4OB`WmuXWJ&* zpoBh_0IY+Y49qiFr5J(XmRiH(5OKWvA`8J3te7nvpXZbV+=xQspW&%zJN=y!5RVr9 zI?MW1;uo@zU}WBKD~hG{1UjmK-(zCDM~@xDqsLJCi~NZM`UUbl3Gl)alSR5tJ#J#& zktOQ4Nw2sPQ+VGkpc{Qeo{77A73miqmNZg#N|l0p5zHIFYd*qVeT75<31x=Q!kuA% zH5ZgTna}oJc?HQAXq!bhFT$N|ENcDEq^I^oM!i%yk7&QCgRGZ8X|~4?q$jIW^KN>C z)>OHUCQL-rGtg7nGy?9#6w9J(bg48&*`Z?wE)predcHxXbdWQo^Nhr1MHnQpdVM{V zSIxnaSE37xg*dx%`IIUmOc-!Hd-huux)_b z^IY#m6Bq9DbL$4jLprhZ*Fone!Xu;5);ew+uG!Wyu6#C{&(C5VH(<8k3Ln7xqb$fU zcAT2k^V@~qW3SQLPYU^3xTECvxjhvGzu42=#9*rGgu99w{K`WiH(ZG<=$?_e2kMHU zm#x{JXkWMQ&mYCLZtMA*1N?)L*v6Z(>cG@kxDzey^Y{={x$z_>IxxaxKL*>0%6cDE z;YyTW$Nklzub4iPgPsF|Nk+GFNAdlcpW_B>*qcAL&0oXkjZr^(%IJM3PV(M4V=7xZ)t@a^9cf!Tf`g#&zDxaTY3v@3$~2iGJo>}ifRZcW;;Y{+%=V$M9N)CoKrn7 zFk6knv1H3&!DA7gD1YiCcj|Y+Ia#C@Kh(@Kd-B5$r!9DE6_ztqmC_Wqt$%)s^>^VE z^V^;etMU9DYBnn2*L_CAYuVjvy2OQfADui)o6LNEuli9rP$l{rb1hcsxC2=l<(MpNaY`uyW+b$T!y<#SVW*Ka@cIt7!&gwG1NPkk1csY zaaefDPos3ID3flm$rFC(iPJPHDqvfXBK;j^U-abMYseYbEBjn7$sa2#f?gX_WwxFr zARRu47I!fBAV^auIpk?^=6i~05w|XzPW3qsyK$fH1M@eSOLOH}Yu?Y$D`zqhb)AH4 z_!?P5^qu&E0s@sFY3#7d&lM=O1z_QjBcnHIn<1(Cc=!G#%!0WM%zyQcVASi~t$F|; z<a08Y#s32o`t+vRYwu6hAD4Bx?WDHEhC|C7?Il9z=M3h3b8Wh|k~EOC}Z)06u_; zS63dXWR~0wymA{>8$Wom19aoUCugm>tg}}Q^#pe&00~GRAtCi3Di1X0CK042bD6Zl z(#8-16=ONquFG?_HLJI*OC#lH`r`%uix|J9G&~%uJ2$EA(B&XxAuG%gW5a98qFF*e z2uztND);c*eVJ_y*n9_Gywkz9S*mW6p^fDFdh_6l<@a~H))a*zN1G_(v3~Xi4&J@d zh_*IS_PodkEvZ{y)BQT&ADY6R)$r|&AL_f5kb?F_NtA?MEjDE5g1{>A+$j3!rBXvSHTGl{Nlkv+dSomX=O!-7=D<5+V z$|`W_dp=hz7?CjSP<6-EwPySkCf^ma`eHlsVwm5+$q!IOTI*`Bw4T(D=Na36ABWyg zC{@x{4uddNI*4O52t|A=5JkKQg)fhCw@D`$%c&>RBLU5qHTj?_+*JLKbo8{1J*w?F zO)IWeY=7py120=3QX3E^V_>ZaUwIh&fa!RXhLxkFj%# zu7ruUb!>E!j&0jX$F^Daby8y(vn@0|Yc<9#{jrSMoasz$9*Yp(fu>o-$X z=^3GXJ{IL&c1&Fhoty>hb|?}-r<-c&kBJj8$}m1ucWAeVw!1F;Wsz|=^RDnEV!XPc z!F}d#CyBW{Cm6@$9j_wg7L@NS!HR3saz0m@|0~njxm9{#_O?%q*)!B*3ccE$*x`mG zHUBpT!%iw+pm17ESH6M_LPh`=poIjAsse@b!%9(XWIPeKF#np)%?}OS**IB?-DUR0 zkm_cOOigEA*)VzVq9Aa};o0ydNpAHY6bwaFjJ|0fgUir&EXhWUkbH@yfw1OKoFH4L zT>;P^$<#@vM^SH~bQ3wh07%nvqhx_(Tm*9UKav;W;>c>W#uhmtjS(Xeo;W8 z-^gV$NUD*wj;WwvF4T9p8Fb3u%z^!ak-;qX$r-C+{C1|mn*R$#@35)ls+(%J?h6Kw z>P?BMh#mi(NuKrRy+}`H|+zmn#x3hm&+{uRWKc7E^#OWeT5#hoG(eDL@ju*&q%$vQ?Ns z&;cOqRGvrJJa~&J|9+A-MIWvtrSY$p+N*@*QAW3LvCigFcPWwDi=wwxaO1}BtR)Ay z2|p9c$ul*TH-*1pz=WBESUY1cjoS)sCKogjQ;7^3b6zEgcWu<>*wyx)t;C=i&-z2sj`VIQ8YPvf5+!2D!odFBW#?tE2iv40O^B~XhomE0WM!f;dMU<9aBeFp?{~N(Ihn=$nZWHfvac0{@sG3;fm@I$ zpjS41CZqZOgyl;Y)AR7_VLkb6G!0Prq(`E{>+L#lr@bV-;OL^q16~TIz(w^u7$xx0 z_6B|oG?4bMZOelk2(7z7ENla!@5WsqGzjP0X?MGs#@9Q@E`xxxvaam=M)GM{JgO|t z9zRisg#-Yo&{PQamAy;?p_OEb1ADSN_XkwH(X4ntSL&SO3 z&*vQlz)Ge;km(~5jTg3y2qg8L7Y4koBbyqI^XME66Mzv((7%<+N5{E9gChh&rF5~6 zyG;-tn9u@Pu$)$G&Fo!_b+`aY#12)lJY~owt{pWN26gu(*9=;v%xGNN--!n1$|u1f z*Ee9(7oMHQ9+k3env>K_(8e3+T_{3tJ_Zd|v#Ivp*&y&YXxJEaVe05@=?Y?yrpFZY zJh?)tB(#7BZ!OQ(08nakFe~*3>~4}U(kU9pz4O`1PhN%y4&__+Ew&Z;o6#TYGK+eh z4B3pB)o4GTt*-P+H&tr;r*4XRo@x&~0!^etR!oZ`&5dy9eJOJKByZ2M3G019SFMKZ zMuZ;WRc~w`^qs+YUC8MLUMMRpcKK8GZB@cu=7M*7AQ!ay%cADyx}c8yvOF55&92m~24q zX3fM>5M_buhqj;28#x@Nf&FCY%yD%CIod(+FGkaK!NN=D=0`u_)F2`m8ve}Y(CD+t zJTFUdBaVbeJzcep)h1;0el6|jiuJNTfA`H@yjm?=cB^rWVNsyf<2a51Y{{i61M*cQ zdF0Cswro8RVL;rsuX#Tiu;zye={N8qr)e{p~2P>ObKmY*^opM_tyngKp+B(}k62 zJTWg}(S}YSJ)8>U^~t5Orz(Smr%0xgM zJaq2iVIG(@Gp#-I*>faS)#Uq0Qso-~vBfqy4nb%255P1U!1yF_ik@foStQXbK#1oO z$r*vja9Hi!k7WtyFrgL2}HTEjwlEU2+xI%bdFA#F*xU=y(;4tW7HIg!NSS zr*lU=IV*GZ(sQ?vpFF0SR(0c%Oin+lEN4;wHk6rsm903TY#0QJpZ_HO4^?ep1CqlC z;<>YYDH4jtBW9sHuVo9sqKX>=ai{BxJY`HyL0YXlgI*HKCRJe_sGxJX8OEd6B;$%` zmTtOOE_=n}tXw_C`zhUhUW^$1OrzN9a8+ZwT$P%;S3B&uUqpA!5$A8|8?R&+>>89i zQ@L8}xt}D9rb)|Dy0lqQ+`>DN*o*JMIZuq^ZaLL|7%{2Yr?KWRkIK3Mkt_=W7A?0p zSw=GQoNuw3OJFR^rcC)sNd)gn_C7OL6^g(p(!pt5bV{sKi!Cc%3);a~Mem3sd*gLN zL@n~DB|*tu1lvU`BDrvmbGAf^h10LC>$xn`Q?mjEJd{OeHLqE_*raMSaT?FYG%0)Q zc`~SQubd>_uLhw)3cruY(Xq6rt4c1tL>CPl7{tN)qrJ<7ubH0GCKawxdoF#DEgqv3 zw91(p6EeXY#)%e_HaN|*f{BeuRt%`Dr(8Ce4-W1woDllO6nej6)!iy|A$adxoW9a`8AHI5?`F)xb7O$mo@gGl~N1G3i>Tr=CIs5x15Xz#D)Ytb(yM%eF#|8v+iu#G#=<$;Lq`#2t_$U zt44Ek7)7qmPvsjLbgjKoZ=WosZ0-h*N~O&U%}@@AM{cNxX7gmU1WAeLg{$JO=`Y; zdr(cqgcdHRd9Gb~S-Ky+hPHpyL5A^Uykge{vz4&>eaDsb!s~U`)khwkL`Jnh=7zk>YQy+m5x#}gqhqtDZiFJR3m3ij6Q)DK z4wk3U-ffS z(q|s2N(3+LmysVkFW6Ds0xK_XNTA2@Iw$^hiAmX449+0j))VXvd${0{VvCpUg4)l^ zYm4GqWKaBW41wz71yDp?c%w|TTr3%&b(a} zT+q#O{W%ZqbcjS6=-qWVUg4TW|CtPQ=ULY|lZ%6}|`Z_*PwH@`Hp} z7Rlb2qA7-oDLQNx1kDSiZq(W4QIWEB0_qo7RuofUV`eL#9xf;oD|A#%rKHU#h*%pZ zemMpFhH|z|dgMKcxv*R(&J;Cd`xhZ@fOVc61>2^VGfrf~FJfO8xTbhvE=pw8d*HF3 zKPDD}T09j&az%osXLoCpq)81K8f+ybVD0~ zfuQ|`iNCn=Ba*RS@~a~Cnqq7d&}@;ocAU^4q$2S4(Qo8Mt9kS6MawkT8>`QdNwRoN zkW;B+!h*yC;Fzaw_wHIPKRhdE#FyWfkpJGr*`m|fE6@q6_&r&Ex7`cVd%>uum~b%B`pD z1*6JZFZlqAz*JHCYNZx)Kl3bvyX<8tra+gZl(OLD%EBD1n$)`&fFHyu>F@hT7S`(kEUHkrk);E_f~f<#WIeQz4X zMw>^wo~P0KBiL;&2|X3#=K9}HwTleH(#mA+g75){l>FpC$_vH>e<-Tvvn~etp=4Uv zQ6`kQDW>aQ0o3(|4%yaDuu_C6l5!|`_R*k*W!Q%806SH)P-`8s9e~!?(ycW%H#wXm zvo5mNC`}e&LY#3c&6Z&g^mtSR4iBG)>|PZfVxvK>O!TdwBw5b+uw~}~Fi8v2yc5z5 zbtg^c22Vt_grh$kn{kPi7SFF?Fj?kUvyoxN3!ruXL7>g&mpVEe#;o`*mtMlj1EJn` zl<%Zsfv(L~`~tbY+aX_3Cq%T|xR51xMq!eDw9Hn2ndzh=Y;#ZZ>%0|n1=y*R<> zuBagMd{ka2-KHD*P4z=lDat<=CT9Z9mAj6dc6w0(55%fNZ#I4{sC3R($Nc8ls7Ex) zuptX&0(F|ax?OSkcpE=OC^zlTxr32)ylE1=eTB8{^9%qF*${RdYGZ|QDtR)R6x=41 zdIAv|(2Q5%YTz4bXnLO8D>*ss%brO#OAW!`txY6QzZLfT!F$}b6+R-w=E2t$5U+D! z_fj4$Cqmc>f4yiUEhD(e(zXrfZu%_4JSTlSnW5R8@Qx2qvM|-^kw>L~#@b*(vuDcE zyl+22BcIB0lODlg$3w79krS%cS7mH!@d*rz*3Q!nFt@l?j|lNW$nh%DZmaj}sBKR% zvgF)*X$=8wQ_X=+YE9UVCX2KOn7vUP=sV)Y+W}O1(2sCw@>RohDk!W&N^=5qU0cJOTw7AE+5x8vX`M})he4f&FT;^AfE`%DSh+=_sIJbWyYOQ zYX^X+;j_owcNQZ@$o)GV-JK+ZOID%2OD4sDYQ-W7;LBWecb9^@G=1xKto^7A1;yx} z!$4kj{R%qyupYqkTxbmM1V;e75lwEJ=99U8|4m|XHPN%b4S0Igyr$Dmf_KN%#cDn3 zTa11)$F?R+L}Dst7;eZFLu;PX|*Z` zF(Tv&nY326OhLE)<=SKa>bE=8TE^}IE`>Wmehz2C;f2T}kDht1 z0PT8p&Wf-g~))_8`iG*miSH5T}Gy3VSha$xi3Br8^i2e7B0XVEJ z^s`EA|K&!=w48SI{7{4&gKl#mxaVu7CRvaADX7DQ&+(NzJ1-Hnw)lQ(a;lwpicYyB zLvk2Qx_b1aucuLg$Cejl5<;gJ)RI=2%YSXAbpAKVF7t`^rp2Y!$l7!E0M!&B%D>x$<@?tN#VdFw#j;6Jc1vDh zTt8@PTF%NUQE*7Dv>0(Xsj(?G#^Dr;SlaNz~n2X?5gE&`Di0jh|o%P{s>j3_C z-j&HL>SNw?9SwRRoAWle9?`heXtzkA3Q#ws7rGl`O*+2=ekE7jp~1L%kppI?yE?e@ zGd-ML_*rj{PVCHkciAd*E=u;ub4Lu4e_ZQ&af<7Ny@R`ygEwIrOuW@&;94)P0YS3o zW)QAAf`~do1Tw0P#5y{H*m?I)p;oT~arSK;13>Nd%(6xOHKtF8{n^2xHYJXZ`&Aw| zcx*aQRoY%$v!CSQ$SyTHTE zpcxC9dI|yZGncbCeGgGkW*uC`&v8@`XyVWhicOO*4W)b zG$g-`m-<8hueL(GnI@XbN3M$9T4-p(1{*Qj@P^j|m00q`1qb2Bw&yL}$5WfzudTts zUtZNed%*ikh&X#QnLz}(55|{Lc7LG~bJd;EF1nt9FfnEfUXLD$wUjZ8t`wpRolwz3 zk%AmcAU$Z=;{68siQ=hVPxygSy=1^?wL5={6#=trUWHyY76dVJv!W3A-O*1qu!;t`&_nYE?8 zKHumdQbDo7=~x`SS!N=7T!m9d9k9L8|9PIN)Cj)V_Mu%cPO{C?U_&J709cU{)t}a| zT{Q2kca}fMc(^x9I#rgB*a7c1&8&IdDS~NCK(OkON%Uzey%x1oTjHhRXwQaHz^~`M z`H?dhC9{CAj{Ym3)hhT1S;JSQCWF;pqx(tXHj_)_^eIfD^O7ntDh%lhcAM9J}35JsP=N>z*rVx!483Via*nw7J0UF4N z8T1%e@I?5COb#*F9V5_t@F+(S@?;Sp>eGY%b!sZa4-3eVs;1I?Ri#oW`OyGB<}M31 zgDc~Xj|}g!8jGU#U)@@Z14A^MoH(u5fBDqRu+c1&=sxnlz*T#gr;CHqs`dxH>Q%0e}+cmbo3?pJ)OWl(@=i|wy&ia%4}a8gU2{jln)u@xhe9jhCS zLES)Y4Fo`1Ri@+mdmJ&cWICVJ$I8~*)-87R%R$U z%E?)76>y*v;U$2!G{TAe`6ifp^^C6Can$QCbaME#>lDo<439(T3=n)(j!N)pN9r85 z2*E7uuZsAmPrO0v)(~Qj1?uke2R}^HKpgv%h<4{?LMb!}`8>W!fwfV$N1Yb{KLV@J z{gih9HhPeO%-fS!{@{nkYaN;kYdg@4lP3w*8VFc(mpQX=5pZvN%$Off^4OFx(U}+q zV?PA-_ssj#$*LUDY{@6Aw-?FkoVwDgM{C?4aX3X9NWK)>X#i?wHo0&1ov3;yT1-2V zBc6sm3Ek%&HDq!Iq4SH9{zN|MXgFKe9O<1(CbgH;bRB^8T zs#&s3^F4W?au*Fa3*&&@RkPBoE~k8+zACd`%}cM3n|_Y>UsnnNhn%bcyHCX#CG>!1-o^89*nEmIlBG>c9kig{AKhV6^D=v7aFtBL2~5iTEA)SKa}#$lwXqL$l7^4Rcou1I6LD$ zYJmn$kRXH*XvE(HUd%cL8jegsQKLn$(dot45l?71K$G`@_i6qDLTUs3xRB4Wr=^GE z2lzH6`H2L!ZzVqh^u7$Wt?O(v@FA78Ik(sS?FX@0$bOMN#wW(P9AW_(n+x6u zwS2#+$1bxZWJCo72tEB>xDqcQE@x}o$|=dr(j=dh<(rVsci1-j>|{F7;odhu$lv&t zE?>z9kN)ckQGp+6{y>7Bkub!_%V=+4_z$iyUn~C@y~3$n8o$oBsk&nIJ2IldBGU4M zl1>0hKzq%yCZP;}PtzJ;uT^7~Ig{QaVu0w!gWKo*Xj@3MLqytdaLXwP@!s1Q)=|Qm zfLmey2hJ>wu2sA-I^K8ezl@#_sAxwG0?~J*0?;hUW+MqNdU?H-h;Jb$V(r$I!TR3n zhYPRbkMJECfX;lO5l^Zy%%`?ZUIICuL#1ncMhfZg^11hrL$_~3&pFSa!;k*EynC>> zW7u_yWZE>FZ{>+P2BvX^!Id&pX)uCJ8H7~7BLs^dRE!UD7s@Fjj6Q8 zNHu>+!6t5y`=8~z;GR;wd))uP@5g%W>L`>Rh)TTE24qeshRj;D&?_RzjKIyZEmmb# zK39GT%RO|Mw`QSPc5D|Vry)w=9+OHE2rsKcrWrUeU1-pKWKPh*!aAqPb547a6jRR; zST+%mk2hDg<4>)ZGuJ<)nlLY&tj-U7d(39n*M{y=aZF8IoA<;Q9<{Ep%{?4x{C=UW zU<$TgMQpWQH;S5yN>qyu%UyrcCKLw~&8*r$v|bmE&46r5M7L_C3Uz_4X=qim%$yv{ zkjgR5=WWzF$-d$pr1fuHb1=E25-(Rrdqa5Llh3K~-lIHwQuo|FV4 zwFqL6EU(=B%L7!BP580dNI*zUX2>#>w5YFGaummhXSN$DK3pcoPtb4tU~I@jB2{{0 zSt$Dx-Z361L*rZ=hZIidscb$hxk~-9!Nm5@4+pt!hBb{5E zlU1H?^q{Xa+BaXTEP zswbz`siPCb*Vq@)9i$>xjw=4{gSp-$w{^<||LKe5Rj}PlGo4*! zsh4~kXGBA^P3#gy@2N_;%sA>%sIdZ%^>~&T^NE#U_u=_{EK$C@$qO{<#_}DNqQk@E^r*Xra5i$;&a=seJeJxi`@lw8p*fVD7P=RN>9;{ zYGC~M$=`g;OBM_bshodSBONaIpkHy)hWhl19Y~_I<6L!bx3L&x?-w6rvQ)Dzl6i~^ z6b%HcQuRkNBcH6kRM+S3-yUDex_2j+?hSGHQ!UG9(mMm+p|L}WE%+{qV1SCW_FuP6+QSJ;QRjcPhR|VeEfF&ymat({#^6&q7Wc6WMy&mHn)3e zP#5uac&HHU>kaHWEB^kG@)@n-vW!xm*)8N+{I#Ej^TbY}yyA&Fv=xa&2V%`Rl`X(JxVkNMW*I*bwk5_4( zu4=8`AN@vO4ITyOwOw)c`%Eb7cMsm6}+~)KG%9c$wVE* zDdP)@nKzJ2`v-AatxS{bp(W_1-cv|PA}fcMfW(d~nzfBdibxk}oR-cgeujNTkN=Tn zu=Tkf|ZZ9!WX!xx;x(rXkOxLVkukOA#nE^TjzdJeV! zb`n#gnwQD(o<S@VBpCd9y7~X16zsDiF*) zJdjmXkG*y>Ja(ZK7SVz;rBp1NVAP<${bItUm$P!w)zU^<3la*(E#0|B)REg6owugTNbrx1e zsXO3k_Bo+wi>uhefX(z)V5FQHigCK3{}`V5K`d0j(~9Woff4sAN$m@ol z7Smtr$r*u+&+zAj@Gp!0tzE#k=ljzbu+$^ijPIWF`{Q@M|GPk)10%A6!S~+pKFEKC z0REmpfA5VxzFz{*d3k%@f4(2D53a9WKM($4?CDeb1o&R`_mKOZXOR;BPUNZ)Re6&#B8Uv7o7s;{=rbrjS!f&8j{0RaIYZ*O06pXrrF zpH^f6Jb6G*uABmKlHEMQ-rl})nz-Y-kMz3RJ$VI(o-t^Y=)JsrpM*IDgX1~0x5x9n z-y*l4pAU8pQ9Vh0+qVgo_+v|#2ge5=+3)mc-)P!Suh$3n<=IZb;SjbuZAizC^CYYA)Zv$|Lx=PY^qvFC9w}seg#jo?m^v zz{sb=p{3iq7{#Hm5re&dYxPg!==_F4v^+SpMEEfVy+G8A z{7JOMDEDOd{iLDr^9usQ^P2Bhp$Z6k2lcBROwr3;n9;v2m3-#^MYu~)8g&gPbKIQ^ z{3@fXen!Lj3e1nJr1mb71-|<+uDI~@J@<2oXQ?g^9Uh)v0vleud4m2z`8kGv-H)CA z9_v%(w!?)A+JUP0=Sw1JeF8jw^H?amMcxy77o<6sIy*ZSdV(pg%R7VbId!>x{j~eO zgD@=FzWutd(fJ%dD;{fHyM#DJtP4zH z0Nuo-!g}Dwe)T+SW0CQHl>_nXaUB=dIE|Rd<+(k^5=bk?9R3)*7%1f4;7XxKEAQnY z&n5H-7z_)%>;m8Y!BpD9L<{4Bk~ihzq0$9#2_y20Tgiz&v#=I>Ap8k8Aah>!N_Ok0 zD>Qa|G0Awh!+ySYMLm0@vF{qFUD~U5zY!L#kd*lPfvv#BFX1S0z>Mv+Cdb#JS{$R+zZo03CB8&a}qj!>tkQl<9gx?$q-)a+A; zJ<(TC5Y{z&B5SQR|SMcYK;>pb$&bXT+06xD+AfOfdkE!eu^unS?>Lc_) zrq}SxAPy)PQL5$ux%he~ z_jwTe&{({#<50(u1@}+{oH$!6=dl6BQD4dB-!bnNXD7&Y5xW6B0)5vb>n>cmj)HhH zx!t|jV!1BN$03v7tpPkVBJtoJO9sP{)TCXJJRfa)fhp1egI>|z2me6z=mk`N?0v?7 z$P398;gUcDl25Vl+WgIVkUm7Uy07=f?~~Ull=#v4&*E`TqBA1oVa*El_}MzWTRa*1 z+`W7x3jJTcA3#q4GrpU%3wwA4v(zY|QtYHUQApC}R$t#21yCIUiD;gT8EwVOOu+&6 z6BcT}__OUX#L=c=PC)e_IjFKdzTG*LyJyl6;TW9cnF8w8!zLqT*M$*^ODT{j%qZT+ z$m$Vu2aB3#^x!G-IIgufRC1q3OKqAqi z?H_V7ATB5kJrs$BL+I}V+(jcP6{(`xmK2+iC;O$)J|h*|Q#ZKc_}OtDOK2C(75IAR z7w~=ediNLPUql}%i5vkfYi>^>8!ekf_iPM2s@rWlEw0>Dd)(7lk69OfgTumr#BV8{o$c? zw@|W0B4ERgto8Tuyy}W+GJn>`NF!NaX2@Wgh^VetvWlp97ycAIXmu zmk@l?Q!(&#>)_zbh3S$PkTKlxn4R_GYlv*FF?vso;X7~_yyHQL$haN_JnU{r{x!@M z8*m!&efg=^3QUMdZ}T`e5)RKG0Dg4I&k*Th=!w82j&=j}F81dlD4BPk3Iao(_+^*X z5>*;x<2(~HGM2TF2uYrD2=k6&72iA!l`Yol3MUHo^8GP8F42I7fU~Lq;H|><|7R|) zjC)JBj`7dK*!=%sF8&{m&ECzZ!8JLbPjlaZwcpZ z6_=m8`Rr%kz$z!GZ^-IzyQ@Ej_n7rBYX-m_maZ#uw5EntIvli z#yGidL6TPsg<@7LxiBSN7Mw?>*-4ZuLc*tr#m(*du^}RF6iv3u z4x}hsSby}|1W+LAC&JtHAxfSR1bO#_jKo_|THwkFIn!b})42#APCB%iOj=u`B*Y+_GLQpSw{!OsKOlJ!e!D zUrF5*P9@w77g@tTY{xAcFcl6Xi4+1>0*@jEf;C5RjihD`Vu+e_RKd9>o%>1kHfAPjmL zv3=O#MYn|)-$M3_f{Vc%*!{Mx;LOtDW1ZA?Pj5}I8)T!yjc>tXE5Lw)CO` zL1mlGnDoRlS0-5@Cz0zT9!JfjD3X|89KOVr`(R}n9k-NWM%aXr+qGNZ$7@zVZ|}5{ z4482n;?h>y&kIH9pBAE%IbtbFyf51e&xQIT+}CTIr}c?B8IIn5fd)S}GJiD)X8Oe< z8-Y4v2zgLOZ!!%IvL1H@(!O)cACJw7WyegcXNz{?IrhaI<8)_4;Ubmz8qD5%oYN)^ ztG%)6IZ|_Px_r5m2?0VuFNMPxQtw!h*(N1Sez#e@pKqOcc#MjN;;-t$2c5~eD%T36 zrx0b_e9s>2SUv$$IwYeF-OIKJx2ZP|mqS49M71zi^ZLav#$b#n-u6`(=PIJ*t|th0 zsP-e(3F^*9Y<{`D<7|uj39_lUHd}3eH1;P1T?~nx1w#f=u-L)E7{PCWi|Gu1P$aY% zqP$aLwI}ZP9|#vM;6=M{R<3j8`@wJD%X=e?Kv0U`djy_8ktC;~OdYZnBwpJ&P0m0V zygj$GSCkaj%6?8WKWw2n`$JUZGJ>tdrT5^W7y2Fb{gGH&lNBc=fYxPk%C1}D;wN)dSmeh^%uu}w^?Q2abVBx@ zC}Z*ow>UrxO=HR-%ED!yapg%Ctj%CB*Qym9e^j`>QOUniKkzaiJMglGB4VtPeB<$Aw|!W;xvV3$@q}^2+BPCIcZ*IYi8O*@jLgBDL0u>0_?98J(hg zE5o`WKC=k8zDBqL*0W|gUfF~r+Wh$ayso|M4%~J}NM1Pfl&;ULFVK-Zv@1Hqx`Q_i zZYf^ET`=*R+WajwzNQ;&ozxP%yl;}>%!|FG)qx>$pq8abKQQK1?KlI$HZ(SXh@+(9 z)IlPoprV+8%b^S7owX@eJ_D(L+<>itL~h_R^r}5eI<&UG_hxRygTv$pRsGWdj1E~t z%~PtFC8tIzfbD#)S1W-vB(y0N$_eMl0q)2Rf0~(P4Aw_)tn>n6G?KUYAkmuKnDrjY zDN>QPG}q*dL3&#R)`Xjv4;|vPUo*B_CVM$w38jlvGcULNy z;n{aMEKu0@DB@Qkl?gkWi<#AYP@Id4^YoiF?NoF#oh~fn*xz)~?=J|uzSa~`{Na`M zu5K?Uk`u%j0WNqri^8BWyMm2yCjJB@rVPfgp(O6u9p!>;|H?Lknd)Muvaqm)o75>` z>2mTzwB&ittr&BiCS*BuQxqRHbac6DWjYVEc2RVuLgFUuR0=UxDqiB|^4{sS@`#mlsYoe=6&zjb87+p05eRYD_My!NphBFwX&hjIBFC7-GoVprtm>qX#SO-)@S4^s!cSAAuHilk11|<<(!U z^gBC;)iRK{8%1ClHEnN2Kd)pnIN8_?pSRS-K$0?MAoTk$e8j{IQ5?Dpuq1(LuOH)# zd1GPE-14lf>RsvZSf{G9oQ%q##pXd2$n52+t4lKnjW9gO#K?}Ts3{aCJ^`-*K8qbD z3I>fw(~0$;WGzIhZVGk7 zaFMC_OhXfUC9Z~#DG|wY8A!{sEOmeqN95&ArexBF@ugoqg(Fd12r_#?Ycd(_$0Svv zqIy+{P4#Foei^I7Bz3fH40qB% zXkb;OGZ*)P)@^aksx}n=)ciC>5%SsVD-~_$+$`uoc16db&m_)Y((ytnC$eiyWrB8G z!{O?e({cwn&=kz5X(ZvTp8ukGdtkmEC4p;?byS|n+Y28Fu!$1?rpYkS~@-dt3 z9pDTaWUETTLemDE7I(ZbBNh;b zC|nG(@n*3whf8L{<%Cnk8bxV4J5%ffX}GN2*ubV$x*t^>1D+Fm?0r_t-Xv}N zjO>5fm>KgcdzJkSe4E19f;s%3AJ9^)Z@-g7Mwdw7MzIFSFTd<2Bf*i^@moU^~y*Mm+_Cq zCs`|5Hs`Z6*g@cz}tZ`*xTlbZv8d{Shsh-7&qDHKEvTM z*3qCsH`@z#a>7!B$yM@?d@q)feGVDlb;{I0Zc)Uv!K!00r88tge6%=jx)$Af2BGF> z5A=Y+CG<0V>6G?*yovF1tt#t-Kv-rp zc(~ZsL=vnO{IF7O$!nCG4@r~YO*eD9Cd0t;qFp-QyV%Pi))y|kwwYCmE77vTQm`#? zA``|~DHqmuBogf1npSX_y`P^cLW3jpLE$wJx+<*BKUd;B&W4<|pCw8ds{-?@#&rqy zdNBd;1Vfmq#%d7;#8d8iRRl7|c}>$%>OGA7#;O*XpZKRb6_%rPCs!o%NZN5SavmL?8E_%@yNM&pp0S*!fBH5J`%Y7A+7q$uDvMqBRwez3 z2u=~y*uoZ}T1=2MAJzvgsa3Fw5=BJY_FD&q7W1T-%ur%JZ-%1PZ^(sRHIV4n%fqjo zwN*lhmXbbZFUh4NiJ!2XK%BKx9!IJZqPZ}x7#!1n8Y zrY7q)raNwx_~}3La1qi-8Uf%D`TKH|?eKpSIWMZDdtHM+D7C7zI%RS2z7d>NTMXmLp2 z3vwW7>5Pnyt?h%`23~x|`zrR$!C@5e?4ba2!A*@l-c~XH!Ldz{$>bAJR!xDoCnXwV zuv3rfIqMUb`6U55ZDhhRpJS9o@sK8vWP_6Fo1u3O6x&tAzH%Wg#}{9)-~C)d|A_8v za3Xe9_!dsOEK`@|lBS7pJ8cmHVr3c<;rL+d$rTj0e0NcgOy15gJi$xi zSjl8cf?(CU@5Mj8-F}v9X=VMq7@ksItYyt<(4Iw1+IUn^T?!*S#?E{JA2V`0^e!Ig z*Fn&2s|_fy+cEBu=-~wFDs2oI&_hYF^ffK_Vcw5LIpK^FXBpQLr{i^RP{y_Fz1Jv z9&CxUS+(|}e#g6V=^mdVM_Vjf8sKX8Ezszg{D~ff{fn(_b{Ap&Ktk+qbkYpb14F!k zxS&G?i{Cm+b61tC9G%iGAZgGhj=UY4!;eOB31c1VjJ|ybx?$Lg4ar5Yv+yB{8`xF|0^|Hk6G5 z_x~{VR#A0D(V8YM!4l-)5;(ZKI|O%kcX#*TesFhpCpaO%!QC~16Fj(EaqqZY-PKiH zUHf6~J@&(VTWgFp*Z+V2VFOMY6eM&f0haub&82>gKDtxd6JuwP>ZfXsym$RzS53=o zx%gJTZ9UehH>=XCwXB+Av|a7DNpxk?2~8;sr9M2i(3{RrS`>0B--P%ZP5gMW(TS|& zHKROlVT!=9e;96Fzt^OXD7=e={c>`W53L48wXAXy5GIkWm}|&M36OdpXA;}tS3*ZwNTR4OVXnr} z;o@YL%wfxnvWDpS#YpdLWcV6Yr&~Uly{m5(BT8XR9%#Fkf_r!Sf(DXFGJWX2+{u|- zERM)uDBK*Df1>~SnG5keZ}Y)KQ~K3pvOI92 zkAGzKiNlf}tIdWk!dqC&N^M-I6RpDKWZ_x*rm9c}i#PpeaQM2?OO^GX=jPfD?O>X` zcy}xgqm08SKVsV!vxG)i!oSu+v7P78>Z?3{m9E{*nj4a7){Fh0+hRe6%Gz(Q(t zL@J9X9Uk4oRSDcKt*$bR_^ML!=yA&yH; zO@m&-W9c+gOG7FD%t4V76YiX#Qbg^(odX;ggB4MLI8v zg4vhIP*M@GMbKf8$?jGau-FKUByQzdnw0zm+%P1WJR9jJk!s;`5VdQ9jjMki<(d}! z0bfU^`u1}eV7N?P>$XN;fQfESW_D%{ZdU(C zVXFbE3Qp@Hp9S}fSjWCLGunbk=piEUOU0NXoHv+~*1aTqICo6z80xx^ey?TEn(yU; z_?8D#J>2ICR7ur)I02ro^@~zF;lrWxv}jl;R960hZQf!A}FRkqEUrJ?#GZOWv8|3a?TdB+9y&WCB%^);_}e;A%<8d%IbA`&NqH);6F?^RE?*U zrPnrtDyy&#?yp3)!D-@fa=a9$D;q3i2;U5IN{jKf<*^;EqAiL|-WQEwFU^J`89n?S zh-{@vlLeQS@&Zyh6u^nIRB4VG1m)_Latt zv)v&WdFy5Jz`jG2UXDpELU)Q8-KeN%*4afS?2PnpTZPoz$hBWCO+7~SWeT0nH>@$} zIsRRc{Ac9aijrDXaN3XSx5q-{9hu8#IoaHp@BywE&Z{*po#Ru8M9$~uUzR8Axheg% zof4$OA`u=VFTFR~}*ptCOpnk-4jhm6M~Tz0ZGf-O`=i~Pdd9^z@a0=U9`1qM_ z!lBes$}ZPjih2V4Cr`q6D{v(7=!$RYLY=#RvLEF6rzZvCK^?vD^g*n8UkwltBIet0 ziWI#li0nAa$T(P7@Oq&2<#(JJ6}P(YZF#?%e|(&n`0ed`{<29I=2Ax*gb>Y_^Ez?; z{FuSaTp-lzcpqfnPsC3;lNj{DiF`P_g`90ZUcNp*2R`52>{TdPDcu!tK78BwGU9 zD7;}<6hP*Sw}Lb1PlBRMDAn?c5mAT~*>hkVJ16TE zJXzu`vg1bnKZmPx4E8v<17%QOc73V>8{|6VxKLs|{u6Hqo@2Aev-0bZK6&&@NN{X~ zNeRX!+$`49WUw+oz_PvI_ixtteM^q9eM66 zpZ^>0u~e}l;VOXX9sSWq|C@aY=?m{LTF%<9d`GeE+4k(xznF)fTj5`xrWJLD=&( z7BMNRq?wvRChj6LkKzYv(8NT1-HcsY%UI!XP|kQ77CX-r-9``UC{noNDqbq(H*Kdy zHkTilgI2AfL$W4mLt;OKX%WJa01equ{qt-cQy+TPdOwi6^S)ex-+HsyN#*N{@g+X%Q0;`S zmJU-{T@q^M^=|Xbj?Dqa*vQwv4|YR8R-cT|Diuj%jQNfs@N66xw3Y!UZ1&+x^6QR} z>c@LpM+lRyqCT|6?)<3Hn4A8J^evI0V=9s`~#_1P!HzkrI^J*MW0Hw5^bcU z{^~Jk?P&ljm~Nb6F?rd7f7*IFC)SfyxX9Zhh-4u#fu7m?$p&D#0>;@W>1ne27G&lR z4~JW5j2x>=<>STKqI_n->vEGhHX{F$&Bx$-i<`DMO9g+z{zx;|aR6{-AY%GmY_4rZ zNS9+RyPtdv%FT=@>h=he4o5p7(n(=}PF5#H7@j^Lw*_9sBPXvw)|f(P{rY~pm*^dL zL_E6lXILLWqL5Le<>@honV-k(C`}jyK6r*nu<4&9aw;q9$2T{m4G_sH)csi%aBpvU z>TGC}fM0ARvW6mB(FRw^HM;ShE56NytteN^{{6GGM59`b!eLAcIYEI1)Ju zX99D8mP3Q^Ix}dp;cTy5Ht0$shN-+cSzW}7fnTk3voJXu=OoW2s>W`V|L%tBXDXBV zWtgkz-}{m=+s(AJ_GMp*C3ai;C4b8y|DjHsG>S5>%zfPACHZ${jU$zpBS{OLmqX494~Ij@weE9T zeDLFt@NjVN_7t1tZstGY$>qG!ilzjhI)-X>V0NW(R-miX0u2pvEJJy0?)F#wJ4zkF z)oUebE0s%0QDS)L`&3tg?jMQ?IGtJQtgQSO+2o8adZ1oI@#goI8(wBPnIjplJaYg8z@p~Of zx``(BoMm?Un1T14P86ZT=fzv9NBi8TGbnTavyNHhUdS+* zOb3`95tijPw<-P=#dS*iTdnz&m3+=DN$cCvBR=3FN&a6+Y2(@VcZO72X#lM-R>_P^ z2t)mblJ5(uoV7G2KeUK%Ozpgm<(e^+>ueH+MruRc2H`v}99T(0+bUgnsF)FS!jQ;_ z0MDkpZ;-W~;0ZJKYJJ92Rk&%^8x4?=mIxa;%;C`i{wh*E8bXz?ac*t|$x7w`OL!os zsFQig3idC~?F?0d5_7c4c}zdE0v1O{C?-&`F~zG7rNCDXdp?SPiSx;_=v}^6rVXah z+~yO^XiRv5=OaZVe0fB;ekkd{^_Qp`Hf$`J_}vdV(~AaHj`g6?2r7rZ0DC=J^irkW zeUX2rZ*%Xz0R%MnwaCotpF+Z6{KR zBQc_vhhIWst}E3>6vqYPN@klILje%7g&^Xop-F!Ug`4X+mnipKdCdf@UoiVSr>lvM z+!T4{N6{@ire|^@4#XE4j6wnJEfmn%8OqEk!>WV2rIu1LQ&)|xO1zLbEHJrIW4n%f z&4^OzHB0pZr$@}!P7!XEK8AYXPTL~MX@qs6H=`O<5b*nwlph)uaMt7swfzPjnSaL4 z50g<#=bIc68SOmM1~O&ZSE#Pi1TeS<7tFV>Xy$^z`446FH5~9OfkD5yX9!v>`F4cx zF(F*dD7ff=Ikvb)>7nR`g~70RCR9h#*L-o^%&`%JB8G-#o{}o!8Y2CPBsF@ETZf zVT0?))t*~aB%NLG_J&DG62FA zG~>%rCva-~k|*zI<;+;E@f<@u$xkH9^Rp-zWZraM+Jy6{GYlr3&O;lF!nv zI{O;B)FU$ygV~1#F8c!R3A!;0I=YduLD=|17Lf1;?ZL_HDg zk4hpPf3h)wYVy9xFD?Fk)e}H{!=#db@IO#XBp;lUsfT_Yxr^4v)L=Hr-^_Hn2E?v8 zfyd}#87EjpowfDuA2)oB_Y70lhQd6kVJu3fjqwqDAztj$VEarM)HWqoJXQLCQ5ZM#Ug7tPgKU# zI5VQ^R+)$koKb3b?d@$XJ-WPq8Je3tFJk>Ug7RL4|I}&0U6pEi04dGvG(Y_}TgWv7 z%Q)+jrHpz9_>A%ghy7z{_#G$?H=$`ZrSzn*U}tIU!4`E{TH|?*_NUmLQdLs|Aedon)~=*Dz-WWp2msY7?&56N1Z zSI){HivCgB4qckOh?@}eVgNz4kufg?o%n+Yt*FczAr>uRPbVv^1Rex<>y9)b%jN{lwKCY z?$Ql&5`w5wOU|1#T0o1oS))Dq?7HmMlvq_ZhLuDG<%- zQ~Z`b4M*|2NRnyN>RYgS+s5BB5Gqh+`!DRW04H!JWHNx{D!lM(EJy)OF6A6{%}JWC z1<4c5=DibN+GdK5l(pe{>Y%mAEaZ?Hi=E)6g7N?a6_y z-a$(4IgD!z6LrF5&7?t6S4cE0fmYNO{*x~u;K#)Ziume0_zRueoE!>2%6{e7^E#TO zO2t6alyo(wpdU*12#At=_4;_@fJ-Ojx{9xZd+i|iy!xBQGw0r6HhJ8h2_twKYyP`9 zNUN;Xa%|H;Cd~ocR5Wv$h@yL$1qs&9S8;Wb049_bf3rgwP?r$OJ`sm`Z!;s22s6lB z5-q%tGR|Lz4F z2xkRqw3ul7LbNAnILQ1GJx+#7-UG>{d=ovHo8jS3J!8M!{IC(9m!ks=vn;m(0mshDdzYzkR@9Ax9m0K%dPR@Z_=cuYm1BBmls?)a8A9y#} zfMt`LAJZR)|NY%k@O-|S*aqdHe%&C#(yvDW4t}~SPiDtL)-?vVBW(^5-jn8yHltZ6 zv}0Ki#&J75pwb}SW-0~9`?I~lyIN%VpUH!JfzM8HuH8mmdkiXYt;BHzDnnQr)I|V0 zegl-*ii6huY2tQ<&ebf>id{BY?2@IwjSXcn4uIICYPXovu+NS$u$|Mw@-Bjp1e>0D z4?CpEzu=*A%y;2I8@PRts3*oU_8&qyzVTNQPxRaij&f_fh5-#oKElB5jas1)Rd)T; zmRi`jr%VUa^(2{a_bZl$n#dWYW4(dje2{{Ps*hZnK%$n z2yb;n!{14FK(rJZuZwJLOKOjy-uGy6^RMo)6%xx}@YiO=F7sX0R&Ox`1-nZ$PoX0o zTB-Yaf7ZHK!K5o-VVU*eu|7iJQ|&aj;K@})b~icxh#EQG(547z`Aj~|j}|mZg+ZXR zI&EGFk0O)KK7pp-y3QnOC!(oBI5xJKt`(e_|4r9P5FU$|v$=NF+hScF!Q&s{d?4Uk z{4yvvo9SA`)wXS;VM%3679>|KudS3~&e~C`FUSMXLihw!t+cyhA(-? z$-9>te{yG7Z9_ZFJkx(zy0U~ydac(Jhx-zG%;`o|TBy5`Qg&7gjmXJbmz8lys7u;T z8VyBhW2scTlUSXV4)g&SE2VG{H`Ur%_Cavss*bF`9ZR2_vd{A)>MCbvC00y~w}Wu!GF^;g-@D*>9RoR$P8gZ($6$iH{IKmznVU39*CJK2)-wmo>(obQ-EV&Q(;RQMHWvR~ zmSzGc<7jdMv%aUJU=-fD{PckFwd>r=He64I!*%(*IZ_EoIp zuh*+UaoRw;WGSgWdqoRQ3D&vjrB-F77+T!7BANEz6QDN0m&G}D12Eay;16w>K*<#4 z6*jbbxK%#A8ugD~Gqr{ni2$N9*(+-ualh2XD6AG^rj<{K!#T-^WTVkRu@c!!u^@6m z#*vMkf4@url7v5YQNY0}Y zWm;J*wlBOzP%URALQ?VCTvAtbW1*r?VZNk4BYyj+n6N%+xlffnviEDwTIpMpi~QwZ>sAu~L5` zrPf5x`$d%cJX$8dAy%iJ!AMdpE2GrKT?0iMR62?~b)e}^x-2jj=oN$4$Z1!vHlguQ z{FJY#nLZ4E=$xHgTMryxgzL@G_U)#*E=@__W|C%H-PD<3hN<#M@H^Qi{iTBjbbup` zZMt#Bsz3Jc0-pnlOc*=x!|{1#TD%3pE#bG?`M?q%%z%2$yP;Te6*FMp)0{ub#DQy? zqORx}%OX6F(Q3pb6^R?$%tusqJIGWfGG!TpDDxx@Dj?(t$V`zxu;GHNS$RO@ra~?6 zOD~Nn7D%Q0=ruJ%tQcz?v|vPuh-I!4I*ZD5w6V5E)B2%W z3^L9*>#V2>c|)B9J^MQH%dE-I;EiEOXcO)*)VN%^P5H5lk`RIldMDzkGjforsjorj z`y0&aJcglc@`j;X^v?OyO#BtwtOQBn#Aa?lZK{RR&BZay_8zplWJ7hTxpe~R9C!*~ zogfzYV_-2(WLvtFJp~j6aoM#;C@QA6{nk{LMCWLZFrY$NOHs6ER7w`iYo%?~QAq`! zW0xb^y5D~`*2u6i*X&t=If*1+(=XUxl-uV%V1>?tc`)daIW-7X{Z`|NO=Gr6*Aju| z038>m@zV&nzN)|^9>-aua+W?VD)h2EIY}_j(_=S*;C~2lVpYI%T(4Ifg35!o`O6wy zCm;el7CXtJgIN@SmEj`_u0kkM=+R{&efYQx%~x1hgY-3ZEYBflvjAl}I=ClE09{kTDgDK?#C!_liwE z1^C;fb|Ve?^2y{E@pFX^;Q9&>>Udt?$|?eBqZMisiujzXso3towC1~#34MnF=O zdmd(EBZ11aT+Vr4XS3w}T2?>Gz?`v6&e}*W?f?3{2uTE>xtF`CB-SV!Xhf;w5ad6m zW!&4k9b1-j!DPT79e&RPR<*kNDfOkH%V6-EkLZmwrR88lIFPADvwDBGSMpc6r|9(B zB$dg#nPY3&aVwDmd*EiIE;`{?nXZU&FKpBfHB2R-H(HDvCp`hp{O#8*X@KrUH&fj` zr`46bL)@Nw*Aw(Zdm)95y|vvd?@QTg<-RpyQ27fh`_)voH_ z=I<@I`w%Nn01e4d6<9)(tMw*}9y2C%2O8IC@m40ohJD*Dc$0h~uhpJYCQx+?v=a+< zdoW^H2zc2C)1zMS+CXF%Z9_NcD@BpI7PeIPbgD*H5dQ##AKwAfR1(q&YP3nh!(Uhh z(5r_Loh7?uBVzplDobS-B+K;D+VusB{L`XK>ZBnK|2VlYss4#s$%i?sNHXuAxT1Zv z{xNf;8cW&NPyYyFKwG1lmZ`CWWC#7iKtk=05qf1iPZO@TZeC5m4?R!DFikYt5 z9~(t~ijr@^<;Eu-NY&vnljrqL#SY0xAVFPUR74a&EpB@hJ#>)%6KVUiNuANgevK`a8@uq0?W>eT4#&N2qz`mKx6khR3cV zX;G@X4qV_^m$6}zQ-((>-L(REMrn=Y@UXJ+Xa6zH>8p6nI!=C$XZJSStdtZ&Ms%+m z2aD8Rt30Y7I^$vrJgffoKT`J-rr718H`VAe0 z#=JIyb9&wZ{v%5w0SQn3@M2qp?T7M7ucXT}m_o-|XbN`(XEGfOgLCJ+Y&7yKUsK9L zny9B6qR@~#)w!7m3sX6;bH{hwzh^tk1%Z+%_KlgZYAPH z(-L8z?AztxR$=52Ub_t?oV*Gmr~A0y8vH;X$J9#OnmsS67Ps5>-W5w21u8+ zL&>u}CsC#i47wk8(p5KzjBYW0Y!}gcilM{B&D-W*8Rx|K{P4!u0umh0I#7Ibjl*sk7#ze1yO)U z;Y@Lc3sUdAL>A}~06+^l?loWcimSejB4zbiRr(eI6CE*@f62x^wwr?2F5zl|d zoWy2IKg5^bTc|=%HuPk5<+b@peyPJSaNpgx0#~uf3evQvxyZbg$u6DCk4>PM&Lp|= zJY`6f=AZstMaUHk*5(TPr$g**MS3WyWVGIeKFtbx;mb5OOASyZYdfZYSd^qKB;^1r z=R_lG^s`0RDNxsv@()R}Kq#PMX_bWO7%38Uy0JPFSoG&aPHj|(NAEbeZc=R*@lbsK z$9VY@XHFe9ZSMgNl5;+8yO#@pc1Z*GkpVV9!&GN#r_ zx_(j`UoE}kSJU2^6u_%H%%$Ns@%dDIm#EjFR|mKySYC={8e=4XA9s-y>fDE7Fu^bwtH zddG26nPwVQQ5~AE)pK%AlzpjzpN&eMq-RssV@k24oC4n zq|&wm_)aQsDnkpG00=VnIgd8EcR%gUmjadikUx2kI5Waw0HtB8RHMD459ruQp|{kF z1j%*$I6j7CAFlmJ5>Mo6KTA+$?&W8n`k+7&;rz4}4AJABM6#R<*QzOnaG4imnP+&B zJj*}u#_~N4(d^z(HTzyqgtvWg@#ng>WEcxCIl-H6TUqw;));nNLCne6SO`))2`SiZ zX`15_vrhp%`T_9ihHY9Y*55|P%q9H?ignL<)@v*;;^fCcd{MEX=phg##O5`Uwo_!G z(V4|5BL4YGWgb;KBL`)5kKnGlqFr2e`Ixpe?D{8SG zzR6)KI3!YX2Z$6cOX}cj5Hz<7_>~bQmAnu8lzTW12?}hMX+D|J-8WX1(m4DlxhcjF9SzPvZT!7uGC-{|kh8~yguXu!GHM~6`)s@ayJN^TUnpb!Vk>Olpyr7tNbACJ7-d^L5CN?* zV6lX13A+ER8xR|jfWbyv;L)@xUK5pw)g(z5Y^I;l1Hf7eUHO za>l>6b-&YbZKH8Pn*iYgPLV!^8Y!MWuP{FU!w$+3K2I)aLN|N0lxsQHyjmQoFIO5n zXrlOnEF+S=+p+Djr-Ec^*b7y5k{+A5>)lbxSP6^o1b&HSwWk-u%!7?I#CQW>3V$H#>HX$+@dGW z8sW$l|CINam7}Nzx4;QyYpDKDv{^;&%3!V$j0JAbR}%@A{OKis(U6gaAK6|mNv|1@ zbogFeXEutm8;7adwyklIH?b22)dd+7UPP(T)~VsxC+lORsWsRZ6>zrjH*dzn@V z0)BI;3aa65hu{<8oJXmE>63sQQ_GRtRUc`xX<~?QA+$0yd#r3~xGca?1F& zl>x7@Cp!eN>yTJ+54+B9>6sl-;6brdK1F&iPyUzFUxT(5z0!sulUOS^S|`Lf-|?k` zB51_v5znL|C=cBlQ9rKC+XnODs@QnJlUuQx~kAuR)SbYyhgD?Mi%+`Ao+76eMa$k^#WY90KS z)(eHA!02u8_#s-wKf15D5>}bDAIFK(!A0S=3)3vxx)c3(5fSWPXfBJYx$2~v-j&QC z82e>i0~TY!0f0ciA6cW2@tM+1eNzaH!%`Q;CBccf9JR>_-I$$y++uUKO1O-C5bZ7j z%D3RUYQ$zm42jsE46=Z6JJhsLAtol_&XINzhz>w8vq-`RA@+`Pgb(2Mnb6akg;R#p z7&c*eGCy|ayEVUP^y?|xz-#=l?drrzzG6s zSXJSCEIo8X6NPep!fA+5`Pmd~nDuPUgBQ@{`ZyT+MAklSkp39(0SFtZ!_`K$y@u9P zA3Ohu|50iwp0ql~F$t@K328&{3bPNjHQ=>W&Z%tajWqj=R$1M)WplBaJn*L#c=CN7 zaOR+>$I#WuxS&k?FxvcTQ&yy!$W!DOL zEMPTsI5`hjnYt5DE@>!klRx0T!kPA$qFfRm3qV%>5t;-`Z?1SNmOJJec#aB@ic-*2 zqnp0@9Gk+aQyV73`QA-#SO?P^_5&ahW6{sKxM6 zloMi%Kk+2QyI0cg(2_(+VWaCl6|0geEa~2{f~m5dcVa3dR!6FOKDPnf^Df$b-4wnL zUKA#hyTplo7W`zjj*QUD6KOJF9K64RX^o+TXFr>=N|%D)guFq)rB}YhR{NCzzcKIE z;e31467SOYH$#(nMO4Nu+FBVVR6M-5Ki|w@5fpuz_-w3U;0D;7deI$NXz^kpQ`zhC zWg+%23z%$2MBf@x5QCNd0yJ#e!o52d`*TE8+8ikl8Q zP+JhwW3>RN^13@KSPpC^*3gG$!xjFQJdLKWB@wr0t1?3fn)b6xjYY)Q9QNj;16vPe zWbW9JNUj+T02jBZIEQ+l9fC9kU$eBBNAKGQh|hDW0=UKJynKh%eS88gk_#Jgq#mdy*{AyAc-JCW~CS6NSXc!fqtv7-B z6F#zeUl##Wb~aqG<~1r(yIz2x9UX)Wzq@DEo^w1a248l>5OrOzPM9F6NkqMsm5hcN zWlpVzg@3Se=^JdAWi@DRJ;IpQmUmVii$D~jfMCg-#MjjQh@9+W(;Z1H6o;&qnikq5P{K! zIWaf~@6`KVZBvPrb+6zC2R!Z5?Z+4RldJ@%JaLGOA{BJ9x6kOY8UCGsJ0X?x-S>FP`a}mE=u756z>y&n4K0gmS8ubgAWa7E&<+}#HjHnOzvcCK^Xn*>} z2`Btmr|j}_{ctnQ|Mq0@e0oNHxqOIP_sNh zkD%i>i}Es9=ML^6h#TZCKXBt639~-#{1O)D4)WjedOO*J^jMh9ym|kEb^&`_1#Yut zv2)$S|L%7z!1$RYKC^kl&1HH8o-Urgd%=;e2lf$;UZo`pwu0i*KW4Z=k15eZ8Ysyy zfyfuQBwc|vVz4jExV?818+SRsnGtyi#IG?Jc7hAT1U`!w=?d}ncl5e}+uWbLw`;sF zKjh~}U^BjBbAQf=Xx8XaQq6eq2OI47`bJ=Ge{;V@7%X-rC^Px6r>BA&?hOw1BIJGJ zDESBH%0WT#m5LG)69p5gNy51Rp7?99b8pk&vp6BukNeYAs8Kp&Ap4}r1Vi0hF)@YC z=qhPJV_yiD=fA#|_P%SRTZXPlq@RDXAcg$@iuH9WG7_yWGfGAzcC-_!+x+AH3k`-u zNI=@(*W;<3yjc{EWL8hJ9i4f=+QHl0bf5QwAVGL<`C+a!N>(XyG|?$u-K;)0@j!TW zHM;%5%8F=!Ibeu6;K9Q9!2+ru6|EojcSiE>j4v;2TrX^v{VyHu14WSMbJO9W+>4gJ zk1b6Da!)6x^(a7CIirA?=;`kd*h<3Jqr5oa22=#)VS7ZrHfW{wh;M4W!{PHAc_h6< z@je|Lh4Z4fT%4d_LH!x6VIWk!74{xROv`I=uV=*uLe58-dxDVf`5m$dEA4Zi$A-Vd z&R@hbpkiJyUVB7bD%N3Muq&Fh!`6Oepb2_6lBVz+}Cx6W9CBQ}B5B!3Gkp66n6o$rOGq{h(+4 zp_h9lW#tmJ?X^N8%vtUHY3WsGjkdT9D{;fbq|y7L_aK2z7lUdZNx>tW>O*G*o5Mmw zpKRxhkx%Gs)t!+JLlCA8g89}d>0J=^=8<~f){EK|xA)tJ$sy=}bd3b7YCfTU_&Y}7 zp`b|rH?9$R8F5KPHOc>-JETli)NzC5bI&zSY%WO5Ic$49-#WS-8C)!@>Jp$1>*YjdM1&(Qdwe9-E`eu!i<^=*qa zY4Fz5s+$YOd{z;GWQt?;vphy(ieIxJ$d5`CtH(N`pV-l^Q}{5QKk zDBsf0J|Kfj)x#>{@%lxlH-+pRxEmy$l+w8EF*+Dm6tFR6)w*S35n6<1*?cxwz^Ldq zNdBWVa9#~RXPx|b6`cyC!*}n@GBD~GVL#Kh-+@Ll9M`~;NlNqpb59ik>%-4tme@h{ z7YZ4b3D4UDc5jJ-T^{$eQ3Mot?)jUSYA+T4BC$NSXpoAqgk!ifu3_*}=#t8J7>A~5 zmXHpA_ec7l1l-!-N5D;tDARG>{zO_t8Vw2+&TRF-hOC^BQ)^O;zDjtWR+UH%V`D*^ zxok+%z>3G%7t}e*Iu0v3SVM?~+J$WvG>ix(2km3FoqxGxdc@lrf+@5e)iqAwJTLQ) z?Q$QK`Wha)ufQT@wJM+ORCTc}ur3XPisqn(p=zJyFlxn~gt1rce4%D5gK#y_RE-tC z%1HJ*Zy0F7XY5ZQuz42*;j88?aOFThO2b#-oZuyyMTyX@+_a>Y9}eVrK#EnKR9X_5IKG ztN&QJ|Ldk?|NEwH)+X%#cjw*W|H;_(Kkf-C)fK}@ANzqPDijpe|3PPSCo`u1hjHwG z(LX>_!EKWZwf9-e*gaY>&C_A+(mXpQg)f@gA$zQgz1LOJdYDzR8fek*a)OfdwCb_B z4Fo}jL`EXkuUyP|hN*Q^iTDJ%z~7_&v_jzyu&%wP@0=s}(~cNPvPChzH0FyIwgm=MyPHynUHQcm#tu1&sR70YFiEZ*n0jBl%0< z{pH=pUx00yi^or@9m!iVPo%yt8HMYLX0Z{)zZY_txrZt9wn`Z6NxOuw38t7hW|4M8 zwsPob>;#Y~)>f>qZviCXYNj=p?^D2KTlxKkt$PKP{ES?I?kD3TZ#=#m)S+bJ8&>h} zlU~cGEEMK(81+is*m9e%F&dO4t6GuuXJNZrIR4EE$|-noqGW?!+Euz5F1P~Z9ADl0 z>sK)5{4E%S$kuc^^eSdo_YMqYOz4P$&TaARF@6^LU=7@(|Bj|-k(%sAQ2EPxhotg& zN05(ADRaQ_iFEfVCcq&w$yM<~Qfr1;8PmM4C%6O0xmLKRnuGi>0RcZ(k?6t+Ek{Yg zOoh&_t2QGswlAagNE|LLx4n!Z#N8gFz}BPcEEoS=a>>s{HaTo^#fw2C+D*(!bY3sM zp9G3-Qhid$WOJBtJtXqXlpU%Eu{K_MH?XBT=F1X?WSRVl;lp+fId0B%F}0#lmkZ$1 zzEuo|jshh61a9ID_AuNzcOkx1;I5177(zsFAh9}?Hih7c6JeI%^?cHbF|#kgkAW>_v6YcbkTBou&AMyvod*>LPn$72{6+$9FufY^ zKb33+%6;YARPGh>$!wv*|=o@8FN7JHyKaR z)U#UO<>avi=KhL{1DFjNL!hMPh!2FHqnl{^g+IA^czW1cVSGtarir%Jo_2AwMs(LX9CiSgqS@2Is*$qw&|M@0eF47JjP~v%0|E8$R(-r+oN3h~( zOz?x*nYX~AsxcIyaxucjCAKo>Ts-sq7|VlO#jPWc8K8_?eV76&isqSm;zHk28Xms= zaB;GYw9#NxPzJFEO|PQ-J<3}sW)YfV{DN875S^;6Y^3gzaLr+;b|INNgkM`EVEsU< zy_Rms!xjNCiaGe569GOgUw~tulAfn84jrUUXCobB|7EpIbBM_Km&YJ3B*NbJwf1jx zdLo*2`F~^Yoq}}hwk^@LZQHhO+gfSc&XvYW+qP}nwrx9C>SoowaqH|8=hVL+>ak+J zd=cM_@z7`27`=_w7Ca?w6O~*=(>YwvI)b0~YMuGQ3K$qz$Q8wKtISN-1=}Qx+*`E#3#A>8S@_ zhT0~sr=t~5$d3`v)0~^B6USO}SiAV=|0Mdz)Xd*&OevEV*R?0=+e-1e03Gnve2LVI zcB>P1uM^613t|g5k0RAu;-Es5vo$D38uulX%4=oK^^DO-?bWmD_d# zupVn_l0AV$Bg40`T@i21M{741V+O3EkJ?B#QgvfriCe?fT3%-;k;L5%MtOkxYIjnf zR5(2X(b`DPn!DN_hw!%5uieSl`mNKl>5z`53kgrjnS;ra*%{RtU1<1X!n0w+PT?Zi zh)do!I?%SlK7ANek^Zp6978TVQ^N0Q*ptSbEyeY+D@|EM1wISLZ=Ig#WA<`=&~DTG zWX(2M`Omj?kM0q^rrM_A$c|tEq;p&6{E;J27QaqUpj_?*OUJAr@!ul;e>JPAp8>|_ z4`Tp3H~;{}zhTy&Ds5%*4>oO5>9a)^gyA*o=|2ZVS|pRz$}bNSrbJcA#gjk;A2g`H zn2K&s)0}cgR#W}P-N;~pq*VxNC0WPpIXN-&0t4oFQANJ2B*4Ihi`i=za6j3rEbb3o z4Q;3g>54{RFx1drmIniV#XSW-*-b+bpq&yS`kD?Cq(>QA;0p4| zg4_CD$k1ejF&q>2`7lhY0)DN+6bL-57a4aMb;8Gju^4Z`kloDi=`hg6J5Y)Zi)s+5 zPkpnl%_}`1=-Sf(%3~uz;>o0HL6Nb5leS}`?pl>w?jv1x-uvffI6qhJNPB7xi`}|n zzU&7pDp{MLj(}iZNWJ-{#ipMt3h%O=F?>na2I&{ig<1r)!Cw{<5@Sx}^4?Gas-MOV za3C)EXC0RfB6ypFLT_l@dYs|f?z`_+6zc})j~@P>^!! zG-DHvKqFVCCA-hMn(|s;S0F#du;bx^WeAB>r=y27g|H>R6UZo24o*f^Vq$305$V}v zmAh6;vv|9(XjP$fP{l4uU}Q&gjZYN(=-=$nx-Mb67yE94eQ^fwy&B`!Q*@Ttzxt%^ z^i=~Fq#S%-{3dyg0`BjdF}Ub`eYL~UKQ7_0XYt(x1idGdD65|-UHIO$7`ueg#G+p3 zK@C=`F>KaockJ8=@%bc!^kNDC&FtR3!pdo~6I3^RQf8CAyMWYvi17KYmaFs(;BtAC zKlcUr*YHB1x)el!1OVvzA+{#}_ri<$AEGNs!^Uny4C#yJD}vWYqDU>Dw1pAsMW@#y zb6H{@OcfrK?iQ8Wkrc65V*7f&9_h8`B`u9qv}-W*06c@p?c^!V%+$lR*q5rJYATt! zW}1BAW)Yvdz?W{x5NM)m(5ob`!+~k*cPDs90CW=h@Hg&?qhA zw(x?|`LQlNtfL=>k}#0ga+>607gO2&hWg%S7U@RzXt$E9hqvTx3+OwKwy_A(?Tvc9 zYWFOOaN?e-Nys?9i1>PYJ=lD`iU-eYDQa zbkpyusJBOc)+t!&gQ3L4?Y?XC)|+81{x3Mq#w3tEv*zlRag!V>650$upg)i=qBi zjVa$YUoU1pKaW17_;oGiSMLfaBPGNHs}7b~L|2h6v8kkVJ#Tq7iCA7X;My8_QJZyDY;8Ktx33N?nVV2v3E`BDX~QbrIm?e(-USy|ja;w-$C2qW(nlw@gA!fZ@y z>JKoMtg|xEXlX^Q#&}GcP`s7S=|t>dmBu?|f858l>GqwJz8pMP!dN;BDtYY>0~Tl? zG%@`qGC24x710GTRCQF-e(050xA&*xm@}OYGRbydS_3TN#AH2lG8k?0113LO8_Rx3 zh;MY1i#U<6QPZpk zg2EgB@P8FVu~?lR!!DB_PBwmNHx?%?B4*P25K$}R>;J3qDOr9s@63d^9e$LR35^FT zMV#C`iFeu-6lTbh$|FY?B3oLFL*>b#3qxua6rJ?4bhM_qZ;gbW_Q3f1Tv>j?sR)|4 zOVi}Jx3xx8vH9xlIL+?2cTDe#s9v@kSN&z>S-8FFo9h2PLl4|+ipOT2p;rz+Tx~TI zFjCVfyyz#m)&#hBaXbgi>j{VQIc%VidRy~*k@#;#(@ z+z6ID^+vEZ%NLwhA5AQ_&6Y26d~3jbDaFtfTflv^0*2CHZ#>!H5!Cc;HrrI;N=xB3 z*w?B)8z`Ez-(Pk`z?GY7kZ#BPG=Z>Alkl2Kjv&b8M3X_ z;qzr+ZPE0C($*4dlMpO$7%5kIQ@Yc*%{JNNzI)lzI}$(#T(M&$U!jRBA)85cf_F6Z zQ=|}Z9H9v#3t);dAX9rWLP<10r-ocTK|EXRSl6z8Du^~(urmqCRSeP+$DNBUX=@6W zK=j}9_A}3}jogi0M=`t`YlS{u5&G4a@(h0y#x^fWM(-?$UmHe##ne6`MrBj0Sl{yav(oJU09P6m&p9=i0)idm;-h#2AEQl^Hl85*4$E1$H%AjziLjC08=3d6@5_11<@JM{%< zs^c96g_FKkIjLX6HquCtVKfJlr2>3S&r$`#nLe=|_aDzL<6a-&)=91hQ;P}G=L%Y1 zGw5p^GZ5v0vCQ~a7Hw=j=+ehOj+Ak#%!Eb4Zj9#TWPEL^d9 zPEZ;NGVN|0ul`hR1~J_55M45bB+e$EXp*T52_^8m~{X4zl+(C zcfWdaz)S(Pv5>rJow|hcp8H6vlnX=M>vUD{)n5(EL|D(2fd# ze(C+Egsfaww|m(Q39w_gfJ^xdud?k|Q?<95?S0@mro&*A9-MUosc9;Qj^VEvy`*-^5H&(h7g|65+)dw?kiuv+K?rJp~ajj`4T$AnGTM`b9 z<^=CYJm>cPhYd4u$Ww_Q!2=pyc)7al0ucC>IZy<-~Pg+Vz%SkBq9GxP(XhGsu6xd;&#ue4B;QfR@Qqql$o~zjuLRY3k zVOM+kJ`rDF|Jrcz5qZAq{_JO5e)cnz|3<@QZs25Y;`9$KS61TxBtHw8xvRlAQt%%v zv7rz>_b)CDM>-NJ$5Vj&!@F9MuG`oVLX`NujR_nM0mj*;@5=LV{V+YMqwTY2d z2=^h!9#n#|mlC3Qtz=^jEv5-JWCaaIn~pk6TeB6igC;oBS2Q26)E16FgiAcjG)K(> zWt3_o&>J&0Q|yuf(?*qmNLB7!W{&^~${f@-tqP;0h_JVJZTi81IiO>@df!k-Cf*ARv|AAQ6tiEz)QP$7O^KF1cOz zn}c~?lZ>_wUr8IUW36E6oI67Mx-S`SgLlp`^l3D5WO?r613*mCvnAR?dCbjuUpv-%GH4v zLpM#MG=jWKe&RZNL-;!CatDy&85*t7bw00i_~*DPx1|2t_lu?ilMDDKh(G;?l0xt8 zXSEM9dAOl3!(u+1CI!2qY*-(T&As#n2Uho(Y}tp%Y;byp2ZFR_(9(a^BA?7w-S6dA zIo!jez$-GV@U!btja~_xzyH;Ljcc6gwtkMad&vL*sQwNAwK6d>GO#lJ2M4}N+mbsF zLm8>LQ=U`>)rDX-;^v?wsB_k?(t66@=n@iSdJfXya5d((R-6cYBK<3q6_ap?(f=AK zvJXUpG{tE)e6WLq|83^zEkpP4CLFgZN8L~PFq)$*=sPwxl%IYq%1MB3A=TJH5=(r-}-Rps2}PDD)(iAYoi@ z#tKV~6pY!1XdF*ppGuO(0(HM}G9lmN_a;InNd*?o3}4W3s}}2s)gFzN8z!N76 zfoDs0_~bOv1DN!0Ci#}JxBq+sBW-M1;bSTCnVg8C`wKI+l2rd2k1Rov?~*GM`jE9^ zuxk8-%D4$uMQ=udon+;M#<4c(g8bwXbDS#E%77AB5>?NVQJ;_Dd?gM?f+*VF#8v3w zJN30N9v(tkxZ~hVg9nwVBTcI*qNxd1c^tVYU!Vmp=^76#F=LoBzJwEVbLNx?3Q-`q z!|r8SWewbztjH3$GQN&a>-hjTNnPW}JdU&#O;jCtf@>!46A9^ID6^1X;!a7B*ZKPZ z=G~(A(h&W_nru8E>o0!uqVzb30!p4#$J$K$1FTfNUkya^3rcVW!cw5=g&ut5d6x=O z*#?zR<1)Qr1}cXpkaP7!r;1;*1I%l&?Bw_tw-M1}KkS-Q=z(N`Y$Zmx6V5cu!-RtZ z34$5S$P+F!?8C@m{y%@6kS#CORWpJi0Ly~eT&HWuk9ZDq1pM5CF`u9!H8OIsDj#57 zOL5}oH95p@iaj|Iei3*}dsaR;k>>yP*7nSN;FjX+cI4KSgWc2e=tbRA@>zYiP?Ur9 zt^CTElq}W4I+j`$t6ox)P5!QSa`G;GGx`9hmKS0^sXnS&`NvQfr9yJ}8mcYw$QpNI zjVswIzph1y&ImIdc)@8_c?4$6Z6#vW-x_UBm1&uAz#*z2e6P4Coj=4pla3?MAu89Q zKWPc(?jDPLNq^6GMMvEl0ZRr98JsCQhT?A+3>lnpNZ3AtqBEjBR4*_Hk49)Tf}Mtw zoFWA%2|WP29JYlm@s*Z9Oge|tq(>U{DH~?HY={6b;vifew_u|G2!fy(vEgX#I8GI= zxYY=QiG~@=9Dsx-rZz&(s^eNnDl5}7qG9hI5gr{_046X(h*G#B${)s`AG?g1uNW*e z4Kc^N1)RI*buu5wjb!A<-9Fgn*cPV3Q#Pd;6<}grm7o;jygH86}pxA{h7=d)yW;ems)mW^T(lj}0Kt{1fIsiPBfr4BV2wDSJ zAY!#ZEf5H-seulGvDtety;hL4Iyl;=1 zkVApEAP}_YVwXhFVWmMTYyqmfMtF}nPXf_IA9jPhZzh3|y99&m=f(+e<^V1$a`l7k zAEDij>~e8!Q7_O9XjCVt3e_(vk}arJ9Y ze8-mRg_*61@jsN2s02m31qPJhoQq!$r@)rO<`*oo4U(c*MnVY) z1jE_oM4V%?$Z_k6`_2`!U)*xq+zNW`6QABQPrP$?#sS)@R~Lo}RhHdzQrNk}qnirnR-MPV-p?%%h2HU%%F zF6H$S5?Dpk!D2)thC;-~-l}Kaqb%ZQ!sf=pY)T&l6+G}BvA(19kGPjlIUT+kln%0w^1t{oIXz6r_EtqN- z?lofr^lV`{_FaRghE1q5J2JpzVaqmzE*S0w2cviDCYI&mHBqjtx?XtLqjIY8IGD!c zM1g}Hq-ehEPO;I!X9F>$`{WM}M4L#q;dbG6W0Ub|r2apTlk{|_?h?YD_}I8Eq=*7h)(C5e~4h42X1 z$~=v3rfab1)|S&p%)XO$GTn8v`MxmFn4;W{^bp(K_?Q2lbie1pWmN6at}#09EPrY0 z+Rz0Ov8H-O&+SZZ5u>h;a1kKc?2a#DQt0^5oAsD6nPTlU&{R9Ak<>zsR;7lW>A_oW zDE9L|HQ0v8D7{ZVbC{?fANzOa?mzzZ4_@UGBlt6dK@eSeqV(+m0)$j3U9F`kDyJgU zNW|-{BM%Q|j8f5usfQrGdyxlqS?V zb09O#nZChH@EF9n3LC>FH7&pSSRSOjMgAlzus61lWmI{48G(FzIM9JO;uut{w3J45 zNSx!ymin`g{VRN}@gr9$*gVo4#-rs7$x8a&MO;FNO@T2O=`x*Wr;^<2yfK$i z9mB!v@q)V>I?1;b%hT(AJVeSV2)`eK8rD$)$@(6((w)OE@-0GTGkqvE$Q~ZSb-NRpR>jUqQE^*^3vc zG=mH8LA*K<%XPJ{{W=jVv!^Xz_VRO1`(9?y` zG0|$)V7&}jU)sE)@wf?`PQ6T<#Y;(ES?%(prk;}5dUDFBUUF{EvGL4KjcjIW?fdWA z?Q+*X*E&~3vUbjHx;l5zH~fJZlwSH=2la4bGQpCA3F`6v3{ zyMThAim055^8b&*`7cP2U4BMz8w@aA7t~?dS_EhOmnbN!c^Ix|ig6Yh6-4cci<5pm zBoJl!<`ju|KWN0+8HndqZ zKr?S%g4S9a5Lnxg50-@B%5;FC+CsD(*J$fA1c=5*PzXAuvbvA5ME!fErob z&VV=YSqdo>G2>8^AXUTu)$m~O=~1GaGYA|Ms%2q-m8V>8&GJV2@M@^&iUD92yq#*L z)ge}QU9zQqx675MFG=E>uo{3g4u_dt0A9RU0*g&jPvN7)qU`dBTws92e1P$!>u(y| z@8#V})_jbPnDH#;<1_5INxLNFT{ZX0<)EF%WP7Vud>nyWmU*ZKLHG}STV-ZIIrdQ9 zAya?}QK-$RR%Ps2VQsL@=J0Qaqxt*eGNOeLU}ZbE+=p|7`1<)zF^ozq^o7iqtiNmp zPZM^f_(Zl~1i%G1bSy2I++26)i}9Db zi!bhB3?S08NSZ(&-u~`kuHV)3wRq%CQfT;#zx=0$L8!{vTI1 zvtwlchc0qUP1X*Z9f8-%Z>TrLd|_(+nh+G|aaY6EAUEpIu+7Y(quN9W5j%-`J;G~` zTgWE8v~9+riVC>k#8Icm!?DBQgHvnsRbQDb^6ti;i52@Df)De(a_A_R?jY(a!tUqY z*@BH9!o&xs*D2yvETIA(_l-8Fym};mJa*U6>D-_vK#)$K9?zozL1J+W)x5mX*)V`4 zhFY;w8#59L;Xe@kTY5X4UVgw$^BSf&_fzf4T1clRZ@S4%`F{!6GABU1AvBAdt6Tt+ z*Y+!aaRW!(3t~`a7Dif;Z|()-3qc`drzyupwsJsQ{xQ?cHsRjGAlI-U^y$VA7=Q0r z+G3hPv-;7?io1KfziO4xz90Rol?ugbA>e7Rdz$G|sDBD(QvJS*eWJgkPt_xSSXwSl zL0p4qH_k;fMQwa5EcWS68*-+S_U4TI~fR5U>4Z~-|6@@%)ODiLBb z16AQr(r)4IF6zp;JZ%+D6@t%5B}hWHiI%HR717cR<|J|?bpCmZwAQAAaTe1M)O1VZ z`RN(kNkeVVz?~{2$l?YbC4Hd8T2LFRbZ=_$0a<_xThc2mgZ#HimRU>zDOe4UQN)5N ziHEySV_~eHD_z9ylb+cde8!e;1#xtyWM$L+OGCieQp$Urh87ZryIJR*fL5a$- zQAndS;2ogsImsn?$QV%%EV3q-F{Vw9#r&dGkZrdQNeX7EHhgkvIO`Z(&Rntk3Od4% zK+5-^Ux(>w@4o2mUbdspjin8Dmm||R``bpqKE1;Hw5OlD;@wZMWRaAoR3_$R%Xjg2 zaoGdZ@@)_z5d`zR^c)7A`OwA}G)=$X1yh(qI{qFd7iZNG0^Pa<+L&oCiuA!=;*{3ig7@&~;L$q$}< z5dXi2{r$&GVee@2>)*&0OPbnto2{t6c%M+F5rqXRYVr93fb72ZnU_Spw)Gm^TcHH- zje~ck%VApa^~|itJujI96)cX1cE7ZM!%ZT1UMAdrCWNbLmu}^4>ln`~DK%fibZh~i z6l-VtY)WVGSqH~LE zU_Y^oXIhl+pLXnyHu)e!f8)u#ifCIUU+YC!=K)%b6JRB8X)#-!%1&8 zm9IXmxWCa{emGD6Mc6PMRzo(CZbP4BP+?t%BIQ3R?XG19`!(ND-M>@37GaW%+_exL zZe!>!Dd{?}A$S_#fG|b76tH5m5FTIm5)v&H2-2h|Y;ye! zx&W)-Umyj(kg7|+>N*Qnx(T7izTQhV;I13U*)(e+rkyW=d)kQC9#NJ3K9t$z(y7j= z?ZJs*sjAoO2b!>QsWi@J=C&pT$y`deF%uUjvj3#m1i0bVcR;wzdUe_7Ce_DTe*^6L zjU3g|j>f$xR?1p4xWy;`-5L|751HmvkbVvIYU$a_{I{8LDFo8Hnge8>G-x2HAA)Nd zE&FgDRQ!#sQ@8z7Y}wKFWN4%X-(ZF>?8k5ya@+0t{xo?$(kQ4nk$Y&G4ag7$8>+E9 z+6369e#JM|DA{el2RQm$TZ)@HZH_sjNmH}8Y=dOs$?3B13AN*S{I|nNizeWEmnzWN z=xN>XKffx#XOgB$vY4+b|%&A~gv0`t(C;;d6Q`*!f4%_zjz^)H!z|)j zSk-Kg<~4BzHtIn~gJLD_E|1isM--?DxSVnwN;aXdX1|%oZFHl8K{1$^JPwbaU9br; zmggF`^+3(cUVj2cEAf`EG9LZb4Z*QjA&~VX_3{NBj~oTg<2f`?jm6G|+N>*Y#8Fdd z%{_ffo%tWCr;BoJgQI}oE>RZl8z0=SXlxu;rX+v<^1^o{L_E>Z^so0{@w(P2^eVv$ z+DEqa9IY6#mN$9$iw;Y1&t*Flxx0b#=?RCaVqbcS8HPTtSshG|t(uqgb|NCzAdrd+ z$4O)5h!$NykdteK-X*Cc9X&*n$;OY9#OHPcPd8!1f4swcN0GccawqbSoqK}%7A26X z06&v3>590n+IUptGF=L|&9c}3Fu0-PgIaA{LI4wm1ii@g1{8_Qn6o3uE(u%gw?EA$ zzvOiJbSvNwMZH@$zA^K9`!i$sr1{9F`M6NJ4DS`OP)#a3i+O)R)JL{F=w6D98c{B)G1QNu37jAoU1A#SM@G`{7jH zUYiYDUic_d76IYAjF#)3t1xs+qfQax0-nZ@P5v~ZSqW=66}nt_NWhXen%82Z;_*#c2TI~2c4n1hgWV|VS#|h4YdMw{iV|>B#BlV6 zoH7ijksnqNiFcwEztq%AS06#21>;eO=r~gDjWsw>kDNprnF$A*N3t9hFlgz9lEz}h zvf9~9&~@RME2%YtI0s(C^@yA18D5+fZQ(cDL#t;#GEEq?C?-IJiH-78F|z?!&UMp>bfY0fKiSI8!}SE*jq>lcltE^1_Fo%yi>A5 zxZPnGkv@dBHF&6rLpGHk-fz8T2sr-IYzbB9z$s|rJ-+cZAXy21G`C`YNXRu@p9C2U zyz;>*_*9p2Bv{9tyRkv#BEVlpZN^Kj&*0_u$3GWskfXT4fUP{X2l6#*lI88j!`hNX zEAjbcJO7??U7=74O}=930OCcZfjhwOHAM%LhMNa{gOquvl@%Y65~@y@KhGLF+ybM= zS8qO4m-Xw|TR+quRPj1bHb*U+Gn8;t(b-^@krkDu8~zE;LHd1QFbuJ}`oL1ti*LS{ z#ALrs_DgJg3XG`qkx;+C?!ct1IRVfs!R=9K;G-~( zKp=IzjK7C;QX|WF8?kk9q9Y~M@Z_R~3QUJ-P>#O8>m2s0!$jfe>j370TM{6V8ax$@ zN|lDG8Pl1wc?WopumL%#`f)X{6OgjtZzRLo?1fc*8uQxSs{p7?D$&7}Yo#Sn&eBGZ z(R4gDIJuwZf1i^4CY<9(Lqqm4A}G#BrX!pQoj_f?4(u%I1Bg^R2{3xdrLtcDg5xUGQVRw&d z=j1Ti4o3KvVg+fc(ucr!JA78RrWciMVkDp=7T;YkWz7a9*{hEHc;9!Fnp z{ksveBdFKYebLlTPDZm$57mc{#7n5~=Uq5FclSZ~EIx?vU@(0E3MbiLQof-*Q*mH=?&y86Ey(TudjiVaRGM>ceAb|g=Dr^A zuXPC_5c(}cwF$iIV8^%!$##9LQbtoR3QFX$>z?;@RRXZXzjnMu$X`~!n$M@T zF-vF1R#88b3#t2yiLH9F*+Z+Q+5wY@rE~S=TvldcAqopY_$kKal#=-P4b+EfM87H$ zY#anb2Bf2cQ#h7fR7O7cM%d7;j!XR7DKS1$N|ZVHkao&J&fj=1@tzSAEg5WqM1p$a zvEB3efLQc?GtG(}fB&cRS?rtkdEy@=Hy_4-56t+Fjp+ZkDgK9DYm$bp9d;Y4PqQCr zMv6u-&o-J*Jv+P}xi$!GJy@n~P8p^Y5f4!biFiHRt=~;s3jRP`(-sOu<{XTN`%T+U zXB#5CD+gEC8rabtF4OT_-3B*XH8p(Es!T9k&@+gikS-h`3`%WMJ1f(_AQ_#&ZwKLcwKqw zl%RkHt)+?FDnvcI$jeV9iA*d1gWPpLv7>>eA3f{7m--QTLT$4y^p}{Np@^VF5E=7E zhoXK#N@6fG?W3-H5on(eYpsq2(*!}na!~lmEM#A+k#6KFWhRPFIVuu^;o7>!rX(Nv zcL;jhM~@O~ZPp+QGvZa#E42V24P)N)Ih~A=F;H$o9;z2ym zwRjY+us}HN%%+AcJu3!a-)PC#=v^^+=SJuP4!tZTZ9@P1v29a*f}?zgo;R= zC#hEedhj3pKS)D4m=aq39e-r8y;m4nUb$g@D~jniniN4DPy zq=mmJhV(!R^uR;{;PkPYXu^n#Mpz|^V`?~Lzp+79rL#~87ZYOVkoph4O zMqQK7D0#W(=pDEyIw;td2+!ZdJsVSY|1hhd_YeFnz$N^HRB%W9l@Qh&E7Td(Me1Kq zt|&Gxxxa$ZyZk$>$p?8S3x){^H#6vtKpN8M9yLICkytcV4MZS4uH=Lxjl*nbtUQTC zKoc`y!X&sD`_rx?3#Ky-kfKX{DnMex6{F zX9El~W&0E`nvc*pFFO%w10iH1BSY1WeQNl5-WuzIjXjM+NR{4E93XS%OjJ^jQ_P1} z$%!+w(41-4ww5l;Z3&T{T`bspwqs(VlY~IE^FYP#*Xp>WPBIJJ2v5S`1rDF|`dEPK z_B2T$@wS(sfj*+?7z+wpoq1NCy_k!iH67*fpH@?AwEvwIO1EH+vnn3K$_92Ei4k)1O3#;*=7hP0G zM<|g;#x0^%q3r}$MD%T1VHH3!?JS80af>;E^;hUAicZ>+WMx#C1)i=r4BOAio!>DM z`i0N3(-o4rKE^FSvSB#9X0gf4v5JT751(djwPxI{5ycoc0&-sE0o33wwC1RYnZs zG!k-nhfV&_rR#*^ZyWVdLSK}*w5#D!OydT@Gk{~XBC4(&#$8Ofp+nJyllush=0K5} zHT2iUO0xa@D0yTPSg6)SKJ8sdQ;=Nk_UE>te3(CpG2VO2n|M4xatXY_Nw@{F1 z!aVV*dx#gZjE7P2I(Uuiy!wjll-`>mNs$b0X$z*s_6QTH`!#JToY?I;Of5K^eLjwfgmKGl*fZ9GSIv zcXKs{QF=a6@BC5;;)s1e$@Prkt3aE*F`1YqtInSy76r;{o+D9b0Vly_sLdKvOo!uV zjZMzWmz>Mqr8{Px%d4_qMxx+~_h2j|ZDNdZ^(rxzOrA)hjG5o6-j$l3P8O|3M41L= zZ4u2AFJjFPx9H{pC_SndYD6Ptq9XOg_Ls9Sc1PhF7j_)ZRq1`)Jk|0=&5bhiuiiW7 zLJVg7jO_1V&144LpJtsHnHS(%IUjoZ?2D`*pd{fzJwPhHpX2?a=I+zlUvg{6b ze1a}XSNR|NhNS>xhy1oyR)nuCS?&B>D3Gk}tIpP}!6yYClsB>uhwPEsHO$7(MGb0_ z7QH7Ts57%BXtq$p>b@7|e9+xY`eU%nk*Np`DU0!9J#fr#VNHG_n3958@mP>6wWfB4 z!vj|Qp__F~Vsn>pWvUH{D1Lg@y_`~o`u~fm;SY>dFQ)AS%9BjkY@Q~SFNRWHqx{Xo%$V|~nektWJJOPzR z{@zX2bmbW&+cUgoKxJPdSTG^lJA5BJj-O&Y`*WS=m^`>&?k)E*yEX2{5J+ykpO`vQmiVv*Bac{# zOe!xiM?E;zrj2PS>`a1r^tTkD#H-AU&Q+ayXHeL^``n{oh1P+HEdK|96KNvb86jx0uF zHq<>d?NUfQr%9qVOSZXHo|onc?H2UBJ$7Oasm;AZkg9qY$GvcZGCe7S{hh0VNEEzG zxGauGePr7>%&S$B7CmJ1P%)wX{!pGwMmHz30GVxy`>o#Sub8JH#@qiyO8nP^5_tcc zDTlM8fsx7onsxl+L?Rs6*k}e303ej%e?O7|YN8w5dW9wqL;x39e03;?i_ql$V-J*mE) zr{~|Nv|$;tANKsMrM0Q~@`STHrzeN9CBNkJp>?{6b&+$?Z0c*a@@27=U(Q%h5Ur|q+4={sc_pWbihqpKY{3za<5&i-kxnA%B$!Rb~_ z6f2_T^*~WtU2jiE7j7vvOGFbci#O^H_nh5*uUvA@Jvmk7_05*6H?YTUY8ildXw=ev z$*xKAm3pck)~u|?q@U9h*ngGHxiz)4=bXCetef{4!4_X@suJp7_wgF`Lnt#ki0=Hz z>uA+6d$fG4$l0>(&L_{)wNp1scfOHUr2OWBS@HYAxRkT=POsKi4IZB5>_UJsIWR=g zFNhdz$h*3uDrg}tc&a1iz?q8@z3>)1U7Fj2%vrc_dgjD;*sgEH=H6S`JSnI@?(eQL z5K{->qEsthpIO;^R-Q8M!FcfGOFp~1DjL&k5@yzs##{_hG2H+3xqJqo{H7JFS$45* zs6Tz7^H8-vTE4k4eh}*WeZJJh6FBb5r3S3M&Vhf~`}OQz-i;oRf+bUQy5wRb7gI6} zd;4kEU})pA(6gS?v%;@?HT4Y|vi3;#V&>*qQvH5tw{XTwybHY;W78kOe@e8}6o#lL zNFP#_B2q=gw%S1@z0cF5yw42v%qRKe?Zb>%Rg3&-sj6jJ5D|~3qSI@z>rSP4e#kud z7unS6c?kY*OjF2TG?OXnB2UB`Cu|sUPb*?QapGi$xZ`#(KlU{Ly!;Xx6i&fMDY9Qk zW_BwrlTuaRzil?-gwZtdp3rOir^Q0C(>??7#69Y-Y5)E_4SgXl4lFDy$f3K$p=L-Af|ei(rR8F0CsW z85_GqVDiWsb#={xi!5l&nC^nOR6#W%io!EOJTP1#|LoAX_$wS;`e9;+0n&<{aMhvQ z;+VPl4|$1|LQ?O4HfhhYNF#UD*ioAU&6^oKdUe=zgr>P+XyD2G5k+EU;s_MtyU0Ty z(&&qE)P+H}1;}gs!8chqETErW2(|B7y;9vN42Ls64h+--mt49=aX)!ytqHx5?h!jpNinuKzE&wYL6V!BKgr`zUSw&VkJzGne# zh5DrasR#;_SCVeahijY5I+XGtp2Pq`bkLe2a$5MYTqU`7 zEwita7~W(e1xZRy)*k434|Zrpw8bRmKAL05>)$_E=b*GiaOFF>IhcVkJ4xauqEffj*R#BNg+OT2;Iqn~tqhQJ}*}h^T+Fh4#rM2F> zT7wbxb3_oai;zs4_QX(5)Zjn>-Qn8Zf&5AzC9J=HU!poRkuFHjvRikdhoZ-fDld%^#A)H zpGRQV*rT=KqPrVautO9wVu$`)+n)0h2#ehs~vekkJZ##-I0Y*uFiA*>Bk+ z7=+b~NvL(svNE5-(tY(>N5)Tf?nmc^Z-&om1f{J8R6NZ6$&A=RMNQxtr1m5>I?4E+ zSiOBTVv+{XHl7FU!BGZ6BEkJGK9RxHhEiKW1^%UYvR>zel9);W6HMd|=z>DX=n_)I zw#cC~ual0t|68OA;5dp&vCJ|!O+04{qs+wiFzBgirVJ6#xSw3?GZNC{ z#uke?ybrT1ry*>W1bY2`2l5HZ-GNh@pAyRudwUzCdElXo^mS*crX#%PrD?c_1R~>J z`k;8=!)4cxvcB|!Cl{Hhju&ndqd{DZ2qK=QCz0==TT22-*iQtQ1=&vzkuD(rg~RNu zm~n>}?Kc;?vrPoIqWWYRPSWHfUo@A~3hpXfjt`3`xHrm2sKqB{kYyUaHpQis7EvALu32 zBy*lcnk!DNCT%?t+CH#muqa~(V)hcmvA_#fw7VwKtVC`U-sQzN7J*ejJMB|;mtgGhVUPlDv;C!GWwwFW}*4mGcP;62zqZ8eutvxf(4 zprh;S2LwD0 zf~)?;2PkB+@JL;ogQ^0H4kU}iQWEw^g`ss93UG2%Ibo1HgVwDQNfl80genC^75c_Y z`y6Vn%necFJ&L@*{87pPp^|U47f6YPGHL*JYO?}r)x5L)QUn_}grwa8)gnSu@TNA& z0t()Gw!N5mQsw!DYd}BWh_aaLcCAPrXPAwq_`_2FZG1^Wgsc%#-OM^K^$r$QwE&uW z!(OZ+keAJ-F`K^Grk-bHJKj6XlCl6WlbYj@N*cP_-|n|wLOV-HIiK8ARFF8JJOkgz zgxWNAT!N~7_AFx539-C&XkfzGN z1s*zI4p$mc9*hk`O`>x*)>8#dr((z;WiyX+;103CPlHD)8Ry!aGmJ#d8tQ>HjgQ@% zvLTTjZ-uoofB+z2Pw7Cc!o*eKPmB=96F?zTcTMp1=XS=b1QuamkX()_S-2G)Upo~k z=2`%h!}AF8{Q;@cNyPbdx8n?VzTc2=X$H)c6c7RIA(ngEqQHsZ`fbE&6pB+7>2k*c zM$qqr`BYKr01c;jlOvWe-MPJ-ozJu3F4t(5M!|p|hCU#Q7O&wuSlu@qB=aHX;^MDb zlh-3aOdQi2aXu~ zCv0}XCjv()F?|#Osp*VOH*h|~1iay|!V6}=%QY3o(>INA!T*P|cMK9GXx4Sdwr$U> zv2EM7ZQEL7+q1^DZQHi(nKR$s_s_i%=k7S?PgX=nS5IbZ=$6UFppix_7w_^c|eL6z)^D~`L#A5o9Ve&07^M6Ub$J!G0*1nAqH|) zeq*P_azEoU#)zS*9oFKj*fQ5~x)$R_5AV(iL37ua%1DIWHjV`(yL}2m_?4opc49PsP|yGx?5fDWcI}11Y@?er94rxl1Ml?=cZ@jc|STs zG(n=kR=Ucl2QoTp?T3=~BoOrJ${&|K=OD7g@j?)9(_0vphWU)luJCtIQYws&Q2uDl z5K>;0m?~%fyJt7ZS9{a!Y?^JcAMN)M-I0&!`|*$fY;{&zXs;x43x_z^7}LGty?j2Y z9&k==>&zas5(=5dnG5?`Fz7CtrV)CkYM!W*x2K%XR2hte=Mp6f7rC*PeuQN>mJ`zM zh_M}~Se#yZ)HKa;u{NRi&Uk0E8u&4%zZUm8Y_4DYllR;4D@hT4T%eip+gItxl ziW9kRpQcfY6QHv?!lO;x7lK#{$)Jb;!D;G^cUwcQ2xX4_Jc(WxdFrTbbV#|ohWX@M zzhFBzoDX+F{PE^PxTaIhElfB6s1^u4U`ERjvve1f=;I=@|1^LS6BBgX)f-V?=6YY} z`hwuIE(Pw%7RKtP?}f7JOHnQ9PuSP?u3W%#XK@McM@TV)PzZz~he9zw z1j1m8@rdk*+;c)KgQcd7sJ?hKo|;UqqLK>zHq|GfRDD!#%Yu{>RTSVCgw4Z&ESxKRt2dMSEKSNjN0iQc=`&Rg< z{`Mg=r|--+LO%~}Rzx4r*TRm;&C;_`YWmFl)rB#d`dDY__RQkv>?S1I=P}q9Ga|G? zHp@W_JrEG@3BjTu5lQ5rHCrI*<5o+(pm1(6^7kwf+1uY7d`Bg)T+mB@P=n#90Q5eK zscE`2ErrTPi8g#z2?_fO%AiyXH^)?fhrmo>b}KV4d9wr2T7HqtRht1>`(cH= z+4;_wQhU1F_Dwb|q2}jRwj<@Pc4)TjA?z12+isE_^gJw;4_WFJk`WlQlWvKkUH}*R zvv_yuWKv(*!RRTc*5{!$P5{Ho&hmRKu`q_zKgz#oQ!7cjHG$lONyOc&>`LUGPfh97 zS&loC2Q@Q`7313;bdys4J9Y=`ylH#YK9&1ew7$j@=f3>}8e&nEtd45sEn9*gav4_O z9k@~^g&|EG{O58Tf9$Vp-QbHK@dT>J3z(h5Zo7*Y!sRZxqZ%DiPS#)%c%=f#9$BS? zcZkX83m?pJ)n1VA-G47x{7vZK6e7mO@V{*=-1U^jA-Q*YUlc5#mlpF{dA3W=NB z62()=+WfJND+dXm&w>^H4tlssA-i<7hhi7(Sy^o28IvP8qb&jE zL*@`gculsH2-C2J5a_bz|Bv+`ygAj*m5agCjPI(~u*Im*6}Qo#>4n%dBA~QRlZYuB z_B%i)`)!IRbK!tojG1}I?7f+j%a)?0d1JBD+^GZiYL0>C*0`m^_A3A_XRyyY{+KXz zUXC+N@bls<_zCLF>)Cs@aN4Ab?Bw;~;4Q=nvvz;{S4x$0Jz}aG?r?SzL4%zo)T_H) zyGB3XZ6$0luy>r*cU*#kVv6KmyV0aooggAbc`?Ws&B2U$1_BlUBips7=C^&Z!u`RqVDn0M!5$co zxb#*0PP5L&lm&*%jmzDfyZnqJTiiONho1S>?dShnu91YUIu7z5=~0sZ|KEZC{k_Qi zSBlQg%+bK+fA}3(g=OW0EOy`UtTy=u6wj|YhHy<`&;f-#st^(onLPm>*&gjGHs5P0 zwwC<_EcWx&?v>M#0IOVplHyv@QMwbm7Cmw)TvbEerf&IcUjGxEO$Yj+QFroJx4c|- z?V&)wQKvz2v7jBnBjfkR6-{~;Gfzq@)ryjFkO^g43~t)Rkbjc#4Qnh1m#>#Y|CU!m ze#;F_3qYj14l_(TjhXt6%PF16q|{L^r!Epx?PhfA+h~L{NUU;vj-mZ)+{uuN>|?<9 zX%j142vrL}ruAhiM26I;HE8|yhkQN!`YoqetVb)smLmm?HOrC0feOl*FUY&P)|$|s z@IKROn0@~|m19@|Cbglp%KroPt!mZ1CcQPvhtj20RQWTkcA$7#N5cX!0Vq{1&xdpd zn?RyuB4ak0aoI3SPEceTc6q0?3BtiWaoK=ibyzDP!C#EtX)gR1is4_=99j)Xg#bR0 znDdf(uzH1*0^)KZWoGnq*yY^mUECM*yIV%dl@XB(sOo|nQzK<=fXCyLrtoc3b%u09 zW|0~j^)Vm8O^XE3Qg z%wj@~wJMW>2w9nMNjVON0Gwg{Sg7?o_l#T+6b*a5{&dXZK++r+Bfx&*g;)H%@pcmC z1>G8O537EsNT;1RQVTFMQs{68`b`M|p}gox>u&O4v8?9=%AeQU*?Y^JAPfBg%@G9L zTJY?U!L?(T^eAdp9%JbISPN4AQ4Xz=cq(}KwcxKe@^Hi&yuSUf4>+U%qHz-OnVTUk zgX~jo@3co&X_Pog7$`cZWPwSn>ho`Z)haQca0nj~W#&~`QnxVzkAz7Ma(nIZ{+x64 zwMaiSpNj?|v?1?IMCt*t-tZv{37)f2D5=7)G_z5O*!TH0JRZDO$~hYU$m+Lf30Dv~ zwU0!|uh6j4LC1(?-^f8Af(QB!z)-kL6+t$YF-bq?+77-Rx-rV#F^Z@hxIc-&tb&Sp z0u88)9K~=bCYM@BfB!V7r~h1x?FJ{GskHfZ3orJl)b1Xn{IjWK^L6 zm!IsE=^e}gI>4H+zIPA`;cS!ywh-cpL6zm%aD(cYSJ5sxl$9z2>dZH*F>~K|A^*^h zo+dEX7Q_#kSQe98*gz2HF2j@6DYc>qtQq$X`vPij(|_wp@@r&1K)1a5NOLvfYJ-c? zytp;!wK&i`tWPXW#~3{}zYExia4vLCdL;KCpwE-ss5h@)*KgYSGt^ES^8^H-78#)2UjX#>Ldt?Juz)&w>CZ*rW01=H~$6qu&eqv*h=kGfMl24l*?n zg#0Tbq;!+2-RA7VPsySI)-st3L;?J>Q>f`$kQY>$CsG-3!E34(S`6SsGTJ*O~yk#((%@I&?boZv3=u!8D)mx?ms1R z^q%z)r+}1*duS8Uw;H~Y6OdZM}M5d`5uU^VhQ@BZW)sQ%v zv^n8T(|{op(uY!b?Pz~woe6UD#Gpg@=rrnIQn67U5AZClgM?1W0-YzrqQ?jVK=P=H z(#Ym(;jFZdk3F)u>^+JDZ+;Wj?hj?saF{jzg)jUtqBg5JF9GkI?us$^GVYlCA#UGu zE-#qaa6@fazzms#pX%rNa**~ifG(b^HrlLcEiVS2;3xvdpWzr=r(&mEX=9sXw%6x# zJM6V~P{ZSb*(@ABUXw)*P{OOoGxq&PnL$xuifZm=bWrJmp)=VhEn-**gelKY7yWv3 z;WugD{9Eh7*fc&iMep6AvL4bE;1QoZX>yx=!;QW21(>!)KPpEGu&RVZZ|1PGAXb~C zjLvJb@~yGWyvIW4E33m8Za#@zn0|ub2Pl{ld({x&X~!2xfYlcI4pT+TP86yP|9RhF zDG6O08JyFs-aalOESVlwz@an0j_jZ@;Vqu3RU5ZShFj3HJHcR%2A(Q7Og$Q^x>|$U z^XF%HcrEhg5-gZHsUb&>+$g9pQLfMwqM!tFmU(B1sSrJ8^c_Z2m!{*7RdZ~j zfDnMhAGSBXIW{JJ?u)+9)W(yh=~h;U&(K@}cI}4Cil?Uv$tv}dWuzOHTQ&~Pq_N`3 z6zio$b@;wEAT6QjVJ+bCxlgS^%SOMEB-ly4moCrHzVRS^&Ew1Fs%RS_t}ad5=Ee<2 z@yype@+7NM(2HpFf(z&dtA*?u5wa5`Yh44r4lTbJ#aw;Cfp#MRn8-FRI8B3H(Jp%b zV3|wYGxgN(1L&9(sCMRlQ)%LPU-W>I9Dp{H#03G z+aH}vScxWr^IGD&*>um<`ZxO35L9~XKneQzg=wf89_2LY8ON-ZgYs)_LyH_cAa6DD=f|gcgfE4 zUK7o{t|vZVDO?t+u+D|_SN(-b-t!-A`xi%cjA5L31{xCgTE^~#b4#YMGLtRPaV;8r zF*hxRGhwmtf&V0CJTq*Ln}az}J8`aC!|jnUr}GaHFQX9>^ z1VD_L{uNP-g;Zkej?&EyCatGp>SX+G-iZ>N`40r%WAf9mP7k%epDS&M5VWpU7pwi7 z2MG%B5pbQlz9jdg$e_rSLN8rH{G=w^U{{bp^gfEhIMRKLCW&Or(S5z`k>8JF5cu2~uVw z!7j16?$^Y`bGj4P9dhS|B=pOB=R>)4cn3ZYCDy&7TuLCvz$c!YB7r%KKhBC&>IRWgM%Wnnhci7A-BkM zs9$&{u>xDOr@8LPYJ5^!Al937UPi0W%cRyZ^fldIEDj7sUKIpyay3C#?-1d0(AMo> zMckaI0kaiFyTfO&(R$MR40h&a4?g$9!!f(cf!F8el9VR{=RAGt$H2a+ z^}rowRGRoWhg`SLRe#*mCULf6>O{Z%rdAidWoIjWG5UO6ocM+(qu?j4^KUzn5G1Puk&spELf;{tsu2 zL#+$P4bhZu8D5bv6$$>#z#{2-F6zuOMQdu+zjRa*8Y?N1$v^>M5fJ=Lt>T6_JiWZ5 z-K*SVSz2sZ1V^hX4|Y6Ch>*^?ygu*RJqw#VYIKvHN+uI3h2322p8`77jqhv!4w^O6 z%i(@C`Kdj1DkN9h+m|HRw|CTf7B$nASt=@3n=C5SD^^J~`&NqEmQ>1+n^ymce>vYd z*4VPP4QqIyT_BmVR{T?NP%aNqEwh*qHX-F+JfAv?QoEtmEn}W=VaL1S!^{=AlW7d5 zQ~|Lv9^zaHp$)+Gj!Tw0EST?UX%96+lpmLA+niw1S560w2M@$m8R z0IOhWmkiLak}i8j?lMpP;Gw#g-r3je9b;fZ&_%+&7~eFFxK0z7DYlGLU(oX?S#SS) z?|q;S6OiDoO07<@l1wH332o=bPdH=C9Pwh#jaO`gIe>M{G6QkFSZ=Yr*H*m(cKDV* zuFuCrQkgS~t!Y@!8zWX&qA2FH_mkZXO*Ule(*PqEoj#j&oBF`Er?FUBLeD-&S-Ysb zC!uQkMAd6%fPs{LEAu#VTnThm+*iaJqDq4Q^mJ33`lLCK4?NUf)-It@?ksX~;Jzx? z#{K7(q@W(MWajip%}K?Sqpsa5{+lFOG!J_${{0sB8!TDW73#ZpzkP0O=ph) z(`5`3R8-t9&d9_6a5*E@1ecXc)hK${Oxv^yn^iE2Hh{AKsh*h84cAdhxkE|iMaJ~@ z#wso}kZ7HiR7pPlIcm*ztE-UGm?#j{lBI$V3VCw_n!@atZTU1I8txqqt6og+kBr90yJ}=34 zhgKAl*Cly=x=~^=(-|tu9*!g+s~qf1j|pD#ixs{SC)n5%L1wYJg0X4A(LF3#?n`=+ z)^11Ten3;zCl;!R7y3z>ss$gNns2~nPG#`6Vzfuhv#%@3_W%(UsPu>2quNb0ATfWj zDY;QjSi0a|*UyUxImY-_O*c)ICYik7z#;+{E^ZGPMTp70j9uwM091{OZ;($c9xHUj z1RD5w`6#x1wiq<#P66z5XV$RB(vjO0(qw)$TS9sBE$l-U`#TJt-uKhr{|X*Hn(MQO z^r_uMdX3Dt%%Aklikf!($7eIC?yCczrDXJ!dd44Ki>7~2bO$-T$_=G?9O5kOWYt>HR;lsO+4ZnUsB%4N1=whN2k^gJ$70$&|a? zy)M0xMz|G$(iZo)ZEzjOSQ{ww9jj$kxlRgTKQz9X2{&$uU^4uypR^h7Ena}525xTC*J0`nDsIdO=4j?D&4vZirWU|q(pdcI^ z=iV-Ef(P+gWiKg{)?~|IQ2|P&s{p1D66myIiYM0hAhCvwwFK%3F{cwqQ+;~@vzZX`TG| znyg-_aT|HJv-#JBMt&vxD#}ak=`AwtFE5Y@oMF8s79RSuM)=!2()g(;T6aHO916Os zd}LMN_gCCVV7vI!NVqI&IQ0n&_fdBVBXNSEDTVj0b0Pr&fdU# zXPA>KK76LD3R?IpuwtGF_oE^E5L)gko{%0L)$~2I8qstf_n`N`AQN)cTa+QpAe}I4 zDODR~(|)m7uTpBM0q9lT3tuLgIM=|O3Xv7Q^>tl2BKsH2{aq;!a9hML79O>%@cVkeGfh?4bIQl`Vuw* z%8AqAZU^q~!NEg(r>AjKw@3IEJ4$lbJnlnWI6Pf`?aosPcqJ~nH!l7U5p3iQL**V%E0bw>8PO*5GJ|IP6=~LnYNd(>PcxN z|4@I#6oNsV@HK@cV}+O+Q|_pSkmzltJqs*%z2+f7H4?vfSwrvFR-axmjIU2{CRzab zhW_r&z^q{Am(_YTFbk4Lg?bJSglM;GFIfPAMMs0!O{4mQQ z{$77hKpu%%ujn>WhT_hWkv%#ST5dxN5C$lY@(-udXl?IVs&aqeSGo0LC~KT4pecH4 zf{eO!d7if8{kQ`E$WfP08#Cd->)@6L+~e+kk14sU=}e`_r5&HCr*0M@HH%ChZo0 zb27ZyXoZKxO(sCUA_D((W@ms%lyiNT27z@(dRD6&dC}+U5%6tz*s7o2*aCxlQ=s~b z1nJh(2SfeiICZ*!4dGzYdG};%9J|~~jHqyF6S0p8Q&22!4L*8i9xN3|*VH)Bf`XdP zZ0Ca^ee(5s27z}?_KLNCeiB#sdJ*o^l8KT1qbGj>^cv3NrstSFQV`US`e}p_2O3CE z1e3%5>4s(aJ^6so*#leTEpjK$xP9FPBS$rbWSSe1TvGFp3k4#4fe61zc$XHY*N+iy z%o!@wp7a?m8O7wzVUWBNdg9dJJXF^}~UJZBkmiq?+fH>i= z4z!4^Dh_t>Ov0c$;6jihd}q0vFrJ%3-&L%@XNX(knf0qPgMk1cbee(mVy+(}==XEk z5}H=uPb-6le?v_?pA&Uo!fRkJXwirlI7;JQI_zyx8&rKS6b zYF__3px>*5EH4{si-Md_C@8(F^}2vsl$CKJCp3`Rw~!sJO%uPp{0oltC^iZ=(0cu| z9LA-0>5c9!N|=TSzj4=I3W=c$DjB5U%D$6=P9{6CGHnneMbJIHA%wDJdyFjt+l#9w z#qSp4{_6Y+RZOHr^+L^feaU7Y?<=p>+ejOrEl z`KfjZl~khY`l?&|hhQ*aC$IpE;S3^P_dHW!IaK||9DG%(7Rba?JzfZ~B4*+*m9qiW zWk;YC$jS83PnV8AL{$UQ#$x!+iOvtagal`ry%2|>Husq2s0?y>tOqqz#X3Q9r$N>DQeAt1Wgt z)tmzyn1+*~tcx9Sxw4RKQP~H4`(Rc6-RQ-krr-(Z_8>>!DFuf$;+-4xdu?LgUfBZC zV7h<1RZo3&RUf=Pbf1MWFp0!w_+JFX;V3B~9`(S;*61`2kbPTFff_o2e<212tPu`s zCt9Roh_ZQ1!DXNk4uBnnhtS&_zHyA3r_de9Naz*cq;R> zP4J5u9hs173h`!;gUI%?LTDX6W0vEX@QZ`p&|)N&ST(QLrUe~q7~Sai=I97yo8|N0 zwCa4qJ3b8-GOApL29||1w8tHKq!7S+AX4ZIKuj)+5<&Rr()`)O=5lb93AS?JgPR(A za_=+E*o4jr(9YaFseYPHqByrFK8nfFS6o*nWT$>JrY3lGmjF2~7mEYa(VvTHB1^M+ zo!^UTWq#LlZ_UizmCDk@{UlomVA z9X?6HObbI|Z%8R&R$Azv0;N1|x`{!#mN!c98`;}zCqD*SA&;~w-Ysw+^XPJS@mOb1wsAF#_P-cUE5xo7K20o zvxI8s?4D{^((U*Cd8;1@_1*P8BDbt!sHm3V+Exz`znR&q;_pDPxI{dPVMhFjma75szR}c?9IAk2?n0K$N(I@8!c*{mv1jf zWRMO13Fg)Ibtoij2uEdMZ@MM-;WS1fb(zgGKN1Q20s#wifX1T=1aQ%`^b5EzaY}{J zg+p$)9vS8@pR`vU9=p`T;Xk9pdfXzij1xiRkKR{vNDAW>t@e97 z&2pt_E;-Ndk`$VZuPO{iehAV}L z>Ri+}MFl?TskOFP25q1)6_>*cYsR|ps-w#6ma*~~S?$CfLVR$O}aCYhWBAj|D3FlI0~wr(TbtSt-_USJ|~ zv^N(rJ&W@6;w>$|7Z@lt1f7GY{BV#`vIgcF@&sjBo;Pf`KyU`bS0DsK zVDP6b24D?$oM$+hTC4LR}{dT$cxgu;DxeDQwXpxITQiZ&Vsx zB5U1wGv!p7$wTz7 zNldoZQ_=~en2D&kHBYEqcOSL1A%3vS*8k(jilLeZ1;-gNKfsx5D9-v1bS(9ggX zcdRCv7`0T@yW{&}L)S*JX%=DjlY+UeAhi=v!G;E+d;i?~#4Tn50hXV|x6gUXOm4UG zr#bVz4B=x6uIUCmoCU7f{_*Y8$U=rEXY2y8t}DFPgn_OZp{DZ6141)pa)~8AgFTyI zn*BVn#qjoeU;OZ(rJns_sn}J+tML1dNN;T1?gom~Q`OqiYU&mXan+PyzV_nmB=*`$ zIH)k((q}#%d~XOgJ$onfCh(NyOF3`5o5s(aZ$FsbB9(Y=fda8|nU1jIgX1))J|hE+ z5!#UYIM7}*H_($?qAk}&+@pWMKk-on94@zU92my=aytAx-aO3x`S8=DyAvZ7`c2lk z(2tb5b=4+F!T3!*%Xqo2adXmiO8quiIh1?g-OCk|!;#A7(OH`vT+wFk2-A#T7%Dsp z?QFGhuz|?t7z9yXkI$s)Mj@9`6yC?K(X0XCJJnarw!j(XRWtT|I1v>!tjBUJJ4Ceafsz#wYZ2K(FE{=topKkbGi` z5q}ksT(KG|;GpfWg7p3X>{Jd|LmmZ+Uyt9Wz1c-44E)n2M2RYTv9cqf>k(qsk%vZh-#u2U}pluTEaR%Q!# z&Z^A&>3*0x(xw<^XkX>6Bu+SCH8Y*gO1Cpzc`23=*rK{Z!~Dxvtf!3^PVSuc0jTGn z$yE_inZ|TjELr~;wPt-saFvorvAXCjxdU%up&lV<#e37CVJ0$%Q6Ra_sn)lcu2<;`^eVP%c z%Gs4B%6dqJiXUaL1cP)R1?>G46gg5J!k-t;MGtsIn0N3cx?8%!HjGwu=Pxa-7`ocn z(Zts zsR<#a_zO1StYt4pI~7ScBBOhfq{i%;QXf|KHB)BJO{3TdaMx9iS(om=ql^F#tD9B& zj))t64+D)coJ#(2o|W`n7!F8samJRFi#qbXCXpVN01GDdS!wjKk*jy#LP#NA2yz3c zYmIA_TgFaTIH=H&dbbSj8V6K_fqbJ+mlOi04DPrp9{GG>e`YhaE@CcVx%t(!dl^B(!>BKLjCm^`b%lz6&y)gZqU#XCXSx`BWzOvEJ)vm_&1)`oh_SbnmMf zL^78^;2S(IEEF|I3D^$*Kt?)|90@)10Pv1i4)@gPa$z`#^yDP>)O>5a>t*}eK>7?k zn;TA?W`TVjt+>@Bxb;|`#jE|eN6pS=a*!tg{R~MOra&J?j zJ1o?geQ3qrz>}ehge%~sW-vfg(A2&zTsW$t>TVA*e-z0L6-}aaLKRrl7o>Bsz}aou zdnWYj5H&QdB~sIOE8K<){MqinY}k$Ytx|Sa`ykA?jhk)WH6Wu5|1F^nVxy$3*gl)aD)}OTs2Lv&5R*j z@d0A`*>Rig@b0V9ZNwWRl*E&nsh-ZNKytj%79RssG4G%SK>iLUBk$HrArj|Q;X4hg zYa7Th7Fjlq#l1OM*fcHu!SP7wx20p~^U-$bvq{xh9mBZ>vZcgNtvi1*tLs#$Hwi$K z4>*2q?TC6U;}?I9`p~0>dZ?HTo8f~Aqf8F|zjYyLza&{K>@O#Vx8h~2+6p`Sv9p}= zx=r$}_0@U$N<&{FbMjp_fk1aRJ4t74 zWOCrZ;XMvzear;IgNy5|EV^ocMk|qq@ZDkaGR=YQ$s9<5 z#d(-gLIFHq6D?C`)&FdsQa~1Sc81T4;tJ);+FGZ=X>l{Y8%rD96=q<4znEi2xiVSl zwJWmiIjP7cJpiEC`Mi1sOF(%9^plyX3aQ`$zKtc?j4xp)@4-mWXP>$EgYgAW z%axvamLTiUm>+(4ue>Yml%+%KK_aAc5)<4p_kz_yAI(0`fHQ!%JJ*6zutHF(+^Shz z&95FF1g~;_zg5Fmi)KNj|A^;<)`8)(+LJ$mqO2O#`w|HU6{oD5LGcqGTICUQe+N&h zpvgo-ua?wdBlGeCr+AQv_$9%_0z$i7+o8r)^2eUSYrow?`E+dsuVO-6|j5r+Xkn z^d(ozhcS(i-}O>%nnBHSqW5XrPQ~_%;S+X6SX(w4t|hm&l}vv^*z{`30|@3~i%!P&qVTEZ5 zo};|KmyS6CFGFK>Dq9W?Gnr)$z=XMZ)>6-&jq0$JFJy#zJ~6$tH>F*bLvB7@(xUIaOd)#?A4Ut z{JAg^p*&VgGLK^>DKY1rq|M%kZi{I?D1m2>r18)+T*N>+Zcz&HTI`iyQGv2Wq??V6 zCtR{u>2wyx!ZFctxEWQ!M`SlhfKtOgWoOnU4~$!|vkO}pX_J2OCT|pI|KuSERismj zM#V*=Z3sv@veUfDH5VpOi~D6|%l{mj3v!7+>uGE|8-H*vY{9`kdm#yBxMRaO)+4Qe z)LY2HMH!5}IM|UQLys58@DOPrh)sR^TvW33MoOqpI442q*c3^7b-JV!{ zdpJ3rz28l)dB&C@!J6E{-$4{IzcOoYa%*dMxfW<;7Mjk<$-biSI#Bw(_eDTZ=}v`4 zM>{CTTO8g?OAPjKa+X?Xos198!^bLyd~003$d$q%hBhF+e8B%bV4elb9YZz&q>L1) z*V1yUJ&Vsd!1c8Tt-vIE)1?yf>Bafw(7&I!dm+t$G_)V;$|IcDyf_T`*sl$>B8$^Y zMIr|I3a)1yu^>zW=PwP!$4YOr8qo8iwv3re`sK(qL1DUh7ATNf!*!WUQ8QY9`fA~) zsV3l5&btsSF7q6Od>wN`R z_7pNX;xCqvEFcbnlvop_$ZC|V8KJ%&T3EV>=9D`lEL0zrte5|av@UQ;cK(=HO81pO z4mUc#76nCkCbXvyH}b@DTIw%OIVaGSQdC83j2eqd2B8KX9F3W?h7jCRuf*kAx-J_F z^GJ(kmf@4K_t^i!f~0L1U}-63so$rPdz#@&t7UMSY}FzAp0alvGnL(xUh%{OZ(hUN zfo0Vi9G$lQc-{98>NIs}>jPVe=v|LKdQMXdtg?AWCZvblU6TCeW$e)Hf#yb^J9*Cl z9{&cdz|lS)!OJ41?Tml_E%$L>QsE*iI2!x$7(vYJU1oe#&#Cz{Qpu>LwC=DryGl93tgEAXDVB)S=!8)4p2?`d|!IKqULr&q8uM+XZjyVQees&rEAfov> z_x*pVxMA+>Y|r?Aptymo^u8Dk|EstW0r0;i&;KX0>A%M{vamNdar~boH?p<0>@+2i zeBpZb&7Vz7QLKCY9g2L|ZDYt)v!bFKIv$J>y>S`{_51Ef<}ANI@OoL5SFSGdDC%XF zR+g5wRJN9uT-?(_hQ4Bt9v^g)T{N!_F3+ncztxT3gj`zGtKsUsStnTaYU)kes8aos z*}(q}3|tk0jC^%$T^Usk~$l zV-eOcs4g|1F?Q%xsxHViv|pWl>9kF%!Y`Dk?3JK>T7DL1nYBy|t*~rh?Jn)@wb<>z zl^ndi>eqdGvsZiY&Ge)^Sh}cBsZM>|Ies=(j+=a52t0LJGLuDlY~9xUMc-(yuAvoO zx#88-*8chUJb!vFee%Qn;+8&9>B#+JvhuN8!teLt7=KCIf%DS%%-^&L@_OWSYvqdW zc%2D*NmbK|o0#poZhj8Q+Z1!$uxfTS>kTR0)XB_*lxy>fIn2JW$9gU*-Sla@dN7E$ zd)*(Ve5qS|uEqGJ5*5l{2W+}dk+I@B=ZP zRkqb|ALof~!);Q!7W^&2y?Sf^s8DLhr|pZC zdBYj8yN&y5tvRY69je8&gW@HOTf6Ib$Gh?W9)24K%uC#Cyw`eCL@d}6It9j$v z^DAbR(k<3W?BR86!gfil?Su6tCpM)umgo99CQ*vlpLB=H-!Zp0L28qOCmDvnHP(>)f<>+kmYlj? z$@bd#YM9dP()dN1wYSQ;U?nSCcW3TR;nLWmg#+NoRCd`S$8kiq*&eHOvo7&Z)-Ywu zo-yFH_VU{TR9V|!R8ME9ssvn!Be+?2t4(Xo=~p9?GN3E9?;aYBwm zyQrwBhpa!ydM=>icE8IuNndTi1<2Kd>fVR!uZVx!S*IFBW*A5L{rihQ4 zQ`@~H>=w`cp}Pm(*sgmd1Ew?9MLU+yModMSJ5Pf|I+qRE-KIgTP6_w*KHY6tly=ts z&IcnVF)y#}X9t~^AT^xW(-YG-<#UIfLS9)PB2IZAi8&`_yVK&>LGEP`7c|3p0M<>f zg7N^o$U2A=051{M5Gee-USt5X5pSIzNp?*Ewv7Ew>CZ)_1_GroTtp9G*7GUmKEb+$(!0jU2ZRIL zjs?&HUX6m{zX7ZU1(gS$r^15ZzsZXiWtj)i3%Rx^U@Kfeh4?b** zwGe=lEIZp*cZI#x6bEm;b6Ope^`8tRP{?Rvz&ree+l#t{^7=e!LJd03(!X zV*nN)MBuDuYk>Jih~BG!3UH|Z$IdKO<52+cX?A$#0eJhx{R8%e&i*xs|1s#l=7>`> zl9pRS5O5IN0y_w(mbi)z1az0s=|7Kk2~Q7zrrt2XjI%q52};N;4gj=)p9Zd0J=jZR z-Hm|KyNYlA8}{x>SpfYH;E&5mKu^~=;>S!g=c1?<{Oa${ZklaWzs?@cnVRXHo(^6= zx94w96w#l8T{AN>_l~uTuFq`$+#_`KQV;imUe7O=aYWDuK9sy{mJ58rtWM=%O`9h_ zN)2(sX@f|CxZpg5QpOU*QP7I@EfQEzP6yo&!(e9X_m{2(rvMqG1U9yEP{Iu;!5heQUg7|I&x0K+sQj%wceGTX2z@!1+Q{YVwsOIh zWO8+zIqs06KoBkD+sQ2e{Z|ogVbuQeUX1OZwI#BVYGLe0=a7ThwkU_nAPz_*Msay= z;L$lN1VSBLarrTfUFvT1aZDXt{4{)n9(smu+Np@eei2)D0wi7qUi@c+82iTbGr*Fi z!w4tA9GN%_8EE^9^k#{~qKkrAgr*y-T|qRU@z3Pz05`a%l;Qev00Kk^-FyNd5&W;; z!dc{^(bR(y#^>A&``U!lqzlIps4lP$lIg5+m7`YSOcO~S{e`(GgPXahi1I*=Bw228 z)R0g_zm3&zvxdC;OKlZ@25D_5CfLjYcuD@njcx;8+fs%b%lW_l&U*=oP*_Yb?=doS z6wP1s0Eci{Opw3>2-J-t+!5T7B;?H)?uzIp0Zc90%aBHCokEWi47y1Hfe;MOoe!%F z4S0ry?o>-c(^b`*Bq&e`%_;QDf(F^Mmx#_{(?+_ehf5i3uMHw~*eB0mMj4FCrI?pT zFz^F{Knj4kL*|cz5MIv(UxB7zlj2xVh9*PUzr(nm#g>Hx*7ow2ph5NT6gpsEoDYg447wN|R_=2eLl8<$dm4DvHDsKyU9P@vc(|?>GLEKHihyZCNk-T?E0KcS$ z9F@R}I~tQJJkVfGp{M&BW487_oXD+>^v!rfPVyUPdL@X_y5Fd$3kno{Wb=GL97-<| z$a1T;-|I~X30!^{k^mNi)g9Dj{Q8Z;2RQHW8;@8O&bjEBxLWG zr|a(5VZQHhO+qP}nwr$(4uK#pLbnJ7{yU#^tWPFhqGbYA-=lkUt z4`?zRXx+U`#Yl*+Ob_EFX|-A|3#u(1h7< z*UdYyh1zfb+pGo9&vfZE-0Q_vG%GL=;**JdfTanu+wLR&cjMB_wGrml1AM*KDWZ(u zIaLS;dS{Nri`Q#F2@&cK09Wk^PmR-&uM7pwH$3YGNPl;n8`a5nE#J}@MFe0aL zGC}iy?nuvQ678o?!KqxM@igvQ@F#Mp%!AVdRM3IH|H^BLXOePy^Yhla0UhRu5(@Hl zx>nNjBL|KcFo}t#kcB4t5J>3zrlNo5Ijx(oi+$&9L6=+*`2-L(s!wf7hCVTJ2=;xZG38OiCplK_dtkr4X}$wiiG^T$NiY6FSSy;>;% zxU{ol?*zhVH&fmGoiI=G>Y%K6y19sN-6&pma^;yCPN2OoZ`+XXyr9+5(eh%wG_3fr zuP@v8P}@$Pu;(UMsmU%stk%ZHQH~h0bfTlK*pSNG>^Q%;v~}ZPyLQs}LEG6$dB`|> zG42L^wP7n0ecM_pKDAEfnKybXF4C!9PV#4I@+f&2yWA@-uDC|6px@t81nX8ad=P3f z*4SJIGCpuqUKZ4uIC4$)BKI*odKuet{cfx5X>$u)ql-?-pdZK?u4tc$uoBx-KU@3M zWA;d^DmP;LPNz<8GDl6Im7!MQxt`F$Xn}he>$dmt`gG=i>@mtQ&ocb6=v4K}P)_I| z-F}BlxN{(72BumB@m_Pqw}#0+|4!doVc>t&uBI;myh4G06pcN8me@CQ{a8Z9=9MQ@ z7}%)bD2p2uvqZ>J0a77x!Dunxu%A!NrcC-R*x2G#f>p(TBd)8Mj$*pth^G?YH2Nt= z2RTSFI89&=)uUc}ym~G}L!e&ATOke{aHh;xU2!fxlvMIp%&Dl}^tmEiT+rQ4AtoJ_ z;i;?xkC<999S>BnYSK0thk}YaM%YuL8vTrnX@#zYhB&fp1-B78Y@_=?Il~auXlkvfAYWyE1Vja7np&z+-{`_@77*<0Bv2I$FKt)koM>iL z>~roQK?4UYxC!@UovGIj7^FB>yBD1xXp{J{YoV{pS`Dpbg5Fh#h3`jGY}CDFs8~~ORr@bALB%eLLVvWAWdwGFIlIFTY`k~z z#bQ399;AVYLrIhW$_R@eEIQ`Q(N1j0Ar9DFqTIUrQVG<7sAcc(toW8Pdjy)nzm~tb z)w|Rr<9jJ>;#*{S?euDsP1^1f7x zBY?MU@x564A+iC73~NqdK+#mO7>cGGj`K6)Gpa&#`43Rag<)D04z_bMmEY91DnLDbdbzFgGUe0iX|9#ACbgsh=x(FUC5vD zVR%xstGR$K#<&~amZ$RGXPnB04wP~0D-b55M&h;_3B>nm1*O75vXY;oa4n(%_*59h zvy;*`tOkl)>5+n8akjGvbON+$!3{t|2%MU+vs9?H9`=4VLJ9CvnHj^F6Lm!u+TB`+ zt~SG82mp0INv>-(s7B6!I^(DlJ_A5K;IA470h(@aSkHP_#7v7WF6mPfneMp9Sj6wo zF-@iu=X%giYuQsdpHXhOBf*S82ixYU#TVNBU^ki6*1==Ei?6GZx*G7TDBCk4c$`^Q zPX%%lHy?0a2J~mf()MBiWJBcZnT*o*TD963?X{9!64nOyo)o`+0)2rlN53%75sy$4 za|ir>TcAC~=hgd(>s=JL3VDx+u#D{fE?F1DGl%Q$4{JjmKm7~}<7>|aV2c*_NIyXk zcNDkd0?4`&pu#j)Ux}0aP^r$H81Cz#hASH<@6Q(Pv9zJ3Z zIzZ-tKvOXNEqc_8J<-LHAS)|8iZAv)c||LZ_aEh*N&_J;r_YNGO$74xf|pRYPw)Ri zf`7HLzY{Jm$viL3Bu+FaOh*ER*t3TD){@C$*B*zXYYzG##W?3mTdF(B2WUnTa#vAFHp{G)G#rNdMb$p{l7?X)(I) z?y&wbLsp!t&{C3<7AOrJcZ}(v0TmZfUz^OPIyWb~1fO2) zq5o+0=%Rw}vXJV{lqx0`0vZ%Pqv&kW(i(kk9P7hLXRR#s;Yfyyws2HCfZmgg@M3s9 zgTC7=ZfGBCV%(7t{tzoEjqy3dcDtn0s`h<}`4LfExTE}x4~2IWy&vA)&T*7i*rq(Y ztIyPRw@Y&W`^f{`NVfr=f(htQIC6DZ0>%02*3CQx@Nh}v2(u5W7)isZZ-2FESb@?p z(TAD^ewYyhztq@q$Ej$93qky=(r~f#Tk_@U9EuW&b7X>PB35kwZ~4ihkn_;3@G)fXEpJGF{BPbDY90D%=q+R6v*-lrTI7XwVkwl9A`(*}u zE{&8TrjNKSwH3*#!jomR=~D;78aOI0AnYX;tQ{=}cEFAey-zW(j?kQGzlP1G!(p1G zvr3oJ@8C8zNuK^a`JcUPxgLZf9t$xM7@r#`v+_ZCv*;u}U}9fx5@cGs zg?;K#LJdWzUYv7x_OOitLBIS1Q?uz5tw<6CXWgq#!Y!M)d@|5uzyZ(J#^V8i-<(m; zoe_+fQ>$E!}fE`n1j{pBZJRfkL5!+{aOMUcDd@g9E}D`E}yqY>rB-I zM9J`sCK4mW8p0axPWEAV;Y3kr&7{KFwQU*-XKE};x42hS(=Dv^VlkNw7^&jp_@{9>@2i^1n6BDM9Au?*BD*3y# z{UO!n@TOelY1sXydNiGQtcf&YR|Xbn+gF&U)!yT5dj9$HUKQNOuPHc`E@-c+#^k-E z{mTOh;RnT?OH)Ha*VkUijgth z2nWJyWeGD-iaiNF-ZrDWtNXst5c#^rNCXrd_UPZDq+zX3+?nu}ZRXMMed71eS%CZW; zzP-NgEhx0sTHQQaVec+Y;QILUSOo4+Wjf_GPoLN>GvbZlV7WWKs2-o4k$XOZH~Y(4 zz->EM^O9MH@&0r*y_`ZP*Ix4Vy*+Ip;l6{ZRm_26%tJRp%8~&~1dclwgII}%+CE+H z-w!+yE4KG>N@*xo@FJ->Hj3B-f43idpKPxfv?b=#*K z!1IT&$^3c_Hy~g1lpQlKcb2J(xuy29Je;OZBp8S|NE{_qfSG%cbV~gxyK&!$>aW@9 znW+9QlPY02K zhx4O(P?0j=32FmB6O5js`r|R3uL$?EA6v6#p_mzrc&d;TnlNWKr)cUuK^ro45roFq z((F<>gHUs7m*qxom7J6z1>he0^dDR9u&|^eWD!ERGqA4*d=GgSLRC1s@$0|qNVi5i= zMLr0x>m=*NdcHheJ&maBbJ|>!rt!6;#1;GSq4+B;+%M2Wz15Jd)xF7_Xq(*5tQh&_@4y zqB)L*SYwT7WQ5OpvHRg3HZu9H@LBuOvv%6Sz236j!2dsHnhx%tX zWyR6k|4cu0A$HORt|}ztiRjNv@a(d4s76Gp^4#(mKjSg?meQH<74l*-@E8C!7*$=z zW)vY^i@W&z4Yo$9NO0Wuprk?A)7)jxMBg{o-YDKAOnSZFQe`SfeQWA2lFwmusqYaR z;-1$x9WKK6uLC=Jj)HwE(p4y(M)HIX>XX4wHWf~_KedW z(6I*R`Ei{_{#$ZeU5^%XDV$%i?ke*H~QYD~tn&Ui&DZ zmvw!u+Nj}FJ>2M;uWGT1T1cmqaV_Z% zW|)sI9s19_1mu87Qrte0oXygf81IeZlN+2RjKc%uX+ZMzwiuRZjrqs?xM0%gLigtmzUw{8o`HRm2N6P$y?G-`({{(MiOBVDl zw4sp$Wy+W8Di~;h=BgSPIU_oVEFOPstUmuoTi&@I=n6kts!N2MTYiB&xthzh%bI|O zXQq3%4*%0u)v?Zw8(9@Cz!7VgJa$J;$#8+(`;UJG0wy-R=7|LV83m9}^;UFe5o850 zayQqeG(RUAV)7iZn(?r(P~y10P^p#)rRfA;|IEkHR!s=U;<{`c#8HQxhqP6J3(17K zlJ#Qx?BJ?)@q_wwTY2q;it1%k)#kVV(V0&sCC)k^eE!XNXo=;ZqsQU8bq4`0*A@-V z-%2j|-fS99KJ;Qco;m#3qwk8RRmPb6()(COVgy{V}vKPM=(K;5E=Y%{*QItCR z_(&J1e%H`brW-Tn+56}ZolN-5ObD-@-2kxuqi8&Cz}hJrrdxPcOYKc*q`AP`?z8Hu zX5T*LgAQd}WmSFq|A!ZuvK6y*-WDbE6V_6n@Uursfn~pXFrCf$U&CAR#tvaLGHV2zQZn2w}JK zpx6J-n-zML1-b$N0FVIu|1(>ENwduVZMH`9Ne|G$3$0`+cp5GF+lv0(N@3&|4V4-I z)HI1#Ep#@Fp(GgGvWs1<%XoX(Sx6){=b`O`Eztc@#h#6hG>I{Yp9?9q%_RBECIk|J zWw}O9BHkt(c!`}87R>S2L)-ax&;E+}X9SxDiZOe-B!p~YkdjGlfF^<7+;0x{ukcO6 zg{~GXdJV19gR}MQMi@%f=oj%?*~Gj!cBrux_hT=b&@oqB*EBbHb0ayHL|d^?_K~7a;d!zH|bY%bP*Id(?utg+WLCVV#V z&_Xpwtp8!b{iA*(zb+b*NwB)YP%El}nJV0)$lYq&N#a!Sy-5Cf_7AG$qUojBxF7b3 z#--n|dAVXj=h%R!!Ny>t$<+aT>L^e{pQdIhIY|RlE8xFB+4~AnsYG=lE!UIUoHm1V zU^U&|>W3<;-j9Zc*qy35ra2{nk3I)<4XZ@U@wi`S=@p+(nEx4Q_a!ITnt*@pm0w!Q ze^<%BUH#vX>P5;szXl7ucl39-1uo>+glPvHW-LB1BI!gVs+t@rRBZ}h@iens+M_5% zRNS%84mSB%{bfj{hbYxn&CPWONB97~jdKM$%zSG)0}j+rz8dtxd7h_R=`^@7V%tr|37~Qx z^P!WdE>~G^CW!t<1T92ri3!1YliQ26pR^Q|VtgD1JZ_A%l)plH7LRbP#D!U`fpSo) zY^)q`OrdU6wt2~B&rp=xnE}egCvT9wY66N8&GsO7@tLZRNlVlPPO;W;e>4&Ne0u!5 z(cZ{xzR4{RsJ|8RB0`;j#XtgLUrtI3Z$;`?8P4$HJ5GZwcK1`0Ae(v)&;y+@h73u! zik6BSViNgmu=da~4uunqXBSi4(PVY6Tvh00h0savqJwu7Ek`Zzswpx&j2Kh+qF(xA zIpwsBLn&bu2UWB$>d55kNiQi zh!Us4x4QzE#mVvx_}f_yWsj$IL~C&5B)4=-rP7C{l=8AR#g8*d_m(}S82(ippJnT8 zE~kEU(HJ~4O-Xf?DRy*0rvI_v{El|>TP})Q<1+!SH{SFw&Snv36TV`13AvNa2)=w@ zpvQ@7Z4qCPd(^3W*@Bz%*n_*nwSVeCJblA0>-l3#1ZrHm9Y^?D;=6pGQ&)2;;4q1O zBM?xp;aAOi+1J!$68UVOdTKM?{@mKS`F>-*!WUa0#SyqJQSyz}7$WdxsJX&ZfX;*rNPL8{PKA+-pEKDH zhk?p$vc4$P4JPuMe5iPdQ_6E9=?6y}a*>@o+!VEZ6u7GC6;+MB{CWpWkZd_BfpaH* zkcoBnC?MBnl;(M0t<`Tz5&NRIN^bOty5Kd#iV`QAB3PD2_-qNei*CkqQ%h8Z?fSac zn4Uvns0I;kbUpm3`sB*2yQ)q-Z1GDTh>HOZ4=%Q%bDY;NXkKl#sT^_^8;wScPpJC( zpgGP^%*)_FG8>{ftKAAPgp;nWg#SKqv1stL|CLV{S#0=uz`{)EmKe5Oj=V4@G;2&0 zl$q+2S%LiRVL9(AYLjDsku)35l7mHkPnPK8AFDkLaM)q15OmOu+=3b4>FR6TTNj)v zRj}VVmu1(?`3a?377y<9oGT6E-r04@*~I;y@%(@BS5?8}gH*rrL=W7r|7eW@WQ6itugu6)qLdArUOu^9T#N=m4mr zT@9AL+N6XWq=%(^D8HUgkhWE1q($@7H8Xh~zZl{0HY;F@kiyWw@Gwc~U{A2E__Tid z)*tq;(11JWm^Vn9)M~kzPtS~yB830igd(hFl&zQyEiFCRQ;DcVv&pZaS20{DUZ_+I zf^)KzKwmUIXh~i8`gVO)=XAl3ppvJc6%5mbpbf`(K08!RRop96h!aH1~FHpK$0R00Ue}H z!P&scVb3_5uCPiL$@*`C^5?HrlKIUH64AExr{;SDWPT4lDYpzWEo08r<) zxU>>dx%hFTxxCXbzm;l*fW;nST_(zWceC73k2{jHK}%68PR`J9y?EX*w6%tfozR}o*8y@}n(`zRmKK$j7L|n` z!JB@*)(ryVGi9F=VpSseT50yAP>v!Js>t{WX=!OqB^2hl@gp&#V^XLVDrw2=c`l!N z3gX)sAIWL3KVB`DVA2;E8Mg<*{AIgy8N)Q3&&V{DR*}itnVL!ZYHH>1;1za}KD{E_ z>Ey}C^$8BTM)4iF!?ur*V{?f?^~)Y?!-XhT7!3tT)lN!hLuDt5cAiLkS6h!O9cNb^ z6L5Wb26gJEjtG2F(MxK1;M8#Pj|}_~lUUV}t}>gN)Yd4K%{1+KOY?!(3aYywR*5*?Z05R0Qyx3E(hmxtZpdMF z)3PB0Jj^xY##&&bj|(3= z^e6K~gXxNNxh(0K*T^US3mfAK&16$vk44OwI1DRQr-MUalnB+h*PJG9BtX2_#8@N_ zAyg1I3-wkA1l$=lt@<_|Bo@FP`$AY^k~Ctddkzl{!3B0(We!Cn-2=V;w*=T760V96 zF$+|5N1XKL(Z(EjzFut_p1PG;B&S4fF%6QpIty}(dYDFg%{WXffFxH{L)A{Ogc-lT z-_oC_gnHkGwj>4crltUc38Wl=i9h{{-(}DT$t^^au2c5NHi`JD^d@Ry*PmrO*c8f` zObd3RE>=eVuf1}qTy3U9MTGVFbojYkA)($oCg&=>EW$Y=sTmW5s%?4X&{}Hxmzxbq zu7&}5_Cb0SBrmqB2!t`QTlS)j!lP$Xk)Bm;U}7pu7mMt;o2$XlfG9Gd(d&ik?#vl@ zg2FVQFULo%14kr6{ZuFYq!;r!i*WJTB8b|Eb?aMBOg=E|L4|;__Bnj#9V>gs;Vvi9 zGqrd@@~adHec28B#$_u+1@Ax=1qc9e)RkPCzSJg8w?IdbQ^Hizhr8vU-jJf(haR-+ zG?!;AKX<{qFCw{x6sF>BY=RvpZfj%p(;UjSYhOPO%5`_RZ@d!L8*RVcmz@sJ{BZa6 z8AkskCZNVd%gUiY+K&=KTiM~7e&J*ekqG?DO)q+RDeH646BVG~T^RTbqjh2#%mOtM z5QR0atCZvA4xoQX7!0Pm&7zKv~}I12tva1InB^;!XZ7aS@h91i>M>`D|1v^vG%i!0@v0^9X5wFaq5nJy2L6bye2B^J z_w|7K-~h zq_N+zQxR=G!LC1q@fdB>9?as^WZa?$^-N8MQ+O422sBNpz0pt(H|~H+SIcqk_1`cK zi6EW^GLZ$}ikpvw&t@{_rRi@rYcUT0uxRT5PZFYPvOSdE`J%GKd0yX@$e8)i@%h6i1V0h*hfO8IkY+A8w@4pLq_`R{ zWnhNg@UIeu2jK?g7qxqgMKWo3c)q@OoL$&aIvOai;dShERQKuq-2rTHw7c6{SdGyK z(CC(!M)J*)zGmn@FJK^F0-U7a-)We>b6!ai41wkdq+)^B;cikEgvj2`5{PKbqg z#!Q+hwtaQ#Erw>n+DyC>UZ&x1OkSE-?{SpZy)*5GNE@NzhOEKpL@1_McN>J~HyvGo zMFNH)WK?^#Mq48C5$08$=Q&G|>R_B&-ui2N_M$)Os-eUDslRh@&FoHjjq7{@s(Etv zN)*lB94A9l2;${{kRxQ1|DCu>2hcgF(eug|{s_RM8HfOI98YI|cq+to$$tXtehKz- z(!Ah|;bk4?RV4vEyeg0RWAo?p?ZQbgd>&2nr39|KSF5Kh8~i&wMfvI774T{~8#E~_ zx-);!p4knp4&mkQ{Gj1aUCpCUSTo{Xp~zN+KH#;Z2fCU0cvpRozpIzo`8D;OxApS@ zOY%f@u*Ek>AZ#T4W>jroF$}t%Pg#+jDnCo$;|)Sgx$`%Ykk2;Bb@Rr8)>ew3AdZ*l zWQP(E%(i3YnD^j%9=#w?1U<3{DrdZ;0nlxc?N^FQ$aBZoen4s6PMz^#2FKTE||`+R)~| zF-D@2q--`=;e%)9Yf_(QlORQ|i@A*A0x&%^fIGr4J>~@DkRuuERV4}sV_cVdf4T(3 z>ycJK?Gr}dTu;*Q*>DDuDm8{yg8Uv>e7Xaa{BHUB2h;f}vU&@t`fMy@OXaoL^ zeU=~?!WQphG&WKQi5dm-_E@;Zi0gv6P}8~gWM-Q!B%gMQXXoR|D9{0uBiV+;{-%fR z`lBLzr|C>pr!b7Vg^8gpQ*G5U@#{%?;RJV<7t!C=>leGCxBITNb{P>QESU_!&@2Ek zXyg-6^J5w*#82&-&XAs1;FsaOwyIMPpU@~)wGs(LD?TM53y&e%4^hxlyn*SlX;dAr z;3o6F>GJ9HBKIe2LbvnVhyPg^GvD`jiY9DrNTm3KpOrs?pJih(he-0broL#;DU7!~ zP6-3jnFp=a71t!;?9v%R{tfx#6-q5&7_ozYjLG5yK5;J^a|oGsgJ`l!)aMUncnkzr zpdY_MlCR2n;6Q*iO|Cv>B!#k1on~swiH;5j;_DcBw96h1w3G&6rhP~?0}YhYGjP%) zqdOfxhOYWVB7=Z!^Cq%lTJ^spHkpt8c)DBfkjy-|V$7K|ySy(}r)3il8@R+;tJY`ywkj>9Le8OF6jcUWA1$eOglEV@=$8~eDtrEfj zC98F92$-JyYBi|=oY$hD2KLr=oj(gNwCm=sUg4(DEKK1=D%ei@Ckm&5k-W>n3wExC z4hvO-UQmIY2~R>Q7j!<=gw-gFd}qPNx9AwvSOp6Np2fk1mb?3i&FphiDSd|)XtNM* zd>V!eGg@eu{ka2JZWjp9$98D5gpI613HroU!c~LXH3^PK+6WYqi9u$q7du}-k5v`w{l63+pZMakYbzVepU&O+HoF!@jh!m4m?{vd@*h{nlSoV>s#OKU!V&E z)*x(@Oo$gb|GCK9d06?=eiwN%#Q%Xg{@)ziDCIuu17>(G5uJY*0+emqY-iUF#0wxs&tE^1o^R$VxS2ApB^SeYx!27RkX}++ZpKG@d7g^wTwyzOU1XhXOEW* zl~92ez$Z<#kxt~9Da4Jnz!9)l48~@RIRh>sy7sq0_Pdf+#Qu!vKrk%F=vBke*O>6O zb?u+0o(cpN;>2=iDc6N|+HZFEvpSSlz-mBP#h<8`hrl#Fln45sI4 z_@R-4aUY1J86J=WOFjU_cPMlEAtc0JkI-}!FfaTq7AsPkj# zLPY)vQn_DRQU0}9JEI^1D&ak~^AOd?T=yXr5(L&=n-#+A2QA}!n;|1)yh>O56Q@LP zZp(y4@&@+Jw!Db@sH%)GNAh|ERM6LZZq(C9!lwfUsETW}R$--CQLVP3@(%J?&Za5V zC>Fh~){cQ|ELG$qhW;o?3v8w8WXD+yWR$%OF{ILH{1Z@AA$yflYtfh&Iv}@+B|DRZ z1?8!{d*uj+uEN~wCOoBFLz-;A`u(*rxM4xzS^Es*z!?^n{>lXYoCk#?rm1XScXiu% zVptQrW$QN8^i&}`%dhNoT}EZ{AgsqUm6z&kqVFp0PAgdzXe26uh*hFdf~s7xcf zD96WHR_%$3lc{CC&Zlj?u)a{D=k)J%&&rN6wjj66AALkv|4ts521Yk~QpaZBx)@3H z3Ck^K!kqi-APo_I9)Wec7++`|D3=D4-3*RaGh3oV zjfJol6}eY!MH`0Esft6e2F4!h)GE%CShdSR&+)esF27HHY|6*UYbkF@>|vGE)i{bz zEb2)t5!iQV76KLJydC9BtI8l~4mQ-sjMvpy+0w-~dRfHN-i z`?n7_qd|4_tzjo2vtnvXEkoaEX{P{x!n3QA%b%beZE@PGY6IGbf zgpy5xtKFpFzVHqDpKBkPQdE5z5ddJB2>^ic|73%=wKuc*_0in^i-orIKjeAV_+JYR zGP2rPd2+TfORTcnDPudP3`@J6Ba!y{e)nR96EO~M4kr?e1@ZSl_(Qw;#ys&p=LE=a0=lAfQVWF? ziHOKPOG%(sxOr8UZ8ObZaVpDlkWbAu4JC}E@VBnm{h_C!yozgvpaS|XSukN`3$?Hy zM*Zr+`DGH6^N%Tp$|a+ld-GJL_%3z6TR=oXOWF_onmz6x8y69}QnaEv@~)6j_u?Q4rWufJ zmA!1860XWzRV0BxX-t&)0$}TJW{MaK^$ZYH@mO$y4ZX#7fIV=!dd?T4O1o7j0+>KXfqe3n;u?QTF$H98 zIP+0Y+l~7mBkg2pmUk-e1NZ^c z*<^7hB@If&l|w&!h<$G`%0X!zx4A{PaA)q`F&1b-EK?KOd)n=;?CUApoj z(<%7~Oj&8=X+k{;#^G-(W4k1^YXaHUuyS?TJp>@?7ll`Eg}3At z2B8IwL;Z|yts^Kza)W6uTtd|D>NNq(F!(1TXPeX>k#=fV4|dB=s(q@V4^yX@6cQEg zDi-#NJ+&dnssY4nT;UJjc@~Od!}*w2En54iiMh&>gC4I@&Q@w$p^y&rJPWl+t$hP| zSa^4`%jkh^U~R?xCVuxFwH`fU&bI~(X0Ca(Ocohqm0hUluG(;Uz;qBz`aD8eQ zum#R^s$ng6&h~+tHyk4q?UCzu+1np+1es*%h|0nNBIUOMrBy5}nL}mKu-X%fPVe?u zWk`fU15=MUm5`IQclZk6^Z|u8`mQn2)S4HG(F3hXTyMf&f^X+3O!ADzhzPnSRW~axke0<`ELI?YMpp(XDOB>au zLg$wm951^6VM7fjgbl+~0>nc)Qb&rW3(;c@{`@voraC@JUiilD=aT@;yQ~mv#)%?m z1~0FryW?r!CfA^eifax~hl}guiHw#jiEuw7@)wXobU67$B(icm2Cb9NeLJ4WPW6U- z;YPzd(ju6cw6PR!1a}VWwxO{ZQo6x~t_=a+rUR)vcuT76_3nVQSCee^ng!xcm-m9N zDUKEX@d9x_Y~V|>%ta+-CG%LfaCZOzi@yD42Z%EUniXkXxn5>m{Dw!M>HR?L<)48; zXfgcQ2k))|B9;?5V2Bjjex{abD$mm%!o!>r68q2+Xw+Jc)n#>$!{Y0r6R-TW&#&cx zt2^lz9FLVi;O!;}jJIvi>;KvGReR&yrmrZKt18} z7dScaE213C&?d&^^C|?%7fS*;(foa(HzeWpZoveX^iQV5+e~%Zzd3QWbu@)qjE|85hHX79zmrC8geQ_h>+HA_6X_VARI^~++}u%$xf48 zyb17;qd>`u7ytXfT`5Z>9`!o*Et&fQAq3}{kV!tU_u)k>ck z=nrQ>V}2k5Y++>ZUmRxQglrQHw;1jdWL7^Ou&Sg&m~E{Es={zz9r*P!-o~W0W3Jh4 z9rSR()c%&>+kuYsE3!#O_t`a~Q;Pvs&|Kmj7GDTLua=$eaEmqk+! z@VfZeL=B7;OvvqY$Od@CPnAbiHTQl*+)28#9mn=*!Z87|!BB%pv=JCGK%?^bkxXjhNKmF# zrd*r-rGZ9TdVZnC!m>gOT>U8~`oTU0a3v$SYm(j|f;b-Kp|v?w>&0Aj zkqM}o)O;F~w;LVS>*ot(*&O>}Oc)dj!MNc9cK2A>U(gGYkM2eKa9Z06iwZa~wurN8_D^x8C8B zMG6}Q)nD>GJL>a|Gj*ar2rXh281*LX1mE6%HZ}$|GnIHbhNeGUV4z4ZTFrQOIB_y; zWdC1``8Q{ri}dX;3~}};#3HhH^-5GA4Bf{{(Qgz9K7EKpaUuedmkZmm+cR9ei^52G zX&u6;#dnoBad;IgxqibED7%B0UbLK_2;WZr3blSPdh1Yku0B-E{JlMbQ4tFUA%tVF zvhXf=MKmuu0=hQ9Swi~}OhSwBh`rCrav8g1v!l#eWf@ygIEK9M!w>aCP;*5HiLhfX z2sKn(*OZ&X^=8ioqu_gfaF#=+qJZz;2;WB2xG=xtnL4NfON;Z8?!G01G$gq2t>P z7x!)OvBO(mT#8l)pci9^J|q_wq*#5rSbMUkca4~G4o^GX%oI*rOV_nzv6NxR`h26p zFc$TBD`8iA1KGyg5mRQ}bcfi+z5UzKwPn;i#IJAx((*%f#0BSkuw%W7BLzV{m~$Ez z+;I)GeU`MHeiL#4WX3L=dD|p;fD&gnfOMv|VKdnnBf(8ZOtcmwzsyCFy&=d zYi`s?*p|SNMsj|!64on^B3;+Om;PPmP_xS7uM^Y9w?g0mH!;oPf+}f2-<64tw=3Mk z?MI6dxD&&sL04>h2wY}dz8-BToaJb`>lW^i-YBV7yhN3;~UA-5lSm5f~l$RS8kuPUdACCc#{ z-RPWYR;LIc!i6rZ1>~V)$eA|9_yJokm=x|}15O`n)oZ6F*@&CLe&aQstS0csBZ*h; zQ8$bsX28h&Ei!d%-6O|8@juWBB7AQ%a&E}Ua_&1XSAY(oSO^i^;Zr;72vXYUF%@Gs z!C^ezO@LpA$eP8tX-BiiffZJehU``>?KDTVW-~KJ3Y7*T5HDLewoE2O04yp#t`AzJ z`a0m-B@#&EswM})>r)=pwb2!|rxI?gNvFDX>6odjb~f(yuF8O?H_WcVUPXWp*ZDq{ zH;gnISr(i+MOO8Sc|x_Xp(#tBfl+OY>m6OuK~@}{1qgs2u#(;@R`I=#E{F78&gv!6NsMcAxwUNi?CM?_>og2)h>jIw zPBmW5f922erc_6^u7;JL^ntbpV1qv|9b4MRx0ZMezU4eYr$l5HK6 z*>Ws)C;{w7rlK^|AQ>)|EIMDrcop0Y+uBowX72Qmq$GK=ZW^J4{^UBo&%JNI zO7|z$^TUJhYKm#GWIM03YwcKegG8p8^jRZv&6ZgL(nq!{QC$wRtbgY!ri43lFqwDn z3Dw(%VPrT1%Um|^gLQQTM2<7>79<)^yZ=olcy624omV`jWr@;uhcuHDyI081);*}6 zUWx>BFW%|fu%_Nx;rHsFC;DD2&wi2=4g!WY`MV^=Y!D8ciqlN;T{nQ=duR>0PHg1+(d8ee@d6;kyni zfoAuTxd4Ao@Sq@JSRfNdB$t<=v_7QZpHpV6S0J+Ast&5xj`N`SSj46On1}{M*6FMH)YCG6^L9sBROIJowW(H8LW8uA5%n%qvNC=<9+86MaC8XPezH;AC-e`)D>IZbhW*HN+E zJZlYPI;A-$Gat9GL1BFVV-6{XUCR)rCzF~L+&ks20Rg$xVjjV%pjZYKD1 zXbfW1*kZ^bnEj*>4NEIf20_TW=e)mYS~@_YGnp#TtTUeHsIX?`1U~t&>L)F~Ur`!f zOXsY=#!k$xoiXbf$Lwa9GmITC!RY zA3WU{JN0!I*(?n$o1z3f);Y5}%M0`3#jOD;CDrrc2T*MCDTbJ$#TzUwJXqQ9XYak6 ziaf#%&ksZK`Xd|K3T1N)e2ohBx4f?)dT{$r95H@KM^f>m#d;}I{o#@b`44B}bndt5 z8?h4!WUqo{%yJa-rf=IQAI}E9=63aURx!B^6Iw#J#eTTxcKH=-VQ>s@2InJ;qE39) zxq2DL1mwZD?64w)6Vdy@X~8nAI^mujl1o55ZY0cIXw84PkMg+=5vI9 zY|poq#W}BGQ9zG#$ovb=;2nXzvxtf*i~4JUnYtv0KcsveAZ>}1SiU-*n2)kVqwCx^ z;Q&r|>>hW|z>FTIU{%~&Y}l|hOyN3n*2sa2pMBbURr9N^1OLYQ)G<5~7>Y1Y1b-?1 zVzr&r1s>*a36C8C4;Y`9-o@;VqSg(4@?=X0u$E)0*0%3#DWTY5{4Y2efmPy1tzx_j zKJwf{{Nnp^CnhFCr)?W}7)AOB_Fqxg!4J*SjbnJKf|$qLOXT>{-vKLM3iHfN&$(z5 z2lOp`ac(i-)gcaA%}srI`2OZjKZ|_ix?gqC%u{2z})%aHnG-@)N=X-gUuI3b!kVsRI0aW zMcSk9B;J3qssBCG5}hc5tZ{e<5QeE`&cgn#4;SdK63ij~_MM{PQA2Wa`^>s(=Q~V$ za(EhA{(i~3`$hvjWiqGoJfy;@!e<1J-CLUQ)dzV@JU{$ZGiL(GIFGyvW9RSjAdH5* z`)_6Dvz#r}{AYlgpt+%vT{U(4g>h-q(An@frDHe#Jt^#u znQ?Z489F4{b?j{0w!NOkm5ruKiqdD%*tOjeccvepYVUR;I>8z)LOOCaB~*@B-MHcF zjxo{oa#n_&rCc`Ct>P5DYoNdS+-sYI&H547wO@fd2VO1of;%i?5t+y9IsZ1+J=hvV zsEV0}P}9b2nMzIF<=2%-Oz;gJ;AhpE_~YTSQC1LmzR+i%me+PL&K3KRV2(c5{fqUD z#;>QJkAc}Xvf!lj%Gn~I+N#Yc$0NY>C}M3OHn6Va!t+S?HdlfL~}+nc24I8VKDI~ZB- z`R?1c)`Oetv}gpfu~)925O%zVcJ%rjt;|(UpQ*;HXUB04(xTV~-*AUCG2V=Ckn~n?p+kDLZ-{!LQ6 zNG~9vGvqL=M+P!PiC7<4k%^#NQsl6tVXIzv6Xas5U_*7J<3oxXqV4>=mIg1in zaYC8DWX-DJCd<^;j2B7yGCp*OSI$5e`Wej6FaeeQb2d-Y0{c2$9i4m~7ObwWeiF>- z{=WG-^78QHxD&;K>$!f-u}A^;cH0vv=qATJy6L$eF+;le@_FQd;w&WW#F*Y0q=4nK zr#6=%&pU6->F}yA#w#qcb_pvH#`01`w`bDFgeT5shW%C*f(<9h9NHbsyQ5FjVFi$2 z@WE4!1VvdTtG8&XROY=CV}C$b%UW$k8Io|musf+iPo6@-#uyX-btvls`EHd`-g>=7 z?*gSfC=B=lS|3fz%1**wR6&yHZK@9oK()nfB>AnLK}3B+LOgg`n70U&;Mh&GZE0Eq z8dM0Xon?cuB0{2e9^*7Xxc+neu+)@FfvwsG&Cc97*uXlV&w0wfEH zYcxNtCLGm?5PW?G!ES{cPuQKjW5ss1RO!SU<0TcPAzF`>!@%#3H!g%@q)`!XH44F~ zA4N-8VIxmK*sAZ$mG`&D&W;pRg~H8;ciOc{mINC`R#CDi3m-uA?oO4^fZDBwg5 zp8V{B^HnH=ji`W@+F7jA^x2oUi)r-Fs9G3^M8xD}-{2_T0m+ez0*1gfwj}eS(IBWHicYjb{!a0!JSDp6O!pa1)5e@{j)u-O^t_LE#H@M6GnWPj#HFR zFYHhehy+8h^m3*Ed-jn~nO%`FUOGi^7Iw$2Ky2@Tz9-QTkm<_oCIWW{>Gn-KRG-5^ z+>=>`nf;u0U(5bf#u?jh`|yw@r|Cy6jp~*fo;vKeIkfH3^~7G1TNVAhDi(oXREwdGLvM2Oy>D&Dz>=6 z;tgr^+o*$w(Z$4+js=xxh^&MXoTze+;Au}xc zs}hRNk`E_ux%kx&ZUOAlCJPd6+d=*ADT)E^rni&TcU#;ihzm0u-DeF^e)7RIYQtTO zHs3HPL|?O0j^ObT+myvD>{bq@ExUqXvW`=n+eerB+y>D@x2r2r_KGnRt|hn1$ql<= zpJSZr$#bFH1qM;vrX7O*kHB0<>3Zi(o<9V~o;T_{5sT%dRR;j+AHIb?U2pQaxDQx6 zFyn4+j=lbU_tfif#M(vfu}o=;#~pYTh97jUO3SZa{}o&>dF?!u%t18f8Fby%ldD^) z_1>;K_$_~^rS`2`$rhWrH|>wfmT`$SF#FP(JJ6%Eei`ar(V90VX8#TH|JG?5Z~+dD zAI^s|&Hu#V^1odr|Dj3`>YO{xOJRK335v&7U=&wB7G}-1AXg0r?~0M>?q|R((wJjw9lNo39Yco?GPKO<%dxE4CnR)skI6F6`%dC{ z49m6nvG_Xd#?8v1Y2?G!faXjoMudgTE*_=E(VSa@ZQ31_A2ll!~k ze6!X%DX;d;nG<)FRO&OA4^yc{P5gR)EyzDp%~9W`Pn zQOpKS-}l{oJ>0!zLcCJ>6(1!9g1@~tYh*>}A`2H{BRz^?Q849-yo%*d$v9-y8JsCe zb2Kp!$K-kz(spbY4oPX#0`jniXZB0%OMH=T4voV~2*;I93r1j|Ksao%880)zFqja_ zZ?ULg(q9=#~~D>yoj6Ir<^J4tWswxD8Yr!m#(kwFdB))v8o+wr??3=uesdCw?U~_!2Wxb zdXRZOc8oVoMknVPg@UA>?@OJtB_>$E>E}^nJt4(yMWtbAsOv8yP^VU!PE3nI&A_lT zp_q&p0oUMl2|gnDNdB4Su}la>Lk~Ilo3sT}b4sL(Ck`&g0Y5Pw&iK3_g@`Jq^s7^D zkk~VJWfpvdNj^Z@gkDQ7aaS!m0hvzNgRN5aFo5_A+q!IAV1QsK1QH{62!q)wy$A%& zj)mFRj0J*FLmc?vcX*hYNRsGjA*x-!0QZn5RF7I}408(@@bn(+BwnOPpK;}suuBU1 z1y(Eniry~5tCkY4|1r}fU0}u&#);tUtrVtY*og{NlDhF9?#F|J zof~R3QbaDAL8n6FIzHiXPZp$hnhkewLMm|GEHV=JlIkWdGLqZNndc)?*1F)jnOj>@ zGEDZ%70=8YQAaI|+FB)N^OYj$#Gqh2;4sVFt# zF2A4re!F?O+;mL))Rr)HgkY^USxSN306of@$@)>eM38iN>80Z44V^0Z6I z#HCks`ZoRnVR4aq4rgvzGl>g##J+ar#oyJMBz>tQ(&u(72VnL1-PTB}co~G_tD`Ac z%yUgQDvxTJP$;NAMMM@#f?%mi$c<%c7)`Thha%$42_P^+-^yF^RLH3K8=P>9Yll?hC*;QJ4sJ!`l!%Tj-il7Aon@ik$r(Z(|Le2hZksq8^oy+Yw zr)>~Z@UrQRjC)`{$I5v;ctfTUTIkW?UCNHI9q@tc^XZq|28Y>siwqtOA;b|`P}5#e zI=tFTV!#87D)O7W%lV@wJ~FZD-CZqj=&#GT$CZgJlYXj$o)VYC9ld1`-yPOz1s@5) z+ri*(J+QnDCBcgde39i_pGdgiH_^qw(aW;Xt_VU)Aqq4mDl=@&PHb0oB8cB-2L-~B zSa4r;|C-Rg{bD{Mjv$r@Lt{cT$v$3yvo(k-&R#kVv)L$G#Exw2N zE*|3x?0#|HJ&7lUyEJoS8Vrtew(->;t3F%K#eT^2Esp@FO1jY-;!mqo?OKs0g`tj( zmZrIWM<8s@tr%0E#?EptLo%dj@!=nEbl7`Q*5kLZ?Y#jZ=NSal&hPPRcH zXf~91E)128BMdKi<{yL_9__x>)|NlED{Pie=IB79N)EibCm|HICL;(+@hFzNwrz_R zaGWS2#X{ z0Yd>KAy@~NAgqZCcA#%bB5>{jCp+-X*R*-aMzFdfu!)y!DX=*vqfdM-=HMm70zX8U z6#;;q6F*&It3qm3wqdGOKint!ZK1+rI%j~PQ$}gyu(i3ey0yLZ_Eb|&MDH7^9yZ*e z%Io~gGWj)@2gWEW(y>ognyJR*!hNuRm%oeG&Bw{-&WoWW+;n8vky;fqT`6|&DorZ? zY__)|VMx3ehN?qH9(IF_q>>Au&JwkpN9dKEuAtEm{n z4jwLEzt_H6l(8jnFNTd7OKgKD4y76m!Evu4HG@PklleBGj&y}$O|JtFNZ_uH3Yo|@tJ zI^BP!uk(J1`cYOL`BZj~J`1c(+*HE_$0SNn9}S;>g>;=5ZBMEi1VbVDCpjD|oxz)c z&4rquR;8MxxdPNy#zOuh#etB}z7ccI}?h z03iQ#!SQR2aQ!SL3h$LOx8K*=rpIS^n42s2Sfiph>4!pv3K+Q#NPg(qoPrWwXCY-< zskM?5Bn`FQ5WmVvnt!v`$7;Y9@WtP$*4f_Cdsy7aK4J&=@CQUW!y!zw$Q2%NTX94v z=vhow>~*ejbtsXv4#u1fLAK0CBk~K=ib76Fjd~@WxS&CKDpPO2K7d@+N&;2yH}oxj z+>>WJ*xcJZc25fYM1LPN_SJ5~gxWnv4)%(`RkVGL$}JAB>~w%NXyEiLjH$ z=Ic|HjTRm^#4Z%V>wuuJMXuDy?9Tx}sEL_MIkef+@7|DJc@|w_Uswt!(;`uWNga=S z+@`9*xEeK^_V6MC7CBUU?>(T)2gKOyN*M}jMm99C`zseW!)s%>)yKTbI{~E)_P4FNWvKAxUlzNu7GX&D2Z; z2-5>RPq?o2VnPX+>GZiGK1Cop6C(+g=n+ic9jyXY1iwz&FZ^^%H=Jr%-bf#9Z*=&_ z$BPo4RbvY8GsiPplDne0%rtKiJ|(=g1;3&JIkM%G)G4=PU0rUt&w_${5x1$b9{d}Z z(!w`QkPk_%z6V}g{8lI@U&{JgPk3tW7QbW9*;)Ck%F7o&;xB{V9tpBPmInkCa2s1GQAkJ38R3~?zBQI^%{J7W55C=Wgl ziBEps+k?Fu5n2+zU*^}WoG&kAaM<>)HFwuK~UGDGMH}@4u#9o2(e(p!)~^ zvR#f(yYL;iSF1uYAk4)&X4c{+^bw30cMkV*{FXoDp5d&>Bm>ALskTPQl9}k>;YaAZ zIXmlbKdF{m^w-eXV%yD4PT^MoxqfR)U&XH`WGvu_^rLnD&Q*2J6u-W>;L^Ip{8zzx zHZ*q$1LrTrW-wd**aOOayu7&1h~qkGZa_9W-n0?P^^v3^n|1S;bY@YoA=wH0sSsPmF=jT#8Q7x-b7+`PkrigcQHBni3NNPBAFG5 zv)PKTZ@{*S4r`I(>$=sU8}FOb-pJQ9Z>M{tj6~HRwl*PVlab-sfHuI>g$_3;1OugL z!oC9$K8~iufpIIegAIWE*YtYOKdzr4$p=T2s=$295CDSf{Jn6T$9QngF3}0KlWAaK zUmuk6=Z|D7Pat-|Fq*$|4SBQ3E718r6X!o%R z*{rJ9UPkReWZpg3pqdUb*}*&oH;vKcGNG4Pt_YNV>~LZ^oX(dRU9QGX7~$Q@vl2vv z)_{3IsAPig6roETJrrnPZxg*+lWY?U)FJ{uG~5oPiJG4*jOCcLBwmw$g19{n7rgo zyh-jUDARb;*N3LSRc*<-z8pi7*p)glkKHiA>s@kVE1~)l8pu3yv!m6o{ah&5qTSFt zzl#_B&Fv9qTFLfJPr4FSCTM+yM(1icn3AVF?*NqZIf=%>1)9G%>Y}bxkw5=8mjUgE z!T<%7rz0u%=i5!z^hY9Y{~tlle%L$zNg{StRaRVQLh`HfAM6E{;Yq1nW};?0A3?7q%&u{&wP9Cv^AJ$@Hh_e5~EPEpWw4LEHdg>0!to`Q;5 zS4zCc#=`~GUkw(Gy@HOCJK*-Yhf)(MZG=<=s6s`;fFaO&iCEMI45E-_ZTNbg_s2J$Qzr0?6@O-dol}lw(*9l;7*7Yc4#-Op>4P%;6u+!J<4i8xk62< zL4D4|!N&cW?Q$BYP$KxdeJrJ_M<2#V@+?jxwyFa@7B~1l-p;+Mq8Smyj9Mok6As+* zCqAR^7`xP#Kw26Hbrn0Tb=I;UPk*LJgM~^$bK`vrMM!@i1uC_ zNTgPmu@91~bIw^OvpIe;$VYV|7OB0|$ruYSw02)H1ppk5c8n-jwVls4ZiD=1S{wLs z*R#%U;SGB*5P=EU-}G{m;HKS zJFFj4(-2s66*uNvHXZ&;c=^9*k)MD0|GWM(D#r5nk39bWBke0VmYpB?M|y{$00N@_ zkCuo3^K=(u6I-+Y82P33<8>H9{-XPejN&L+Y?QP)El(j8)e|9` zEqOjJt(h9B`7p6nINPL2i+US8a?j~2anTSuCcD_eWzLJ&#G~K%xIkC8F_RN}^nQT{ zRV)OECo8uCha`E*{e##Ai%F@ds2n%PR#QROi`z(0R^1RiCKXl#c7Q6;3NjK7+pLrlEEoMQ`qR& z3rnnsA`nR+x?8RXdktcA2D{koi0(Lkmz2R2jz&Q|2%f>M=nCh^)huV4qz(=QjOLgQ zqT-a@^KT^B&8FE_kI4jo$4{wcbMQth$t}imN7PxESLXcnlG%;1d-#{n<$@xV955EX zz8;I|++yHqPeMxpEFqCs<*plSjtix%%@@eds}#Z6xEE(f)DS02^P>HExep)lP)BuT zmq!b#(C-_Fv}_HvnpD61C7{PAWz8SmKwB zN6luzC9-60jqC$@MmTW;G!kE8+!%C|R!gcDZ3l7J#IizbJ@mU-Uvvo+h#}anJ^v%S z%ar~PPQm1Xjai0%^1K1-V1p~nZdXUi&dlH}7MpIDLBeHASoW3JjL=8*_DUh7zUd%T zIY#Lv8Z+WdiD_gtZx2YuxlbF6dG>;~ zo}2Q%t4{-$&>rI$s``8AKOgmV_WM)X(C}n9BJ;UhNpVE-EPSaQhJrD99%~uWmY#!8u@19=$o_itbYGtm!HYks2y*klA4jQm%$CcV+JG!iDC; zJ3t*Y$i=`JL5*+B?WU57YpY?;bCdrv(6q_gDIgh#Q(!ce&a~24YgA_)y@vQ( zB>A2^$U_*{soFYzii3kTA+1EddqlChFem_^%Zfu1XrwRH<~sg69BFXYA{bP|HYb9?9r+DAR%u~PY!HJ1QB7k>?|@1CV8b}B zQzDR!W^sf5H=Z+yvWTWREz_*F-Hc9-SM(msQbsUoc4omsc&x+rXEI{3B%}&O>0=jx z(z9(e)P`CE2jrz&05PwVa22-)nHpoF8FQbUrI#%}4~FmlKyIpS}pjQrmUyR!@N zadv!JY=B`7E^4__rZ_Wf1RH3n=S0@%R@geSQsR?J( zv9Jk=)o1P6C2Vp$U&b9qc()r@oEp#Vl~!8;{T_ctbj7I+zk94=j=^EbS0%LcifTjh zdE6HYh+tqjnA}#dR*`33oMFz92lOQ6Dj|#`^NgY9!PqqPel~(=>Y{ZTm%LH*iK-ga zI;u?RxT3UH{;p|yZiLo2Uis@xM4!Q*)B4wYU@C@ojpUQvZs@1Ob{36BHUmV`LT7*; z(muumfQ`UCWaUac83&6}A0D+OXeY{bop*d$wSkSU2C88~4A|5EEKP_Ms5Sc|1=u5x z;3Q07B5ik9iR%om+b<=79;|*xhnbOlg+1!UM6}&1kq+*L=B%O15f(9G-%M}#*W@YVBA{*CX|{-(470nDMsbn_*8w^Z?NYl_oh zq2$zsrn@3Q^x);SvDi>y&K&WUSCBAzJs1!ejOFg{;qU#ivtP}bov6ZzyV1?nHhLO$ zHNKC-Gq^+q4C44!c!d`j%bS%nbzHw%7JOJ1eDl(~hce`XwQ$i5`VT$Bs$Udw53;Uu^KX<@NAH&t_@4AXqTnt_=P%%Hp zD}TveZ9fT*bu&MOnqt=O@?`M8J>pA;A*{)(6f2i)?0Y>CW5Er%ir~_{X`D`gyz;Z> zys60jO1vEqtF$~{nQEFW!t^}}XNgBFFvxoQhj@N^Ri=jBH{B%Ro9=LM-QqNAnre;< z`ZF6+!TsMO237nk5v8{sp?{@9qH}mN_py4AnM&9(MX*o# zP<5~uWw#}P(sl)#@gnkIMq6d;wV;itE$E(t%z4@mX8gr%&G!!vE@%qN0`K%EzrXSf z6@G)f{Q5p%_1)av)_mdJ>>e5;q8{9lqI`Gpwdh`G>=sXpzqo|Q3Df^wFPi|E+D2!7 z?tV3s5^SS8>JjutNI0OB=#>|NNVR2;AiF971Wf81-9QS#RL(!XqsN>``5V#335nByjm7F zxKWnyi_cxD8ekXi97;Z|eM%nHVH%%G$6~q_CoRH3cc2skr#>PTa-lY&5c;z)gj7R6ZnHc~UW^Rs-K|ek z`;QUpPP>fVt#`w)-Fk0_W>HojYu90Zn(sx!f-xT~PqO~L(Rq*RLTK>1tWxXcMeJQN zSo`jv-C6I4eT=CHWER+?k7kQ0qoMB3hrPP4=S2V=*lVAi&4(hVU1V(+WM+|T8%Cj* zeOOyMBcwrxqty`hh}4~3_RCAR6L5k$aR<%3V{}=M(0IF*kk%nhoBjLIzV5pe#5dv1`#1+EM+X4(5sEcQy^m-lhmf%kwi!MgS8SgPjo~1w2z)W zyS;PaRQbZl_tb1cAwba!6`S1kX7~+ZQ8HDfgHD7pMB&G{+K|UC_a*3JlS1SM6`IW3 z#b-_$NhX$38QCit*URbE-sp|7x9Okq00AufZoI{PBG3yR=pkuIdSaFO7q+(h0-6*S zq!t@*)@cmTiVCDP%ev3y@`vFv-CN@c8o&<4&kQaJrO|gF1obn#Op6&>#ID{p_x%0S z6M9f;tHB}6pw6v8eJ9>}`2KIqVK!En<{VTYAO+6AEUu9C$ z6&4;e#Lor?D}u|r!P3we6nzugY>H%3qN#eF?S%nccpf~|=7yzE2zXchECPZh&m4{X*+;sG z@z>oS(p0!K_T(9;mz&VP;$oh-M?}6mgqSZ5Djz=xP^P5RMjV8vr;_Hzs;67wRB}_r zT=Q`+f210`oC-}G6o^NQ2c6oDR2&!}K`~GD6D@Kta~AzFsP7wb3MvC8yoKga1KpzX zaf+(N<6eTU@s{3ABPN?VE%?O7*}y%+{($1ywls~iHfrK$GkgOy53T92_fKEN#m>bq zsDY3){F$=>`QoX1^`wjgKG_HP@dP@^^;Uxuxn3a`33K(mLAlfyk&ZH+j7War>_hs$ zP;W~lAw1>sbf9P{Au3GiTb5YZxRn~Cb{O=VRJ1Ad3#N^z11Zafw6LV8wK(QM)k|@;-fU6a)J zrr^N46w9pRIbV{kc7T%xQ~`K>y#~!AXkVtQ0@VU)ZPHE&s2>F+yg=aveOr5E34i&W zDq+$|ud#C&B1lw)%O8hSJiu6Ye}YrVfTZvLmSoS9B_H1S<9OKxsNYl2kOqK|X&-}W z#iJxYxuKU!(7D&}8-^^oVXzvu2#*ufg}*#qP%L6ggp)l8`En{to_+b65&H1G6;hx+ z?mP$|=bY0T)`WRsv_|gi!7JSiojOcUSWYUuU^QBV%Pn-_Xk5ty0ky5$FYt?Ryn~`% ze>zqN!RuPTf@V&R*k4b)^?k_dQdSQbp8{9L>t|=R_Vjgk_?7v6?9MX7ahP*@q7hst zPy(QGaFyIxDC}#Z2CX<^ej|``&d(g&eFpr#n*lwHyLs;()5crd6uB50zcBOyvj>9I zhH;*u+w|tufWvIXI4 z`-igr`Z`OW*yr&W%}TW_(XrI$%%e%s7_Z1NktK#L8J6A6bG%WMFozaOEGC(gJ!h+& zlPRD`)Jcb!CUOA?M3S4et?n9?njJiSo{y>BNA8ptN8_h9)+FtAR#Zq{W zO(69F9xNYL8Ff>4*x20#a1joVr9~+t5shgsB*~w4e-8c>QN%x+ z?ADfDw#og9F~sXN#0#diamzE?=LFH?90L&WWRg^zCwyxn#%UIuG$@JqQaX=5g1N|m zIL!bpVnPD$65B^xgI8rjfQmYrp(GeW07t_*+89vy@*J; zEQPkqMP)X0n#X))ks5E{@?;ju%QuiWX@j&0m5JZ2>pgU2YirO4t!$T^Ke4stEC9I#9pNP~xE3Gs&68anL0BhD3vq z0(t79mqV78ArAZ1>KBb@v>Rf2GXMP9hn&QO#p0&dI9R;z01E=TqVl%_#DKFoVdwrC zN3jPL8=gf<>bk4U`4!u8T1x5|1q*iOO^J3#=*pw~dq{o!xGjCc<0I~IJ2sQfy?wJ^d(i(Pi>qchT?Sum&7$Xj)!sMVV0lTA7xOcoR zFeRmSCOxMq2dy=!w}78soEhqbjrG3xV!8{dpu-m=kJik8MnEo`REjIl$22=9A_-a@ zYLd7yukK{QE?P#Gm^1TQ7QUesmL;Uk39Meb$+#(X-sx{b!SBPOdLdjKEBAR$=DH3U zpW&ev;)Lai6y!hV4M43Dnfyd?I-~Jry0g`_STI}TLqv9aO!CVwO4PxdCRf`qBg1vyi zN64n7%Bv@)ur4&GOGEc?tFbUh^x%Z#*H5v!G3}M&_^mRhGb8XPENW>au|ryNDE<+0M=dr4VJzNABkR(^m~}PSr-sTv%wXAyi$2Q!SH-7M@Hmx|y z=#qpBk)O0#@u3~H5=k`60MQIVtFow6L!Ndm9xpY(m5iGB=OmL2EpqDT00vy1G7x+5 z2#eFuM_9$>5YU!nIZka>pfOgE@a)nlWHb9kt1cmd&1ps*O^_LTF|$r_DzI5a;T*G3 zVnEgH^L_SN7KtJz5|`;N8`_;$Qw^O2{ihuXl`G09mrnbb`ERz0?ahVZe-^tw?4GLLSl9SqG}@kVofQMY^| zd-#1M527r)Ub-c~)a184%mH~D4A5$G!wH0svrPOoQ~f5`m5~c+N7Wx)g_O^%mGQK1 zFK})I#lBl3#WZ_=4E&^3wyeY1&lQrCb+QD2w8mxhS(sLordyAZL-eeDp>EIt|1`1x zExmoLDf5_++PlGWwZ`^)5Ok6Q4L|bo?pz{`ucQvHs@r|&;tsb>js0@M161{N=?mTz zh~F5A7ngFq63yqM9Tn7M+@nAq0?}M(S$hBDN#|H=IyfbaJIXIir%n`v++cnuuI5M9 z!&=X8fiOOG`dYQE+k=$3VCm?tNGv}#zsy~IG^7LokUWF@O#rH*liV3xwDsP-2l-*INvio z0YHlIKv-;QmNM1#$TqlO9cgaNWD}u3ZAnT-CqQMOk$^`oW2~@iiN|d1^CmOYg{jcI z85)6O@OXeUhaRR;TG0$wbt7*#a?8vZFJ87Yko`0E!} zwYVC4(skVaxfN@!>c`}cl>fF-w!?1kv3+Y~VD`kF;CM@ibi-Pi>>B@?S|R^>XvRJwkW7hb_P zgvUT>-~K^Og3HQ=>=%|vTBB9X$@=L(P<-20rEdJln1GPUgc%OHzUGU^=}JtuY4TZ^ zHec^ywcJmyIvZr^2f$M>Z*E(5k~Xp{%+U%F%S95b)2Mw^9w;nNJsIbywe*~E;BC+w z7Ng(?j8VC=nL3R29(u`65I2`1qY9f`T^KuDW=82;KJj*ZpOg@i@b%)R?lRP z5h&x9swB-+;2a$8f;|fw12|cnS=qCAbY8$4>5-q7n)>9NTP9UAE!bIER%BfAh$C&C z_NI+sm@fPB7#Vb#8HY0XhzbwjAwwja-%GSTm5~YzKKK#?Xw$KUg8pV<%0NoB0l__$ zkMUI;lbq24-n$R~k2}?;f3c8+YQ%eeW?SKw9=2I)gv6M2rM1jv(_KrT?eH{pVv!%X zYx&_$mKee_B|8dQD=8L14BD!jH!4h}nasw85EviaYdWF{Y=p};$Di}Tt_2GXC z^+z*Si0wF4*QP;{`Q7%Mw-Vky=eX{r&p9VOHr@EGQye|}EdZ%^Wdv|ytD--|t6l?= zDX(7?V+XDaUB39e^6L)QR9ExzV8CPQoQ%IE+p0V?^j|wjw(s2A*EzcR9XF`DKVRhn z>3j7n+DhmI{+a-g`MmN<3)D?jMpa*2&NUR=0R*kV!IeY}36w7tNj-7tlLuhhPye1U zo-1U>JuOC&4W7N8#Qy)TZZy#M`m`vTp* zQ#KHA4_Jm3@q8T;LQ&;;T6z>bm^G|)Ae@J`N-bw)ofvAZ4~?1Wj+Ty!CDfK7{KqAr z;jlYG?ju8%S13K6!25j1W*|?LIF(R5EXn!d3_}T0sju1?{*m-1I4rsSr}ma%iEgxi zm~^|4S7Ml|i6UFVvgp=cfI6kR-aRBYrc-+>3E%(WD$|kcizPf(2LT(5LyOPv;?|=s zTe3_N!0iD?;2+q#?=ZA8y38_Cy2s4rCkB`ER~JGt$&QtpTE7+khSt5tbc9@cuRsib zweAk6k`JmInKiSr^0_kvCl&6~O5(zvtkv00<`1|=xX+EmwJfUguB5R|c|0{vn~eGo zfzSxE6pvKumSg6c?~+8vT#BzXT^b!{tIlAMS53=ZTYHx=-Zg< z_rjX@&}cI;PwiUY*kc!}H3(Qt%+=Cz2!&_FG6!i%gs$u_2eIz=nd-e|>(FVE+AZ*O zi%#R3xG&%IFB`+2%*MX#bM*&+!azR0U}o|+r~9P-O~*JPtpMHH?q5M4cCfi3>Ql|; z%K-o+QLnww!@q$k=gg|1O@~^id#TZ_umVrv8hi!7hn?9yZtCduCVI^%rc^yT`=Xh1 z^|AZ`oUJka+=N%AuI4{yb7&R*((W< z{$R!4oZRc#>`wLYE8$7dKNnV3YN~<{|h z8GI^Ne8aM@$Fho2(CJ|; zlU|;k$BdgoXvAnnam6%>iuLxlf8-qZI%3vjwflCPn+WsWYus(Q-3BIAMUWfqYH#T~ zDm$NsVs4wVHc~05>xJvr?bqr2)n#vOcSUa%VXUIyss>o-NC(?J;=#h8QFR^yR%hx+ zYeTyWd}V=+f#av<@5|$9&}c+mf>M|dW+JE5Ab<)+Q{BzzT|23)&c0-No!YcgR(9Tz zJ?^P^I%bYxnMeNVQ`V)wBWoFTpK!H%zikW$zGvs|9PZj#v9lhqYxgdr|Ff~f$xTsO zpJ#w9yPUggo^^HBtT;y37VAG8^9DEMpsETJ@Y?QR3pY>q5d~=@C3h^J_FCoZ{iTVgL!srT)?F^ck}%kEyj9P1e36vL+k1orL|9Q z2!>U)%jhEV`H0Bwh(!I9$T@v>(%dGVY$)FJXs%y_yUAr|_Ex9bmAL~i(ydB*fvZ&s z9=8>)M#{XP`zJm@XLt8z5pA2{MOKkr6j7zq+|H4$2F74&kae?ms=95HfLT-{DBt>} zo?*121VJzxzRi=rQ6eYBtmSZi9pU+d5G6vkgLB5OtJ=# z0XBB@ne{u%kW_3R5pCDIH{RbeRz&@J4mm*LF*IihAUMw(G%~|4Y2$#0{Ic+-+;x05 zZAcW@#E%tJ2IUQ>dPlUw`JF(uiVzM?i`yBa=Wx`_hxtYh)O)KJMMht|b&|&R-tYfr z^>e4^7<%}zg>T^g&u0zH?0-3!{-@a3No~8t^(N#mpAYoR^S`uBbqemCKfa{{>~%*Q zMZ6N$V=_X%D>(5W6d$xwkURsE<8F6%-~=LZ>ZTIHGe%03sLerv>8^mTmVo0!uj)e+ zt6gg^Pk4t^kT31N`7s7rJBphIs(@5@OXHBOKej0PdOeB~Lg~T!GN8qkE;K~+tiUfV zRGcET@x4BX(0uLhSNXN?A~RJY#Ui^3?Q(R55kaj19hGVjD!a14)rS23w?|jt2X#n^ zR63NWzI8}7g@npvn&&FISmGAPb$qdVR5G$=FXH6MpW};&qX<0T<~I(_EEz+y>1uOh zg&x!iawpBB9Z2qXnt>wA^WFR;u5R5JHzKprY*-Z)3w^^UbnCQ95Fd$^renDOSox-8 zXfy)CDUNTItIE-}P=G{fCA8o`VYi{9u6!|1b~>f)XEE#yZEEAq%z9oS=|IT_-u-nf zA_nua7Bx0|vq(o{3_4S2t#BO@^tW*(WLx%c1yljl1%K{!b=G9WyaBSbHyefh<04hE zYHBG;WL~=)#GwarmfSZZOOP)1q+RK9w~#p6FlvC^j|JxGQ#75Al7tK>_a#kE#&Hs! zb+=v!Z3VyCxw+jV^(}3$XTPpyk~ex1oG#>b98-GRqGaI$np(TOZ3eTpkj5F$GEJzF z?i_*dEpX9taEee8dIm1+JW=S@cJX-)qFC7#g@O(hDzbZ`Vpow=?2UO+>yk-o3W>2T&|V9_3fF|h<|S(%?eVFR0syRM@(gS z@R{Pqn98NUCMCbZ(Zr8H&50y)nWdner09{nG4g971aW#yh+Jxi(Vq>RTaCR`qyTj2 zD!8<=#xi@>8pfx@wvL^6ChC(^Dx}UK+~`AOUV?#|o&X};VA-rnwNm*!irF3bR!L_v zoSnTLy?+}Pbb^CK4Gj2os3yB`FW2pvr|(d*N-;lC8mMRC4i*TEdi(OOYuh5A;m07? z4wdBRjY`_VBY(DIb-|&Kg?*Q-vl`)|1Vj~=J>&*@oz2>rjjT`wDaFbCr09;O;qf>B zh?U4{u#Wvg5K_F@51iE;3Ctd`PAtu=4Ct|}X()6R8Pe8DQQv*40cV+&dYSRaO{8-s zIbaz#<4v11;z1LU+u}U2x&-I`iKz}-$~L}!_of!Y2hVb}mh*9hTy1;X;b>Kw#d#|+ z1x6$Y2y!r2f;uGEJCF*p9)|^7*I4K-^|qbMEvy}z1cZKH)+3*n>6`TLCxflmI=I%j ztPa2qSriZnuj>{b+|saKY^|+8f0Rb@CwtppW{9heCOfAZ1#2_EB{kS)YxOp9ibXR& z=Mr-&!JpO?HaCs5;$bgI^9WDanBD+s%%(%*rOBxkwH4HDcN{yq3!H0tiM@mae zLz->cw-bk+qa=n??(W z|1ZYQAxf|&NTa1L+qP}nwr$(4F59+k+qP}n_VjjU^UwP2@k`(h!^=v zok73!SvT1~4vPPj2S;3Fc#5CE3SO9@C%k>R-}9pRtwX=;H(GA8%`qJd=jMLK50a_j zn&3`Z=C-Dk28-}`7Fs01TKof37S1k#v=j!4{hSP-yXy~a7PdP=>~N8>tUdf(%uZ{4 zNEN61XCe-p_O%dtP8k0(3Ibs7Yn4A(yPy9=e}P_Q-*yLy{VuY>2sNV$XhnNKeZdwq zis@1_oksQy@ORd5>0^l%buN=72%CR0OWx{px4k*BBqc*4>8J{JxWV0zMm3Qc%Tt_A zW3Ya@LfHon02EWP#Hp%-8=m*Y`yEK*YgH$g4C~d+V zoViBWh|BGaYz9Z)v+3xks|jB#k!jB{@AU;>%tCAhiW?+wKQtd?c-sfLs9-y>1cD*) z#&gka&A>t*e_TcYevQ3>`xcVYPA>kc=d3#B0ABrpt8{1XaHN{d!a@?p&~=44{8$-q zYr@gxY=czskUeC~ZQ&B1=XC=vm^q5DyxN`9Xg5#-EIo)AK)2pdlw;;2`$%qRq7NA@ z>!;~G)VbY9LcQ5;T_iPZTY?D6EzICQ`i6(EWZ;?ATWpIxUKS%P6_3jZb&dsEaM*!@ zR7IjevThtLI4p_Q{Yy)G#!_MrUOfpKHT#ZLFL25042G&u!)SYePs4+<<+>Jb3S@)Q ztEgEeuCU*9cmXgM9SlF_i3;O?b=Q(j31mqsZs)2S6UXK9D_Vo(K1h0AN<~T08ay!Rv%L1smv*`kZqOQ6}ytjvTVj1 z)uA^cz8{QZc63^xnD^ac-%q}J)1OYb^twS$rS_MzCiF~(TfVh6X4R&&_*(DV-G1RN zSX!e#&zkBPQbVll5v+k@1`s_-`=*Dv_6DT%V`1ZYdic+Gdj@rpj_PAL_4cDs#u)A0 zj<5k6a}v#U#arO3$wDwulp|Ia=}=7TVD){@z!edDN6@C0JcDYIlv`;$yZUZuYD(SI zOnRY%ci*G_drk@ocUC{oK!n?VZ{Z9XQ(M8rxl&CK z09g8bo;9rc?H_NGZ^W8hfHh_&8~qECh$?$rS3QWylS{zGu-?UHq^4Y87MOYHWCJ#? z_oc}%P}{>`p|sSQ7pr{Kl-h*9eN@MfS)>Ruz1S%OHEWQz^ZC(@U7JMN z*57}-+Zcrm)5K^J<0GJDJ>x6h7Fo*zcKJJ?xvYvh7NEIhMptaG@VbI0{IZG#%EWyv zuR_`_b@79C_q=NQeX(_1wjXu-q=LAwcwtW)p0CIk=N;1dCtESKXfc~Jbb`x@^?Hp!<5 zy*c?1C(fB5=1bgrczhJJlQgMPTzi@_16n$Jwx~TXN78M1)m3$oq>J)r+)*aELdB)f z)WX?Ouy;9PBI`n4|~;Bg?xqbNg2a@!^6}f z10#ccVsd0k9Lrnz>E=2!@)eJcd^K3I&^%p+&ulf~se z#$>E)Q=L^@kIkc|B538?9LE8K?{JWiiH|(omDJDDp}QrSbrpLI#w6^lWnqP`ypyD- z3BP1%W4Z3|Fg@`%0zrW}i+YI|`A(VX=k5QvfaF7wc)p zOdOJf{V)C4ZF@X>dFlsNF@fD~rGqb*Vn$`U#)u^GkQxo@e)TQ(1(3)FMO~euwV>74 z>XP(RYVO`hWe*(WY{C@S4%^ zmMg;>!+PdfOGc6&3iKJ2M&bba^2I=B9A>s9g``$xRi+v`4YmgVv`K(~zqim!p)g}= z`L4`kmJEPCv{cELTy6Ch_$`2gKBuC)SVCbi-cev>?7rx>JR&?bHGCh;2-J+groHi$ zrf8#AXXeaBbTcEw`+pcdjirUUmbTGYk5%;!0@csY*Rz`l<6_s3CR35Q(v2`lt!qbB zEEdkS(HbSwrOdU%O=Z>Bn^ZQ{y;P1S)fDP*^9=jEH$cF`vWpFEfXMuM6n@Cv`@-9_JOV6$ zIq*h3z>Zk$KWz-Y3To>^u9(yQL#W4ei6k;X1cISW3a-z&_%t!xldB}1b(pXkp~`0a zuNG%Zae=wQW_1Ux>-l*L(dF=Q6>G{=)57q`%`Ti-y>YRjX?(X|?=8-gJI_$a;vBuk zSNSoyI`SsSsgywN=ozEQOdAK6&oY6UA04E|{%%yhP(PNY>d^Endz0@SS(K!7>ytu@ z6sFToGoZnyR!_N-QVIWAH$SGW#eFOlZ}K>po&@R|cc3pTrcjL`hp4mGSRLlLdhtcn>v@ z;4{_aiH^k#yhr6Y_Tc|5whsZ@nDcQXGav7bg=xcdE+{{pklze zTc0;k*4VurZ};##(cRFNQ1_rm$yT$_df&5NOW1+-g7)dNP?5X`ZIcS!Sp<2=8<|JTxcf{Fi99x!&;!Q5RV1 z9eo_*;q@oz;`Km`Il*bwSqHpzqFqNlc)Y87(GWE0)uc6;8oUC#lkVAH2@|L;q5mBMAZiBio28KYyK_0!n>eq_)vG1Y-eTkFvuwvm^_DjIM2EG3alGP!d`C|U^t4G1Os#qZpWl{yabWO!(;J2$!?eL@X z7=2eKz`9V60qrQeuF#Wwj@1quO!&a@F8SPAjai{nfe0e>^MJF$Wqfnl?bVCF~6F(fj|DsMs|6od#|9u58F)%i9v@x*%kK;dB z`5$hN9-3#gH(-ncu)>(ibz=@tN6mRKLT4j8KwsX36V)&>gqUkO;_FqR0e7+664)G+(mm_$R|7Yd_UiV%D?rV;|4=rwaZ|z{DedexXpu1Fh-O~3%g0{r(Ym-JLML+i%IE{z z=G^Ihnsj61{Z|y`yL-?o=B>+$*)(ZVrE+9dUr(2$;E7@v_K~@}I}TG2)U2A5^XR@8 zShRelOeewk`xHn5s2d@8zE0M80(=E)Hlg2mU8N?uJeq9I63I>l>B$B!X4%n_8= zv$i8Zk;eOX3{gp4Q=3jKAzwWha2uB-rSrld-4VjOX2D}HjZI(K^x}p@N5^>qvw|eu zW3lMXapsZ%i$eRq@9+0hjjX>9G)0d>3E&ou(F;{ zJ?%ukFUDkn4QcrzT;yA>J5)Q4&L>`0lfMEdD%|Pj>YBrcCsVX_%IwO`%f7qm7-o{2 z0t_*BJevU-k5IloNM=*oG4s(W*>#)Ov>V(YxH8H;FxZfO1BUuKqpNsrxh#)+PCryt z?3UBcwxEX)(`qvG^IG3Af$A)L;jH;`r3#}6H*-xOK=z*%?quTVYU21GdKDMO%-KSn9}591Li50eu4R+oMb=R_!Xb!21%pGeavlJN)bWeV((PoeUy-QTA#m z!L_}(y|`QI=B9>&_GpqWZI-;@*Zo@9k#6ClT2|PRfl>^yq>w@BYpq-!O?&Ht{p9Ml zY*whkps-BMFoEoXVS$2DulnSoxpm37T8~MmQnnK<>nhzW&62l3yucx#+E}NkkXBi* znpiMnlzjA5sERimD@P|*YMD^Pc?NiNvN&D}tg>t(`zhm&kSMU3B%(vot{Ry>qk>rK zDP9CXnp7*SAS>_Dq1-q}Z(ct5=7V9n;eKbJO!CSp|2<3{ZVIAO%1|gF0|*)Ek!(EP z8(!$45jDuLUkS-VmY`%4HR1g4Z_FM(dD27WO0^sVgm`=iU=rx;?A#|Farqx^%1we7 zrGU*r2oX6znXf8>I{Yv3cqQIT`p5QRp@Pt;9q<8*Y6;{dq*Dvl8cM42Pn2vfo>vgU6gWkp)?~7 zwhX0CPwgXkK=|Jo;eNudMIw1tpisO>!yP<;P!y&&WsiELDHTQn#J(-XWS1Nyp8>T$ z2R|y8noK$W5D5`vK$q#z1o$WdjJPSlDi%r#jPO=blqR4NH6$q5 z(Ldub2(C*DL$1^#CG_5ij-)pfi~)e>nn@8dDc#kEq!hHM1OVbiOgsUdSU8~|42t?@ zl%XQv*x1xMy}T=iu&X6q#1l;a29sW#2(!TAuP)zIRh$5?m2vu=uP+45QN{xjlYS-T zHG?mC31*^2=DTBt@f3B-v@stD3xCBCodLpT#V0oyP6J0<3QlOm(=Iv$wJS^(_)2I+ zMOuow#zh(dpaOv){=ig-_QEU^64;3Y!G)`~_$b9^d^eKH*2jn&I{~g2fyIc|b?#o0 ztap)9E#KPM#9m4$S|1K3#30~l#`@cJP>-JKZ5^GP=3(UC~`jJk(YMD zb=vNJZ)31;-@thC2pXmhb6g{deuUr?(0{s>z35h|9Z-s9ppJG|ODJMKKwm{mH~z?9 zyP;8XLNhsCq#bc3CIzCz2(NFS&80Zgchgk-9hWtOFTzHXgMoc)TEH z0B0jMia-jLjA3kBiu`dMf>OS!Uc*(FPve4?Yi@WD71>9d^G|#V2!9!c;UQX5x zJu%|M-!=tS<84s?3J@8y4T2pYMBN8>z#4A|gQ;yKhggXSMhxbl2s$CcH#R7)jUXh! zo~r`L?R{whp9jn|@dLmslfph;6%&bVnFv+@3%wWymDa;M_Mq2=7i=M)Ggh1Pcr846 zo2+fRb0}lI7zS`(^CH(=-t@$N!5t14Qf(|~BPz9(!;pOi{(hj~6O}ah4SIVyPfw9o zdm!}vm|*6E_GVT?Mkt8PnC~(y*IqL2lOM=Bi1H14$^u5?pTaDX`x~CrIvM9pO!Ed7 z3@29x3`wMkKT7PwOR*tYb}XJ1Nwu5GE@@k(In%7gf2u8pA{+8|%sm4?MNwBd-2cdh zwWK%+NsuGJ1#ZijJ!D=Skv|`C9xa~8xKT|UmxG|bMUXdh1`s~g6Vp*w_~&J}gPNQc z9PmLsip`(K*x0t4CRaW|WL81WFyf-2h-C%>zh5XrsDEtAB}p2wdjNS*6ee%k8!ON` ztV$sY8+uw0o?~?YHLyV}aZU2K@=>vr0Q*n+9@BuAqOnnGQ-y`3LJ~M$1!?8O8|rwL zoVxDd^psZa7={E=-}qxZ>A7NlIt?Gi z6Ek%wy}*n<4PY4~ril)*MTELdA_k@6l1~~b!;h8|5YNi8;ANKoKg!CXv-xdlB*D2r z(n?694;6|zlGu&NKsuxm=7!NfEG~l52o_YUj;Xh7t+RxrhYD(=v2+h9uk1;XukxZ9 zlW>jHN|8oK^!<{yOnAb*rHMO70&(P@8^2@xu(;C~LnX9?83`=yD4Sp&D%2$UM0}F= z3GJ!9s!ECGBWQH#sY}H0 zeE$)zCIlhgVrynHmvPAz^Z8Q`&7k{EPsaJs@4Msj3M%j^R^KS zN6E;#P{!m)*$RtoA#waC=MoN0$Q@oC8jySBY4PKFXCJ0aP!~TD&H%6qyCtgdAz(LF z_9H8tZNGh_{U$U0Oc3Pa@zJzBjp?^#0!sw(0}_b&$GIe`=dB5zqLt6u+(MP2@7901 ziKj}>Z<-0?W4&TZt@~|Z$?HYO*r~+Ub80UsIA0!RjfBO-mHS?If!<$7@T%)r-0oLi z4V(9Qfp6q=E5K(9#nlwXcAa@1frvkK<8%ZW#ETtEtj~oJTg)vwv+YSD1#`$xtYX4S zafzoGt=s5epEf@y38;*4t@bX3(96s;05O825%2!smVeM44~Har zU`=L4leF8}Wt2igvkZmkvnXF%@0UZxP@cvrF=D~+cf(&rb_w06Ea0$3mq@H{PkRt7 zLG3)o-DqgN;Gd}M)tTDf*%5cXbh!8)PgE>{-T^_#vk6_!`@piL`!-u31SU&PMI}af zg7KLvxydK0WmuYEPywNxsH8Ti%G=5@D;&@hOJm}D8Zsvljn0Zd4xZkQ2G6gb&(2;Z z-={-23m50FcYbDD%|_8$3*p2*?R+7HD@qP1StxWMg`xr^4o+V(*}?xP-dIHfoYF%` z5X0-Vxud!I`d`YPNw@VKxqmjT;nS%CuVkPAy&Je43dvsIeHI2wL)*{+e2+m>#}!X# z?cnBfC%CBogWRBG3Em`@JopCaKh!D<`_gsy!n-aayK?PgpGqr#V3b_={o>X7d80$O z=cnO29dg5dYfD104af&P{RzhpeU7Py%Y2HzENC0kQ;l9tOa0)buxtpOR?m)2Q*_M< zw6*hcUXL40{m4ZQU{|>dxP6hAb>1V6{Y|9qy~Ku%e7cotQZOeID+RrvJ16yqIP+-o z5LGw_mW_^T>RA#=_zk3FahF66EP8yQ%HQ3@lbo=alSXmaur05?nI}80(#EXs$E8Il zO(ZsKBXnC9d0#-0cXro2&zizt&=F^&@^n;=x)apL)p4p>4J zYFeHo#o`%ul#g41V=Jhjq_826H1Q$58cs%y{HZ zyOQk_td(k3YwtKg)nCZ7pOe$UnVCS_AamU6KM=PN>5E@*78gGh)n&3l-X=oeI8nQf z=-w!_Z~ydXK#U+E>zZlTdFOO`tuC5>^y9%tB2zkWuFjtG$fKEytdtATq=APxkz|*9z`y-%3b)M=>onpyHon z&w&zwbBTSr#JS>|aWk(vThcGAc5IfIYBfp$EZ0W&630jYQIQZl2)1cEkstk+oo&ZG zCC%$j21>kS*MO1ot_4f$sR7fVP^Ga+BWV6)_0QbXeph4*;-lO{fv02j3nZGHHa#es zRr|=(PP?X2e$}YYT>u(iGYkE!6-OGqeqrYmXo6T6so5e*GR|vOTUpSTFT@+(Az1{?i zt#~jj1zGCH+|7iqviU-LN?7!UD5h>!;u%;&enjmDn|2fA>`exxuE^f*pk$v>X1KNO z_R5y`s{s#`$%$KA#&cG!NPWkSCTtnOwlwL2pfGjfl9VHVkEK{u&DM8$C*p|Y11xuM z-bTqo#agCs?BuiQC&EWEF-Nv6kV_KXJK5{niYNEl-p8}1DZg{NgPQzPkex9H-;m7x zjJlF>GIXKg$ah8KU%%{7cqnl_D);MW^3;^@8h&on6l*4&r)9EKN zcQoXD$1W=~As1%(={^?XL0b0-;3POA7JU?5r36 zx!Qk+RG-WOrl+~$*3ZLZ#Aj^ep7guPpul?@+el%c_FIY9RmERAx&(+d!5ZoDI;=3i zxx5Bg$7yG`e2&B-mIh|KSQ{6y#SdKAd(JE^_1Mo#tk$F-+N{+yuaxyiC`$G+`oP8M zdLh-lwqfFF*mdLsf$5nR;L2GU07veeBmu6D3sRNt*a;rA%k%D=)_0mm!nn_`{m$da z@&j=XP-mkBh}%z}fDu!%8~SpINvWCIubTIblTFNZ@Ktn?r=(MrCf175rDpqp!-ce` z!~fhq+F+#k`8-_?KTm?vy$>eoKEgj@Tuy%4ggPLBRQHmWqpgFMovcBmFfnb>IeFgy zxR0vfIw*CuY2nv*%TFhqPwnut*{HaUPU>`FqbUnXTx4|SdQ72Ra<8`4)kxDi^=9ei zcz-y4zF!=jogiOFHWWBYY3ith%3x;iZ2kKd4K#EJ@D@lP^Jx{rv3Dxi??mM;e8D_w zPOX{og~Hgv_pGN6gGD$Q3xucW53#z{6cycZwOGKwfC+O)u0L8)DG$B&W-iy1=QA+m za1#K`1oU-hWJt+HBGPGG$@gl)L9uyJERx&3H6as0Kdk_IB`Y~U0BJFc^Ew*nyELsZ z*{{Xj*dc;ZZCsPh+uDn(6QH)8tkTpG<^|z=^ow!TDPi&!`pQ|v3A%{v?w-`TZf4FC zP>Jpi`3D~@SBy;?auE$s=rE#5uBp)lCn$vxyInxEo+-YYy|QKcF?q$RN=BK~DD!P1 zEYPMY`_4I~uX=6_P-28O#C*+^8tP7Y!LE zU7%H=#7MJXet%F~0N2rB&-kESHZ2Q)rQEN?WtrV@lW4jP?dp+&pSRJrtZ$Ik4f;F2 z(*|TLb8l4Nu8(c$tRhPfH#_U+)r|3IbN>AP^zt!t7nmZDXW2em`FT=PPeoEslM2T~ z_DN3aVXK~Zb{ybG1&JGh|Gu~&N*_ylo6Sa3xd7_s%9dr7=+3qBQ);Y3IN!~^tfkdN zZOOt_9oz*z$?Bijm!Q((u>+Qdi>*STvET?E#ynAe{%@n6d^~#ag7PrCO~kwKi??hB zBMFme6K8M3-cgOX1_HdzThw#6Y$S&)RUC_Jag?%0H-*%)-G$P+ytxl2oE?omSiI~_ z^Cpz(RR#cK$`wk1&1;m2um~%ax)V+ zxEvVy-=6>Iikw+|Ho(gi{7T**Y# zDsHQ_4N7L-0*1|!K1(QirRF(#gj`vrduSGzax7qeldXHSmds>ARixk7s^=M<7+%|B zmM(ccervcDrAfBSMD5h@gH>TYSYRr<6Gn7YLvD)Jn>?{VDFVBf)~;f*U=v2jsaq); zO?t8`f34*yOVozSb&BHIFxoJJOP>K@jBawSPlEKn?J&wN9i?ajFSUQt-t>Jz- zCM+FFA9MWlWkTNJ~a`Wq~5#Go@$UcFDQe&DDydf1f5xNg4xNcs>mz|T3 zt39oUsb%6|d-UJE&3GG$C53Am`VsZBI{GzUI>Bf#dl;i%DSB=N@)M=K?LrB5g3HRl z(F3;RI3UUC!Noot^Iq3BeNyyF=79&OcW&3R1 zBq z{C(47^Q~GBb=}AxDvt##^Y?xj6Ig0q0lczY;-OD-1s&b&AGw={a;ZrQI=Q+#TQRmZ zaM6(SbA#bXHrEZMSf^oOWjoKvcwaO1ayvT)y^AjaJXUj3E8fL7 z^{{xa$7VcUQ_Mj3D8QPi&~-rgN1;WnvsVaLE|trDA64P9YK;RlhZs`n!??*^AwWMy z?Y<%N{Hx!l&_B$1;Dj^Zh1KVDr%SC2${e`{s9opCj>O=D&i1&a@7rm(XLA#H`QsPm zwR&5Ics(VzS}(p#jRlc}EUn-i6L2{as3LOnF9vk0Da_!Kj1&bGR<|UDMw`X&Yq$?C z0@(w>rjF0*QmAd!R8&;dX!zrr86GtZ`lYSziY**FV2D>WVt+zyQLp%L*N2dW4rVl< zDzEN=CsSd!3blG+^|Y8)Warn5$4#$gi*k;w@HR$+_eT`ALZMgCxnd8)^N1GYAWM) z8u+$SZ5^|ySSUt~t>S8=pd-)%X=-){ZND=will~#2o^AD*%aCE6X~tI6bjGKKmc>o zRlWWB;cojOj$ zTFp}`c~5HcL6V{e`v^kOZ5Sg4FgSsp@sV}XLKz7tO$S1h{!G%^{ziN-Yt{{G!1Vpr zWJqxZ6!p!zl5-oWNdiNX89>=YJf}8pr{J!kR0_8G6sD-vn#cKJaLd{^DubW47*hlr zAg+@2u27cdyBxU?Xp*CGBk!!PU)isoT42w^VtqZ(48EE%s&FO_gMQe;mfF32!mDTi zh;MexQz3(FxF2mMDo8|WKUJ9hrP9n@4HPPrtT_G2;e2rhP?r4C+1wsK%5xuEJ@?0` zs82n{Xa2J4Ti>}D+ZEYja&}yxQIK7M-DAv$ozRL)e*}g*S#eL6LQs{25IH4bCLBhg zAL;~&4UyM&IJ~>md9ubN0+mK#W00LFZ|2W=Ub7sB(4&0>Dd(*e1xBMvg{Z*H#C#P2 z1K+5>rOMHr%NNB?DypUCtzm%!o=1&$*Z1R}o$sbY3Ra~TCd7)<;lx6--C!ZleHJ&j zs~Y1$54m3bGD`cX+C!ukzN_DA~k}nPl8HacG&p5Q3;0Dlc!Yc0O(erqGKm zQRDZrWV=L=sYamt=q|r2RWxSOl5ir^RZZ`Yk)^YGT}oZp^sU}*68o_U3*HjPiX7W> zwRyF5t|erFA5;y~DQmdGT2BJcR@jdVSX<)>QG7u4vGe9!yOKGrPZ&aPnclX~Kjo?Z zxW1!oEqG{%csG@Pv=Tj}`||K~J0_EZNBhP{%_ZXLq18xD%@Fq)6NhiJtO#2b)i8If zR?J_^Bo#nfZZxJg@U0!a7 zs9Nc$@1}yt6pPc|u5LUS-|up8H{SvUS)qQCvFLI2^YZK&M@H|3u1AS*!IxsT3kh6- z`Vf_xI(z2iGx!#Vh{j6D6X>NWT7Z=VzO-6VwkUUG08 z(C#QE+F~xI{V?fY6Mr;#!p|au8-+!IcdsGZ-K_(=?tSv|nlG;%s}*D;vgiNJ#QHkn z`R@<~+kgIfQJ+UaDGmFhuSA#TWYX7=NyrZ9xwxi(_0T5jm3{UhWheu+4l7G*6k4|u zq&&sA(3@xE|lI94$1_?ql-aY`W@>tO-yn~ z0WA()*^ufW`FGu#h}W!CxMp^OSY|P7A-MBC_x)ojda?3Yqx_bY z=C1H&{F|n2g}X9N_2p!4$<{fl0ilaIKp zBXGRHv!FKjh=f$)ktklR6?m6gx0zCXJuYIS<`QC?{9Q>22(Fx`na|j*#q<0#AQK%Z7&)*wng@M*?nIK0)Oybq$FKZKf&pH8jX zelce-XIxgbdFHj=EEd{&KD1AXnn2M-`xKOQtUL#T)Q{FY841Yj(;VKS@fhN;t{IFN zuh@?NS<{~`dA=h{Xv-O4Nbb~8gN$W`pdZxog$Z?YNR*hi;W}wR?LU8O5~-s3 z1|-4~Iu3Pv`Zf8ARMsM- zA#GOGeej!eSbXF5#pNRl0)RxS!I1`?1VaK)&n=r3w>|~g7e&cFGERaV#~%w<8F_Ij z+^6+%F`3W%`8LO6gA`JM-nOxci&v10#muj96%?BDep@D94S5lRCJw_^!}UPBbXc-xlc1gnIPT4wc&iX$*{~gb6CrB*NLgy~?L25bqy9Hvg8&JQ^im(rfuQBi$4;k>fJ9QscTjevpIhx9rCvCjsR_baR_XT?L) z=ClG$X(mKyhw%7m#qO;xZJZ`m=2{K$*NGKfY)s(XpN&#-wU+NjbVMf85sINy#kSr4 zMFt0WP_rbmcT|Vo$i_F?zTxDQhiZ9irOwh@m3bRG@|f3P3sn$tk0CzuIT&AWANi`O zT^Lhg6x3CY@h#H{J9)PX-9SdqOeqcQ>OO9YRVL^#S~n3|kAfl5=fX@iLYRevtw8intrAtkm#!S?)8H-yg?`qyb(u@30| z^F^y)a^x#h@_-*R+Dl7Xk$k=pX6+rgyP6aV6li?UzlazBeljuU6wmn*qzoikbl)h4 zMS%);#mNcp{*f=JYii-JgI6BaFqR!`uc1HtJ1!YxiRg^O4ug2TQfcU(@`-g5KOF5& ze#Yv!MlA;ds_63s+x%k%1?CSa>xp>G4RLwGU!jPXq?2sK6rv~oeJfQ+cG`SgZ3trc zd1Nl4nH1ZqEa6T2V`$oCK);{$q|!TzL<}a#XeaiOBL;DBH-P59mT<^avS|oQc)AW+ zf|!TJoxx$=%`7s2B5qXq!OBC~4$q8TAiqbWpP#n=n_asKfzXko4=Wqm+W`2UiWJH7 zm3$J7P1l-qY##~Ak6?1MP$6#*FI@-32?JVp(hT<~rtXfaX zGYGHS%$&ZMJI_TFB)K;_3F<)Pd$q}2cE~ zRRGsb6Ju=4xN-HZy)}alCVtEJx7d9B2vyPh{IBcs%6A_`v}Su*}{}H`w)zP^Qbk zK-DD~Lxo4M81~@{^~+@>yB^XZ!Z&xxwwa#QG!@57VL=|c;62OLi649?UDcpSfi&um}8Td?wH z$brqw6KHX8s)EWwP|P4;)nGeV_q!Wxo~+I97JEDZ##irWs$?dDPT!!?68PIkQ~N$2 zfTto80FOb>^ITPiDz_#kV5O~mf?8H#=tsM$pgA4te7DTkWZBVwAu4Fg743Fg+HLl8 zi7GkJFnpA5WPDfn&@6v}J^QNkU{^P5HlJ{SuUWDe8eaBj*v6n$>34DX>S>9`8;5+F z>TV1x>lmkw@KJYkzXj%tG&+g+@oAlU@Ixh}WH$yzJbA*pe}-Kr9D`EqSXDTZ(OTP> z=Blk`V)(;tej6QScQ)k`Q#vn^{gF05C!v0neZLxNx*OL4E8PsY3t6-R8>iNLDzLkb z6nw9AgF};gfwD7e1c}0LXOUd`Yl})k_eNKtXG_RaLOS~P z&}cB)5b|j#EmP{iEwbIiOalD-2A|7M(9 zcOy(uE5C!|UdJY!jfSTy*fa+GN`wKEONMk~i39HYFG1>Z$gbJ7TmsjYsrnyhHk;A zZkMuF9`SsIU-`^rn*tB_PyzQk1n2mb>;}ev{%vv`_Kt&;_0oid$n-6qqF%uY^9>}Q zHlO>@SXUqc-B7)+0rjwf51)YOy@#70n_e=}NKX}l*TXkNfzvP55Kb0IEU@f@)yOr7 zN2dMIk^!ecDf+-jHqWlHnW@TYU+^JMNV!sA0_;9$d{r_U;;~^q29Kzi-llH%aNRm{ zMw|;y$$avn+|XOUb$|1E?UFVO-avg}xhxAs0lH(A_tDGSI5A>AOpYRhnC(7N)-3R=Bjy#8~mJ zr%a^1fWBi4xq*bWZK{lfh2nI;4VJJbYHSQ@%bZb;)H)(SEq|J3h_zak)47?t_ZrpY z2lGOOP&kQ#%X1uf=kDChDfoh5b7L&*sYR(R?wx1!$}PEf%&L}Br{I} zFm}bXc-Zs^C=)3oGO`xHw=;4rS2-GezLB;{59xKwAN`P z%6nu_&bjL2?DzPAz1UxPW3KJs#0u>KLi5CDSkCLHM2U%c5LCK%*GXJ0`h%27UU!UC z){*p^a_j#XjQin%tD6{Zi5_Fj{=-L;_kYU|^1&##VG-RTGBE-~%Y%>*{Umb<52dC8 zH+YX)?SE5EZt%_|(lx#rCDxg;3+$FPU$nh$1@HNX2{G*A^@BzRnLs}C=Wvp>UZuNu zmqYKo@44^Uxcqwq5vC|;Z=jzXn)JYIO?L7a&g_r)ixy&B>0gb|kdNW0e3ikvwk2p)V~t_!GJ z-?t0FUVA!2;Ym7A246jY`M4t8fbbKBMhVKp0&XP=lg7qo@0m2g{V!D{cZJc3yCI|!xT8Gj7HL(7#{|lt^X5ZzXVFV9AOLGEo$QX9fgig0-}V2 zplOwuBbCO0-mT|YI0Eua)-tssP)VU4nLq9b^`qHea*>2ljbCP&|=j&(LxmUxU`Wpmw`at@;eWJ*k;!jWKX{(DpP{ee^fbfV`(ImET4TS{jsoN)Vp%alpx>3bECiyNRcc%m{Yk|AN4AJXdF>G0_TKJxAYl z@adgf0#^(I$9>i&kYf}uynr8}`FY=xj)XawIIlxj#N)?hIWbdbw4U?hkAP+$RW*K> zvPvnPld`Ad+gh>!DF^z8-6~>X*0&yW7lEf1eZ-8 zD-MFW<%E>0Qg`Z8eRKQ;iQF|g#s10JcL-A$`35!xMJ_ho96!&)oo=JI2N~F$2V=Eb z(+@KAbwIN%{e6FAroJ-?L=i$}>$ ztp5*T=ddk`7G%q9+qP}nwr$(CZJlk~wr$(Cjd$OuUUljNRzGvioDo?l-Fu?mgd%(r zZ>yjyj`x5)*1q}8Ry%*)TgS-+C6r@vE^7$h$M^D8E1UINwf4ooPkAuuRmrAmNQK(B zN-HShnyQM1J%W~cSOIQU=*x5%O#+TVr%zbH=X^20;-CI@5==8^SwfGGAN7gNX8mu1 z7GF{Ncma~#e=fl0Nel=&y2iM9@|eC6B_Xx`r9ECt_O_G#jyFC%Hdkx3(c#A*Y$!!? zkWb-};8Xo<4@zsDQ2?irqINr$L<}qQ@Y;Rd0}@|eOY&tuh_$sZOW3diSUQDtN5C9@ z69g!^iIuhtX(5UEOesKudu`}Ent`8_l@tndP^9lVN?3#MLoK;;LSigeRMQew2{sO< z?W=4$4i0Vm5&|G3Vds$B%^>ri~p5~lH>e<1aV}xqqp3yD`qR&o<0F%MTyLfmC zfy~KfB=OCVR6@1+Nbna-^q52$d~c*hk#UwXwTm7PV(`3@w|^IUPT}}|H*ocZ(}~_F zmYlI3tzOdNo3oK@i17mvQNioswK$NTR4Hhde}_LnJNCC+;iAjMGY11mUbkjTu0*%Z z`g?jP;=8F)8Lw;AA_W~ARTIrLZS!RhFTH)$$J?vONuyc7#`as_Fhm#oQ;PUT^x z3z}PdWf6KMCY1ozKx-rB!zTzhcF62Elx!`N&AC|>hC;)PhGC-cYYi%>Vd>?F?`;xgMauT!cty`r2v5BR2hv@S!CH4~t#U z!9N3^A;B2FDM8Q!I8}~M^plQH4sjs)h6fORkr#D^=_7pId>b}t?yOW%R=-<_rG5Nl z&YBIy1rGF{l0Hhm#gRPbOwdD#v=>3P<;(S0&q6+_fHg*3a?gRXU9twoXxEK*3g)Ld zsm;0b%&pt*ha;=)et=*5)gKqVlKq-Hd)#SDwUqd|w%$HE%8H|m8&H>e4^zhHgp+Dw zhac_UEnBxY$f>s`bbUun?Xs{TMeS^e)sMTd!P={sLgv0?cLv#2Kb3d(t_ANe)N!%J zh{ORVvaPm@IFNO^y@gK{RfM%u$r2^>ck^yW9|7?raR>3XxwJ(=3@3iFSJp`RV zT5z$;32O3S1S^mdnVuJOa7u$})|p$P_=r~hSDIXtUT@DuZwHHx(>7@zX;W28r}l5W zIyB=vEcK#VReX1lh26=&EQsoA0I&+>Fhq>kJH5bf^!&zC25tT2>=@!VJZ!$4|Jyt~ z-fOaMV&M-eJ2C~oY}t=0J3e+MywR|3@fl#2bwYS zb4)vM7}cBGKj@J>z~-VK(t;3n+cFxF8CZy1u{81_>zd<(0k;s^Ybuz6=6x|d&U)zI zz&g95P-!O=_BFtdDx-!{T}R;6(bV6_s;(N%e4Q$57(uL8Jx!5nEjbxw24pF_b&wxl zGQw)L5*wPW6B57F%OTuR&r(I1WrCDF!~T1ZOqIlzFTQC5~hCN{Ep`TMpBr^yD_iHUh>02$R=4$V^ym~aap6Hn9 zZ752-O$de8_#zbdYe~jAg_U~*$Tic{62_$8?Ri@imjIh|BuGMwLvwCXpZa>OH4X5w z)I)b03wY>a$ThJ91#ub`{X=&u^s&)X?1806g#8(yO!A!=L?Jt#imTwO*F;cA__~o@ zO>C<~GqS8H%UjCs6y(Nu_<8aZu}|OdFjCLro6t~LqaT(mTBRYy8!(DX0JYV^t=xd$ z3nsMA=D#RgELd!=!kSFoylj1a@>(MUz6IPCNUeCslx^KvZWw0vDq~4yNpL39(s3@+ zVZbTaj06T-Tec7oc-go@Ok$JpOc-*PY8y{DdcF4t3EwoWd+I+c`M{Jt(shwMwJDZ^Q*iBKfSbZ-! zGEgNZh66vSleoQ(AU#L?mX7Hwggn1E+;F?}(+WND4E*ldro)YD&w0=};HpXeVK;OB z6%OCazldl<x=y?8@=DiFM-xh&xU$l}Ob>vV4=o>tfF_FoLU* zyPe=XzC*Ve6LdHxIAXpKR%GgsiUCjNJksA=(4n{r@m()uim6)l#>eWd3pm|(|5QU!@4lus84h52r-*^cl| zU11(a3WTT-&bJk9ec1b4w`A(U~JWVeI~q4rqv#P zPxaK8CtrXyYnmqipF7AQI+{hr0jhgHt^^4nL~B}OS;tqi))p?BDVwrRC0an6x%FTR z562V2RDjDfS0Rxrc<}zgaO{xifRE>My1ibn|Ht!6osmdx_xB!s#Pb!5xv^Rcc%T-h zvPG0ohXz{9)?ca6{qcU(~DCZ;c42vwUfkM>hQGk^Nmd9qMq!pF01bcsIR{rzs#Sw z7k{E_X8)wjaC2%SBcwklH=fn4I9m);W@CWEE_WXbJ_;l4hBfn$)Z^_WgR91>guZDU z5dDzFu3>m+c!y{!9(%ld^BnK zGATBvig&DUgR-@fV^~HqneK2=M;M+D8zBy#oL9>B%AJ*%-41!xt%etm(<__o%8vna z6YSqrllmAreXcTKFQb24=V6cH)@iuH)da5u7&2y#ZEb}ALd84%JIWtx`XOHY;fycj zq1-dD)0LzI9O72DT3xDt>pAvFlp`%g#na6aU^TJW{H>pUgBUojBqb*GQHB&B{Zp}vli_b~nIHSM@a~mgX=m~i$~{l8 zLhZf(Q6s6KG7XH0AkS7mOu|BLSqhO2u$--X!2Dl+H5*}+SMfz(>SW9FNrPqX%@JrC_-P#W4nd30-MI=Y+f-XwmBDj+^6G%^_N81Ox z$BcWzfWTN!FPwSaa_g9I5x4*4c6YJp@oaOz|NefTJNVoxxK5UV|Dqq2L0Hc?^JyAT z0Sk{rd2pi*?G<@OSP6|)p&aeQCWGjDPO{G_OgmmbXm<*NVu5rELsOe3<+d@6 zMdcWYKgOC2Kn|q7p^6AmDqUv9Ncm(44u6zBpCj&k0YA#CfueKg_NHiZ?E66j0X&YI zvI_VM-D2If?vdoxHNN{~41{ta0m{@FI-yY3Uo)zzr>V=9^6F>b%Z0}Xm3Po_r1yTu z?8j<(et7a1kIw1gyXj)5LjGm=(W___!9d0YwhV3lhB=7O4ePZE<6$&w;|_Mx zUp(vxStS*W);d_vAc#EsoL2{VgD}PayC5g~E!aO&Sm?%Z&a|n~!S;}9k@8HDymM() zZ4g4RH+EW}Opm)kjUOT7V@OV%1lP#SPe4lNJ_^xV)tmBDo|}m}Q>6l`!C?jGs^i+W zQYWf#o*9ziAJ5a$oaz8IvQQ|g_kkhLjOZ$74lbwuncPi~i!GGn)s2Dt`i}x)EqUYv_2-vcih=g69 zykb6XcZkPEo9K&spbESrHJ&Gj8)DUuy2o#2C@ zBWBMk2mjJ*{`#&QlRf+FjOxe}A|09wgmqQDIXzs)EBgY0G~&64L`_}^y+v|Uy1@<& z`r*qo+|XY4AD{-Zh*nd#{^Z17UpE)isbGOC!UZaLDhEzbUIAeT1ZVBB6Pu#1>%jK4 z0zsqjYUhaWStxyxmxwcoJP>LjUOYVd)(0i17^(pJ!Pz9sM@H#InMwSWZ(;}$5^i*T zM9-D_z$F*^Ab*1TXbyZ^f|yyh`r4x*0un3Lb1_7@?SxrCZt*G3ic^EoNokkMAk3F^ zsi+yu1YLcI$SIC@zuGuN9-+TU5%sivb-OYzZxB*oTs=2lGDCoL2oCD;z+Ks8W~6gI z85=0oXuy5svPsmhP;M~TtsrS9!&ep#nK6@;`~*%an~Vf~LYJ;#r4QUUdjM(>&ONY4%T((JbdUQaK>F{q62uDMjvr6%FHVDBG$)jRe93 zE;9DKv!UH#MrwB^vDG%AyLN<|3r{l4hkf12Ox&5O@5PRl8rZHGXJ+O`2TW#d3N)cGp#souK8x1yT_(T-GwlR;X`fle|{R#;B4RF3*a@Xb__MVmN zxLgb6NKN}R;eiQ>2F>|Q@8DrJLa|AbA5LgY0^fg|k&7?$HbQ<9AyCVC*p-bMCK087 z81;+FSenslQJY7AT6bU!>ozkEZ@kylj;~>tD-K#RKnAAplcSXbkWA42(kFFs{MbJ) z7%OcL@`{{@aU}DWC$y-q#Y$Bs{Li-$j$wVDlr*Z?aU+HrO+X)x4g2c>&cFpanmk~S z>X(v^CTM$ID;z{KbKsf;e;AlY$I26{fykW`Hjqi@$ZFPjKJLRo5K|iZFCtFQKz6_# zJ<>Qa1;cT=L?8$P_P0~r=bCZwNr{!T$@gsR4e+-+$~SriPPt@Vqu^vL$V%`o)e16s zAvI+%@kr{K>cS@7FC1>ig@wo`%QKbaB&SV5R`uyCBG)G-Lf0au1Z_|D=&%YdV(qul zOxkk=FNxXE)w))#&`0#9h|D>^PJSqS!ry!T*U}X`gO9K9C>tC-wL_j_g~t7pCQdhvo-joHga zs+Sv)L-0X6+P4_1(G#xFD!W?iHLRexTbO3$+XjIoEKpRB5k`t?xHr>ED2@kxA;20Z zoL)I?qZOLr%pquOmSL0i`w@k?Cfn6J0tP?@?5-eBxLC`)hwLKYul}QFghjz7sTQv7 z3Z*l41(a&3evwZ|sU1D}sE%>@h+Bl0ap@(kan7nwvyp|WEPAaLPz?5IBa;CLmq_n5 zgr_^l%dE-tAx!AYjo+T)KaG@+OGh?PLj+_OzXu3=Cz}fd2YG14j7?Xqw*ygm@;~Hu z3TBW{=%%9VPIj|0t+DK<)D=xUbhd-(bjYS}tzEzL@~LSe=8dnJ!8Y+{h-bEFr2gF$ z5Q9ElN7_$Op^+!BjJuwWP4LFr#k1)ve2OnxSSS=!`fl|5{>1o^V;xsd@4WO<9r_=? zz6-ESTWENVtp6#*beL$iB7U-jQFQEWd%w`R0QOmshZXPxC+h;(;F0PQrv20vwQjg}1Usl=$C?Kn!_`jcIESEf9X={!N_Z9NS zFR&^FDKPl>OCjtS`T(|Y^@yt<|GqE2ns`>|Y<0I?j74aUL?6ER`R(xy>|MPY?axbWM!Vox<8=yQg3yV6EuXabbX`t zI;Pr|Hj+}aA42U2Q)yCe61w`NI>j^K@BIHMyW8WncM558k9@VQ3mw)_)xE2Kp##6Y zXhFVLec6P)v4?V3{?A#|%xc6O`MRrp=u_@8{jUJs9cD?>4e_A*Z}$e=ln8vn!HeHF zqkGouRwk#Y6Gq-f(u2Lkk&cr!AP@Sj_C@b??6Kw`#ci?xg#4V*4Pp#o(l-j6zg7Kf zU;CZ7cd3@V8wpNyz+AVTnBsgR24%eKP57+B7${hzrxYaXbzq!R|on5##0Dv zA^|*IQY}0Kxz~4u7ojSz9bqz~<6txz2pV%1R>-Tsnk+_f8H3_hEQ|8B2Gri?+8mec( z^XiO0yYn`rIp=SOoDM^Ty(x)z);)zN&Xn{IqHD8;tt}v*KYF-KS)eWG`;{acE`xQC zs>bdoI-P%E&Z?o*LiAD1Q;>O^w5QY>+UCI!iyzPa^h{3pZO+={-4$+j(0uCTjOdMy zv+y&R=9W*Ya~7i*K)yDUM<_Rnd~!2)pl+S|esrAIVGu|4(<#V4u?xIWYVw&sd!Sk# z_WZ;*x@N~lJyJ-<#BW&8I6ZNa6PTHiH|4A=ubN$4hc!y_U^ctjY&Omzset<&D}5H( zZ=*?rE_519AePj^~gje-iE9!?mJvkZAoSvZ9^qL)Uh%@&@Le~I@hY|wrFr->-g z$M-*qdNHr87f663IV(4(qD;Kg4HZFjyBwkt^m3j(VHvo0&-djJXSs(1M|I8hG$H*S zeESE%j`G&a_1baV*WU9`m-=_|^%ne{o>!nEx0vW94o%VEnN%Q zyrHOgD+&{ve?vg_!5f?`gI*?ALEe!6-BENf#*B;$z{T#JqpF1*;?@O2BALO+c6vV0 z7ce^afu;!>De8am=U4?_b?^HaH-?=H{=61w(zXi~kAElJRo6AJhg^ zfk??y`sAH<7v74LoM6{>jW~942ckuuxtn@*Ug2yDddJTA_6%?SiTCOuL4{0ZHI>GN zk3@)^ z$C<(aW=y6>J9m!DTLS_?2toi@cFX6J@Si({#i-M%lTGcH8u3n`RLENUKCeEU4FEpq(wusf3Xsy5cmGA zv~rZfeWcpR=d^(04e*hcDHx3WKM??TgNjrcmV-)B8bPOe4!DqdPx+hQ@qPL2Hbv^; zP}%Rlf3}h?w{n81B?5h-1x|kJ$`7R; zXUf5z>)IJQ#I37^2bw}$PBoRb+(>UTPR`v1cDMk;3ReOw8Hl7gRd~R5M0y0lL=B^{-BQpX|o{st9|fk4Sj)!Rxsn7in`u~eeU(6!dh*B#fR-5B_vTzkuK z3x6b9d9KYmbqCBUNg(H|6jjp>FVl12<`^|;3dPX?saf{yD)6oOOo}WV!v;Uoyyo%S z3`Rdv5*KDc>(Pe%$7-m?xG*2B3WW36)NW95C zrf|d&BI|Onb91>YzpNn<|0)vcSJ;qoyWi&!r6MeuFY)hrNvB^>J z2P5Z{tac?Jilkn&K#-=NrU>WYa=qRRjbxH0i-6?pzfJ? zfZvIM?n!ozZI`MN0oPEHV5oN+yCu3|IWtXkOr4lC<0Ns)bUd2A=caivys*`ACP8Qe z__9yUHD-EErBB`w4;Ml8M?y+Vh7+-&y$y)BgQqBl%b9lab9mjK4FuoyVe|OhpZPVq zFgYui>Pjv+NWq=x8bTWh^ZPh>Xzl+KSH9*gNIWsAJ;_=!1*NCA!sVs=I2Fwd8i2G> z5Ez;%hPseruO@oJsLum!gyZ1D_!o1hOXFTaW%qPF1ulRXr!aH=VEpzMK7shPwaw;f zRO@e>t0dX<@^-MTNfLf4na8pDO+x-h_xa<$mz1AI9SyXtR1*;;3ZOEanuM0SCm(<& z#Z8i6>)0uTUDcnA#VPIE3Yf#NR@haWtNF^^XB92{=l0ejd=ZGfG|C*~)%7j&QHjci z(rx>}>1p)AGJ3R2B$s*2&DO$=@kx%DDrPWAeA)NRzhFRHEYV8=6``@ zXvkwI)r9egUzD`WL8?rrk`sF&LIha`Ee$uE@B$EMDonZ@!K*2`I^qADKsqOd=__@6A6$>d!Pm&yF3b?7^R)rz>ifDayEnkD+)dG~>bR~2*^!Zf#BPEpD7_mX zSV{xPTI$@1lzd+oBV}tA2`d)je8Un+q!Fp)uZ6KjIo1MXIbO5$pAa3hH~aS-?9o|- za*`aeMVfk&zhpL@Y+AKN*rmS~>6QOES+A&4Ag6jvt+FpvD5mV%%tBdOex&KpJqSjS z0ENc03NboUV$*Gi|Qt{llWWD?c<|>9_@~jM;Folk=M3! zwSwNWYd(qovHo_noT0^L9PCb9DL;*&m08tR*z4;iNhyUA<>a1?); zJQ9#lu@Xt|L!+?>@^{zJhui8mZZ(tH$(uxnAn{Zb(kZcb?0_43Wn;ssmi<|`#oX*u z6@{17g^GI5hkFafj)nKMf2yY3U(jX1di&ToP11xX9eFPHDJ(GCgm`_KD^$XL^kd-) z=bK8AdFtjW&1j|MzaV1stu2|lKRotrXV#GTVhXkGja&A}p>SUc6Q;U@a~p&p79m$c zzL4SBX&2g~J%P};=1Pu;S(3yl!azk?dPgW(v{h}aX)86*zBWWSqjB&Upn+VR++c`Q zH(FhoV(*$Qh`E)i8VY6c3AB!EWJ6$suwL_7fwT$U!Kpx#Z->-f=ijBUHu+%$;vazp zj4)2X^Iz!;F`&+Chk}!v$(h%a(|J$jp+B>r1Z=A_r4nDt4hc=;${e1SLI*DT)J0O% z#qdq1BDqUMK%RqtZE(~+U$v8C>_?*J^F%T%GiHj$}LGz*bX<52i zU*jrpDP|Fq6aC)viLH_+lh(FCN(z_Owq$=prD|=PUNo*{doDJbA5)sPCI-+|u=)nu z!8nd9!bdY&=$sC%7s;5A>+ECPUI+N*u2G@FnRa72ppeyaxc7voZ0~N3$xz4-I?S47 z0hs5@&%6zv8KON3X6JeO1!#a@ka+f@`sP6kyU|}mR;)!YrrLr_%n-N5c1vVXA5`Lb zO4OQ{I}*}{vjKi3TF-2}PCSP5R=#M)Kr7tx-Uzt(n%Gt{@{a&>_$}2yE_V6&$l8TsgCM^;G_6S9Ff0(h~5q#{>Z=$mA=*?}<$>l#9R54}o_7EA2 zIv7jPQtn}07dMoxFwar5#N>%qyLDDeBtc3RU&Mnlq0|+aPIQjPa?0b#&nAIbW73S| z6t#-RreC8(QYqf=|Ezq5q-4rxPPw3QfOr$>JFJnkzgQYUtAY*G z?j{YsUp-)V%-;R+eq&*d6=IuDV-bS4*u8?%V`;WIZf3LbQ@Y8yencEz?4RIxZDYD2 zMRlD)94Qn30i3vRfGRHki?HuCMOc1N2EnT06Gb3<+a3ZB+o=We8+MKMtwuq0Ed^@> z7+c^y=}C@f9UDdNh&5^gS&kJ*7rrcku??DBh=nqf*dN2viWwpE)cc1^K0EyRiC3f%XN%l^DXgH zyq!XgMDDAUlBxE7^GkGl<0uQvUj4JiSW=yD*DU!6x{_r!nu}UYzf!n9!Lkv1lvZ7U z7Qp;`fzLrq4-j<%y&&mAmLwlY^wv%)Ye#1)GT6-1lc1_x5EH~1qQTXIDPTbIl8n~` zPKJvbM~;(C1P%`*xOnyOGj+=^urTvDvuGTBMjC2~9x8uDK7@8P1*M$CZLj03pAB4h zh0_&s&b)Ue`ywG&tx?CSNA}^myffACZ7f2h*y%CSJuFbNl8<8;UNVd$Br;$UhBikA z^Ym6{xZ|8@L}V9RwXnS; zwHuzVjvUztM2Q&HQIlEH8%;(+3Bk!dTH}J#Q{{ue+X;}dP_5A}EC&x(i9&n^Eur?l z`rL$kW9B5o6Wdy3LM7`k5x@$Ze8Ti9z1JQ1OplK$06v+YT^PQxu+>oWfIDXi6IBzn zw9sGco6D5bkERYXri8!whd?$v_i$|+(}WG(Y#^{W@iCIKy*EBQw+`Zwq0{T_O;d3j zDp{Y;>|;2F7^Kc7e)&<(Z8mBdgNgGFaqpud0_4d1eDQLyQ`l?P^i<*gTk*t%Q@N<2 z&YhZFnX!s9Wj4XgQcy->vD4Oo`16FyYa7P^^Nd(tI0tj1$XQa7yxbGB$|Io>ybwn@ z$bO5O9XSH*vA!d44EgzT($-*Y4{x`udIql=FQ&kCz1|=SCvcpvgJlZIzdSVaEhFbd zvYs-LKi@5Aa3X3t1%XJ4xotAR?J?M08=kKGy2SVrn>~YT8V&Yj1FWwsAQS4CQORBvAJl*=xr`FPV3$#O8Spp(CCWwn%ZsXZ^R<`j@=D^aYun)Wqcrnf*)`13?TrueHb#>Yg&jVN5g>8&nroc zqD2*LQ>d_pxZFvuL6?T+(*M#9?WFuC1hSJL zEdCv+SR~RR4=ZNJr}w?sRAS{xB(W|I6uOO6w^d35%wU3Fo7)c3ib-KFwJkAPg;OC+SplrV=qWzbqZj zrE&u78q)Ss@vo06X>pgoX{@YixbV&MH>rgw4^{!MIC#%>Qab8a}lBFEK7P3GauC6V{65wJ!i8Y;wzYIGixXE&B3Ap{G% znkDNb3Fp7R3FjZ@Onxp@@Y~y4SVB7k9jtZ1n9p2(qg7e@5n6fyMG2*5&32jrPulg- zv}5TPpGE2iNW5jtleY1?(c0>psEs)s-@kjG;eFYz29s>t>hnUDrc%5ZidgfL-dL;F z7p*@9CA5zm0!)tZ&#oVxHhgUEVeZwHLM+5{;Leg6i`8A2!j{OpirNsPL@cwj42ZGo zQ}ZEy$F{8N)u;>nPfZceV;Pb=2EBZV{ZwS%PZ zbYjcTvQw3%p6}3H^2>$Ff4R7UWB-^VZ>kail1|srsFa>mPLPmM$=vPH=G_)d3d5GE0brm*jI>lY4q#YU zOpORwCr2gl#PNDsK;hH-RGTT5Qd3SLsFfKImE6%f7H8E_%XG@~BcLd!6n}edx8Eo0e;)*I@G5^cG?B5b0B`K|76CK+)?$o#a~`eSeJ`CSEyp z*TS3|P@hu>?Cv76Ssf--IA+V(lHm72om{mKqr68a_8;vZWoR2MaPwDw%^17~8LTG$ z7e|iF?-3g>BntNqZ!U`63hupo>a-|U6KaWx1Df{RXg$HNv zDOc?sRtEcpxq^E87;6wO_3!;+hZ+MwtMqy|iJCN*%Y5F=U^2Yjv$t!wHyM;3JC&Fs zDRP|zzgdW~xNv}mu9v$6gqNZWq@CRwI!g1=_EV&81J2xiGk!?$CP|`9!?)deWCd2% zBQbjd?q1P1c)GOcPG(`TG37wEg{kPF|LVd$bKnT|R7&GjhTph1SbE*|!6~DSj2MaH z&k!axQt-XB-FhTjV2%awX(=6Z+<`vJ&CnjF;R4DErH^*z>r7=QmF*_-6|qUOJQ-($ zKT!1OG}KCM67-a$3Kt>Zs!>+x?bfF6WD7@7l0f@I{A~vyFH3&s+8FsAzaxRz9c>fj zUf5Op!&0m~h8AgR(Lq`^(7aMrAG2TqCI+|Sp}2dHFnZF3wz~l~vaYjUF64rJ>+U`P z^M*wg45o6{eyvSODeU*P2*2o6+q*FpjKFF{Te7xf%3g9EJxej6Z5u1HyT6n-Yf%qv zfo^h;B(bM%uA@>tcFw_HeBAr6{~DmzOuh2l&zkkmCYj>2v#U}p)wnY@62WPM)wx;f zBO%YiT5~P+q70BWiU*|@a-pyMymdG0tp;`MUTjNCO72Hblo3Uks0CQd6Jc!^McK+o z?xkGQ#<4=us#iAr&Ye>hYn68fA>O$Z8ry<;=gf|mFm1Xv%z_3vId_n0)j)EHkL{DK zj)G!3%&J??5}`o)UrQkQ4sGr9XUn4!>u*k@f1_>ziS^RIf2H!ESwxByvD`%pcTTb{ z9O!|q01dEmC$ke6IF1#X2v`Wou7dYoRUcc>Uif)OzAG{|~@Nl`Kx`^9QXVD7ti)sxh zC5%LYPQ*PWili_xYH%^ud|8t|flrc`e9}H~&ZB99Y7l^sWJrd5S^8A)6SV&x1&5Il zpjg8X^33%aVjA=H`Tkz{1P-Pd`W5{(CYj};2(C3SoGDqyxOZ=QYST1iyw=Z}_>7rDWG#Uw=YztQVwrRBC2zhB-l`{} z<`>PiF5~M_w)4^1JY1cfQ;Z5O{)_bjMtvG}mkP*cJ@bl$XG?^n#8~shDlp%*dRiHX zfxUYJv6>nf;rw?4*tGN+$`LQM#eBQD<~6m@e02i#h+CO!v0i<8q|C5tF$aBm%-)5* zU^HfUpGs7H9sg7uZSQXnvNHTGvB{>RPsk0J`5`tgC6}QlM!Um4FLi_!U}tpwzIaf) zc+vf5*ZmRwDU3iF$mP`JptoiE0~gpJ_k6r}!I|~l^KBh2+sBUD(nqW+LCjq=y8L)@ zzdpAyW7yb;@*!jH%$aFsCm$nknXV*eaxQ5x0_1R8@9MyrmcdXBGM4>`w;M@cAa+{R zQmE9^nky;22P5k-uaBNcuw%0aNjUq97k&XPhV6tnl-I%Su9%rebL{>LLR4alV_2mOjMDaBCwaRahkrn0%(DE=GQWr@_d)kVhM600O^aC+bj`P*W| zSkIv?Qi3l)Az#Gb#;=I+m<+|bRn`C*YdECIdnYk}>$M|b2luplv-j-f^5Jrp!uz>U zTS<=|n&gH3Ub$U^uWD-X4*Y6kh`Mp!F26W%G2@adh2by}Fw|iRN=T=!$LSyqrGF8v zKL%EgEqc1<*ceU(L2;SW)LhQC0DZl2r&8?)=A$d9J}{iTsh<@23aPYI>FymkLFyXb z_bRx*6B8@Y7#A4MWu(jI`dRmt&ol)dmkiL6Oa9-=F0&N2HOjBkIY zbi!jglFhJ)I_q={X@`VIO0#-N+N&TUIa6KJZF~%2}Ru@3Atm8$#z~e!ed| z@dDQi{`B6fZEEsdebqzT!?4BhP(XGt|EbK0ez$UMezD>aTY2LmwqdjH`Rx78@1ZIP zGu&F4++b!=_usg&(yvnYjFyjYr>M?Kx{sb5P(-SeJneNS>wpm0AF7*6OFZF8VA?cB z6d+eBX47_9&(97jm}bQ{T#>XPVD}4Oh1{v#poQQ!!>%}2ph3&9F_O>kYzz5Pze8Gk zHwn9eVNAbWXGw*HyC9v7(2CKWO6qkO$Un3ZQwWA-6m@=FL9_hITZzD!8FSB( zgL53wLDbSs(i_T?>%a^Rr=Q+u8tfn}apo<`$Ar=mw@oBEY8<|mw~{tLh1(I7Q~4p| z?D=p4gg+jAbo@w^FUE;*DP%fWd3mfCP#LgsFY6}wb z_8T=2(~2~VE?I}vk~iV6&dXXx8meF@<`Y&wb?&Am`zRrm3wo#6e`$58>(33A(Scr};@qrr`BUv*hF8d*b^5@>LfcKfmc6ZQ=XO+f^Gx;c`+vL5Q`YGS zGT{LL(8vG)$o@|^k%fzk1JnPZCQ8-vRz4C#`os2*;?yS{$0jz`g9Levx?g_@RX0rT znG7p5@wA~H$J&cAIoi74xm)8U*7U1y6Tb=KS^CdPbZ6JGfM9OLv$SB45tVauntKjY z@}56znFg22*2@uVJg_BZVOg9zo~v)kG8~*J^dia?6T?8YRDe=&DH#|K%$mrR$h(je zDe%3>x5sorljcGdCzQEw!Udy*2o`xRwVj8wvQm?cQ!o}v(?JSzA?p~{BAq&0{} zwTK{ANJuz;2eXcx$#$L>YPY*rjX24DiQi!NkRY{l6scEbGf6T8#sx=GHo#z3geq{p zB;+>9k7c~sCfTT&zB>*MiCK*cl?;1Hf3WzZkGbB`Nl3uvg2S<;1htOSiou)vmq039 zb1fdF7~ni{aTpx$LX8UX-CXppFIH$okm)`ZPXi}Vg4AT3tT=Qwi9`x))oJgg#a$ihD(B1kfWj){6Z~yfP|WVQ#d-s<@#*UdbARiT6dE@~1(76Uj@h z+cqHLuarw=Vwg8bvWr_lr)V#2GYMORjY&vlI7v)-?FahaVi!@U|y|~qbadk zurzMWF*&XvmUQ$R(|INilN1*MIzDY2uqVH?kOh%cPu9EAM#AB_2*r_q0>ee5`j3OR z-^0{UxD_nK=U~I#kjx^1R1Eo5;bhX)gdH1)r5ff0P!&1RN@lf9w;ys?PMv{9@AYJ7 z&t3MubqUY__9~f+KUlK-A~)@q;JBU)o(X2-gK-KV8k`M)7+%^qB|b;4dl@ z*^xRMnqzLn<&Lj(_mr*Y7yOU7(BIbD2XaOB^jG1M<&KX9zi!^|)y3oQ^XFm3&gYNN za{xuOau{JlwIjiAx9KR8&A0BG@Seu%H?aTS9wD!|CCc#H0Q6Kb?oar;72fr4v$^En zI66bj`)Y^PnNoX4mu0rz&JIc-ygNR{z9eOeDG3pu^<9f4NDeF0%xJ;@kWhp{`w`s- zEV{)M3+Urs5Jz&U!7niir7QXQDCeK|RycU7(I4_)aaLzd@XybV@8b>d-~1jTEi@4w zVi9F-307MJI7kiv8o5bC1dW-X%;7tRW!16kK~fMuzngi*GupEr@w*F~nRU`Yd5(}> z3M$85dx}xpJ-D|S=cJ$%CC=h|qRbZ#RM-WDoj?!&?Vau4PKAf{p8Y8~Wd^pCo+3s` zQ)i1QHWa6ATrpn1c%^3?s$TUVL9J>ey(mWI5W%f|XhWgPi6y5}MYXE$zpHzBQl;TV zj47sUs7QiCgIJbu`GY2VW#UJ-ARkab;QTWl=vx+3`OCOB!j3eE0Slxh!e zs6km2bK!Ih=ZAP^=I67(@RGI5k?2uJBBE37cAoy1NxwYyB=Hk))O z6Qb1F4zOrf*`roe@(UyBve!q4=T_3e?8a2>IZL=5b3~Sji z4;U{BZ;1sJ^D3=`)6kgi{(D4e`3NwP}i2g@C<$AcWyPT!yn zM+a}19G%V|2ruxe45nN)Cpygnw>=hk_;+k=S$jgEPN~wW))1-6A3(9j|5iuz{Zk`v zuYIu>N~(I$+!93^mOd}Gzt_E!h%z}#z{9A})Ra?HdTCF@1(9qxLCgjk1VUjtJQXUp zwpX1*`}v=Y=TD`Z0CKejD646J?oj#@=s-}+w20f=I43hm_jiCiM9-=+-X=57T1LFs zUZ?tBE-6=Z}Ygy`gArXlYt&9fm4Sb zM__@K+2{f5knsV z{8|y}_HF-oIelH4NshLY-y=NWyn2&~9jdJoK*ZCA3|I3`pOP5mUFA)&|EKsTCda!a zhC6_WiLrtt7|j?h@eQe`rQ2Sb*g>uJa-Vb>j|<@{A~L3C=)Ao4r7B7@^<`imx?tg zV$*|e_j%Z+gz7PIIUIb8zHpMYwZ(q~$%BiBcX$zw|L84e@$dXo#ow$nIBYH2ir*O6 zRiwp=zCNyDZh_cC+klYj(H74h4c^P`GP773aqJk;oEDd>8Oc{hGYnb=!9#D;ae~z^ zjIyFI64VH<(IVH@>ee?fV-4qDX+0S|;r}D-oEkGxx^5fWwr$(CZKq=!9ox2TJ+aZT zZQFKo_PPA7-ueyeVpP?db5!tzBI1fzi@!4!7*M9M>E+TeE9sa=q$N?f$_)8;G@1p6 zxrn23A-uD?3`mMzK-qPCmqN{g?o>y*xK@;iG9!)Zf}^SZc7nZ8H%vgR2_4lq9m?{$ zN(VDMX{-1!$%^D_2nH-So>^4d*+VYfvXB3^hL+D^&KF9$j-?yCc568gjjx{9~q9bJHj)|dzE_!=nkbl#ptia zdwFhlqJR3Li5Rti6XG+M#&pfE9LtHM7R^8bg?+-VHV;?@PCz9?60nbwQ!X0^^&Yls z+wh4Nv1d+=J*;)SaP(;QHze6P%@fX=S{+_u*cb@URSa5NI$y2E0K_Pl*8<+}2d`u}as4O>{<(gE$d3gX!;UJKOXcfBch{X4FBpcx)b#?#y!>5wKlIbo_B5>19mt z1vZo++H`gwa&!%OC6zdYU%sr zUtbNmxoC7H?si}92JV40_vg>W*Q=tv?OWju#|m+$hzvck&Qc4ndk$&K{GKK^E5abT z_Xz(zYb|L3+^OM20z#a@;vA>&l})whi3OZ?5{WI&XK0KOQo%wfG`gg1vOKft6#4+n z<8UNrOK!ehnT-p&5b@M}BKpw$OYt>%{%I@=Bs{DeNf2{q7=b+3+&KTHXGHK?Avs@g z#qK}G*(Dgw(^|JIa-q!#;y;-|)mhnfyA~bHQI$mpx{WQD?>;bH;*3`Xd?S)b{!9dR`8g=_Cz!xI?v?nuTHRU%TY7K_D$oR3) zW>a&zE7ACIa{n!M9W!2;i-pJM=+Djaq8aOTkxZ2|^HuG~WtoC%&Su9>^LTiwCEUaO zR&n4gdqXRp>w;w8ItHcq`m9=Q@3g!}Gd6 z>a7-e{00BNQew$$)CS1^wAwnz-{gM=2Hkgn`X79__ zPUiY5t(^bxZdHt%vB1b-C;bK)2ZCr-dvKA;F{({`hl_j^=Cd$O^D2pPOIZ_WfCi(A$C@Sow&X)>+cLNWNNA8 zfIy_PlZmT>I9=*ISL}n1?4Q4kw+r;%jQggPUvq-}eP>f7s~SU__7~xnu!YUkc<*Ce zd$5eU3lNH9AP7xh^r{LAmhPY(F`ryxw<8egWt_P;5@1VOE-?~b0iewss5Pu(OJv!|pZob~DP$kf5@-q56f zcl~du+2{VlqFc)^A}GYNTh%5J!RMG(yRulZy%`8?Ciku?Us0P}07kP-cxx}EmUx$d zVDp_njl>;7R<>yih701FnK6oc?z76K#u;GoU{5|fqXxft{F1-G|995%s+~?wpn!lp zv4Mb?|L3fk+FF_0yBeB0*xMUAIyl(=kBRHi(skJ6!tihP2j2{j!{?IGH8NyL)_2V* z(kwQeb#55_p>`|@; zpfcw7y@hAgmwFbDRR605G*)`5rv;_gGA+n7r;2Ck=|$|;pm|eo>1Z3fnL1ND>q`aZ z)App6C538TiBtH0JNwyh_ok4kSLtaaxL!_0@>LIuM3vfCiB!N4mU_OrzkCd(ubNcK zWKxi^aB7>|*x_CNjz@K?H5D1Ele?6=l3Ulxs@FF3%{*+{l8+#Sl5c}w7xrEEPUKUda&VY#vsV0o<(ed`&sjLZun3=izxw{19~?I#a>#G> zriH_(9hYcZK+Wj0c$4b)@o_vTI!OqWALZrFLbmQ=l;))3P#5PY+4@)_rK{LCtW#Q@u~lAhnE7%w>Q?(sLr+SR zSE|mzqEedNH4r+nA;iRKF+1F#$G!jAoKk}M_0+mYFJjlriJ?_j=p|J$IZok`%)c zTd*O!%ckQSgc<^}JO^ofvYoxkXcCtb7_ll=DYhO*Pag1&us&$Nf zrP`L1elpIyQ^u=a5huE?<==Xf&N|yF?%$%$u<$s4(f|X?H;3e9&R&7O9p6}*gq*%q zADR|G>rE0Om-Ube8k0f6pj}L08466*Ba-C?XkQ_qd4`9i`fk8RPQnQTqO1tK zY3ULX)*+p+1kCoBOnRi%wn{I?#z{-@;MRjNH6XE$S*XUN{rtH{9XBQ59JPkoXmlSQSDH5Fx7)sDEKH7_8DTkV zVxCYC<$F0sNQ?Hf+C>wTgogVy?)Ny~Vl~S*;le@BP>&>;juA{i@JZ!vLS_6A_aZ1f zTAdWz=GE`85~}zr{hA7AL|*9N)@ili!P5th5nEyUlVOr;Tb#^nb&^ zdQMk;vR?Z|yJdv%d?E7v1egkF7H8dF*VnS|~-LW63q4)V7_)V5MN`w)PVlZJ;EFzb4ij za9}GdzmeP!oj5`NwMBC+9>W=lV^&Nf5|4l0s@(I?nm;VOC4*U2JJZeY3@GaD_b;0* z^f7qfQ@N4_l|d@Bq^WazM$HPJB4NjQ+$d2F92zVT$pbKKEvFadJ#<*1Y){-1J)jz9 zguFaUJ$ZJWm_RK95rD>T~ zu)fO|#zObH$yE4+e#+0>NhwFE-UMT6$u;_B{0 z%JIB(C3SgQXq3Bz0Qmy*BH!+0660WxLM$z-ujBVhwBs7w@ak1`{BW_NCz^cC~^t6-D5wE#1;LOSQFL~1JI$@^v6 z8s&^?+0I+)yNhI+FHmup+)fE1$irZK<{&S7v%25^)F9nqu@ys2oDEBgemQXCsJP`) zJXC5b6um+j$j_7kB3n#ef0aZb%U{|@2)1IS{=u~)|Ky?J;%g-#Ngxd*|lBS?ZQDRJ@|IL_X{n&JZ9S<{JUpS~qIK8Oj zpgf?Mz;|t0l{FZ9x@^F47(M0Bv`6mwvcQRoP|)?EP(vv}i0km2DG#1lSPrQ#kM-QZ zx9dXn9_+DD@b3aGm)nr758cCi6vIRl&Atv6nT*P171vFRERrXIDZtKDwL-;Q&d9=Y4ZF$ z*OVrl@Nd+6#ry8iWnrKp2$kJe^F0uo98-l*( zYWc34ZhWr4qP0N^KzV_1OqxbV!B-NgrA;W|RQ(14TTiVbQ~mKLpFPwlNNQ({`ZrliA~XCo2zf3AabJ$#9ksfQ^e zT4+1JG{GlzdJH$LXZ`VeXkUK>IHN^vc;~_2Ht1>h>=ya~v%`QBiDj#Juu-M{ zbwOe5hGk9Dybo7~@r(BANRHofYn0UxU?d|d-^odcVVgPip;0<5QVlprH8+>{uS@DT z6?H@%ER0$W_mq&X)=@;L7jU^*0@=po0eur^g}bu85@U-AXa?3JN$!rq&MJ7BGG{uu zXa@@ut0xI9YQK|(l56hJ#eTvM)GEHnLF&PUcUb$byB1^%z8CN(!DoVv|3bxxgRZ7~ zlrK+j=WDFmhDUPks`tDzr21;@=g}|Vx%CZ8*m?fCMU!$SpV1M6`tV9vdGHD!SZ5=~ zztK=Q3gh3u1kVQ^JR&u}ApaMr^uWyc6{UcHZcl-LX#OWqxjGx$yEr;HyZ#T7s?qgx z*px{A-TXk)1(v7QEW2)jhbjLz0N5UWJsN4qJ-G=YDi}*0W*sqqGg+TLy!G$P)MiNc zzF*|c2^dE4@NjqEv2<_mt5=Y}S1N1vs?8(B`zf+N(dl8iD5*Rxs}XTaGLH(URlkr) z_uzqs{QSHSEltg=^3Kz!Vv)zTLC+SW{mRMY)j#1;PKHFU+^wH|srn#ZY@v}g%{4XW zkGDpb?8y4V&Mu!UQtT zB!$U`1?L`?{GV@_*w3rNP2A9=nJT~?Aoxj3|0evdv}8fZgnDb4dvB|s#>MKF&0zgO zI;YZ{pH-&7`jME4{jDwbobz+i+4}bdn()H_82?8%y>a~ZYLzXY`RIZ;{@fv#;mI+8 zku_QTosR9;_Se5J^wIaP!YH0Sj$$(323Nwlk3me|(7+$2{u^{u2(=nrn!IzXC9~(s z@kc?HW-|ZjdrRbFL?Xw$%XS6%-t=?c+)C={{>4tV%mC)Ly?h;OcG+7tml*RRwLMF9 zN%NjnG*fl4wG0T4iX>zbRM0WLfv~)M0Eq(`Ddlr z2Rsr8;97W6^*{P?_iX1vjs17dQ{hpyCXQ7CiOLT)yTnQb8{VbR)^%r~AONDvI!df@rVL)6>U4k2lQN;8`9A zvr{%$K~$4OI?8;b`#jLq5x6A04J?>&tx;vRF!<$*YOFhD1>41P&`f9sE9CV1tS&*cF@v$W>6U$fE+OyQ(jB3QjX$7?ak#rO$2gPIt0z`1IEM3p;t;H-pa;d1q~c7^ai=@dUKd+ zc1i8T3d*X*1v<~hRGK@H5qzLBTw+1K zNK^eKpHuEHLJEB9%gN4C>$+kv4m0l61M&JRm!?op6jR{@#=}1O@unudSOI-77f=yIyq61G=H=5?x^7XuXc}12z47O53 zTa7h6X9*Go3ZV+jS)v{oS06$mLZ1- z6a)~0Z~lGTbP(j<<;7cPikKC#9?=c9x`eZCSXZ32Q*s@eAN19MlT)ncr{#9Ws2Jv;3vdnWsN}%MaS4x)bLRj5*0xj$XtJj3=SP`ovtq~ znKhtbd%f-xm5c^nN$mFwAv26d`%lpr*N05pKZgy*`M~z@&`8K%5*)DMmK{r^O(B`rT-J%rTYB4hym*Ee+ic+BPur z^_UNY9`vw_pPZ~bn@9c8VSEws(i<(~++%+#NbeLsLae#Z+XJ^Y%qOT)zT$9U5Mkl` z5M-iCM1Yr_yc`5A;_ZReizTDiX6$wuG455xL5fW3c_v-4Y|0#$gK7{lBxO}EY8-i4Wb)JYfbM2tY+7SC~L5C2x?^X%jxn(^AgxJX!yU401~( z)Q0PCW5heDC_cQ|`6(Z4KX-MqP-9}{I*mvOdGQ;l$Mn1^0ZwRxR;|`XDnti> zsJNZkn0ZqA^KpVVg4{-<3p@1XqsWMXq+8`=cpRptzd5mEf6xf^l=9 ztF5Kf_>Wyq8xIzWp~}-tz2vF(rCD%1oZgxJSL;vZWhysME(a911HR>A-Xw!s)SU{OrVqED#yk&KM@Q)1A}IiM3LDmY!8D*CdqGe=rex_ zDj=yKY{;4UvUa@w1#5&MpHFs`zrzvH0yR?;2wMslD}wxzwdZ&+yL${?{)F~;+CV!- zVOS+?RYX>%18yFm)$I_kXqKtGHw2D!d-z=j%9c}ZUzJu-A6rQZ#;(o(Hrh+u5sV%Y* zop5#tCb=?x?07xV9fUAfJO+^xZJFD#5na(iatL<5$4IA?m)LNg|E;u|9;!8WktcQ^ zSMf4O)+ROAl?s1FzW=ve;KM1qos4u%d#lVOmM)8_Bifj}sWO;OicNz<(^bA#`ef$* zC`uuHi>Zn|Ua!eWa7i5kYX@_JaId0K!VO(^j!9!~`^~}MW}^;X72y$6>n7V+NkQLp-{n6zh;a+3VPvujBD^!2}}Z z-iW2N3MJ()doH4XJaG5I9V$3^lVT(xD*;6Uem}!{0~oSRgnrq~;q)Qe^2U77Y*Ke9 zkr1N{7f12gkF=+1FXSn)iSbch!V4Lj#-k0QIVNMk#7F{nU@`X zdGroF*=hvKpIa;IZX*EZraHCqCI%tN`z_i*H(^2Zffdddj+<^%yw{`B#{#pbz7J9U zR}t}l?a4sZGMryZF+5NH4Wv5FG?Wo=J^I>)cV}dZGb5Wq7z~R=p$2oB{V73o3R8&f zOd`Xi+3l8gCMW2GND=~O4OeC$BvJm_p~Eswn@Qz$-Ym=!l$pVdewFcuj`K|PB|CRf z6YwTh^8TKVdvOB*b_7&?r^I>@qAK&`WVC5EZ5@Bmjh#aI-s~?9&dD!wbVswyXp2o9xO9`Tnutfs)q0)V*(2G*O~{wG zhdT$5YHL-Yh%;%(DGzkE!et2)1Xc@F*(5e#-|78aE^bDN3%*VCWkLJ88O5Dea$sm| z&VUg8@N?7x#bGhF$oc_m40C;lxM&zvHtgz(*f^d&f5#L)^gt(i#TX!WJ**4|j`{vJ zH(N)3Mspq;AHca5Sqi;N=i1kVL^u@0y8ri&l8vO?3&7cr^xyP3diElI=a!cptxyj- z%O`zKBR)nvp%id=Elw;L2pmKVqtF{t&W~D_XuF#hKwpC0>N6L~5|*4b6BJqQcJQG< ze~_+uQzzR(lj|_1y{I~WQqHEk*gR!r1uRcOYMf=k&RMDsZ$o?oO?2M3gWWMyjv8;I ziRS@^ZDlwH8%-OkifBcxiGDBspP4FsL7?W-NJyjxofz=)1r^VK+_dLuT2#A4M#2#y zM#%#PvEXt9&9+qkACjmqQXKNQmf6&q?&cVLXs>|*QArY_!c|eN+p^ZFF;?N&5ors_ zY(G-uMErZ^H{ZqLOKo24My9NIL(y?2?3#c+2~V-=KOykYt}YqUTdQ;}tBsE)YVEsr zGa|a@jTjGw4zglOvRru$DKAkb+&5dJ1fRRvA$DbPcI1`&d3Cg+?*%7C)I&$%jkg`_ zj&1msf6G|QL=*5eJ<#1))t0KV2CDiVXWd?7PVeYhCVY@vVZH8iLG4=~8X@+PUe64t z>g(XbrNui!V^E}GqsWWttP#w+d`m0uONVP*IwGk+Sn>vGU7IV-n@5hWx)pF2) ztU;ku7}41fQ8^Bxr5)heQW!z60jVczp%CIKYu=aC$48FWAD zPCB0t>7juo=}?NZ0>O-LMaTEvqZUU#w!(uur&Ppc(WQDq9f&af*q22h_=wA*jpGZ4 zbAI#5W`11iodfbh;3O9Sk|uMxCsBYg=#B|<+)iZ)=JhO1uLhEknbDzwK06OeBEhBJ zd{*d-J|^b>wqItb2yVnRM;SY&n2|(GFWd$xcV@bpuhnl<*EV{d$yqRWA51NdMPJ_< z^Yb{sogpVL_qd~0t8N+5JO$aoWKVw>0e1H{6*W^-EiG~w`rMJa1^M#JT+;0`|KjYPD#DONv08?A1@825vaxZ>PA}f8Z0d+nJOkB{U_&ol2teUpR8`7wCgbUm~ zDiB>3lj4he%F^QW=W{@rFe^4UpVQqYZQj_v4878REO&=MPdn6~kF(>dW1GM`lg{k+ zZl3`^L?|aU33u|K;v&5y>*SzkWCzo1z~HK~oA!m3Hz5=tEI*7CMzH(dhOBJ+?R0;v zjVop#-rAFG_*W$5W+AfT`<7xFzmYet1!Z+{rX@)N>D963Y_LAg-fdYY_Rb2v5oAX* ziJAUp+DpZbijIhAKfIcA-z`6XIibFzH3s2$W^&su-n-@C%ORLtJYrklm|5uFC>THO ztoRUJ{>(u@a9XUK(H`QnBtNcl}>RUccd2Kbs47w6{JLTO+6WjK`ykgwatA}Xdbi^D)bxFfS|8knLwO;xt@CR`E;RcoJN4|hvaiQ@>M$#L6>g*4;rFi%ms<%;J)iz(VMeVye9@!iF4Aa4|*pE2XCA961- zmX?4v0EXx3X5zoGLv9Oa?z`>=fL$0Mh(YukdR_a)fk0L~QGr?t2ciB8aGo?0#2xt1 zmvJsEsN)tD!Vn~_EtG4`;&c;Pf3JR}Bvkxyfp=*;9Y@3K;eg$a_Wc!n@vWo@xYoqo z)U}-`x6TEnhlW~BO{yet@X_~;nqel5Jc(yTV94FLuuC!jI>> zcSB)VgqrJIgZ1tfo`j?ph<`9edl5Gls5s0Hk*tJjAmW^SnFv>-_tR#Sxcp;ui6M@` z->ziYoU8L}VnBmbgQ$J0zTe#d$M(9JMmL2+I&;hs^`>Q)mQT9t?FU$~!JpFbDt^|F zr;;sjO{oePl;WA^6^)l{ZHvn?55;U?Y0BUY)$vvdk$xtt>qpSJB#g3+9trDWFn^7f z34pvtyPvtFG@+HR1b6b6{??SeNTaI&Og&{IA|o_?gCX2igQ=ylXbSswHj)lou>6q~ za;NEHj$-MEKUyVSo;i>%M2(az2$-NP$(QcovqCWLIV|FXB$kGooa zmSCZ)EKg;??@i*gwc+RW(i z`)|)1@4L77*I8pp8CO35#=V zmC%=o{5Y+Gm3>7X))>oJZ8Mt9aFIa!pvri;^cqSAL+QY zO?QXMzy2E}${3-BFF(u&vPBd9l|x+}5LWj=E)fbVFa2%lAqTg47una2>q{J60Nz&J zR{6sa{c;X*0KDZ|@vieq6+eeg7pIODw7qb?1DG69>&CAKe;aZa#n82abM$B=aklbH zOZj^H;;zT6GvZwh?or)LG2ja}-&;-yeGu_B|CnyE8Seg8$HH%U~Z-Rm&V` zWvG$u23TZF6^Zr&yywUorPO6{>I7|AgFa;^Jif2?HimkiYgzX^Zy_bMRe(2fSE-PN zmfyfMa?{h)2Irctj3$wb2Jj40&JATMjg4pvpnLk{idSFwE456v!Zu^|LlmB)lu5(( zF5WhiDft!#EjNYBT5XGY-^!x%DPm9`bmu4B$hMkP5rauOubZLc^6p?39sJT6Ri(G| zEKU=dKfv1Cn3PR>Q2@O!40(r2-oH@r^vM>!Pcf3HW)dBVyR*dqo6!=0# znUV6tat;b-;=_Y8q-q5M=ZR`DUSdn>s2R6vBn*t@v0%K8-B+sKs+Ne&X%-#HcKux! zuzt4zPG&vCOCZ2cJgepL5^zQo%io`!-?xt$a^_qU79}3EM_S&HF`>*|8>{h8& zG@&#g3*nmGLl3ar$_01eAG4pj(kW$DJF3g@aX9A|G*t57iYy^3wrT~9l`pVq2=jcqP@vFFsya%`fmay@nJKqbiI2B|5w&)INF9?w&1II>|5L<@R| z!ALmDp4q@<52&{&^^@QR>eOyw2y7a2KTplwwsH%e{g?evwJ_z}1V;L#&m`@1PaRZd zx_&m$72L7;nOhR+T3Ha*zjf9os$KeB+-~D&bE4Dsr|=h##%%?{wv9}>Y9v;L(T=yd z29SqR#gb|iss{)K55s^Nu?a=39RJT?!P+pGF{cTUv6i^6+@Y?m;~zn@P2;{2FoL%0V`{fL%`SUrMC_={M-_}?e#B!Pt< ze!eD&keOtRZx9%^x!|pr&?V+Yg>W?R9SVk^LkL^jg!w0#CreIWX>RUFPliY_fnO{) z5+!bcjFr4+1D1!+HKT(c8JqBlu$n;NGR`q{(vNZLttJ$0`#3g*!Z;JWeL;^i&HIZk zhWsVrjfdq(H?Cy$>-K-rKW(7;_N|hG=c9Y;Wd9kVlR&>K@Zgl=x0Ex68K~L3Vq@{$ z$Th*%X3%XSw<(4`lWkRGs6__Zfp+knkMg(qfB}VpaLd3bWXZY993DA3A&@Q1-rH{nN_#RG+(N ztnP#G)(KS-ewh<3G*fD^?{vYfTjW+Ae{3H1vYQ23jjd?EFERrNr%Nsd>Du`b<`TfGttG2#Gw zTO4&D4Cja7_g2xn!@*`*4w!MudcYwxR#sIq%^^`>SBd_4hpjsEFRJy;fY+2%-FVSl z#O|if$hB>uqz_sJ*Ho-N&Y1^ruHqdE1etjJ66(PNa2Nn-@1wT@DTpbEHTzJR@}BAMsU;lbN- z!Y0t??iOF3%GtigY>js9omBR9w*3=XC9!LVc2n_7nxcY1X7ZVm&SpVR5Dz&)s120vGoLB&nA$fI0+gm+pUuDv1m{ zMpZ=scr1G#N=>(viXAQrV0`Il`Xq{-UP#t88;s<;{*Y zTyDdL&5k!Zqg+0p?lJ`xoQmjd5sk+dsEm zd)4)Feh(|%fv?0a!bY&3GRn*4LqkDT;rJ^i2sn*F78&s?jfx}SHeo#GwLtg`Oka+o z)}j2N7=BT~r#BB;euL6zj3o|*x$b7+7k@D@w-qzsF0wW7Ak`-H(=OR^LFHj1FZ65C z{<7%!_wIbwW)RjZxC$(tmF1wXS7v%s z3T-59*e1?(fOu0<^P4WGbYhNtC@U(V)NH_=4%(x5fjwM3TRVyQtcDsJ2QE$pe`*F} z%6%fY2D@}q&Hhk{i4LRI*g!AQC;3AmV$jDuKmGY{<&R~!R~W4%1_EbyTBnR9)3^Eq0`8S*~#jJ`k17$l6lK%OPJh@rxGB8=nQ5$Tb}=kZJWg>ZK_ zd|u6QK=9=AeOph9_G(^q-x|jpC+;yvFyzuxrDm^D4$G1)$R9B}MARQM|Ib>?Pe|Vr zTJKvUlj0eN{&zP8HqzZMTjmT}d;zn_-JyraE`7Y_lTF)ez|Ag{r5^9p62J6{@`q7q zgB6i~$y?g%K0M*zAa8ZckzcUh+g-rw>3U|30uQU(;jP~u-^|R;?t6iJ+2;M}nHlRZ zSftl9V`WeGd-mD#H6haIPv4R=RdK3K{-5x5+(Av(Ys9G7^&fHu6;b4Uyp=K$EwhGI z$8aWseKGV*CpK?d#k_OV(D{~L)QC7Xwd9WEPPmNZf@y+mlb09XKpANVEUNCEf--Fe z;X*?ZUv+feWUgU42-^1vTy%y!9q3)-r5%m)ACLLZnboa^n)>S*1z)VX_C5vP9IOil z)8RtVoz@G?)tB*PIrzqehUtx6zC&KXU5@e%$j9>SgR>KXU81*4X{w89cCO`SASYV` z!rx?nt|-r1Jx8r4bcln4Y|f`CCYZ&bfsJX_r4EQrNwOb`#b?7F;Wf5mk*M7GxL#Fv zpo|a52j&1Ipy`9sr;29K??!6JY-Ttm2%OBEH9ob}cl4_6?K~V#T-d(A2TjI@E+uXg zDd8E4E(oF@8pjlU2lx3?{ul)2wN7W1jCaJFkj3Kjdx`7D2e#xLVJJCblaLptf@7=f zuq0w~#AuWL&!4@Q>&M4Oyj#7?6!gppb4wco=M@ONc ztfZiLnA5UeK28jZR%3`}#;{9Ip5Gd((J35ISDzV=cJ8lLJI~%fwzq!2#fG80&+cC|e%}_ieOOqxz}TA?%tt-{7&GIT4W4+sng2HB^Lsr%Tt}zh z67>1qUmU0NeotQUwkF->>$j%M$rgX;f-+9^%3!ifl{c&(bmzlc!hQ&qW^^~83RAO% z4VmsE2yy1x`w2$IB;V6Oiy;jnP{w|qi(FYMM@a0?QPI~YDO^a=1Vi8OLF_c~|0oJa zKQJ2Cay9&8G7O!tqRxgBf6zV3m0+FdTIm>MJFaR6-j^1Wu2kV75yO+A?jR%i-Wqqs zu^>M!m~hA-3;oZ?4KE`=Qh#a;5LiLlQj!%M%6J;IF@ba@{A$!8n|&DZW}`%uTCN8d zL9@#nY!&;-HfCZ4?7q0M7w+K$8MMbODV^6D8yQa;(S~X(A9r~-)#N=?K|sR>yPb9l z=r=fGn#qX_ne2H-4tg04vg9-ukY%MJKabio*GIX@=KB=zJQwjQwq`nG&nDA~0fE}= z|8b}3Ir#u0mOq@Xi2&~DNinjMog9WF6vDgGu;rtr)QZDrUPY91p_=Jf-gZ*#QSN`F z^hONFAvg3aAkWK)l#USDno+7Z-HN@ zdo;@Z{At_Dxf7sn;8#dQyaH*hyZO`e`FacMahcMaf+#BYgRxVqc#-}Z>^E0?EKl7p z8mejTAdkFcsTeg4WA?8&q6(8wUShP66d~9NBFhj{mgxOZ5+lbepcF{8tu>Nd>VBo+ za|nxUc2zEJ*+LtxXOg|5j{Hpe@CwDvkl;AOchroG+@t27jYP(sX!;HLPTXIsmm>`9 z94H|#r%{m?8Q$h~_sP`&Kx&VQG4oG1*3hSkQrTl=^S8^$B*78BLaQgKWpfP?_IxwV zog+yXgr*+_0u)7!w1DS1`oGg^DJJ)BK8IW@L-u8inX?MH>8y}%s_WBk z4vjn!aj=k$CV%gB? zP>{PMdh5iP7kRsDFtWh`48#I;qP4Q#Cysr(+q36Hx%ZZ4>S(^&elBe9W8hmS?T@?L z-oVpTI3=qDZtHBOZdwCW9sqW`!Go5d@1h5a6ASJ%)8{29$YmmX~XIRQsz3N18Be6+b%!ZzIl(KyV zMVRRpUP=Ks=qH7`>jP(cktWye8a8Kcj6R13QPLch3Nafs09~CDpN_to@5mwA8o~9S zJT@Tv;bhtIcwQMNxLGZnBn?Z|MBGsu-XG^X+m|Y})Y{6!mD))m_yL$xXWEoZE__mC z?aabfU&#W9`|t2DAv9+h-y|2sdOKHIZznrD9hRHsqL|VDrO5;W&nz_!;%ZCW&dBxP8iBpuZ8{oN$5g zp~UfXfjBWPEl!nfieAcDo$X)_JV1ACh<{50LAMwyf6SsObyzy_-hDj{y6xwWhFWqdwbo%~zZNE;^J|b=XyOjvXRJ8{+{g4(ccZ z0@woksDK%7@fNI)DZuAWJqJE)@snx$b|%h%X#xAJy&x2<|0i-T(M^B3Tb>Gq;==NN zO;7(YGO0{w89g4Xk?AeF(|7Z-#4uaO%<}T_$Y|DVk5BaO{1$RUmC#Jj6KznwXH-Wx z0T+@Z{14sNonu)_)-#vfZu>mTi-Dj9?KP`p2YzrB=~m~wf@iV%C=8#*V`67h+#mHk z#ZeoCq(c~g!xRKlj~SmREsM%BzE8g~tB|rOYXGF<=|tWz_y!cAd5&*VCRP!-)HtOU zT`&e#%Y1ufcZ6B3Q+DejO*wc3}e_!ToKSA2v zmra&16o2OzmCsD1(Ao${S?b+7BZaN!!7zv(|3?n+?v<=bUkn<;;SuMDD+c$ZJS?KB zxw$OS!f@F7SA6_)!l;k@mTFTS6)#YfA~$)VW7jn1gBH=gdFEtrJh^>9zf_>uqedRo zqdag=kvcUahh~Chcr=iS2{=VWI* zg_>&~k8}gc3^rF8G<>C~i6lY{zoet?z&${V8n&p!lU5=961HtfGKLxl2ie2eg6;h; znK`y#!W&X6gOAtPna;Zua*v$T4}ZcWGfO!M_7Q$EOsK??R5iy2v{7vpa95 zt(|J~?0|xlbwT$~T;Da%zFYs41*7~Pf&ct&r4eV0`-+)(=m9|3cI#XdrZh-mQ7LBv^E}nb&!^ zMTKqlG-j_H1<`YuxlCA=xf*`gvtn6I9?Zh(zP>6OSx)J4w6LXR!wu5kN1!yZ>GDT7 znaUBs+-3u_|E$(YDN35QFGrciOKwsdb*1s)%6Rx!s%Mpr)-Waz{jB}J8f;y~&aT~* zARk)iZqQ$qdjpL&5OGo^T{1CvSS9mooVfLYx^_io2yh@ZBN^!i%NT=VbaP@be_|&s z2L>5DUQ|pIA(Iq@S$brqmf5Lb<+OhCE8oRX@ASx99>c_*#Fgyj@XUjp(uU)Tx>0x(L~Ba4 zAWM}k?IFE^j-s|f4BXq2_G@6jioWSvrf3{z-ktd>EbS`_$0?;*Q5Y?P3-uP|hiSf7 zmUYBSRF843t$TvTJr{ZFe4kkyQY?yc6k^$9?14|#)il9$YfnDFsg$aIjKZbS|0Mkw zSuLr>Tbw2K7O$|TIZWlFr%IUwD<;rmzmdTBg3QozeiKMt{>UdM6&$~YNgfB4k2wRd z9Kf<;c=Y@ajolyTQie#0j5wl2=Jn-VP!zI2rX43 zbwuku{w0zms%jJ%F@Ij%F28$g<~3{t&v*Vv=$%rfqyCo!Xrl~?Pm3DdtuQ7@jO1%u zPbTbPVPii5C^@;ik095vqroIV4+ngh30gK}YZcDVy~P!;cOe9;FEDIQ?%lUB{l8c1 ztv*L)DO`A!Gs=L^y}V-kd8T-JWda>74Rygr`cX@^=vOIN*$`OB8K~8EcSxI}!6X7= zF0RC8svX|)+z+rfBVZea_|t@`0|C0#Y5w34dY>WFi?uubK9}JOK@3jW708!LQ(>nL zEqJ78@6J88pc68`@KZuU-6j``X+tTBvDCa*wZ3`CH5&lX?05=6M2%M%oS zGoV{0lT6nuJ-l<&kW7{9o=V4PWELmbkn+C}xwe0RW7NP8q@R=tEy9+?&M??E!zS&e zf(CGE%noh_`P!qCRPnC_vM~WcopW&!^b1b9n>jNxIgvi^WIm%t3xz@dbGn4#)o$by zYNf!2+ON{woV4^cE-hNM zA%ToN+okHhl0A;Z1}AZAIP`L1Hgy(!vTGr@mRYv?oALO0=Oi7!OtBHnR31HhvsMFA z0l>ym)e&}Rl58DDFw)z?rZ+BvIuqTxS0} zCeSdLdJ~8Ly1gJx6`{e>y@$fcGCnOYPKTnFtO(>8UTuA@7-B>cX1qyEMV+0&(~=Pn zW@>GKCQ{A&5!xxppntlqA zxbW!Xp0Imb9YyUuUv>q5!xQ7&XOn-1YJiUm1?p}hMpXHp4&6si_COm=Mv03cBYcCO zlcEU0c8z?(RfB@oX{65;`W~OEQH_gGvb4F2i<)GGQM(xMqC_I#EW-Y4!=*N?m8`lk)RZV>G%(Vj` z-Jn9J>e83F3z+{wc~5%^xP55GVs>JErL51@d=Fom7&eRN;iU~u*uqncr*+>o1N`vo z_;^9_B9;X#F%vu6xbm7#e!UUz+F4hTwmXfF^!egJ$}O1M(+6?~u6Vj9c#Y}i@We`n z3PafEiEPs2%dB|S&*I`nkRNXieO^Ty(R}n(0azZoVu3sjb{MtK#OFV2cZm*q=i~F zg?nk6ZR=~Z6sLkUV`n>q?vgrbcOUB|87)p$tQF9*o?`6ut$JKVa6FqfJhmUVtHYkz z7+3zT^&zS8Hnc5~0=XB3*`U#ahn=%p!bHL89)qI2m-KmmvcCO}ipx^tGI1wuGxf!8 zd;F=r*MQK@$NsTTbnW-tigwv_;U8pQ#n3BPk~8--l|tDND5`6c(na$`Sq)z97yZ^? z@GlG?Dk<9SmU$JSRf~<(UWQa^p?+r3%57!x8~P{$Np44`w-R4wmXB%?J<%S-hVcTd znLfp11f1f$EmnEj_MFHqdwPCzSS~f#OJ$I;mzNKt=63#9yW(Z1VE;L3MEtM-W-XkZ zyn}*%2)+q}Ma_r$_$AZ_nU4ze{?&e#hoj!vT&a-+a;~w^)J?TbTOx8Ruyckw_1rFx=>@4<*M+D!h~RM5LyNr;ke zP%9^_?`2EP7XAyUPjg;T_wQlI#CCsXR?}(fOy#b0J8nnP4j=vOP7&wW;y6O*1k^kG zy)7sUKsC17kJ^-)sUfU2y~3T%oPeZlx|seO27YW2MO|cgMVzmIei4k-Huj}}p_a1# zV;hEr24(aW7y}`i((PI$<#yY?)m1h9Tw87D<$p|$+tI(j|7mp9k-Zj$?YIq~GO~@w zQkg2(T#63&hVU_yF{C^MSazeNyqQvRJPpkxegG;I%n}q}lyaeXI*JjWOFd8l#mlB4 z+#~33vYQo;W|Rf06A)85!$p6K!mLNnA+;m(-C-B3_w;GM<1DW#$}#FJOw`V(RQ4_v zTqw?)^GhBg!5RjFfux~L9Hu`uIWR;i5Mn^=7U!t=0Gfflk*%k zMTD@atQzyNo-IkQiw5l%M%92teJ_EcWx?qV*%MC(k0LhfQ9`sN+~(AFC+kzE=x|BK zRlU5KB$?SbL-qAcc8??qnHnk^Qj9SKOk%6+X6S<546GQT#No~r>q<(}2OCw`>M<0c zK{l?45~@5n)3jpfQxC?$us1m~@&)|dw!Tb2gVBD=BfsKDEYQXkz^hSIkbbLReDtuj z-z*tsFpjTRl-$aV4yb`CRQ_8XlC;X450MAytxSQy0-U1DDd_mjFi*U?_iwG=8Sfwf z&iu3NVp&eTk>7>5H9uRDr7YZ&h$)fm08*(fpVr@>71OdgQ9h9~3Py*!G6G&kxb^1u z>!%Ow$rt`wUyChkqf;j4sa-0oHRrB82r&x<2pyNDm`mYXbIOibQ3%3NQvl^4n`qVT zY}{VndD6KmkiylP1`_W=z6SjYIG9mUquwZh>0uSr!Q41}^kTf7`n@htKGqIrcJMUqmVOEsW?Mt@0CI494m;MRGS}qxSg^L9d8ThS=xKlc@ETON{KrmdSg;K(EjW za0~S7;cfQ^PMhg-?tb_$Jb7JL=R?&}^pStpl^bHb?GC%6F2)@Ut8~`*LAOo%?>$%H zZ|b+*Kt2k-s##u^i#!ehZ|~uF)`p@^O_m*Q&0Ls+-BCGT#z}6If;em_qgza#TR(WBR*|p7WZM z$Qw@LJ;4w&{{1Bop9s9IJEATH9bC1eSaM$jKQ%O;qN0UE12%545G;U)0dFE9k5%Ql z-rw{qrDnNFsMiaCPgRqb8KmA~p4&`U9$2^<*$xSw_B19#{N3OddY0j zE@vyNflRcS4pn!FUq23Pvpr%jrQ?p?jM|Kp47W^rF|y!ay1h|_r6%d4Yb>PRzkDU~Q<&tP5Lh z^}Fc)QESq!Kj@2@1WQy!4EXah(x#&*woLR0Y-80y zPZIe6M?S$4UsYt+!)!4#Z2g!D6TfYhW=1^UgK$=9-zARH71T*Z%g`;x_^6n;Gis#- zd5N4no}`DwdK({uY`aB?f7oswzJ{jgFY3v*4@(iMw&!cN{mB{ImPGGZaSE|Oq(%Ja z#9l(SPA+6oE`EU8?#a!Ho6ADNPz%IyD$d4d3R>U_oJZu+u7TnYmS{o<^R6Mciahzs zgN5mNi3wy#JWl7sN>6~8F#Q?T#eJX7IBF$LS;agYR(@^cuy=I8^h)W+;?|4BH9$D0 z9G71bOBBwVmzxDY`3~%fc&Aj%VHSC?A!a z=8dMUszeP(!eBS`vM3njL6_u-`RT-3fTA2p8IA-a0CDf%W-PoxUxjCVkc_x%wc%rq z1-V-fp?xo`OO4;)gz8;=*em|h2lXd`3EAADwLPrA&n&%MLC{5t>mi28+<>EP__4eg z(ST0t=XfIvur?y_;>Ue=?Jne@2Veo+z_1r>h@>t`>#8u~Y1^MO%8gN&y}k^Nns3h6 zcnaF@qZSpgPFZuT@D_S+YMPZLv8v)jb;suSWxf_S!qi7YQUa2_L^#_ZG@?VwG}=+U ztT{*NLV6XOiUG|*42MDpb=mgA8r<8uK>)gu|NE?3-(QK}?@ zWNjugdE;B|KZx=lzj_kIiiG+UYiD)HZ6z(`*-yW4`ONrd2<{{5*-KiPP*v)NJ{kx8 z@{}S#N>RMy$u^Lz0!-$uOs1bC3ZOwfLrJu6wKEoj#KYyU-AILg8Eg`!Vou36m>Imp z9yc~OXVf1(a^-~aEPDSG!al{8v9TzGtBmK#U(&>XA3*MHi2V~{A**SCbZgJ#o}`)5 z(Yxs(D0VzSM`%q$xGbkvwpXOsWfH;sGN~*$dA-m261CZH`F9Q^YhfXJn+-oF<1h>at~~l( zxr0oY>Cu}nEufTLP2xNelmfaK=JJ#Q>HyC>V9Z+wL^!~P-99Nh!i+xs?A^m|azL1=qd_dPSHSH4H>!kq#&pbtu1!W|6<% zIRs50R8JqjUSu`zG~zii@nG6$Ui{^C)>)xf=c`AZOf5`BR@7ly3aRpw4R#imW}=rF z?oj1a%x5y{y4*psy#1!Dk5V{nz%c z`Ce9P+rMhRyG&)Ul|a`g`_?EbTdWNWJ*xA&mD12_#lM2vRruku4l5zdM^k-n$ba=M zFn!#CK;j9YY^#Ih^r>{VG~? z%vhwkin8tQ^Y>2Gy^bDEjejYqI2(4@ss|a%liHBxNB-9j@HiQd*uURPN>qZ*&ows3 z_D&NXp;Ottf>*QUpnM&R6FnaKRJRtFgzLX_KFphrR_oc=6Y&z49;wDA6|h&(BT@lv z?5_xzzs$)oGfcLDH-hugaF(Jt(I9p%VPLq@E~yNvJdUG=$mFLx;vsU!nWO2;_5q*1 zxs9-M4U>Em8^>u`l$^x(taeq>vwBuC0(7;f^}gr-H2?ys4;;$uU=9Rqt7_IB=KXM_ zYKadYX=oc0eJC?yh?NLjtua@^yo`7=#Jm`NvPukx;IuL75CLqmP<3#11PpNxD!|B6 zY%bxKWDYm>#g6h1g1t6Cx&38zHI4kP3H{Xg2L^x}>3Y~RfO@$X!%4RjZ*vM+b@Ezn zo%yWVCqEzpNYB<+GF{y-^HTo363lBXD@Mbd_Pv`pm${^xya;#^{pRI$JTFA#yeUuW z-Q!kInw7pva9AvHC=ZbM-9#wp@ci=fEJZc0H*wTH%5Pp?I_Z0qr2E_d{`UUXyuY6t zgpGIjdp&7yz3E@a1m|T*of4+${`vd!Z=PX!%g6J+-tQx#!6^#LW<@QH`KV|Az z5NAn8ICdA5pqo%UHA!W{iBlG;X&66Ul|d}wUT$u#^~lc+3F7e&mN~FJ#0n&r&Z(~* znx}&saFHs5?v>oS>Ia1gg%8T#>3Dm*|L5)I_%Qn4xh6;9R;4ECW_Q5j8fJCFRny}} zGc1v62utw#aj+{^IWjTUXiIMApOz4l=s3H<)n8jGh*8~or3RgyhK`33P9@T_o-~3y zONE97$jr%+mk&_cKYQ0X(1LrDG@NYx0Y(S{1^UT*pW0WiO(gv{_O~jMxgxAg#b);> zgcjGH2Y42vO;dIGfHEBL(YyLrD8kGM_CY%-56Z)LocWn?1^!)il_oDb0&&P$PPCb% zmLwii^uXFsYzgD%aV+->k*l8*@CfddVJ5l&PWd4WTXZI+Gm(c$~a_oLPZM zmo5|ooN{SIC2g#{-@k%jIDTIJ8vd*Mw2eQ~6$BC!97(D%@~8OxQNW;tr>KX{EBw(O zfj4W(3T`kl9}mXjIMu%8o8Ne;_1lQ(<3RNJiuljp17Ysa2IrzOF$@c^z+7jU;qtqo z%bYIq)ezm@HaLb)FDor%k?`np{XJGVUTV0;Pm!9 zh%p35P-!c*D|yX_k7W~G-ACh72IXPKN?dEo9~x%M%al$=hqys`FlhSU`)bqnQI#SUN-Uu7TV&|@dt@^! zm>w9Fo~CK%obw5glnEss6PINA=XZdVlA!G}d(HKJgPW-K8s_am+gH@r_7Nm@-vs@b zW%fT==v-v|W$;5eOA%clypw0=GvkJw3Q zYqW`tqgd);0kFkqmC6KZrI(TB9EhorL>QT%M|&h}T*eS3nv(PqP7BpjSfz?+>9TR(?)yojD&D)wLfn5E-!f5~5^U)I1n7Rl{ji$+vvQ2sZ$L5#DIQUDX#iSL~!6 zHe~nG4VziA?A@b2Q9}O>t}`b)&b@nvXw_34+DT{0GTF>~Pt`mb@lWd?%2f(5*_$VG zT+vWY-mUjWJDfmvIMYJlvpYw=&=wz-;3Z*&-x+c#ILhRNkf17~>wn=O`LXseA! zqx)yXOT(O(5gvqDolEG3nv7~FVkA&oA8g@Vh5pU@04a1yds3Dag1|)3NU-QeH=eSw z!l6=U;na`zOTJ?*hrZFmCOq?#&tJu>~*g>bkM&^+k%uGR=rRt#}nME9t=b>*q z?E|&#-eREr%p>4aM4P+=D+}L{NtdeMO25F*8x^e2bsJJyZ#9oo2NFzcC90ThVlv4! zh-JpQ^1T9UU6VBp?xy{;JSR*7QBspw9z-3pJ6I)wP$)Z%5e8_Z^x zpK3c+3kgTl4A%_-w2+5>WgvS?#=u{EqFa+Xs$D^c(QhVGGI~)yFq5_fm&tom?C#*8 z8OJEuFYxcaGcS)3`FCCXH#g~^CCXD* zGZ?S+bf9LUV=9bMts1M!%9&5+Jq*ZayryKSQxSS&NGEQJG98KoG7%P~bKL zb!vHMLsHv-1@`9E4G$`@*gpyl;^Av`Xixg{LoVrMldjz!9s1z^7mWzudrsfe0|4aK z|6fESW=@8-rvD4B=+xKReOaUJ;QT{9=ZR*ZC`Ll4z!JT(TM4162}%MDa&~8KssTm2 zjddeQE9tnT^5=cC{yE8n9Pnzd5>w56G-=K`-}mkN=J})1EAv!clqplq%G=pmJXgl} z)w=8rZIy+3O5t|aEQ&9^Dq^~$BSPHp{L%QeFh-S4ZIy*mHIp{VuqJGiLhXTLlJ1Bo zR{ZKmO7trISUrB~$_mZ6R+A}4xk6L6SPHgSC3oB^hjuAZO34GWnjM_}eINI}+L0-G zSdKhCEWcQ?rc5=}-kocbXFf{ml?!|KxtfZu`+-=laGxZXhfjW~qN7M%6wr8F|JXCs zKMCfKdz$Q{yatLwE`Pe(W#e`rUXm?(NiqX9c|1LSxx-5amoLxgZ@2Bf`6Fp+VBe1X z!X->oOU+70OOZ)RHcFk>zA3X32ASpc;4~;1txr7eOo>s3~J!X z{)=O-f<&$?cwkGpzOgsCI%fcD5J)DeDGC~Z_O*oS2PM@CB_0{XBgu#tXZ?Uto-l`G z)x{By43nRq>e=Jt!yo0?P-ASEYI4cJntJC>LAtG5G)Zm#wFY449Stz<$m(L_{9w-seGjp#mJKCYT5?rfGwzGT8tN3|o0w)W;C4(;@%V&V+) zK)ZHASr;TrgR$6L>15r;9#gj!?K2zYGoz%~=93U#R8@!iNhhjjMhWANNGM=E>IZib zJTWBg1(%N6NYc+LDwlE0&oRx=Ky25y)xBx`_WL1yes}-vUGKJ^pDmyD=F|KA;&<@y zJ2?4|WgqsSQUD!~A2+{ef8X0$%A!LWdi0IN`{O*^eCW%-D?c8O_p68Fa(Hn7;O!o0Yl@er2V9uP;l0Vh zLv9M^-OCvCONCdeZn!`$GKhDe(E>GqYm=I(zA3)y!8+Zn<*OTVAMkzls17ZZN-A#b zb=+To7c!o?!bq!~Yd??o@9yFFd%j-3{&%;(?E~`sn3h(Tw z>AtWvzvzSlVoussCoEyy0Re(TOH@)y7|;nndu2e;EOStR2yb8_Uqq;%u^p2D+E==l zVb8Q#1TG+W3Rity5G!|e-HXkmi3k|dW0MM;mQpzc5C(l=&jPSTTq&Lq8zZ(RNLmw3RDgcJ+}Y0c{iSU+U?n1I0U&y)PV&Qc)eC69&WKUBXyy9AkC8(i#!xK@_k0SL@MVdrd%LdbedF>EcE ztCr6$N#9ok+?jxX?|T34Qq85Rr=g5mQl2Ht==S5#XD#*Gk^Gmfv6pHBRDqqb9=h(J zF(WfZa795ON(tBo^OgEll23p}=m|*hJR=2WW{Rsd(PA4wlL&-~s+&1-Rg_Dro^)xE z2?7>jJQORB{Ar6avE+x@b!ysk$c8D|7|A;^O*Uo)CTh4TN|JjY6?jY1>5C6hMEV|A zaFzF6CWs6Ryk1)CCBj@uf$dssZcxvSyF&yT2Gw_*s!Ig^Gw-O+q+?WM_?@OclY z>v@9u0tP`{sr!xR5e(vPtKSxZqz9?%N%u(zntr6JPodLRqOtXX?M%^bVP;02d!J z&`EEC6#R@fD^{us<-s~K)IuFz)8+*eUmU2>3E&6)sW<#iL$Ud&MAV7AHex`yo<~cK zrYn?*$XRGp7+UKdy6FM=86y`A_=V&@ep`HQu>_ffOaP;p95h#bapX@R3JsiI?)o1CAhY&J=9pEZH_O zGhz;>XGjpiQ7lJTFm47JCLsjnMxi$b8pW~HT~F}>jeIsW#%4<#=Hx645tFt7c0|_3 z206^=D|PT84Y|d9hhmjQ1w6vOpsToYWEZQnEpX)dIfI1sf>Br#XPXiF+K9qPpK0D4 z1h$*Mzz7xn*aE})bLW^j5C)0`$KBj7QLw6#$xE?TFWM}G=F*1|4eV>$h$rmPZXi2> zEqdi5uZ!0;cy5ek#22+cY92j#&zAz9qt!2P%nN=F4 zJ@Q#1kL4d^_>xmB#t6LJKjS+J%xSJz3mZ>g5%zj9oWs~G%fNR(60hy;yVg7JF zo?l5??)lwYn_iEk1jdmb8(Y{6n~_iF*uUTw-#^7_V}4!$t-}IV$)BL4L@5d)Ku7rG zQaSGgb9!OtI+I1p)G%+?u2(mc3hkgwl?S-yT&ZHC4{a39>P6N4`Du@oqIsnQZ<5uK zB&%@~3#@FG%w+gBNzJAjWJOBau|Tbh1{n~Z9?vTRaA@t}nLlCw1?aGbUq;wWfFlbB z<!O@g-xzUdUSVU-nT}@kKb;^aI2Pxy+$%4^Bf2=Em;dsn#()QHZ(COKfsrDzO7K zSCXqOga8qd!PpE?LWY_1Xj2QBL*kPdjBL-WfTw;!hZYbbcn~DKP89@gzKp#eRhE>L%RZRW`pg3iyKD}A9Uf_;{57$HbX$&M%nmv?{+_!#RrJ_2JOTQ5A z9wEisTL$;xfIRzr5ITKZUL}9ZvlFyF-}}C8J}6+7se}Yr-(zwgKPPm{+E^3MGS*Ma zaQ=%M9!1+scs~j90zfhaEdPdI9^4#|t3F|(S5qloC2f`Tc6b)(CL>udeBj}9i&g}u z_?eAcz-io3Ab{koVL?bfz2p;(W=!^orOrS!HPr(J6`*})a~s0}pql@MrPNhn{Xj*y z?5N=AszUTiz2=QzVXzx-aug^-5aw%EkcCtT#Awl19whGLRwgrz2X?Ue>s=Npe0r9jqA@I^YDrVlOpIjO}IfV*}opw0+%Qr;0~ zgbZEjOS-Z$R#JT;VdR@$m$O@IREw&`;i7Cz*W7PDMQ}8Ar z1Pw#%G8U}>7ID=4Vf8TJLqAkQ>kwPR5NFqp0Y|bZV(vV^B!UyfRRrjR=YJWpTHG_K zXf}gX7ojd(F;oefLgHeUdPq_X8ooK}c%UO~NbAB}2-+b)KATQj1^^1`y&*Fna(RRkuKI^#L^*Q>q|nl|Wu;Ejrm-+64+jYSsWo8JZre z(nOuZ6Gb%)F=&?HFBD!nGMf$rFVSRI%QV4Jn;|~}>K#Si^5(3aHbwkt;iru7dZQRn z1g&qjE|erNtcS)7C>+1rpT0gTIOAA*S1 z)0;e)gsWoTd5YWt|NP59<0^QJ;?B{7?0(EI^kb1u{wy3QSi4Q!lvE#i>N9S%yEP#a zGE9+$cKU+!|K;HqcF}o9|M8}f?-+EfOpG{q3#~%hiP^>*Hx5_}atsUaV+eva{IM?p zO-M+6Kv#D7qJ|X~GlDARiB(e9(86z3GG2C{`Q`xJ4V%=wqeysO21kh&Bwj(9ad};L zEHuL}DH@j>bAl?6|6na(*><|M+li@Cb_yXrKPUiyOXyiWSA>5(&s*f$^zC}By}fxpnNAL+K4^!3M}YDI2-KuImd$W-!h&i~ZTzRM(J))(x+_k0jdqLJQU;^vBC zlLI0(xyv;X2%?TEv1JFLLG^=70aEDn%}831iTdw>w#GPEk~<*&H$CvUZN8BenE_q6 zT&_YT;c$%R6L{@De^ob1!46MzO8A}Nd7r>o-js+ng4GQR%I0A#7QJsm^Zo0SQY>~m zkBe18M0qt(8ef)S*x4nhFm11`#f{m^DU{xDt9`rk{Rnm7jZNpBSJ9*gGu<1#`44-) zprF61ZK(puI>~BAegw{;FaVxP8^x5TTkuyLQEDv>M*lS$9C)Gs1v^(g7Ar$ab2gdsJofSUua&S9Cn2 zY2U6&eE*_VORls*df!V2i4RPBv^xzB&}=f6V^^8QfRt z2)5b_Z3BpAz?d%%YU7Ic+MyxHpEkDVUAVy;^Ve75mbE!9k$uftYmgK7#$0a=y0Lo| zw&2$M3Ztd95N{wW+)_?&5k7ry;M**QoRBxpltT?M4g-EtZfDr>EVrcG(k)N<&B z(1;Or7za>aE3&bmC7ftXXa$A#uY-1!N=V$zaswN)zn7`|s?YaJ2+R@tZ9uff*Q~@C zE+vxBpH}Ia-(VcIY z+A99khHm)BX@O$+zEMG!1y7;yA%cgtEI@i5%nwiuYTTu{d&xuCI+ftxc|d%jh7(W< zO##lT0o#p4vC@T0fd2eOWsBkdx^P8hteiBkS3$tH{pOt+oBRCkWgsyWbXALr;BUNp z*ZB+CYLr5muoLD{A|z}C3DBO_e?L*xjW7nsI7p8HMz_ucnv=A!XR3a0>B7(t)Zb^3jEaZFh@r^2s5|Ru$t>RmdD)hiVLXG)w`A$ zqEJ4qMtIXh4rd#hn*kwj#Nl{sG5c4nnskg!#t_!@Xo2fk|Ju0QdX^M01V$F(_we&@ z`gnYvE&qPMhu?kOD>QP|;7o{7^~Ho)Fla1!i=Xx-5jwmz)r*Q?*N2gAaXDyU-U|-E58l}d;@!|% zn1;_rx*(LWc%(`su-%%UTNpER^Mo*gAlZwuT#`+9MAJWgL&*kHL{+Uq7_0EuW1q;v z?8^sopc8Nni;D#Dv<)m4b8ySxDiX|$q*20%{geoCnqY2!-y8TH>90JjH=y!eTDW|m zyyxH`t_ZJ7a93P#4F6p58{Q@hip`mj#pVT*%|v6F=enA?PAEGi6%7410+D@G^o_;) zMQ?OlmrSbPD!_+vwW{g;E8t$U0O2kI=y#$p(nb}RDDz_o4_?H5~mY$IKLlA%zUus zoy-6{JiyTcPRBVYuk=dUu#N~2r&u47870SN&8)*!*DIoi|Da+$fELvfECIeX%r^=i zO!|JX4k+3Ebu|IGaOCktg9#wXtPiy0rqbi)E_n}-(ph~i70#sXus{8aY zxN#v85vH=I5mw^F^%Q3pwJR*gp4xG;$;Xx1R4*rB(v!RafyhMWHU;@7;GS|ASyd;C z0u2TbAtE*zvR`Fq@;GDI06!n`xOqpzo$WzHj+x8@m%^>Xo`r8}*Dsu=v6-Yw63J}j z`4a!6;?ck6oH--MNs@=0GKguD{FRMhK z)R$(vEADKkM;9CIKrFo}%@??Q zT8{6CaS2Rn1p(TkKcLuuJ(W-u9aqbl6DaKYk@`WYw}s!(O#wQiR!%Eunhk~i=`3bq z`W)iUadw=S<%eq9{4@nOx6y--*+48G64zy}tHAu1c$rAXs@LQc@>; zxEL!t3lQt@0jdY#VUoOZ_`yCemd__J6qAmDA{VoT?{k!QDD|NgWd*=!mg2cl3CeQDCq)2NM=4zSp&_g`& zCil)F?EQ7{3DO#siV@BwuUa>z^~4~*7}1t%W@6iOd+8uK262oux}L!dnV#(f@X9!W z)XJ!^Z^OIP>s(rJaKn{#poy0s&UK(>;6g}!lO;8jEnsQ6mJW7v&4pBaX95RUH%pIg z@fotj_#)HSQ8DL?;Bfh95TuI&9S?3@B=eq2jzn5x(qaF+D!t#&#b7%)m)Tkk<=l89yUn z40Nlm0q*I`<#6~u5qhf`y%1l$Qw$;BOgd?Myyf0PV6}ii{3(escgts2J7|8DTY#>N z&LHcu?`6;7sL8ROMv}@A)nAKL2sF-tfE&9JHsdL%CiYA4G(y?bhvHk7tAK(fE~d+xu#V|rW98Shlo?V zC;_O$A4SA(aCN!W*D)bQ}OT+V7ZH1e5oG^ciPUCRKs%`S|o{%3zI zV_Ujz1jpD-_H`gw@dk@~VD?*x+7@?pq@XviwOvo%n9^&T20Be<}4eAxVq5Uq=kVL9W9IpstKBjnZ;y}S^DYbE0wf7OBvHWfQ z=aD_9Qy9ORG+=NbFUI=yHC|^0ae-yT;kO>6T|aP5!?P6GLmc8E8qNKm;4f&+ZGBY! z0u?EFtEwqN3In033xs6|6vnj4(OxY0d2RxOb}mPs01@=W^+TgjHU@`p(F0~EI?GJj zskEe+2iRv^>-m#NmVpgDHnHF+sA1UfvgZ9TtvDi{s0eDK?IU&W*b>CMt>YNb{Z`L3 zc0PXws+PX~KTDMfc&|LW1qu5VQ6I*Q32@=;4c29B*;Asft-zj_H@*M(3qv5;euE&3 zrnzcFseIkJcgAel5Wqn-0t?52j+2v>SnX+Kv%&TTrRf);KZzI-bh<+-_M5la8_i(Z zWrB&00UpJHU#!*eWd_4ck8WpWwt#4lD==6ccGUrV9My$<&x)mp!TQWb@;yw)yz0^i z(D7Ysx@>hM`7#=A0uBEy!x{k*)H?7j0|e@2R^=wIj{M6^6C#I$^yu=(zz*utRK?xY zqO?!w3mY`q7tCGTYu828>C%?O0b}LC9Q99RT zjhU8xYhLE=*O<8(xCaM2@pFiTtpb(Qyo}bnmD{(2P0fY$1??o;jOOEZ^I&H5yM{_m zJ%Ocm(*We*N*EQ?Xq1u16bq!jb>Jl-7fn;o%UrZ`jd!8(pAc%pyZ4o0IffaTJm6WV z+T`oH1b3aPO1m@wk8o82`N7!)F#>kq7Q2W~*lL5=L!UZD@fs0GZBTrm>Sq%QGpq9D~agu!)F0Dn1+9Ja&6vwT| zfU}QtJs8nxQgLWjjj;bV`RY-9pEQ-7pgheE9I1ZS`QXDSp z&KhXAGTB$i$!`HH&n!{Lz>!@;tbzs&lBd_Xvi`=a!*h0_TY_b|%jdH8$(5StDN{^R z@tjh90|K5AUpDD!%7C6AuO9;e$QkKEExG|ickYp1Lfj5ANv3%-bRD4eFc z;MJt4_Q(duygYbUTAz9Aw=A}1U^OPUpf+>~s#=EB97Vu9M${W7q${nTeD(LUFXmZK>c8wo!-YXW)8CKWSkYRk3M>DZZXF8mJ*b-E2DYHncjqIE3QgPg4L`S5c+G90%nq2wXrIC0l%M*q1JiTsAec1nnM zs!&sSG{vE> zMnq1soQP~1Pk@7p2A^1L*%Wh=?kyjX;F42?0Pab1W**{r7KenCCYwwE_LQm1`22%Z}t*xGHe(-lx_TTo|a~Mtr&3^Ru1t zcNjyO{4b;2YHmFLIM6g|2g3`I$9s!Ps{vPaTxsNIui4g{9lm1lV;G@bfD1zzkSsLIDNJl_1g6?T-cC6$kKcuVZ=p^zEHKPJ~;RIMavf+RCxX_O`&x!XAM@pX%ojAxMHih^n$qOPIw*)`w__QRcV5s03*ZA^fD z=tBF?z6ig%}p3fET0m9=y z(DFAeGdJ$Edsi=G@Kbe=Wj5iQb(iN=!tPgSvNcyASC*UpDr8;G2hE=CN!*Taa?{W5 z;p1`}7DsGb@^M+=*y(^*#dvPf#jncw=3K#=XaJw|B0A@$Th%6flZQZ)ZP=?L(LtT(;Rurtg5HwKLY+idN{1OR1#Tx4O)3>d{dN{PiA7m``ILPy?L+90?eT=bSC09o*71$6T* z6Ru}R)$$S467PFb?o0V_HG{GS{5+*JfB_~Z%wT1x>7*BOwdduHfMhHT#xQ9fCf1PX zl|H38(Lk4adnB#a#`@0Q7IxG{``bJ%pB9J;dw&ODA740{A|YYl)x{InOvUPx#F|-K zPtxn&gzYdl1trBnf>wu9lBiS2os$%LWIDYQhou}ertRk`5q3BRpix+#(b{MgM{LXS z|0@}5n>*$j6SA>z+9wlM9DxQ!Aw}?RCO!4_c_6ZoUrQrg7u!EC94oSe9WAjomji>B zn6rY2$d8oYzVF*D+YmSHaT8~Lto-c1ZX7M# zyOeSSA(18?lWWIM$ZcUoNFFwhxMuQVt5MN^pdfBt3cbo_`|+Hr9DKzrK1@NdZq#PW zZy4zq$&Vhh*y?hDyI96ZW4A?}HpSRvp*$bpHH<=v3@Z9Wb|Iw}UPsArVddd~&Plsj z$PE>ZOHnE=aTLn4MZ$uWRTOtPJf)5aFW9_^5gXwQF>QE-jU_ri35hU)*-8{&8OeBm z!NiI&!JFNQ+0Xr+jzEAHVzQ=kipMTff1hrt$MTx|&@sZ*e%;xs3i`sIcfyg`4|V`MCz&d!?`5I+Fzr|a zH?+%8$Mo-U!COtoon$9U*3q08-YP6VHh5Fss01j6sjKG zjEECsdNKT$p41x?Smj7l*+~00qbyNd!|(p;)!#RMwH<68vvrUiA`0dx0-rX*vpIkc zTX!9H0=@qW3(R^nz@>JpUscJRuoM~ajN+P>DTg(-x!n(*zGoPwdF=(7y(Y-U)i+jL z>xcaJYd5OBaHb7fVo`K5AOADP4(>xh2$MxJ)M9EG(i{IvFF`uvlVvg#EB%RVDdHTQ z%~lz)0B7s^ma?CaW|GWq<4i;SW|Pf6zTXjB)@O{f zkt8R#WI#}jQtFA!b?y&87plTL`Cb2UlWZsX04~>C7DS^W-`iZ*uq?YCZFxypH4Z)M%Pa3XIHY$ zZfbXn;K%xWxxD<}U-v!!i22)38m41R%(gHdekX`=T?tw8(^?0&X6AVDA!uier{RLF zjW+z^vNBKM-)PH8a1FLjO5@bZE2}urJFTSlnch3ns1{*v0TR<8p3xyVY$E&s0Qe0^qthML7B#Mw*LOlQ{YYFV7V z>g!xo#C^M1adYLXY1P!kJ)PwMO~p5d*;g=-NA9&;Gc^-MTH}ldTh|wrsXzbjmUh-z z-SGkKLT&bt>@oy)@sBx2^aySFnuRN~Q%F{?FJf59RSMmal*O(k10U24CO-i7xdC%{*FEZVgEwSB1pb8^Cn>#08>EOOAK-L&&~Jj;XtF zI+k~7E?M0R0{iRsKhQs=uw)M0>=sqU&6B6*Q-0=gX1D>NZay`vL#&GJGe2!!$Q!H3 z4<{UMOK1y=ySM^v3S|^mmasvSiq8Y4sKAL^x@2XpFe~xiOln#g#b;w>5=Nl6M7c$8(tDQ9weNNGe%eXqRU;tB(!Ha%!IBu={_mTt z!N+CVE_yF6Pt)u^?TNFKf*UUARiQ71BM9DEiZ}b^t6SnT9+GSnvd6Xudx5(!6RfVK zYIBvURtx=?EpX6rfF3J5p{~X^Tty2dS?HHm55!~2REZxsjp$`9286g5M@vm8C^k0q?tUZ%kTV?jY12P38K9TWB28K+ijJ6|tb&{n{a&enJv;(=qCUY} zjLMmvF*~#Z-|tw)Lz>;rIU()dF7fxuy-D}Z7Ig?5`$V~J5prs?D}?_9P#!C`aIr?v zZL%m0%2^`4%CtB&?ZzzDqkjJulJeyw+Q} z29umFlIA_t1iBj1wEQ@vd0chsCacYR7Bt7aAak5o$3QMu?m%taf0s(y3amtC`I|pr zyYXaZ=da5&6{-mB2F^Exop6;;0H9RUE3YgSObb7;py<-TLDXNCPGbjCNYo z(%TB3LeswOw^3!fCm~hr=LngI|C{7RTBwrE35(U`Xs*RoO(7M@_rVq>=<7MM*7zJQ z{oVEJo;j|P@`u9E#O1)o9f5YAd6dxQ!73D%na0_@)()I1wy?FLvcYgy!oIB_3qB6%_g37)48!v+B z9_Rs@UTh2?lrYPJCUC>eFl=fH+8z=d36{bP(DKw+%%j=PNRCatc@#4s2=BCiM!k2J zEX^*fTqBuw%YLTjc1%P{Fb+s$$Qe+dB=J|>+#%EJsXNxDP##zH`R%qYOrlfh$Q`co zE$Y3$OgSe_p+B&-9N8vOa6Ri=w=>=&MbBU|9L|0kBKl$dgQye?6CUQQWTif5J?Fu% zd6Wic^`rupEHMV#Br(dC#rF9ing9zV?t{zcyvY;SrG_+qIx7ei+=f|gLUe1yIW)#n zQ`PPQV7q1b-50Fk!rQ^#53GE@s|}TIJPZrFCZ?GJGK8sw6;54Jmp(p{>sepC{R>=U zeM3;W+B2OH6OH=l)WN>ygt+lMhzJ?vg`34=JSM^UAb{JTsTRz8_UW-!c!`#|i%V~b z1fZ`AT2q9B9l-KcXYnhWtbY4z)>Gi(;(&TTSUh7KkU!y3Pu0U)HZP(kyQmh{cLGlf z5obPk;@uFoTyAy@pMX(whg0#{fwKe}rHhNv4h*mxx`8FMmK3PyYq${LA^=T1Vtxrl zM0n(BnYDyv=aUD_%7RO><{=q6n}i0f)>PeLm66FzEQ=ijW0pe>DAwzr5L!XZckbO) z>4$8e*`J{53+5ToD$cqbwiKe8RKc0S;2(5$0f4x#OA_(~18e+US;uI!z(Z|?Jt09? zikl8vKFw2_``jwZBG|?j%yl3cwZMfV_Vb2jiJC>P>U*!i(^{Z=D>-aKt_0ZLTsnqp z0vHV-!eBE*nF!mVhE=M;0~UAY#RK&%&{ef^?j5tFFGwhLKq~zrd!ZCi!Fa)pOA5hf z0werex)yaFINX}{UhL5#a>iWgZ~%kd1wE}CxEciFtYgw!KV2u)+K8!Z%HCJAtexbw zdgEO~OFb_M`CmwJA1%{ovjHpaYbCoU3&lks;X&N-}kpm53oo~v=$dzr691&&1idc+I{BAds-H*PTR8< z-DlD)0Cl6`fv=N-Z1T!z?Yq7*e%ACMN89bZEX@mcM7V=<15uGektb{ueTwqq(rLX_ zW`(Nd&qr~CI7-QyZNC8f0n!B+r0)P>T>VtdbbVHUaz#C8%@J>ts0*P1_IlhG#-Ip; zl+4v%=yge;CVMV%`j*ScHqztSO+K)FA0kQCIZGz!065n*fC$b+O#{-gD-ke~U*h&h zIbRfB2Cc!yr<XgqC##P0$oe_5<7dN?dX_~$7^mS+9FxS;w=k%s* zX`gRnn&HvXf$OUTX06iE@C1MQbF7HVVtXO$X|LpsX;F9luw8;#mjDU;5d9b73Q8e!3$#(ZnI)gHaUx2s`7gay z?^@exmkQDOV;N8#3j5Cg0Q@ThvYaKVgD)5WKpQ*&0QEmIAe$Jv7#g{nnVCBM!%RVm znyvkk1j6s^@5m0RutZ{3SyjSh>-bNwuwMX*az5pchPL*Jsy8ijdgRBIzu&yg+-|z( zg@x`5IJ&s)=caj>>GkGS744{+G`P5UG4mGEN=n;6|2`bhRB;tS*A#QoRW7mCt#QG6 z(eKXhvz8sn-dI}s+PXU0v}Kx6%8+ahDb}VEk7z`( z&P0!qozTFs^7?aoc{+3hJ0n|KZVAg$=iwhF@(62oOsXn3y> zkO6h(RSU<6*D$@V^L0l9nYlivp|nM9LUbg_l1H*{f!$E#rH-TR zxj$AcC!JD}HJDuem&cEzP}(Nhl#c3~4b6(2dOgJ4*&&O0KlzxDvu>3Y^2cKr&@Fbr zUwZO{XDGPRV%r6p)ZLnv)JH}%Pe3ADFYS9K=eiO$@@hi$H!lZv<8`s@#ew&ekB@f~ zkx%UkWRh1T_80RUY5*hjAw&NXs=wpo3#iuJpi=69?UXw+(XQ}6diFABXCR{QJUf25 zw*30G{A2W8cVoCSc_5(Y(S;VHtT+#l)c)`JYsi`GY?v^J6!Td{pLlo|fcagejbDy2 zoW+E^e6fCdug~ZvbAE!aEA-=^IA90jc0On&A%AgpW5_{ZOK}PxPc{;I+5WY86Djf^ zJoWE9lk;pQTX1<(9}k|<;Ilc+%CJLJ-!tX9N683oX6(r;z39-Mv9Tf(-r4P}fN>A!oqut24SAwhoHMV~Qkzgn2anMMdc z+_X%ktiD=^*BC$cCcGiHcqDp2;3^m=7olA-*#S$SS^vN!+8G#iO5@i$uX4z9hPnH+5O9 z-qrZiG@lM%OE~iVkb4=rwS|H?`pXB0jS*M>#8-ax)QS~rzvGr~;UjtQEb-KvM2%xY zCLC_C+2h0+Qz9M$sx0->*bG!EPFeIJQ_`DRT?6UJv3p*ybW$)}OjT zTOsbFswZ$#H}U{IdfdE0fmWBGBz>L@0YXE@?f%Q7co3C}U!6RmGL0SG{6J93-x?Zb z7PISZ zDwm*~SVXoa2%D|Q(kUZWx{%rsk&4%smYqBrXU5P5Aj8qaaYe-~e}!z^_8pdIVJn{K z{f>{doOVaDCTAE}+6eF5JBnDF$Gzu`uP58$Ev3Avx=*{$6rcHxa=#xVA}akJmhx!g z<`%a8O@NWlyjzow3v#t!;Z!=%c`Bmzo@%fa zcR_zd%NQp{D{mu3p>E`a>0o zZ^Lr8$35MXHt4FJyis63XP-RJg?88QZI}zIeyadR|0<^^p^nzG>2(^>W}H*u9sXY< zoJ;ArT@4Tbz#=FB0L4E>I1zheYf~pPOB+*F6-WSJ8**>0=a)b&R}W|aK#+4_0D%8I zQdG3%g&!eW`gRhY)G$d#PCBFB}A%4x(cU9PYyCHSIm?FQt##rDLnaBCAy zo=qXT1=S!y_E2y@v$Ol-K+fA%kktqSYH~M=-NsX(TBV4lVsz!>A5! zP>eV0Tc#}n%-E1KPxne8GkCCA#5mQ$IVm_HfmoIz6EBq1?j<^#sI@5+>0*9`*pfHC`1rB?VM*j=VD#rAL-KRJ$zI5zFk6n8fIoafU2XQ2{r1ku6?dj) zB%fz*2xizS5L^IXB-}xSsT<08@#EErF(8_(mp^c@=s3TRMl0Kg!G*w3wMlUy`Xue~ z)Pv6aUb#1fKf5^*9iaC#A)zN|8a2>3vGpNXd})eiX~`=VkqX7hsViZHX<}WX%t$)E z+Bsj^H(MUGkwN6%*A&b_m|$%K?Ov}a+yO77bC7dk+OPzw%0W=4gRoppJh!#J?mk4S zWj+ z4I475__*&dY1Yp=^OCq@y0a1M8eCz<1r4FnYA5mZ=MK0Nujc!dY>pM*yS=juHD0tS zVB*TufbSsj|IdUE3gAD!d@XUA|NQx%2hP872OCol`v2tuz5k~R{D+hM_fkpzL8^s| zi^IQ2-!J?>9PD3R*h!mV3=S3mK%N8ufbRcM`v27O4|!?}mZdi``;+rG^)Jd{FmGQF zpki2GC!tN2;s#*brDol_6OH;^R_Ypfz0JMfv(e3~7-Px3VO!?RMb0dl+AM!xli|)W zyE3yB?%3Ey-6}+)SFBIXFwD3RydG*Ow4r4zGi8nYDOj-#m!uNmLNKdnowLjlQ5H7S zgXXheh?qrONA2qTGU{{ISTnJ zDAxcZ&33{QyBox&3>}R&<_y+FLaqcEpD?ZvOzZbQ$t#4vk>kVs`ST!d#{7k_DF$cmbDDK9KY zA1{WtL7G%?M8qI5ixJ5LQ`&+XhRkNd1E&6&X^lu4b!B5>z?L>0evJmwSk+X1N-z`M^4 z!>Mp4*_TKnrj2dpY#d1t$MKv_u#M$87*~$vIU2_kf8})QPY{m9aXd~ZrssG}BqqoC zh$Y^0K29d)cQ}qFuH$f;O~B`L8c2W>@5Jdi9>#uYb;jpj&nAUPRNC%)rMbQEzOb|5($|3$1EJI%p# zHVz)^b3Cq(_tB(+bu39DS54VIj;uM+A4JwjHID*O4=Qzi9fZl2QmwT)UOdqxLh%5b zzFIseE1|mG*Jq+!yZmAVTr#I5tV?~>MS4fGpfHkQQDC~BwsFNUTf*mnmKz$lCMXSo z=0Y)mWNu)5Hn=JDjES5XNKNw%v}w&yjl2T>W$O@=xqgL{ogFZ=&6;@f7FB8J8@C=L8P zhxGey6U?x>F0WU;7YL@}hOl-$jIgzWq6p(xm&HEU1_yc<*V)1e%V z`RYgL?~;1T`_RC12^dHh zI?<{Pzg0MkNk2QAXW>Rw`6LfJ;{1xB;2?lk0d@j_$g%^Sp+JKDj%&QNyv1V&s0C11 z`0D%o#F@&&4hyZDLSa4Dx*DD7e%rZPE$%fEgsZWwRWEDH&Dp|~sHN$MMXm{*gxZMm zU;V*|l&GV&gmU(~DGfLi!^@EncJ_a+HO4apNr3||rEyIw$tef55!=XDOjk;Bh7_UR zO!tXc#N>5}oAEqHs>Sw0DM{26ogNwy3O zWwv)lFI3D{pHVv{*hOfUBesJH*ovxx(mT%5&&<7k!st690t3P&eVU-X;0xD;A-ehb zo#lB@Q15RGV};YoZ#WluR;Yu_w2GrjX%)mtVn4KjXFIkl54Pp)QOCu28EU9@5d&|i z$Tv6Fg!)uqO-+(T~f6`(HVFplR8N;tMTp^PuWSj z0Gpod&q8dN-N}Ht4>fTEUQ^TnIwyICRgbjqX9>@#AUHOri%wMHDk% z0$pEIDTp^LSxT2I8FmU`j(DVHu}T{3OoGdMb~fpL2W5)g7+8os=mu@JgZ#t;y$0hP z?;k$DYc=Dkh@9#8`~s0xfi83Y#OK54ihF`RtV&&{o*-5x_*aDm%=vxfLY(pXtS5i ziwW_}B9WoaAAZIGY*>wq%)nD=f0S=bdh}b9BeCrrz~~HQOi5|S0+iXjLj;I9h-k~M z8ML%sODhTa^=s1ew@jgx)|0$xfDeybsD#2Bu+pUJ07S$y% zNiJPLK9>^dB)4fGVuWqsJd7iELQE68xR=#eb(lfhrkBAzlrDYHyhg7w8mwZk^j_V$ zcU=-L{ zB?DV6O4lGl9$4&uFYzBG;j^5`bII zIh7oVZlZ`nsF@d|8+Heri?McF%im{hJ6^9Y-VL;1`!^$*7$$NjWYykDMl{yMb&7bf zBNQQO?W&*yX&CWy8HqI>S=PcytQhVX;l3788SSTF(m>3}Is zsceG!i+stWR>}EViNITU+mHLi@O-cPt>Ag}i>u0e-!==^Rv5KCX9MHGzVK4; za6BGI1B6=&AE#}2K4$~#!Nl-ncrv^kX3%|aGa2A5;4$FN@NzsHFZ- zg`G@g=VK1oKciK_w~Fdfitli9>2VVo^(SlKJ3%_+sTMFtxU zb-!>v3c&@#qzXC6B>`vo&4>DEQl5_fxO*<_nTe$$w;hA|(;L7hyt??t3tbvS$a~w< zYQ@veVtI=;uD7;rq!}m>(MUJwrb~3%QcAW{Vf?yS*zGN+d(m@dst9@Y@x6Dt8(c6u zp5~aOY0SUgy|!%f^O4DM13PlV?BG?@I@sDc1aGuAUbO5NTnZ8=2AblG4Tfqk3_xZ5dxMOI4NYB%?rrc8e}c^vU27Nz5v{V zOqTr1SOV1~bKqS8O-K!nUQM!|{ZhqBWfvYOV(#IkgA$+FRBuHOPx(R6wA>`5GD|0) zmTIXs60SFzFucJbm*QBri9m~uEOuv*TBtm8u?>bqj*E`On4k$?Jwk!t?EsnKlV=>7 zXarY0R^bmuUztZ(1j-R0Envo@G^)Xmw>#+mFl1U5^_(H26v!g-gf3jq*C?XGRlEGj zVj*bNpbJ}#{ouX9veg6K4sM^_K{KbaIzsMVTzsSteXmw0aHeol8!VK4&Wel7fwd}M zBFjnTY}s350mAu$41l{Ag~^IXBbKbF8tEcPj$?K7-YD8d!=G8Y*^(6(;K z2lM!zfaJa7bkRu4a|p7De1%&TQT3TwVMuA`>#-bQ>KT!a`FX(3u)%HWY4}h(?AGLP zny7vWqaUN-a&T-Oz<4WAgV-q-$yW`D``Uj0N<6YY z|F!C}-h^ZE{R^C+{{>F)|4r4UAgCfLr=tA7ipBp1FL6~Fu-jsQ>A9i~&($Kh;J-#e zSuenFyHHH9%&H>lOkSS$?<41wRJZBjNT5u-3w2ar0iEX(T7+b+rAs_ZB z9nmJl^*$7|Wc(Q^;OV?d$%u)gmW2hGr0%gGm51IMEctA=hCOsh4RlXtx%qGpXPx4{ z(^>RQ?~x5pujNa1<;OZAG5fA9IO-AyqAxL=*az}S3;=^+4hYx`*5-1JMB*^DBar)z zYHIdp_I-$6slEmkhPaw ze%MpZ$qk;L9gqLmmf*;hOiodG!BQkeGp!vSQ3kEN?-A_ z#Io$_m|Sp>#A1-iv|9iT?w{5DYSu!GuDHn@=FeXL+a9@Ax>26oEKfO70%x+7))Q=(AYG40CO^TOI-+pQ6Q98VS>Pb-L)LV=a--SeL= z5fU30f5b4VvCx;Y-*P_LilFS*-9k-yMg3=0CxJa>?1U1pfKvS1T#-A3WvHoOVf7S( zmA}BUK_xG)9$a+U2W?wmqnw&#wVhgCtXi&Av_f>dNG!_>@c$$pJkgG)a5YN9Zt;oi zzzBc~Zs}NAF}b_#(U;<{^p;*d!Wcqi=8&|2K7D*1U~WD%^0j&9Pg7_Fiob#X-;oO3 ze`D2_CU%DZ1%Uh`L_s!?YG(eokEW0K?@`A86zkw>=V@$j@=uGoYSgvkmN-!S?EFRw zkYt!-?J?Z~0tK zjo=(I9R%bpJ%&e!BLhg4mnL;l6R4a7+Wqqz zNe+)MVjjaPSt|I>wbQbo>s^^4XTiQCC4MO~v<1b)Oyla=aSb|Kc^cc0crl zwJv}XZY6t+2z8r8;XxxxY0zGUP^tKE#FVj)l^GhtTS*E|IvO7JSyClLgI61_QY$k} zx>|D7PNYIYha|lqTvP58C66iPxVy6ac`DlYF!DP7SaLZJqPcMYnJ@-SPiJznnA;Ge z_lsHY07p))M{Y3k0_go$MDe^t zPM&a^v@`CAYYmBC2!ZIWYp+L+r{(}=C>XDK4OX{dN^dfxKC7S5`D<5TgXG~ENv|>7 z0h@>Hta6{U0^iU(q6kr7wyX!-8#=}DH0bEVsK%`65v9eJtFyYfZQ$>BFJvE0YZ1H= z{d&x|x>{9QPlzIisZ+8??=uD_JSC6?enJW*Rhh#NZEj)CXTxHwue1JBXFB9PzaqR$ zl0V5{V#tHP9DcP<%Y79Q`~s7>LKK`~j-^aAcW7PszSb+I9#mokZfuF)?BClUI{;ld;P zi?Ojcs{^U$0kbvc^lEy)<)c#!xVbK9Kh#WDp%t6WaVz&}q}d)j95o zayk;MLL-oF0!xv5m-|wOJzEMr`If1OTEGl@M8&)}9z`6T9z#RLJoIz8`4hB`bkKg?ypVMZp6K8Nv=~3#RlPedXMKb-HWhL zTQOIS)h@}{2y=mOOUqTU;6+M!$N0mHu$GMI>p`5tYX9a)v$Xk<^Ad6*79H5zJF@2f zVFrI-!#Ha=xp9bt&L>5y72Q;T)8+?Z{_3Lbw8rbdur}bEH#jP2aMdJ0>n~`6YH;_4 zeY&Y|@wTp~VXVz_6zjH%edIsPgiLJwh8ie`pRsfI0(t(nMZg;M*yZJMMP*B@mC+Ps zJKfmADSbN0OgXjf(gcOi;wV;>?!63VU6h$EL zriEx$9T=qx?0?4|5X7BnqyDr9oM}_kK?%7Vqa3QCwN}u>T=NX9oXA@dH(rK143T*y z>#`X+z#`PO$ZW{5a_&-hJ0ZBE_Hu3fmyg-iIr5=|O4E)rOv8G&J6=|<{psDJA=y?y zY+DS(BEZ~?#$E|?dLO_$4)@EJP<3^rOKE;0&DGoL$VBW! zf9oP9*tm$d`Qz=JQ)cAne`}ZdIIkb0{OxlgfCB*hJ0$-<1KEEZ|Aers=>B~Pg5n$N zKk|3Kx~Nr|X+ozi6qF^jU^#(Ot_B|2t1FKYld;*TEz~9d7W;1ucfLbg!!&rpVhYT; zAC9wa=bXl08JD#z`YmX$vCtD;J&_nQReU^Y{* z7%Nv$1xlOi_F`>0Zt&9qGljDNZP#9kV~=q`{BK78Dq zS~&tkp=prR9}`vY)+4dj5&`wyfz~J@X1?ETI{7nj1lZD2@6%7DmhtK#Ui@PSGiA3Zq zp)aH$$<#v@tDKajnoFc5l1N6IOp>vxI&?CUV|$M698B%Af>|bdPM^@n=$R(eDQJ{G z2-D%HcXb9#qyDnVIDx6CzH|mCmjJR)&zN3^`q!35ZTRGth-L~a@aeEh{q$tWQ1lyR ziPsB&kVOZrZr;|@(9_dLNlZ{%tb333S=?xCZ)`n1YlP6V&e$IT{9Rqxe&X%FCBvkY7t0g3GXtM2M3eT<$`Dz0#pSk^AsmFTx|ij zm$-dgO-fKV+rOu1WgH1&TQN&Ml#vlDMtx3msl2AJ64!(3YW0oBQ;Vh zQ%`rXS+A}0?Um!qx`UIiOtz}2sa6Fmm6wwxlhPQ=mp57Jb$fYzYE|9yO%Q3{>1OH| zSgFU@#d%j^Ct0=y?42OFN?7Vl3(c-+ExIuh*6&h)L{*VO=C*n%O%~k4peO*ks%@7B zx~P^NxvDRp$4inGTS?tEhQyYRhx_n_68%ROPW7A3;P>*1H4pf|xWW@DCMz5N8W3lh z>s{B(6kXS1Kf<5sm87u+lcY4=sy|SV*a3k3ltf)})+hJh#aWf-4(t#Q4?yN-d#?jn2uPQqp&9l>|xJ$Lr_;J}l=14QPQnR;T#{6WGM z8Gt$#KB+SIpDA$qdC1biJUknLp%8fy%ehlk^^5xijeIq?6Nq{#R^XwV16&m2bIUHN zz-K_IHA-!<&Rsh7*1U3BGf}t|7B!c5?OX$(R%}v&Kmob$ItypoMr>tZDpeIrZj#0# zBxKDL9T&91=@2Yj8jP&9&(=Csn%OeDHRz6@_O0TyjN}2#cxkFSH~T+Ld$lgGWTaKQ zK}w1@BPB$V)I;R1I24Kb0}{+I%lbMiRP0EVuWAL+nFRZucoA?9?tgVBZjfY4Nw>lU zv0>vF$I4%Lqohl1vCYtd4u}QQYcG1qU)IyG9;PrKv@nUS?_Oc!RkOCIAkAg>nlDsR zGjqctJunPW)-Eq`3XhgavK*{jCKx_;*E~7dCJ-f2pJG$8uuzj6rf`vnL{tN5!Q}Hn z1A*FExb=oKxS`_n=-|t&SiQbApSxs}L{cuE#qYDnbdF{aGHTivA0QqDzB`Dve_gp< z+?l&V2#8UzaCZ9XmwoltKO(05HTbOyOZ2u^%HrsCxFq7;4YRoGx_sWS^;960%{xLhoi%r z!XfoBf^El!QoaBu@)$|hA zqT*Az@VvYJI-nPvn#NEW*yM?7!RsWS6EMD0^veOA6i-2AWPc+vnwK%ufguWnPVBwu zEGGMlwRAWtj^YX`-B++pU_B2C@dV(S+$5!=vXn2K8lo{|AG<|r+%ND8WyxX4AK5Ef zP`IBuxgzs`U{YTzpsg9okiA0CqX?%+9Yu-)6arhsj2S|kT^8j%;PT(eMw`4R`w43f z4k79Kp!Hy&)pb%#26DqZJeQ|TWBpNdflf8N5X+<_4&ful!LOTpb7)nGjjSu7^gs!P z;{kmtO|p#9X^5K6QA)HZG(mrYHHq!N|Igy~=B*1v(_?F@7I~EZD#Y18BhT-UWRH zWAtqGDON^7g$La~)nG-^BdiqHY%U{Qb5l4fl2RDN3N9ZnIAKtt6!9@*ic0?WJo&jb zE#?T%>|LeppyB5kVho5ISjg!HIn!0E>0Ft;+Ik@gR6EqBat~VnIJ?nREA|4;$UHJ3Z46qi&7br_Q(^y%mT39OEHo{~C z*~ewAQWu2v;v}p-PEKkGdCs41dj4#X{~V?NCg|MlH|t>` z^1R$BQ8cL>NrpEDiL&t1e_$^mBwm{<9Q%Hr!2ia`&)20ecXqHI@+;Yj_X{!U_PzfF zJQu8-9hVEZ*;pZ`a++CTUmF1eY#vPRD8OhQsJE8m+Te2l46=Igt|5YFcX=ALAfDD? zrWfI22?7&Qqd>A6*$3lVqL7THk?t=AkD0P=5mDd?XsZAvww02?X6#jb8V~{ep`cd* zuGu>Cbb|f! z#_fSawBJ6U7P*B9w$c_X1>#ldjCI~@jt_sXo`N1o{`s95z1n`dQ5i!7FF=_$N4V;i)b~$;V=&8GJp^@ zZp;znn7D=q7NU}0ZGdO*1#6mtFc7iW2v?1lt7+%kYp7g0ZjYl8fQD1e78_Vf7op4%?pOT zI(y_b@_LF6?L^8ib9Xo~^5Ge7>LFPx_d>U5ourM1WTh{=h2O?LHp)Ja6@N3PD0B}s zIG92vIbuK-pbZ8=48fEY5R7klwgIT}9RN0G{4!pz@M25DLIuM7^GFj7h0~=$yzAT; zE`phoY%bo-q6k0K($18&IJhdyM+HHxH^aICO<^GuaOiYRx7lYS<6o}TbYKi|P$6OQ zK(*7UR@smuciJn4{TU0=7FTMA;$1#5OT;1NO-EgyMi1#Qgkg3gw4FO?*Ch06ISEt` zu8vk-Yjd#N?q{iM3|t&w!6R^es27y!QLv}6Ooynsx77p{KM%Y&^<|gJi}zM}?qRFI z_k;ZX745{+MG@FgM66|GI}N{Vg9D%a)4d!3UlgbjEZe`{)1%pObMT_prgeh3N*v!^ zv*=a%JHk^}3^MV`vS2N_hY5=VC1)TrW8NNCcMO86s>#Ut&H%^%911A{cr=Hmn=jm+ z(a6WxtLYp&W6kKJW14@YOqqlK^Tk(7t>MndjAPK1yWGR6-FXxuQA^vYH#O5{psZIK zD+2f#OLSJY!*WaYva6v<5uJ@JWB%-2h5kBJD^Jth#D2r*d)I5pR^|>sB8=^%WH#C+ zY=c3|Ec%ktMe@fxw6PP>^lgdn$QLMyX%bu-%n~tngUNu0eNZ~Olv<1Mtm`JXXMx|q znXM30QcRdR)RuD#_RGDU>-vBZxSEugBLY}u3~_^#?b|ZN2Yz{f7G&qhc(>DKG(*av zmCU76Iv)n9?@R6-T237S9**;TyRpgy{|UzJ<*M%Sq5BMU129&-Bx>1ZYtd`xVCO^G zm4H&xNSF4F|1O+>iTL<_?d&Om#|WNL2RS|{kdUxQ74~x2qmKFGkJX32bcVZD)CME^ zL7}aF^>^zbMq9w11<<8O>|b84T*UO&MbA{U&y$*&m>@BLWgysT<($9+M(ZlCv{mTB z^n&gw!8GE#$+)jUxYxsBJhsmpQxfFnjlwiKIKgf!Q-+DhcS$b^;4pl*um0 zzRs-_z8AFQd*$8%AzIojY~8zQOG|IY2bLGk#AR9+*;Bp-z?E&AF15JoTppJw%Y@A$bErP!qO#_ec5DGGfYe&41mD%GgwaZLc0yR6hLk}!)n#<3J zDESnW$|$W=r;RVz2y~2>+mf2MuDAZgvF`43R_Pg>Ch2cck}Aas*rPO^(yjaHL6^Db zSBQzrPA7Klw+_52@WA85o&nNK7T4F&?O)2FQ*%hEvRClTidMWx*b!V88MNMr8g6p4 z(5napi1os`FJCTqj)0-kl7sRa@%{ze3#W~jk)&h=$4?pOd77HP&>g!&;oT@oIl*QnlNJ%{mGDVtaRjAi_`_1iRSc3tBAo3i zI51Lt6j4c9W;OOk0P|4}aP)%3U*$nU&Ml3IN&xh}{8@95AXx5YthR1~@~? zgcYL*-F1XDMRaH$QP|f^K7cjv((hg3QlCOVH-1%U8a34sFO5jyfqix5j|BDhNfQDP zc_1+0Lj-6it@l;m^U7C6X?q!Eo$faqY(xiY08AI^hsk{lvlbH9|0=8KI^R3sh}1Tq zFQayF2^Q^qft-wYMaghLchkYF1o~?xD2c`v~HETW0`TMx^)}=Bxo9vBnbgvKU zMl*c%n3GZuz*|@I&Yp)Nyo8Ki=iU8+>P2{A&@jd1%C9<`cRTo*|6hCS0ZMA0Fn>|j zv47~T%SZ}~$|;NfyWV<Lyn%oS?PfJz0DBbcJl8X#`u93 zH}ftwAd`7HFuWO-bp#psxFqjJUcA9x*mq-uV+V&hH=lsnn4TC}KDLB`U-rKM`pMrV zCWE(n8ZLC~4LCjnu!N#$h)ulja*Zxb05Nszb0+G|cySOY|BeV@f9;j;x8Kfh4#+h1 zG51TNlXWu+xc(q&_9PM9k?i|R#3$A7x{eJ*7x-??m^bejng$iXnl;`G2-MJlbk{u;u-p7?j6%3GJ7qN`AN7oHJ@I8=uji6FA%wtnw z?sudf#-djTe4sr?3esKH98aZ$rcgkWq0U$KZ%Ik>**C}kE%8Ef)GGw4XzTM@Or!$i z``2725MdTbYgo*wfb~vHmG7-G0D%NZStvg;t$j*GQ$v4mfEfW=lRcsOEppO#?3Q{$ z*H&>@6Ot4tC|7vyCaVbTjB8PVDXI;q>M8Y_jlh&0i5R$7FXpQ?)9_c47%4MiR_IIp z;tWn)@|-x#Cu!VIJmIS3%yVLayGX%QWS!!~n}-h7D&ICEml^S6d54Hnm}k{3Y`*g6 z2%?_Ao>)y_+RV@FSkz(998d};`lwFtKH^l~D?p*jSfNNw2(roqBL?9LG3A-V9!WCq zUX+neVjntx1UIf( zKF;waGS4WHW=fsB%lsH!K^hPU5BR?yO8^J>AFW*lcvDv!4(<$hcM6o^UYz1?!%CW_ zZD`VjBo&+j!v<{VHr(AQ?k*b+Lk9f7fDIW88!`(2dvkM}p4-rKzRUJJ+1S75zwh~6 z&Uenq=RWq3O&8x-`eT$aBG_t2qce?s&_{L1C%KR1U_K^&&Hb@ZlQS$b$k$-CX!>pe z=DU-l&eove1}34(Gn9Qu&jX7#+NINEzJn}gQMmg)9q)b*+FD}!tqcRV3TmA^ZAScO zCxMTT=KiztMpm7!csZS}G=udM{@3KO5(1N$$Vwl7@I&{^I$fUf(ypRxh_ZfMD$Ij| zj&OuFD)E+7AtBA2Ia>4bU8=-VP zq0_z$%j#4}mJl~ih}CYc%uc={n88*90WHJwRT+N8 z%v8Z5(%l1zl_IO32pR|tC6U*lU{L)Psdc)Ou-r-vV5?dpfO@kt&=_N)*x0$>f7tyu zIJy=#U5$b4QC|ddfWsOQs6~|N2REEE3aT>$rpyAz`HKKMjWJG5z-O;z+wKqVwXA?n z=fhCEq?rgXe3*R@L5pS=%XudhSU2%?R*RbBuwzm$mSFI1J0VAe0nMiF7z&Ygfsxc^ z2+STT0tl0|n6Qr<7-4lrn~;J;Q-WVexN)HrX*1_k>+q*A5p-jW&1!cVg9#j-{`k|h zBOulXw#s^fiu z^&1dcgOTdYND;sUsnSK-py=v8caSXA20Ux3KSqn{qhBTNmPGQ`fNJBCy09 zulenlX%|7V^#RA4Y^zuixM;gcBwO*G>J@UcRZjIffZItuzs2M>;^Cr$ok zg`2O+Xlc9I1axvd&C&2e{d~w&cEHuM@$~dO0&cKT8mSMY`lLTQ-q&A+)~12hvbNb{ z2?5Z^5-e7_C!ZRK-D0il8k`-;l`6X7qH5W*4AV& zMmTVPj974(^ka9!Apmtl>x8Ysb8Jl>NX8>5-H03Jf6bt$Kkm|CX{xp(d8lAhNC*MQ z(&A#ia2VBXxDyuW!=B`U1{>{G0?_2h9$^kdRj8OwDaL_|zSEI?$pdvZ>VqvDA$d0( zwnsO8|7UQd0!mo7NAGW+rW4j3j9)QE+x|%Q`?P|4SIn%uVNkU~(1GF%%CrN?Q9;z` zzsD`Basray1Y>1kx*bjqCfcsI5oAAQ!L#ZsK}`z8D^|&3jwc6$l8e?S+ke~neHa8Y zB8hN@ok|W!yNVTNd~-wO%t;+ilSq4nvrD8S%*4?$?^>)_i=58P;z2mA7HRNU%%#<@ zz4<{;q%{*es6F)yAspNeM9>5C;i_wVpa<=t)ojyh?QIU@TvX9)sKfMS-40>c*^Z78 zo8{L2T?oyUrVz-h?$^5LYiQoT@M~=468K64&=`Td$P^J8=p1A-Is&WsRw002eX-?S zVdQ3$(Ys~Sl%rTvvPvoQR!+(+MyGsEL`;85^(x=xDq2WU;4{nPw*QKtl2g#-_IWGL zV>cmhel?jBQl$_eQ(|pkh{{zI^CN8r!U@4Cu${p8*oNpN z@om##bT~}b2;V4^MbxqH%Xy%CQE2Nu{FHhae?+=jyN*{wFC-6@~WNsb`IUiZfAzD@VL8LtDtnef6{US)wzXKUgE*#L9}#L4vqKMyyQRAGWFVr|6LfCa4nn<7 z;?U%nb!gIr1}~8EJVr6c`kcI9i^H0&dP++%y3s!0reN_<(961X8 zdY*wc-EF6qZm}Q&Y=Zf4y{t#NYXkRwJcEGQ23Zix=DtpG=r8Egu+5Yi(cVDA^e6)i zR=bUpqI-9AiYJ%7&?62)sI`*8Y}7|c7i@CiJY1ZYYv=9?;9_qmEX&1qG079ez|nld zn3oNF_5pMfM8`HX?+hk@k}Wg-e}B&@3*2$=fvhjeG@O8&z-5BAc0QGIq7!VdialO7 zUtctm0R08(nx83MN6hqw3Nd0VhNC>*byXQ2k#+S#a-WyCX)5V$+6rVPBbSl7@CL6=$(iT0 zzH_E2tYjZtLVaclWq;DN1VKCXu2+hGkhy<*4rK+X!LV^9&isoF8=ZcEN+C-z?9DNh zx1Fm6ms+jdd;i;=DcEeu;-fCdHZK>${{sJ@bT?&2FWZ_7;D6>OJ_(@M!b3Hgtx}iB z^z_}vr$<5xvs#S7+@iq~KbKUgIO#s@^%!!mnvBXECL+3#xiQ7NnJ80JGPU`3icxE} zMugh*PTsz&humR*t8rgYiX&b3IRsJ%Q6_IF^!5zm zz<9J7*>F^9KMCJr#AsEBHIP0a@*?C-T?}LB4&zsyk%8$5X$j(M5(!^%0ooKX zOaRL#1}9YdI${Sz%ed~E^q}vv+5Y1s zF#iPB!1`V5za)G`{pm}HSyXqzeds_4mcg37J)X1#m)|Au-ZIlUb|Zi#m&YpKk&h%` zx4+efm zcY7Ed+ixh8PTLCT7PsWu`Qg&s@Fe_LpMNMlaSc}6AacW@f7HJXf!qu~*4wVgKtmVY z^YGM}uZQ*+xgLyP2ye^UTDOceXyUZ)_hFNq-7(L%ud=#>ZOcLfcIzG2&OJo;pYq~= zPoeX@F_6q^T+JdhY{ly68W$RsJNut#@1!iDX8ha|v^5ZC@qMy>S8xf;Z6O%I=G4#8 zaGNZgGy+bt` zx&f9>P`X}|$_|s1?p_k5Yl7XbW(u042Zmo@TOBC9@}rEy8BCn#Jb}diAYf$O~tC z6O(~#5Bnnt&xOjhH}7<^>2&OOVsx5b5Qjz&b8nte04eGr!Rr)(0q1rRBh5$yr=l?`oLnLnf54Bq(ZTjF~q_bM~ z@FGmvw!TAZ`5~>^*bC30EkMf*i=hGIza6`=LiI_pF z^T~QR4k(gRD2O2r`OX1KJ~{v3wP8}#cm_Wfz4{s&IwnMH)XH(ewIaKIMouB!{=zoP zs;;G>TO!R)lO2a(N!^1tmFzQ7GU--g4XmaO+)Tr#bAIvn_is)>Slfk^hQxGV**x1a=(d}-fS|~b5R%M)$#}d| zE!f(4RPU_D=iN($9^^DSY$h9JOmxuS_D`3=dCUQ+l9>aCY3Lyq%7*;CsV{DS4Q8K5 zKw%}G;wTN*rRgDNoYWOyyNF{wi&nLWn{zmWrJ9v9*67J-mM=}+aWu$X4(GxeSdEi3 zL^ra=Fru6pl4tJ9ofpHFcHC%zQea_$DNtMbU%8S{B-~JKAl{iiCo#FX!$F7qKO{lRllrAII)}`W_sY{JqOeR47 zS!KbpvB-PtqOHPC2)9iq2#?&>huE2 z0vjA@*E^-V0Ya^!LFCZAZI>}9tjh@{Hq}y$VmBLuaS1c0#_*28hX3Lx|EL`Xus7f=Yj_6cVkf&}! zU9h;%BE%G`cmUUb5w*zD^=lm50(ZAU+I3=9(yfk`m4xX{((Oe?U(zamSzmEgD!8HF zv65EIDn>QbunLDMG{P7hXfOl@8*PCOo6$g9PS)d7s!WAwwu33Gc+%r4g`^clVzY9q zd@|w*BKYY2{wG`dVK2Ny00#XT#^i0OWhIJu0&)9*#n(nzN=EyKA_t+f&%qdWW9}Hb zE@Y-SadU@5Zy?4jd)4SeL6XrxGA$T>==y3{1a?Vfbq$nXVjwYOVXpO++aZN61iNm@ ztmUp=!&;y*Hmd`djN8$1!^v=>2|a&$vDpxq&*87sCbVgQhShj8A&RzGa{9Ns1tFcR ztKP}pVAHT1-28~CaFTdt>*A}Ugwh#NbFgD`sfKG`ffQauee1J@v+7|UT2}&|jcvn5 z#A;Z937I;+ zeW+Q|!=KBmjr7A@4NLH1q!g=Y-F!#d+0aP`n8NP<_F1iAH3{x3GQxuU&%$tykf0z- zKFs~}2aMx#ezk!_uhX!YfssbM0zop-MYFFSYXNrT06SQ3eko4F3KH0%cyo%P9EsXd zw>(gr6a_I?cuNMHtS6;r?ZyJ`qRNLUSZ zl>hOxhE*u`LR-YUszny9hU+TVQr%gOzNujmiBk=de%@@MyV?=XI}%Zz4I%TMYgmWd zLMU4KY=iz|6IjSItb*OsGQ8HX0$D353wV>a&yi2i%8pgl`cUAlmIb(z99llU{O>Wj zGQvkRz(Uv#|FpEJ>8U4ME{QixKAtUkdnA^zAH}^Y8PB9;841a!oQzY%^3#J2&7{Nc z-7rSQZbaqDreP_Jh49zmy?$11uafKMWBF<8usFo;ChIX`b6z{FqK2dsOy=!ZfQ|~} zKv^XS!E?@6onDPYT9c-nPS=!KLjJ8nUA6iT)^`d*IT9wKy2&8J?)#n$vyBr+3M zb3?QWirSc~*jXs3bWEG&Ma{0-R^d?%p6~YVsFYJQvZET&gSLtJu*_JSx!juTtXzi=w%&rEf;RT@CF> z3GHB478m&6uZ-_WylafIGwT){I#85;7j4F+%9tE+MUa6Tl5|db8noa#V_f)z*mmq$ z@q9zDg6A#NbJ9=jT2>$x0n{~Y$l3WrZ|Fo;_;ST;do7?Pg@$IS@=)g$%$hjs_{n!l0#D zz2AiON((<813%76#J)`9BAA^cN_H_QY>nSk%<)3k^L zeIQjseyc|h&H%5~G)eoW&fl7rVY8Y|26BzsY=8AnXD|xV2dz!kNcaBph0CD$&2LBN zZaD{;%>lG-*it!d+BDh%Nn#%^uA*;Gg=bv^6`cWVWxYia-0Y$uq9urhw+2`x{#w{8 zpsninp)EP#QpW%F@m_hpn6_@HU%zGLCz!9V~j7l)*qVzlrJx# zKHJ))1cM??X4*NRE&tYCJszZ2D5Sp6|9D9PJh)8=29;M`=xzkPQPb5&`FB*J zftqlho&daOi2of2jBGVrj?$Nu%ZG^_3BU%t-9kXUV*a{o1E9`88o(aM2<=Wl1&=ME zb|H$rTaq$yDqB*nK7!bIj>5<(4!q;BlT$GyJXxPPupTR_mZRdHx=8pcAq{7b)BUam zRz~NF*gM(ENU_Z3slgOB1K5e#6Yk8IcVy*m1R430Mr5fF6=wXn_&Y5>A(?53dRSF@ z7_|}Zf|u{4lm5sRf=3Cq->gzV+N*t=L%sX)-1G%&`J(5nS!I|tkhBhECx{~r5oJhi z*M=E#^1tNMZ<5@8SliOzF;-D%q-X}a6r?ewqtv>4enhGO~pv{ z2JZb0U$79*s0B|~yc@8Re9PW^|2b_-v6=Nw>Dg>;!_Uelvb=^`=f89f20d@W+#{Cj zmnJ{B4ozJN_OxSmC${`2>rgnuRax)iQHnH~HMy>QDQie!cSf&Oy-FgT9EmKt4a1wM z|II?A)ll5+&lh&SaH5XLf(5l^7E}k*+d@^NE6+?Yn#ziJ9G*XEl$0`*Axo;tUthYO zP^%diCJINz6Q`QZt%N>DJw(P13~M(2S4*+!4dMDw{t*$6aoy@|zFiPCRT9Db~ppX>t4R#Z3s zKU$HZ<6J(8xS)|)(|)0$4bVsFh1ELusNv6W3|7}3l`ZR@1?MtYu+D=Uvq*KIR!?Gsr3P-szmMuUFI`=6}m3-w2Nz)^OLjf#@igiT9f zU8yzn&u!m8Fw@a>W=Gyv(Ln`^bB`EmOt>{-9?+c#m~3-kVJR}nNOglF(EuW-L8)8q z{^|@ryA#a`cH3c7c``nzk1$ft$1Lsr&tFwQ{jdsZ{tv1`UI8u`!)t*A`ZN1KbsR;k zxdhkFz6n&Q0U6z3HwwJX?%iK1CxvBw@7!1rJjh_+P9b^+WCujH(*SMZ21k`D!Zvny znB8CU#TU@qWVO6x6B40rT%#e_p(jY$vOZVAnUHc$u!5bwydR($Kio*Usde(w@4wy# z7ZZ*$Skkdca+Pcg<(7{`ozMv;ar6u+|R?>ZnJ4s4It_AKP1R6HUdWYJ60uiF>j` z-gn_yS$S_6rU{#-?Rl?8jkW-KVLkQrB(+9S;fb1Fp}O&cG-aJ9iLc2yg$ylq_agM9 zYIEAo%m;#jzZaIqMwC6%sQ7k=p2qjiL#Gu(gG$#3S)J0}mA%Z=AE@AZQcrVop540A zNV%85&9WEL{5X$_OiX1foIYE<eTdnXIl?Tu6lmyRk`WqEv?|R;(TR2Pi*`Y?>AL z;bj`&LyeRhF<$+aCPJ!o(g2*zUJI_Gf(J)hEQ7)+ot5B${)MH}MkkYy9=n!`4t1mH z`q%G|w|)!KpCEl@HLl4FuBkq_w3i=8Fb%vNooLc_+nam*9PA7Hcao0W&(iMYpy1fW!Y#KNF5EUGHSDGd#=GQtFGw*8NIafRLoUGhC6hT$bItNy5dx zpwns>zZ-MOyiau-K)-*5YhmrH(=AQFLWFx5p0>%uotuC?9v)TMLXcHFaD z13~h-HYk{9B4U(-S&tb!GThZ$2IE@-_OYcNCo+0Mwzhnm(vUcnE} zUnWn%3g&pdu>2>7R^-G}sJe_vDBqAG9i8%+8h&*M=wC(TI&=%x z7UZkud+O90(2?U%_}<`jl_qCE`(^N+tz)`o)qw86#4%;tE#=dHzQ+~Jx^^%#R_rsg zk>I8BO~}qX&bH@{97phegRT~s&*t)Ha+0u-O%tJa&i>=&BtUO~n`6nonui1}NgLsw z!tyJn{UXEB6zqqgB<1!vInG_mFNiI4+n;xbrXb3>%`%Lq33(QwBU#=N*=#D44-FA+ z%xdS&igsz;4#{OWqg7=iF;kV;dfB0jnHZ~gC0^<6Y0`5b$pK^ z!ut`mXbTWJLhRxF@$n@_OWP_LlZ;+I(FQEz2PTZ$ai!p$32Y3nQlG{I(ilwLoC7Mf z2Kk4;71o>2)dDLv^x~ar*6hA+PNUjjA7pb{g>#qC%&#W)ms~j%pEbK<+JJHEUa*xi zy!X$Vl4H7K1*Ma$U~WrIqzhKA-kGn2Gug|AwV|!RVsz@IBXz>;zhIg+U%Da}_u=Z; zy9=&pg;v&}(dJkNlx$C9K#18I8fqepG;RB>(61NaaO>c}3|q2H(+cfg0+)V||0_4J zUGLwaf_AholsQE?u;1#bk^WG-%^)pAV0+uUA{KW~dB}>`ppUn8NDrH%7b?&B^Fpn6 zm@*8^k0LPk$OvsW?y`>UtuU6^6qGR3R( z)~j*sY$()-9cjAq1?Xn0H9S&!AWF+yY-?7%=q+7~ogIqKp07wBsGT7ROEOW;@GgHd z@Zk;Y_&xSfTm6{++SejUh+y>}&Soqh0EXarxvGD5EkgSuG+bJqsb$>_4G;j@V-J!& zH#*O%eIc@B2>dwcQ@eOW=xbUih*E6GUa*@(bQ!c)MuJW@c{~BLtZAVJ>;>`fouY_e zP*LS)eBUFybCk5A3UOE?2lL{&cdx@9H*GK`na|^y1o@nj!ED0)Si){*{?J?>3nFit z30qP&8)T6!q`*a4&5;&LC0zPW#}aP=lnFg27PssK0+~{#hU>_9hZ;O?_389q^W_6( zAy|qsawyaL?Y9J6Cuu|=a+))yE4Gm)c2qyuka;Qr)MTN}RaXwUQ}H-tTLv9%C4kAa z{=9?$t2~IIw}%H?qa#Ew)q1#e(=jvP@Mfy&m5S7>22Z%j4vTbjP z3kcSRtF`J)y7Zq9@9Ov~hhYM_&)@8MvIu!(F0h)Nby!o1fZMD?(>BdJR}#u;JWFo?1+qq zMfI;jK*d|i6k78aZ`=%8cqe9xc8*IlRPs3!mmOz#p&S|n39ZtPP{L#kVek)ou?}`9r)YOFs0*6L{PQ;tH@X7+DD*U0{A|6o;%jBP zQc}xI@7Mr)C|Eyo84|!UNR_RXL|PTCmaec9wXQZ=bh!9y@F)cWL#$ zSm+dSSewI3F5y%FYB*EW9Gx_9t<8V~o=n;lSgC{M}d& z!(U%rFy=anlPSoo*i7Tx261R=0UX`=`;YM`e#83dbjryWnc!S;;;3j`6EeB4@1A`i zO({!zFf65mE{bDfyCZ@k+LBZE4J?FI{lPf3LjQbA997x?!DDdZ3f;PAwcg*rj(+K^ zuEaY3D-P>~N)bT2WhrpA3^LZ1HPum}QSJ;PA=%|B6f3eDL(Dk1Nx;7vd3;K3RAZZp zt0jEBggCx&U?izq7k_iRF@0fNoYO>UHdp^<$$&@c>i7%76@@p{gf4scqPQLHGr zw(LIg$B1AHRb$>$ynIXu{CS8sIE%>`&b#iy``3#yUoSlL^Iw+-cZK7sVWI!UX2@Jj zqjWm8G5{6hB(6<7GFp&BzZtjHZZeGhT9Ry>jz@Hij|y|59k_2BSsf%v0DKmctfOr5eXgc@!Rcp72)@#utVq^Ythb z!WRd_qvJ!H{ciXj|C+kCS~Lf^7=jk;0h^K6RQ)Idbl5<(Xi``EJiBCqTz@C%+__k1 zucAofPr#;>7p7%3DBp>PB~9`Xpt_7}TVpV~qS8Da3$>yr59$jPj#Y_~y+03S3o+|? zA=o1&%d=t+KZ2Yz$Y)q`u5vMgtX2x=VqZ5LCH0dt1B!JFH3E6$M54T`N!fjhJo@N# z9Kf<90c##40#>amK__N@JACyDfW=@Zmt|rvBM%IO)h0l-Fs$CT7Et>D#X7wHVLT{_ zi4?3hJ2N|_doiWbv6R~-$yQ|!=V1YgK-Ito>&~qL(u5>bSt10GNSe{KY2K_GffbcR zSWyFcSP};bWZjY6K`-gVIE4`OALz`XU~hY}J9( z!)F5~^>6z(2>b}0EXlb34a<0tCd&Q(1Fji*NyjSxMFP);&JQbjKtk!1C)L?x{5GZJ z_~Vl}NBdeHl;rrU)Fk+j)48VITnV~PLT1Wk`m)SMZ{UFei!87%BfhRRwisqzZE8M# zw}po%6lA&>{mC)%iYh8gV^eS~n;QYrO6+g>BNKZWF8+3%HE zd6k4mjyYL&{`B}Rx*cbsL+l;cb#GD#b%yDkj_9yKgRE$;M(YPT%tn2bQ6FJ-Qu^A7 z3lHVol+1?t_b96ovKsHwF3i-WqyP9ktU>P(A9Agetz397go)fqJoj}T1X-p(O+53p z1#Ei*JT|AD@q|N;L=(XSWb-M0aUJ>~oqg068TeEHNvmqGM1{ZMKz)HW3eTT zR^D`lcSS44e0tjFK8>j^>T#r_kJCNt0r~GhAYi8wp9r8hV7u1Pz!1IJ9E5w63EHry z$v2^A(ab!84KX&S+<>>%lIE0PTq5cO4;p!5-ML>z{ge_UTA=2NkCvUqowS*_a1w3C zh+qPF`4?o5x&gc(_-Qt;49LL8v*6KJ69KJm{(ePkZq=k)SHd*ucNO=CmVxM=Lt|L+^~=delvFf=bX=!!g9}|U zz*n8aoscX;|IEwBvluP7R)-+JwtdX|rMYCO>R}n$wHP0+Y0Jj#1Ddz(5a4U!Y$tf^ z!N1jnH+#X*JJ1+bKZ8r~5zUxVrF6Oi9zF}jlQz1=Kx6m#N0${qgZQFNIAj}5nP!Ns z{qn^n@H6SgV8=>)Oxdv!M0g-9L&(o4>#~vcmyL-;<(hfGaD`E*uZfq&dXI1HR;u00R|n}WX5Xl)!bx)criN|rLj1*( zFz84!Uw1Rc7vm%npy*ziy`a534o$cokyQpu<>->GWl{zyq~JXqt2v62*WAyMW9?-O zTYlK6u0r#4{5+1)VsfI=pp5^fpH=mbaJUD3PPKZq4F5ckL>OL@kJ3Ah{Hb4$FUqxQ zV8&j!5HzAb#N}2mnR~fxp9dokcKw+-z@kUDY-SmqPT5?SVNQ zO89Q5)f#G+qKfp=j<40u+xztXd3JwwN^+lo_v_{JGTN$ws7@ z>^kDRf9X0X``;ID-OM=;`M|1@>I2%tdTU${qb+Fl)^`G>Dh7HL|Kf<|1K$x`re7Z1vy4!Gprq2!gB;7hv%{ zhdD!t z)K2-UX>+dTfg#~>1r-7-EA(4?a};t;ybQ1MCj$@g;5s($+Pr<&E~4Ft-NSXK*Fxpf zA!M)`()lnCih6qI?Sez+q`P?6Ng70-=40$VAY4psa2%U10I$EJ1|^r^d10| zSSkmA+!*pnD7Dmugey0O6Nzw0FCz%&bhA=#w;7=ze<5B=5*Ss(uwX9dO5f(4)Wzf+kk!SWM30; z@C2>qT9Ky^Yw&nT2OT`otR`yYF8#!jC9kn27S(Im6x)NiYu!#VYPM)eBP9uj16BD$3o zXzffXshQ0Aw%3GKU={a6E8F@%kaiMxBq=J_3S*IHR_3kiG~-1n^!L9}C%QHN$0LxO zI)uihIX@B>Is~3U$q4bUy7<@$sk3rIxa1S0XW_INsDdWTE<7y{E!=3d>CL7nBgaNP zUa!D5$9ghD_<-(}7Cm7`jMosEiSX zk`XnMr%WNpV(gNKN1k$Px3Cn8_qLy33<95nKsI*8iGwMq8i`c4^JF3q72y%-)br;3 zJX$&{u4=|xh>wvdSQML(EHEy%NKp|SU}>a^64l-hg+W~Gf*=t-2w9GIw&!pYF06I#9;7C>YfHlZ%YI@f&=xIVA5%{CV!PW zxeEcNU?nzgqqZHxA}IeR1)I`Uc7nuseURCzkGgy|eK+@*{A$VhY0+sZ5{ zcN96uL;MuSF9)@4GdO5^+&AJ7ttP`yUnqSDAC`{TvBC4oOb!l?50VZZ3@^X6>0YSH zlQHUhlHUHnfl5%7V7(m!$z)9_weoC}RLEfK!tJtmyOmnbfmW2%Y>J4C3AC7Oj+)ge z?@yH2Y|fVlw_G&ImO@nm&05ES9xUrhu38v|56Q0Noet7xqJ)jf;6wB(>PdTWPlp`W7ff&x!+f5F#l+(BR_ZiN6>+Tg* zZ#=|5<3KA?cDo`%rkn54fO;vhQ@i6Qb%}fTJqI*Ft7YACRIB4h(X2+fi@aTk+#Xj} zs5WgoXZp(1I7kSoa)5GqcQ?5NGM`O4mqmIsWWA4?%r4nDV1r$^Nd?M8+H8iJ)m=k! zq8`e(V8E(3P^P=^P>Hvb;$y!m%t3akv7}M5+aPH1i)$BF7D7!?1vQM);*xA9F4kI< z3u?2Hj_2(-IQ4fE{9?=~^>EMQ5*(}q4GKn|7FSG}2a%0tWWe!Ue?yBFq8+Ye{xYS< z{5a?i_Dr2x+Vy>>^bTC0UTsE)fz+IveZYbbcc|Cf{;=C@hjNiz{XxYLi7X!kB0EH_`Z zhSoYhh5Ubq|Emh-vejbU-W+5(`K8@08GWdHhT?FEgBz*aRwMgx;FKi7oheqUO&JKB z*mmCL_8?K}#j~y4ECV>WlKv!)8dVMxCqs7%*YmdLlf!)Kk>(yy+_yr!U zVyy1qio=JfAPEk5^`{O0212#AK(!J(r?}X^?s2ds)lxc6E|(~*TXXwtX>uJy8kIxT zzIf{c4yfXb73V~3ipKreUw;?QqOh-8!twEf$TFvC625b{p>IkUQymx+TVA!!kWEOj zw4gq*-G5yGn;4nqtJ%CQHxE_OE5&!v=uOw;)5H15WP%#1cLM!ObC4Bal#>KCZqaGe z%|+-l)tSqB=D66#wK#yP)QLuDXy)20>!6NX1x;pax%MpuaHW8tjl;9swo8GXDBbf) z>RkL)e-5z1VRud;9^1G4*yY9vcTT|)yU!|!sd#1@mp8sS7qkhz+8~UTu}Q_tfr7xq z4TgWtzF#9{i$jxSiy4P-5ET!lxJIIf>N-2m#Hr{u)vciRP;LHhN+Vu|rMEDb?ap$q7@Xs`aE>gr<020_ar0EpG)Udk53g=?xC%ct zex=%Nq`b|8X1R@`fZ(n+-8bKtEU7iJWR~O>FF3dgtkzz|qPdmA=b_R&1zTc`c-Sir zv^&SqsMseyHCc8FH17h@-V5t;VW5g@Bhd_R*YGzZhzlk z&#XsKurw&?+2<&GWX#S9{0h}Fwg&CqcCB6ehj5$oQPi{jzRiU=;7mRHJ^n@(Q>pJ*jZZu z*tNy4SQN>JG&}x!%3Zk4i-Xm`(Je%Q-3CRA#^$T32akp!8z5)p0t5UjT5`v_aDXwO zPf(_5la{8Jns7^#l)cNlae$=SB(Xe&OB3_N*5Bh$r>=KJb>X2RJp^_ zmvBxu%Bf2OM=%GFsk3PT=&oOe@1~*B9f@N?tV=v+bD!U~Ix#G;?S1HRIKt}{F51hDR6c>B^ z8xF8rxZ1qogFZcL{{*Mh7EXy3Z{QRju0pZLDUliq-F8g&KLTFoM^(i3P(tVOpk?_g zQJ&-tYkr8BT>!8%u${+h)vP5PSQ*vrEeKkb!8-Tr7HHelZ>DaYBIB2}43TdSOW-xya3HdmJjANO&f*%E>7GmiX`cf2%Tu>tcH ztR01>$iYdY61ipa_J5j6vF)U(s5K#KJ1U-)hYJ}eF7K(_?mzR{$gK!`-zLeVPL<(6 ztF$YS78-^YT-u-~G%V>Tz?1SE;KWf^rdK%bmT30N^7JUS%hyk#a?$H6a8OmsMVu3Q z5Fb6q5BEqcy`UCxNwXlZ)>3T5vchk>q8XVJxduD_aA*z>+O1uhYlHN4e~({`2$2#N z#k%RS%Q@JJdL_(W5Zu@Dno}L!pj;E7*=!?pdK?EqIUH$UUyevJGF&H6&Z7xg*69i7MVRC3}XdgAb1?rY#*hyh? z>eb;KaHZgusdhCC34$Im-MsD!%FV)XBkZtE-)Ii7>y=P_gp+cGQl}QV%$@23uB!NmOg?U}JU)F6a4_MB5l-hxsdVIZf?AqNxE>co0+W5UZ zWF{_ANgkX1*QHGx=yV5t)YIUlkMn@tHk>#@5R|H3-kRYnYQbq`NuhGnzoyQ`aayW5 zbW+*!C~vD}nb046Q&qi<^RPY#SMeRP*CNoGCUxpj>0mr&{8$Iwr#%PLb*RA|g{xH! zGEuGu_xWGs>}~K=V^K1(n>c4Wa9|VHg#64y0up z;psP~tB2~_4|KD#)jK)3GAvn%Q$OlIk`Sr#8i^$pi zk_-@B7%PaI5Do~cyluAM4?iM}l-})NgF&`w99TuCJmix4IgeL0Iv4}gaY^=z^338O ztM-eCV{><=G^&{nX_XnhGuBQ0JC6gbkgSE%KDT$=>jM|Hc%z!rmK7Y>1oL&{67$IV zrKYMY$5NN&chXcE6x-FuXq)&Kh#L zyrRgmdQtP{yQhX1!K*vEVYq}Xu|37drtsk)%Lm@1!>CH{UHrsbr-_k$mmvVBL3m(~ zP{!2Yz`6#w2~IMoXo*2DQ36guna`FaLu+xMlvG_Q^J(F4$>gO+HvqUkifuOR-Ut^2 zc6(0=yJh!(69kqGN5f8fh`+P*MugwxNy6{!{CSf17mB-3!Y?r> z?Ch~)u@5@mmoXf}s@9Ie9Ax$OASvu;^qt#FnhTX)duDOl`*3ijV5IIV2nVE3A4mUr z4Wprz&~ayR^H=2HDtVozP3_XHx8KVFdRHf@75X*h;7ate3A-@0WyVY^D;>L&Uhigi zt*$o{KutucFyy(d=ZAYg7%;yD2U1bxM6lw+gYEWyxAZ%ZDc$~?xbqtyd#)u1H^Ema zdvxN_XG!L~AG?CV6M)PXCMVl)P(A%-Y5zo+zcqtOJbZ+rB&I+LCd|ggj&8?6RQ#jt zrfA-ANOa$AwXsu`bP)CGI36tI%Is8;5}L)q&qI2`LB(SuflX+JE#v{qwVzBbeN%An z=xb5cv4t^iq#C*DIv%p3%G%=n<)(8dn-L1S;+z1RXx!h$K~{ieqNxqCX=Ar#m$pwv zL!H@a{e6cxz#esWC60vMlWc~s0y?AQ&5msDJ%a6lE8oH+0j61rZMP8W`ZZe53N zvB9AJSspT@Tg1lt_g4S)ZGpQs32xyV6kKYGKL5;-C4-S$-OH}-LSFuphs$;$Y0e|< zUSnKQNcaMp8mwCFE}l2}^u|>MCb|kkJRm%uTs5)*bh!g`IdSqD7u&QV2h^j>vH=M@ z=h~qIJKTm~&ka@^?w^%7msrty@Voo7DF1!Cvp$9jw!^*F$ZkFnC7WQNQ$XZgTQ zrS7HPBidG<1FRUYI+qg{@%t_lPRuHcqg)r&_S*@rGx_sWZhcnLW>QQVws^|VgHY=3 z!q!RREu#3?E<-uE38gNfBs(2_y<8b5$&x429ecILz)8_}rsG~)-JQ{D zy^5PI0G)XHl;$$d?fj!^4wUqBa;ja%?~6FV?v8K5IY@DRYV~P?Zav&Z47L&2v9^9I zIiO11RccRa$0#grZq`|tSbW$)P4AF3g3wCuM4aAUsrF`Si9BN?+WCoFHgU0o4{|`+ z-YZSEJ6`TK6@#OCk00BzsdSP9D;>)ABSiQ+3#-g*?XS~)!m$(9FRnesfnu{|YN*YY zqin|U*mx_nT%FVyGUVgitjln;<#4+@{`gZLa8^=ew&we~AO~5Bdx;#PaM;_?zC|nP zfyvY`Shn^mRG0&qP9b?fx}`8zy0Spph}=m;#IHR-9nY}^P{fRrBWOf2{(WD_rKKvgZ)$+C2_I+n{jXx zu5qIZ_GNj$%15i7KTjUO5vH%kLBXVoF1-t-)9MvR zzXzY95JK5I%GwM|mJAn)$m72rtT~GthQ0vuJXm}MH_PxxoSmyTnvZ2ShMF9-N54Zx z=<~%x^QE^7+1vZ4jo|}=!f?vNjM;piG|q;ZjlHmO<@SD=yyxSD(5ewUr+ub9ltIwo4Nl*iP?G~?)XyoGn8Ak&HyRB3aLP-smM-B zN3~%R7i*Z!$BVJraq%SHBMFT#Ql{5}a^^bl8VWfX$gD9Oo-2e(5a1Te_Gfc|vocBO z%Qs&L3$uB6%boPjdg7bK*_)#aE=(3v=yGw7p(l30EY7RN$>My04`%OS@3Y)H4gx60 zHHtXk^~ro)dZ^DB!$a}#Doc&NGfpB{`Jso#dX4leK2L*!LVOCb%ZJL%N`b;7=nb+S zxat}{n1j_?tUU(!n zAyu$JdbMbrpITzGxfn(?L`f6)GxBynm0F6;rPK^Ob)H917~-Wh)UKyA5c>I?7*_&V zr%Y-WSoIbUPwXXQ5n;upEZ{XEmdw}nBBijfa&~!tX%dFr#!XPC0GU(qFbpPJn9)uN zlLz1Vx4(ffc@BuIF~85jLz6oKTwV9*;ohrV%l89VD2ijYQ&}rN56ot=QBs@M=Tc3Q zwyL@!9J5fbitwN?HXlu(s`;yqDgQzYZUZ;LLM<-NgCf30n1!i0G6`8rFd{eKR?%^pKS+KcF2sqS#)4I9+doOck=fRdu({! z*z!jzLR`|1O_>_|@Q|qQT9;TkCf6%Kf4~qY8@*0*v7+rJr_o^uBjtl{!b)Zx1c^;X zlFfEv%GBf$=K&1F+swgMiWA<|uy&K5fIAD3lU2-2b$PgM#jHgzxm*=m_WBiLxxdy> zw-eL(^WYMZX|tQG;4gqp) zz(T6RLRc1W?#4rQv$!^a#dn^b+uj1cS{fE&E72i6cyOUsDX@kU(0tPP*X)j{(8)(_ zlqLJ}&|Cr~V2%G2)g~BB+?^yeTnp!6!K?9^=_4j*ee*` z4eTPYM237PhG>kC9^@lHHrkWE)EsH!0$B_@_Hyt?G03pUkPwTW|4yDKO=@-OW1Znp z(4{axwgfq{kc(;52OI4cfkzxYcqzIaH`NQ%>3+oMC7S~-U&6y9zYsg)s&BEMkZk6G zqO#$)N#=r_6xx+Y6NDEqC+Eg=VC2_eBpZI~72;t@`AZ=DrhvVBI5~gKzy}YYpfPyU zfSmwXQG^F5KdBgqAQ2I0vs%prI{Ty!ZqT8nPWS8&wZgo`llI;wT0CWmmQd8F=%AmU zRYqHMgIb1bY&^UWRCg2uY;VeK8-{(Q?a&!khVK{hu!8k)YA`<|NHwf9CliWK$Pn}SA&^rs+rw1SJ{yc~&I6^NRzsnq) z6%q$TUM^&@*$~;3yacHw_BApc=AcPbapmKkb;TL| z9(F7lBy=S0{HKAv!zj6koM>GYfpMBFMnp1`QT)xz__lYq9l#aVJ?i2bYi4W6|F{5Q ti4Z-18aw0)S-1CuryV9d4d5 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 z zF7gn~#W02uY;1xxh)d{>j*a2%cPs4h<%qfO7Up&dDs9QoEjFCEFqZSy6w>YFqLpL} zHE+kd2FBo6gg=^$q~=O2)puxwWx;=?Ia4ZG&O?VWD<4PMJ67awB{Nu+jetD)Tc0y! zIj-y$pKX-*J?H$TZH%arH)p~fPFYHAxcyC-2ln;5U#C%ee z5BV?b5tMt5rG;Bwe|ze;_>la#OT9Tjg{vIGX&h>`OP;Lmq{VQw<<2a=s6a`#e&^LDim_Nq(j@7lUb~!UV|F^1h*@mQtW0wEF=}*I zCraH+$!NmlQ)CICa{LrR3y_T{1L5lTZ9@j6q(O}dMztr7VGnu2k&KMr6&rcicspYl zp6dIsAbXtyIa z)w?8?g-YWdb>UegF>VgA1z{?>bqAZHJwD6Vs+9zYK=FZ&H%ED)W?L(68@IbS&@Uqi z8g~2;CqfvJHo^)R*6pxM4~dSbe%TGbOL;v%lg+a@4G<&tb^$StXf|7|$Dzj?g(dUK&if`_#6Kr^NA!*SZ@7-Ph)NU4;W>&*InJiIQ@-h^yKLXrF7HU=yIi`19% z1z-GA4TrxFF#ZW+tT3KGCjF28n7Uz=k-oi31X#(hsV~36oF8kEn4{Oj*v<*EZEB) z-Y0o8>nWT{P1F%_Y0RC-&dc2wlz0os4aro&I)4nc`ab*W6F< zDOG59?Ncv)Tu8~>X{^NAqcE-}A)_eOc-HGJSCR09s00DAfC_d;8{8S}uWZ7s!n1h7 zq&cvA(Ri1fl%4oEqZpXUrwtmR%d4uAH`56>-k(F#Xt5u&~9pg?=dc_Dmw2NitI+j z!+j-^;uTk=F?g4VFl$)O8excbY4nE`N%yPps{2%J*!iA0>DdYB0sZq1Iw-+ zbD680)v}$c8ZBDGP|j9)PH#w`B^u`Acu!#_1A+D_T{|+)zfoarhIr2)rILD4xHziUXckXKb{V$f zuh)Z=^13c%s>H}jN}<`p9&aDEz<0}aZRXS0(~-GMzy`%0@2uc8QC8pHr`%v}4L?kN z%Ob_XjXP^oc7{S$f z9pTb!F5~BD7daY5&-s=%_*wtL(tAO(wq~@k;I3(rQ*U#Z{A0#Rt>9sHdX>K&$HF$x2g?L@WpK>6saRFa>Tc_gQfk;cmTb-T$BiOf>Ia0zY*&Yi)P z8oOL>046o^(txOvsA|Y%HA-=q2)Oy=cSfo)@)>!cGHL@_L2fWgKV_Dx)#;CWp`J6n zvSg-#Ea#Xj#Fj;$fVnQpDuO4L0ae#3Y{u55NCDJq_AxgDo;+ac*Hs@#|^tfZQZbgdg~(8y(AlU|;*SWIlF*_}HA zRY+au0*42(X~V#OW+OMER2aDOoG8r>%1>yXB1zar?wl z3$N?H0cpV0!0)~=kSiw9a09cU6}xYa;bn3gkjie+#_2Q@KSg-a%vkmTJXEKwJkvO3 zB`uF>DP+(1jKF%jXYJNN08_FX1zbnooK~M?45Y(awxPL(HoU~k8Qa%v3p3+e+ZM017$wY~}qD^x3WsosY3I$)DMwJIm`>N6~83Q#`A z_|@jT;zzd6Z&o_lqlyDg*0UAS+=HAK0gQRp=S_@?yueU7Wd@bLLOv&K(&MkF6#SU&_4Ca{=nj$wrlXAqjM%vPRxIA8pcjrUO7p zsdF-ITW8ra8Zns=lS!>4j%=3TbxCgpFr1E$RXk~@fG(U7H0&qjuWOKyF}HevD2|rT zQ9KPPzsjkXR6-;&6H$@@&TdL4xzq+i$Ml;53hf;6thrG z%3+?4(!_Qy1c{S|M~-&W1b>F?U#0x7!0?Z^yS$U=<0H5SlN4I}HQ>jP|-4>J0p(MGUv zuyE#V+<%qi_|Rz6PI112wm}-B8@Ych1h&7iXL(1>?h4Ht*>LV~yFGzeBti6~i|OR) z6cl1Qf^LC0&GmJKat0`wlx{=7FYqS`#w-kMR59T!`;mTkhlR)0rRCR0Gt3ZNGXs^c zZj1ThS*4fknTZ$#JhQ?wr0GzvQBQQchZ>+ORvw=~^?V}r!`43|)(SPtk?%?&UfLhh z_ul9DJcG$2@|Bm)E>(2u4pO4=K*(HHB6!ujpAXV#FZhHkp)Jl?f&`^OPVoh)-D9vn z3EDE+V7`7(=63tmIJ%cakVdstJycNtMF0X039SR`@1&OcrUdJe-NU{KV=&LW@-a}T z9!k^k#LR(kiAlWK?d87cgCAt?2=Ia#N#?Zr%`>KowYhx5DyAL#Rr zw*pk~NR*9?%)Q>Hn%Zi1e8}-R*dR5n6MbyN+P ze!)WfAq55rs8~V}Mpi?BmkTWB4BSw3ti}@HaAXWil!{-d9DV34ciQ8mu@SRgHLyQ9 z7p*R?-jo42Fz*o=hqNUd$qosK_pf~#fq+YXrR0q-n5uar5dT#az%QdOVo)+1$Y88c zs25dv;q3~hK~Wia8X{~pH4hDl$^!vuPqSINq>Auq7G^Wsj4F>{8a@pSj$b`n)j!$QiF^uT?d6YsLlfpzY zaPDsFs8y$4ZU8H^>j=&4dtlloXC@9>(cCYeh2RW&yaBUMlC1qaa<+W;3##7<6$kZl z$Y_yvXMVs&pAD)VD3eYl=FoJ}R)IJ>s89*HI<|G`Xu&^k*WXNhd3#R> zqb=8}Q;j?v955a6-rTB0{qDJ)eQ$#!MK2llNxlojJmq{6OLNpK&n)FrK0 zO8f82N}B&XV#HR;Jc*4-V5UQvZT%XMe~GA!tmlK<7>BN)8!^R;}oV> zq`)n^Vpu3$qM&_SuF4q2T7?zP6Jo3_u~sSuY6jh^P8Q@ca6z7Y8Azmbd@!RU7ep~h zIQ->P+mY#%iS8lLj0}0|+A-?Z`z(9TI%dL=tgJxFxMtLACDl>ilIn`5}wFi|$KXdwWHFFT> z5$6;P6%28S?0=D8tvRGxX&@3v1dhN~(jb*V_-JYaEWY7*9_pO^G+S7_+@?CL@Sj>A z35uIh?PP=INFD0_U?{6dgCK+hw#o$>^$^Y_7#L8imB8npkB<8e_xV1Kw9veBt`z%; zUbc`Is(u&NKot5FJ|2;cG(4Yb72#!LvvO6R-igN`PzVLRKng%&`zM^{ZD<*b$C8P$ zT@ERjlAJy+WUs&lL?pm~D2|?!^1&qHE*_#QT8>#&`_B$WAu823N>30nm0?g$0&~tV zY2so(CGD-p2ICfcz#rE4gm*03$%?FQod;Z$xaabUbF$185wA)_fKbJ(vjq4^@I!LK?{4vMb1L<|o4Wo|_7;MM5ijWKqGB0lu?{Zi4WVQcq{C`W=1>S#+zo)532}GS~$OF&w%=Y=eYj5J8;Mfma%i*tNYORg~X^)pMqMSVxkseW+#y)*3}V*s( z;fb^vDToEa;t#rD=y<{A)0vqMxvd0pY1!YG2wwq-B88(iT|>23 zM8lC_kT$nCnkUDT;)7-7RHV%0NK6^YWGjdjrx(Cp#ML+IwrEF=neQ0oK)H@@GFEi> zVPB@B4ATKMbyeaAUMjhHVMQQFA^(8(fQ5qd(f?8ax_gmX%i&oAxB+4{BPISrm^?WS2rnkKjm%|2ZPxUVo!RP! z;Lv@ho1@vh+l+O2A>Ev=pWCcQ_d6SNS=nB<^iFS!DAxA`ZSexMH<5cS>&fFeJrQ6> z)}1J-IEchq{f_aGk>V1mbVvZkSxw+3U9-y=WN8Oer*XB2fxc@l$%Jxv1-CXd!XE(= zpgH>2=XMxh6x`~92p*%`_3mFf=U&uR zLkK9y^n`+O@DJ4eSW=R-PG2_O`IvkTU*ipt1akp#kvUstR^fpsi$tVsey=Ll&yHj> zx6#AZ++unQQQj+(1{smi@HO262_IbkNUcMEeiDdxQhu_e6}j>Cf_rymN645KP{v* zIY2>8i+TFZ=@p1|MAyZe^YJ}r9PmDZkHwumrtxt|>3ivSGy7~b`o1eH_tN8GYB#4; zrB1`~1}?X06jPI=5i-^Tul~WLnc`gP>d85+sD;jD4*4Q!vF)wQlqE*_*tEon2_}->^+df5P!EE^W4s zp$EmEG~37R?cI2MEkvJkJ#S^WBMT>pe>Ig{0+8P)ScWfMuMM zaR6?&h3!I<59?T_0EA0ZKv|@?W4RJJiB9dW60VOz%YG+791D74q7R`&W#@A0v(7n} z3+KUDb#gs5zKvwB-=^B{Oigh=MyI-D-wv%4Ej(hLY;s?v>OZMt!-=OkW4M;MX8|VZ z5HoezzP|Msu6wKp|hG6m?PPo$fq?hV2GQwOX<~ zF=kw-;E{K%c)nSISFii&qi}6(<(@r#Gk0|%*uMdle+EO0b`jQ@RpHO`D;JwoGOM6^ z+4pTF7tlGaegWtdj-~xoZKW3@srp4$Q>`?K z&PVDMsPN|A3GEA4T~; zX1M=Oe`L4HKR&i7B5!1`VL_lw30N_R2t1vWIL@lS5ew*d`!Vin=2I zCntTYn1tGXUe^MH?Ie-;Vfz<%e64UWfwb-~x$taq(^K7)!`2K;cI{l$PlpOCu~_64i)29=jxs#z`fPJk z8Kh^;5-3(A8C|n^aPYj{-Vj(>#*Nn=W5yV=;E*9OzW7eq^rHH621Zk$LS8P{B@?er zA@mmnJ!z&HwusB(ULz7eD29WSe^2Tw=P1~~fvHeR8{Mz2B9jK{-{2X)-ST!z(*-F7 zUe>^;-?FKkLCm6DtY=K(K3MADZBP3x+`i8C*?#rS3Yy$F``bGRy1$-vp&irmjp6JK zgB;sAfG7)!R;YUAZ$=UqD;Fk=iq`57dtrLOLL{3ZSw;8p0OiA&4Z{d%%4_oreP)@X0q+y?MrQo?`T5? zM%~Y3KUoQWFW|`iO2Jk~p%rRMg=)&o8tN`LC zTQDg=-N7SpX%4DU>LtPb%Kl-<1zbi{d=?0vQ6@WHzzFo`62o3_cvY=;2>7ohi}n6i zI(OlRTX@4xlk(kIm6KQpf(_qL7~bDYy#i^_Az^T5Arb^n2;bnVxPow%`GNtSrc#;sx1LE13Zq ztw^l&{Z`UW+yG;io3!WSkf;zmnQL)ae}F5TW92l2v7FdIRUOcL?B9}VBiVM5OYW&+ zGwqHf+i1c2V%BESvK|AvjSRMAmVA}g&zgbZeb25fq9B}DB*oX_{ok(7e7FGjoD*FYsRXNxTXPL9Nd=hdWndy>FYkkRR>^>X^aB6qk>UR{U;baRvbVM4hIqoU z>780%lv(DZe9~5DH*Y?sbDpA<6u=Tm;I^z@?iH)~QfaPfrH1M~ z{z`QD-Dr_E4YksWr)h5E(aU_IqelQ_NyS72_ADCQH#tFr13k5xOv-_n#$>PO@r3m4 z36u4)XCn>!D=0#R%Dgdb;Gc_3t z)op-V7fo3@X~0iw7srV|Lvp8<$zlmjtGSvDq-{HD6F`NoVSRHgW^O)Bq?i5jDdVEJ zAMN^zRL&SBu}XF!C^xl{gnG1AhRZu6wYfZD(w!}x{GmxUW0Gk+Vnn&o$?zP^I-x0z zY{71G!+uT>hzH&WxvIvXt<>8V-@dd|l1@V-&y<;6Vyh@xf-3N&#O$0TlQgAbiiNVW zhyptR-I*2(;>9M1HN?(WT{W_)9?|qZ^4PKb=E7KoCj54~sde$XFmJnPY0=$XBZ~$b zD_@qb(us1H%q=VF{qyRMd1P+>jyXfQ6CLToVu3`@gPZ%WU63l%Ks2r~E}wm7FdZVd zA1->L7b|P1aJzHB&$cgOPoC>+?dw)$Q@(eR&0Z&>`KR8kpKdRW-q`u2uc>ez(~BMh z@5{~y!UT+wkC05vwT&U;0T!=S{v`cnleP-V15M@SFE*Q+cFhb4&;g1Bb5*_7t&*Si zE7`t1ezF5ES>EP(K+4HDrnR|-7ZYk8OEKwyVTP)b7`F(B2NKlkHRj!6Ns6ErMh)xH zYpG6hJ+E1$sD#YqxCy59#nI**kT5Ju^CXq!DQo>QOQl&iz*#2I_E>^SKB8gu$+j=h zT~`;&U|Vi&hy<)icC>4h90u{#TLXav+r%JLy$`>yasusO!f)+3*%(l}fY zELmfT#tsdzMH1Jo;g~(8IxNf)x_!$prQq^QY%Z1NVd>4?BPH|D8hEBLdt^MZi%yIH zDj^sMsy?Vcg|Z%&wjhfUXRA&kL5A^yGzmp%2j*53c%;Hu@DIODUx~=Cr*eQGO)zFK zoShGu5VXR?;Y4w{A^Aq0Dg zcum%5v{}&4K;fbxprW6wj=z`=19g>zE7Fu!ogn!woPiuGQMZdG^I({X9aa-mW^DrN zTHsJ)(2%I0VF)BS$+!nJx&i)>ABoY&oDTA95KiY~aC_$O)Pl-(8?J2GjrYd|tnGb| z{1CpQFm0Kxp7$=;%%> za1SlWFpink8qH7491<&B^Bk}Sn9RhkPXJPQc|Ge{5}#)Ao4W+EWek&kLX6_EVkD7dwX{uxh;ZR=TeM~LTU@JZOx12*RK>f`>fKHY6y_FXD*s- z>9DGP{E9-!Gjc)kX2j|O6dW|s=@?7PUYTPP2L*04jiM8heobTkn}vO@ay2P8uqIpJ zeIVLCT#SApd??`fO`st{OZ2f)#Jdm3appzD6^Nm{uP{)MOoZqg+@U524YhO=m3aL! z)sX3O7y|QkefoG$P+bI{pQZqwhF$3I8)61xkGwAx<~&mv#90LRKK|}Z40B_JY1;h; z%meE>8uJj-H)s6<__a-OGlcp5EUp1Jvt!=1QkYDtj?gE#^_eB{nE9|fh|}`>4PxZ% zO_&J}uLc(I*57~khIw@b!^$->RsyJqbcu;$*ZfYF&Ph)fl z#_$d{2)v@{!ZvP&r*G)4QQ_o3qOU|n4!OL?EyYsz5c{Z*ynwuuXwvu>_BZQzky(BS z2>d|M#6HGT#ngVjzbM?Do(54qKk$8fFa-h^CcnVw@$vWXa(xGSV-JsNb6*U=7bgcz z-9Byq?C;>W{~-82*WvLBK46P-SPR%(3Wkj9y{#CI-M9?x;QnDYt$Yyp0av!rAbZMc zL$?5gV#Fys0EhJJ0;knMsivr!)L~FU?A*X^A_!Sc69d0r?uDY^MpK98YT#v$!5yO!5lBHJtG?(08rO3Bd$-H znIZ``fMarleEl>*68rP{Ix42?)o>NVg=cc1R~} zh!ip`tlc(SSfoT0<%;S~UV^MCe@8P^WD6k-NsKr+Cr5kDZAeL5SZ7uka*|t}n*SHf zl16y|#8$_(sx~KhVP$$bre`ThL|JLFadyX&1LkjR=>^KSWR*skmP`=IAJ$HXw9Khe zz#gjy3FA-wYp3RDE(Coick{|nPRV-$6Lpwv6}O|2(9f>VtqF&Z&r(`|1_awqwB%E1z4Qz6mil6kjj+Xr`jk`RWZwXH z2>b5!zukmzAfOwr145eyBpZ8+b{<@{Re01*j~s#Hc~Risf6*o$s(O2iNPrAS64c$$ z^kd1fj-WLYiuql9?N?3&8PiaGR!Y;NU1xG0a&%3!dURyN#2m;>fwd5cD2#C5m$q(( z97cR0VmgpiB0wc49vh*XP~okJW*4)H>R(2*)=`PT$7sk%hX^e}_32N-@lU$fQ4W`s z_h+7m zotgcLZb(EUe}1^pl1x+B%}Xz>1?NNB8)kICY}9o5r6Uq3sg#Uznvr-h`8KwX!+5GR zDu_a?W)UKBd)lnlZ7?DvH3mvmmHoAy=Hk+#)uzT#XqO|!PbVIbUoC@0u;TEvB4eC1=xT;4PJ)VT}SSZ2p|DW^Z=!E2orJyeS>$lfQ6dAO6cnpB;2s zIA$%G;s(+a!L7O<1~XwQax=p-Ljvz7Yq@mOo*?o3=4m+p`04Wu2tjZ=S(Q&WUbd9w zMhO00y0kfZ)*mX%mm(n6J0W&8B$gmK*6&f_NGp-aQezt%LZ7pVSrX(C0&Rr`mRNv3 zj<1{f_o3ZLl?1N@PW}@O_K%|MI9sP&-tEfSQ$XfsqX5tl{;5CQu{`q_I!}VYPs6yR zGXzygHe^3p7z%Z#upnF=iQlFnG|(`!h%jn_F+)1NB*C@&yz&YtYE&21hLgA^HA!Ef zjU*m0?r0vGs$*uLo_`pz^)&W5B%XJ`HnYo0B%P)vl9O8^1{DETgeH7Ql==P z;H4c5Y5MW(uLO6{5xvA1WcJy`i}z=Z5GxQmGd%Ui;S)GQM0xN!iZw!V^5^=?mPbK! z>e=bv`9#tRX1EzfDWxZT(%E_sR@d$%0cTL3voHlE-gxVFf)k*Gs?8IO(8ri$Zfs~{ z*e7&QW^W`ky$Nd+j^eHfhK*GfI{Os6!i0NFxiC`6=z;-8rODe5cwVotx{P0jsoQh+ zZq9-=uWtb%&9!%~g#Yq+SJ>0pJd#%XZ|GpqGl+N9QIS1*5hgnPJc+jiBXX*fp8Ban zht2WsPSOj=F$a|r9n!NLZ=8}orpWsVad(l9i`vC9O64SHD=(GLjXok}zMsJNyb*XXYSm2p^NycJpv)z}Pl!Mkd{99nwEf`tYHj-2{iuYdSU6RW*o5= z&Pjj)V}kX@*#J}zbK`KFs<*iQihuJFSAV!ja;i%0H0Pu)b=(Q9cPB zP&#lCEW{o%kT8?Xl`4UP$C;wwAv+Ik>I&$JO_JG&Ik~K&b@Ls_Vyt^w?fF|vci>-t zEH}e*2X%I~(Xqzr1qo2gg^bpqJralJ3f1`yig^%f`);xtq6!@tR1CKwuB`aP`X50m zTjyf<$+6{Vj2b$Bs6fr~TBMsA5y#wW5+OLFG8$I2m^4>K4CZ7ohCDHVy#Eo2y!aL< z*ED!Z237<~0s%wuZXhJ%!2{zZ2r}fj#iXqvAd|F?Go&-ke_0*+e05Mx zInu6cnG}_Nc$hWF;|Q-D&46cr31SCL;@i>S)nC7|Q)UT2CYyHeQv_+T ztuJ~>ULg2vp^ss#MDl57SL%xC%_Jq+89}&*@@veI&@q}w$UlbB3)*wlMH3pKmkE;(4XI+ zJye$uXl|OWNj&~LPXogpP5J#$H5%>$U~l{y8A3A}1(5`C^y*b)n10~72NBRCY7AHo z%2+HAx!5%R70RWTp^5_!tBt5w#*VjSFUzgRI`<5aaKv%6mAeLP8H`mSzEWby|MXD$PP z{aI)uA)_Ua6k9b;0K{rhwZ?snF@wmgaS@RR`%Z!`r*YI}Lm6-mNiNQ*mxSS-LnD>K z-c2O)<|r3pNNEq8&?`+7%w_a77Wu&9a@v!h&p-XYP08^PHyxxDm4_Tn8K zX=Fs|jwT#vMykpA$P@(&7b+l8TPqkfQxzeq-5+Z2qhn#}7`$@`(mR-8wK4D8`?7yk zpT-g$opn)K{@c)NgkXwy0K-jP!i*$)QXBE`i%Mt*g^7tuyCuGqSMSS+&(9MAe(k&F z4!wX;FTxGaKMGn|7br*QnEUM63;zD)iVl9Gm!7Y=U?x%*SSs0?zUPy>gdFt0-o}It zs1G8&K>XrA10aw+l{N~bv zM^rCO0%dj2$x=H@APZ-jTfZ&~wj)LH<)92V!Y4xPXWeP}P6u6ncd%ks&&q26y3F!I z9H!X?mJ_)xTN5q;VKPolSC@BAv{#KH%qrI4JI3z_3nV$RJLdOk6d^FCEfH3Z9~!Eg z2|3@$!;{GSmHkt|^BN<(XJB$~&O1kb9~p0nKyXEEsNm+zjMFPs8DJd6P&BM_EZO`r zUPnSVS&JmR3k0kLR0>a+Z><_9Uw`_KCWvwfug4=okWgsc(P(89X+PsIo}8A*e{>y* z3Jb`ikubd#Nx1dVfoQWDSOTf8uqZI$F|4RtO^eBML|6K3A z*I(+$QnTVhB%_;ylhfs9e=mCwH@&Z#i}Bv);GUX}Z=Tu}->F5n#6MIc6~3;gsHD zi|gol{(x0jR7XZPSiPn6x!|9rjgcn&=#q+p7VRR_>UgrDBTm>zcOm1A(O85xh2NKK zIIy!Ahp!KqiF8ntrHn+qi`1kPMr{AwH}%b;AAHwB>O#v6PD+Of)`h7oU$vG@RP_KX zo%^pOUZVtTWNAOdC!9BlgAVJ^Q~2aBB*<`+JzKpCAvZ4(gduJ z?FiwMEpPe5LP|lsv?Sy57eV$!)s0}{$8}OcN`PozKK|7CNB8&GRV>g)K4w1^C2QW`W~jepIR)8+uwjR z-+Vyaesz?q;@2I;7(K%R$FjeIomLj zbZqYiQY>t>#-zc;BC_EPnApQmQ!p+LB(53P95{}(1Sj969Q`>beC9@=3id0o6%@O} z=3mWr3m>6ji@Z)Y7OHk@=MXOR^b{wT6Uln0Rfmg_?8K5*VP;xLaVuhLZL|%Ce(oHo zE20=y)p6fcJN!!tZQgw)^==GP4Ag)Td%0*vEOVCT6O$BfeC zqqTX^!5{>|Ka(`6pQbt7?rnf!J7jF-3ws?-3HSa;<5_=j5zJ2EhLtz<=sez z%qH?{4wDfysP9WbmR;m>y{o_hOXO@Vlkrz^D58X6*jk$Bfjgy-e-hpR#d~-$Wc3!kf*<78FJ}jDkK>g}BQau}2;SMx@$U4(2y+t*&^a; zsDwL<=U(Ty;jh3oVq}G14J6P-=lLdW?5_ub8(F3^TEc4+y_$ zRgSt21ml5OM!s}uVfUu=)Q_o>GQcQsNa7)AWnOjP=S_JX=YbJ)X06%SqB&P)muyuD zZAxJ>b@tp^RNfE#uEU=IAfwq@JSO!4WQsihNw^NAqgAD0+|5UG8Dtvd$Jo=@k%`qe z13;;<(7i{Xq#iXxIlmuA!!C!h+P+3`37l5k?5z|Desy?&gBxysEV~sm_h!aypmF6P z%-@sqGPmuewZZB^IhIi!}yjdPAuI}PO{x;q-8eW&)Av%u<>3b#; z>GQ<=9qIpL?{4)kE%od3irLENbY#{Gwy%wFY~@?gdNR zc{dWs;zipV;u@{n29A(4oh2iyFZOQ@C&b&UShMJFuXZRca(_NXe z7@$5$p_qA)p?Z(wD0t*g3PY=*+CChdEq9*~@MdfA|P zNk-InL^}yzFC5XuEpEuzWL^IPv2E}=wEgvGO90(<+0*-l9g+2VcA~_q9V^wtz2hM9 zV9*aZ))d)*u)@48jdS|#y_bbtvgTl2cfjMU#vDnA-m)rF_^TM6AMB125H_ikja@jY&9L9!kato8TYxm@1;}=VLQTGWPFg z`ev&w)3fCpC+pKCFqR_XHEia=GOT#?!5Biwqo8LK5Y~iNevJ>ajS$I1U&NXHV2bT; za=Yb`xV~*<(+dhD6+8&^gADpBH`_W^wrY|X7)U+l&_t4LC-^5e{|;h^2Hv6ldp(cI z%;o`BfQZ}3UdRWB_V9{p%;h+=R+dEV%PBzasv{&;t=1xQUNE;vw_bD0d-_E-Q~v*fG^ISM4s9Il}G- z4n_^ctNL=5u;2!CT8y^jAx4Eb=ShU=?_MDYDr=;VGIqAeOt~KLygX9q1bw-sfs8^m z?7ssKYve&~^D8-;PP#eXF)4M{e&9}4d`jHmw7o4R@9Ihh(Eu73C(|~cT`|ii&WFcK z-rv*H7Zh15^R3g=JkQ4o1{d&(P!WKB12;3{>MxEigMr-8*NArin=StAg?_melNWAT zL(WFiBnJH01W#R;-Z?BuHC@BXu-0;5$b4SM1Y5%5P*~3pwaSL2tl*!J#m-#GfoCff z!XO&Nw6jAPKu?wS?>|#OdXt>dVs}lBm68TK8!BtE?HFb=FSP3*X3mLrOw;Y+n-`PI zs>VS-Ggt#{ijS3%(A-qFhh#=$;28SVSX|v=0<0TiY>$=)71x639)A}b_t|U`?@(_5 zVvN`+U-p|yiE|~j=x5EFh}SiKiDR+`m(>`|d_ny$F{|8`W8h>AL(^>_n64|qt$Xld zUSG4~ba;cP+B~OwceTAdJ8I(*j1o8|Uez?$_J@VPXSRn0TIHTrQTy+S(E$Y`9G-VC z!zoT;ugI31ET|yOJZkF|%oy~8b~l=?pg+AkVgSvo_+O=DN-*~5GoQIJVl!cy!WN$4 z;Au_E*p0(gTC7Jz!8_N)K5g-dEA<9VwHgByewD3lZLD|Y=8%v2v|#8Nsk5A3HJt>- z_uM?snoeTT61Hxkaa)CD4Jtum`W3B#d>4qznXe1*p5JPP6>|R^jSx_A!1}lf%hRnV z9`YL<>&O9D7$h9{;S|DRk*83NqFI$_>EO=2M5b$#0PL1AMCp65=4G+d~KQZo5Cz4h3xNsgG5{5Uf=tF2ljk zbPTTf-$I_$?{mQXZ;;h13a-pBb^<(>RwXu&J=<+ zEzqiyA*IzaDX$)ojuRTcbUa3*5wBIe=!a;tz?hs+%dE%j_sp?h%c_UHT}NsL4@MPAHijRO?8`AJ1#QJ#AFWIm$1BFhwz$x?4W8qs(u;b1Ft-5>rSFFeIb=!4XE4<5&~>Rqq? zg)?s7c0Rq9($N)q6bUsf*qFX0jf!3b4|5x_v@X?wz)tNI^u_X&(y1}1(Qpa&16QNk zxcH7h{@0==d>&W4)a(U!`g+Jl29@FhJ90X0t}N_T!8)|T09>jBL_jrZu7pYk657I> zZs2B$4(YtfOO206ZSp>Xc=Wc66ekeUxw<_Yo843uC z(H1qTOuEMUslMA}Tm4l71biR^WsMksK*AQ9ge2uX^sF`UUH%n-gq>@%rtTw-bo zXYUa@>h*Yl@Mo-GaB0W6%E6i|gZ-CP+HE;#Y*r+ybJr*yKSrL84)@pxAoYjq0|YzN zjdm&fCqq3IB4b3byJ2ho**em~!}C@ztkO2Sx_N?sXT+86r?CuF&O11wG*aW)!k7>6 zb#9Yn>$&Qa3M~(NgD`sLk}Ysn(bZ}XI6rn0$3p^{XgQOxP1 z_bnGQU-y?MU#;!-CG7^YKbsKz>R9dvFu;M0xjaJrKNoah6I|lu(Tr?0vzK(Un%_#S zl3YWXfAL+)F#3^`QvOC`cm~_lh5Y@+#AbpHXhYViAP?9NWDD`tOeN?laI94 zll{O^zf-$Y;5TUgqt$o!Tq$YZ$D_HrF`{dT}P+osABWbe<}vzOIT*#}0cTnN*1B;(_mgWMXw?QJD@&1tQkv zLgJ0vV^AyMK}-wMrGdksK<E?>)J_Kplv3fNB7~DwyAW8!+tI^@8Y+luW{uV2s-Op(d4x9s`L=Zvidq z1P;Mq-_1J%(bve1FE*w~bnKt@0g=H(Mw(|-M1M+Yg^k>9Sp(y0)4h1UY#%vm^SsIst?bu8KIol z%6J{tvQT3`O}QUb$YbpNUzCzkQ$QlpKX?!Lum5>T#(yl$&Nk+5{}10`vFiV3+*y4^ zME)^WtQ<3Ew-N$DH(M-uN?{XNpu>k1Eg)iJp^QtyEgbjV!IfB>*kE%4#)&*UYxm6Y z%qK^2^O=X%=wDVWlcfJ=#H;EuOvOo~#IE0!AUdvQgI_RaiSa}kox(`n#IUB}HUH@a z)TI9vbnwW7>uexRbjaF$D7KSvRY>ySD|d1qmibxI)sdZ>yL;mpPcUZk*VO(g2C$!y zhdCN@)Z{O03R0(6Hm3(#yHi>y2wFOgSEHUIXF=3hnR2v+a3Zn_w13w9CAmBf>F;HOa|f8xg(_Bpi>(hJ)v0!gpUWo44yR};Ex=SUpOQrG-11^#UUL-^ zV3D-uY?Hd4Nb6=>JjUK9;Wh|5{I1C7#UE|hgVD61zymS5O;30Hd)wwLNUepqz!^GY zSkYH-2%+F-SmdY=7Dh5mT!Cs=wJTnB%@s;Yo|jObn>BjAsP>s3e4c(JnA}k57Q&Pg zHO2F+C=OkG_-l)HEy53jV=$;FY;+i-$^Xtc%2;@e*UJH z3U>BDp(EypM!Y~KBov99Y}b#n8cZ@a!N<_irz{#0It{zuWf`zs_@1ypq6Xxrs%778 zv?XbC4q3-*_`#sTFU84#!&sh;*cXc4_6JE~y#}+i`*+V;1Mm|YBq>SU>4KeVb)J$p zO}yFKlymUhO%gLTOkv@<7)aIovc`#2OqoLdGR=@Oykkxyjp$R^Bw91Q+o(B)3(oZyS`{)I4!e) z7Ge))EZvr2@*e3?bxoGk_q&7a!ZzH}rmbNt(=bG1DbZH2%fXD1K1HpmB(hNDd))Iv zdHlbOQ;PSBN}!Q(i<}=N(_p4>A^S#6;Ke4MR}UALx6|{vb*#ZUZS4Xpu^2dB9B>fA z@XmDd4hT^S!FiulI$~~`cOoeOP)itnBbiFEs&H%L?Gx-#sN}`ewT+j?*0VwhM;3YQ z@51p2)Q$(Dm)xKD<_+g|Bc8E~$g&0=zTTJF)ip~Kfrbfm+bL_bUdZT0>@E-RUeh|b z&J|}JTZXQ_a&Q2}zJFf!JXvXi9cJy7F+<=Us55J@Dv-gt3aJ#>2ewGQGM8q7@BN>E$fXKzl`9~d+_;e5c3W3UmvVQj2JnJe-oIW z;Qt>r`rmo8x-~XzHbs%WQ+f(``?!jD3rK7bFR2vp*jhj!w@Jc~4+RiG;Ma)f_v295 z%I}8mdT%&Ywn)TU-Ta5&`v;}!Yf39BB`;`t$7`y_*FQVDnm;~{EVi1m!=GPFBCSog zexXmQjOL2kENi%Wx6x2f!t&YWrS4QuHdgEd^!~w%Oh4MXs5&ov;t!|K>&))4H$rls zrk4o$&Mqxl@NaJL@iJso_kt<2&$4NyS1>4)){?8a6WLV&57)mOcK%KtSDE*=&zw_V zNGoMlRDHaJzdfzDEIX|f6SpQ`)npDNHMci3TQ^QLwOnkh`ww8<(gcetsxD_`V`D|czS|Ie%UCaKY$Utu0cd+!bX-7Z z(ONaO=0}t4X+Kjmw)eO$^0d_C{VAgVEiV@(ar9Oxde|MADYw&Q`vWOYOS^3#M75Kj z8Gl+*Oxgq!L2$3&ZY7KmP<#n-zlb1KN zz%IEuQ6-|wwNss0z$0qLWRt5~!rgWH1D%)S6O^}u4Sy5$jJFUi09p|{$e2x$vIRl2 zn$`B(9KgjojC(g~totG_*72@C>v|#0M?+p7VQ&`hYOFJ^SG%Bq79h_K`^EZq4>(}w z$N7c+7i;enrQ4E44W?~pp0sTnCv6)iZQHhO+jgF`ZS$mU-)lx*SMCbgZ1q@!kp+=z2ChDR{`J+wvU{p zX~}Ze!9+8PNeae{B}J5HaB2z8&#lrl6`v}CtnxI*hj)ZstLouK)K{zx0Kv`qRRkc9 z<&THwKo{WYvLis z5xiQ90ktYDX`U^S*6=3bOdNz*#+g5F=U<-LGJa+< zJ)xJyzIeW(g-E~}Mgo${Te&#`40V#=Gl}3HSNj?9OXxv}%m)(EmAMQA8gow0>Y)qN_UeNWU=nX5i`0#~h zp8Cn9oo?1y(7m$$%d|gnvpgX=in6(gw3vmxLD}Pg^7dm&zy!{(t;En9Od+f|d|A-P zWTLML8BE+2a_{df(=%p_SlDwbEInK^KR@pJ&u#5e@zCNOTp&OFeEj$mNY_%)HE;~X zb2m3;%^4=~619R2sB34AN*MU;_M;4v@cXo}#O5f(Ib-qtd}CGD!0Bh}$JB2|Y3Ciwqx-oK-_-0O zrOWMea{W+hCGfLAVRT1|Ft}$=Q2;M5OxgTjj86c2+jG4l^g66hf#0%21waMv`lpW2 zKoE6%hG~<3r{9CVmi&bAI>dow%5e+Xq#GxEoTw)uyiJXtyYI)hV*82s_(Ofvo7`}{ z(BOunWRlg^C8KE!TrPflK}+j)PkPf7M5#v3B+CZamL6b4j~c#Ua}J}nOccao(ok@P zf(1UY8(gp0y^zbjFsEGfwR>LZ{j1`jQm;tbao5pj;;z54exBKW<>!^SwKr}&)M{gp z6*5gxCQotylxK_R#o6uCR(`{vn0zQ@-=qN`s#DPC&vkeEI&zg#-JU&dZenBz{M%nM z>Er{WLibl0QkP9zhYKB8z>woY%X^5CC)J;EES>!TG3i+Y-+isg}(;_?eyvb91 zg{B2)U+(A7Sj}lsPQK3Tmx8SF4O3}o=Jw4qS(Cz(<|%xi#dtNcF!}~F-hXNK`uDF_q6c>(Y8)u zQ!*_yX~ih4YsoSIa-995<+EU97<9MLZUSBIiP14cNRX;I{SgF0z@-AaPR-J$N(j%wc@j1Bx^Y6}W-LtT_*}~ly|2D&xu!~5 z<)(QW!uSkySlt@PP1wEKslVJ}Uua)x!8IT};syduLIYv=?53|{NeWK$Q(jhXV9kX5 zF_!Dupl7God6I}F_Cmi3e}^y=16CU}U@jIi{Z#0)5I9AXIoENZqGev9*VIksz?}$bt1(!LJe|2RnU6kdKsh1mtR;=vN7uRfKLN_dP`c z10_FlyU3z`n>+b&+B*_|w${X>-}6|)mj{)JG#gWE#nE@LbB+$Ww{f&Z(tW`3o5@a6 zr`5gT+St*#f9+LPIuFdkAHTYuLB64aBZqiKmV|giEc7B^;yDN^eVOBDRf7j+*W!5+ zQU6&@d49N{UyHgu7^g2=Wt2{ViaGv+>Ng-t!=a zI@OgOdm1@kJMC~HO2Skas?n0%9nJh%v;)@{D`*f~s`w)$LL} zG-Uqspi?pa5VC6H971tNO__zti|8p(1(J@^?q|LJjE$$FFku!2tu_d5?Xb9M9&D zbF+r0lD=o`-Y@w7^iD*Gl#Y$R=`{E6@wXeP{zG^BuSuh`L~y|c@WX&wY*A2CHbb_E z;ZTs(s(?{Hk~PR7*gb)Omb;~wP@J3K2CcjoW&mJGHcQ~7H``{t3It>p1OW%LxJj%M zf^Qx?%x}KTDoD>C)6RiMiEGo$YV&0$|KYm6g~x{T{4aT%%!DDy;_tt8{5|;o-!O$v z)(%d#wl?;TMuz``0+WvJg6pG)2|RkH*pLZ})c_mtT>#fRQ9^4*08%S7OTtqMe7$6* z!ABc+`Mlh(A6TS_=P)oH83N2rIi;<^DpF)~Hw7?%n*!bMvH!Z4z)Fy{$W=MQ2cVs$ zlqx?-H+$8g%HBUm9Yq=m7?y2*76j7msa%F~L5+u9ht-AFbL_R0x%`mth@M{QQdI^(XAgVqzVPowvNVAI8p?Puu7dpp%tM@f zoW{mvV~pFS(F=?I^e!V<D&Jmb+2o(e z1!t{VU{aw4cxK!XH)MP*OHc*UOQj}hS~<~cM(#uf+bSryXu14c$_7%Oq-o{cGp+zF zvADp9rUW9L$niG23(No8Ip>7t5Tx`a*UYv(0XZDVV2Kv1~>-+iW zFSU@4kWPo_pF4VV{2e=ntpu)7*U>&_V2Og~1> z&iIxmN-ET+=AC0vuHx!#=^yx1d>PKE#!e;kKEoYMzg&9F$`0qfW=MQWB9oc1A zM59O8_Bo=@jj;FH`DpkU?zf0wVwvi`h3!?wXtmv&TDmjVRPPE;li||ZF4w%166PFJ zP6k82w1y0`3)=b5Q0KnzCsC&G&nm3Yt?Eys%{~tbY=}a+A6RUO&hd&b%aZY}gt51C zx70GYLl0SKVRO~Ssqu-EXB65s;StHgJeW9}D1@hB90L>ZCA5wJ|3+p*B)qHLPcj}I zV0|cl)`w)gfFABw+m`;5Yn}OUBHdRh9}{Zufs;n0QJ-CWcI1tt*dr5|7~I$;$(E1j z*abZv`r{p+iiCJBzT=%+ zZqpx+0@#!#rl+Bir~NL5_%j2uFIamXhaBv&htfn{{AIuk>^9uJY>MU0X~=Hs-_psc zrappIA=v&JEdllS<~aS?MN6|zl}i_C-|v|fOMfQF%r}j`aLhNGE<49XUgo#8p@)B$~(|Vv(9m4DHdTYxrme(R$`0{pldkP#JQfG#unWVumGbAEet<_ z*B|3vYg`V0?{ zr_^N60NF|gqcG2nN<>?rfiDdoGvwKlI%}GoU`H4H*Wue?Pm(FRSURDobfimnMCC zvvt2!X!4EFNn7&+3aLl})AsOyHZsU_SQD&LS!*)S>n+EUu5~Y3LlZBt)e5Lr*^F;2 zh5-uOG!1dAT7=8NewKtS?bLjpGWS%#t(I2q4GLajRV|(YeGVR-lG@yi?Sx-jYS(8% zQ=y81njLV8C`R^KKh0G|>De?qO0yJSpGT%|3dz~-D9$E{_JhX{P(3=8R-N)0f8~MeToll9M097U z;QRnI=gk1TFUh3B{kfT^I~&2G)LP2a>eIv0tzuXMmctbXRG+U_iNzfHLeD0d>=uuJLnqZV8r(^e>5@ zqy-OHc007v>wl(BbvZA%fe@?KMHdx)=i^gEc*+G225F9e{OKIGTdZZa&tsFODRs`S zj*t`?z@rjmipr9}81gDM^t6?bDJ~#qBeCfkc+=Ydbah9%%!XcInpxTl695SIty0Sm zMdny{wWDgDx1WS4jGNXyIrHhc*zV?h3$qugs;OAV@4_%t{B-4}M?#NBpRf6W&oGu} z9W0g@_e$_#8i8qC6yfxBm;IH2kXUa2gJI?J103!XMb2UC3q>s^HF_8OBoybdrXxJ7 z5pMZtt=k$aCXg8CfPlQZ5!yR9{yUjLtj_r|w{cS9G~p2hk=U^=%#J1K4-&%u-R+yGrjf46HJpur|HgXD?Fq!T=HImz*h`Q{T zIW0i~j-r34?{su7D{9=uMr}kays_wYao%1s?!F(r5YT@9VrbFR>(;NSuhvMLs~fyF zdgO!=NFJiI+q}LbO;p;i_`V`?Ph1qRcJFNtaR@u_d6)y7&R71B{GnzDLB;sHwjS1A zzg;=kN{i~gdEoGsvUY=h`s`TW$a&-`s#Mx*Q2fugAz~;uIw)DtFoh{6D&E8pkKe0Y z=hAx6hTydOL`Te^@E0iDKQqMWieTebY=8$sLGMfDu%mcktC1-7$Zzo1Gdm!&@{2+!! z2lLQpV8raa+%WBs#DLvDaY}oRc+{RPL1Vt8Gb>-dkZq9~y&Dis043E>YAXwN2=sxd zjfwUks09YLf}bH6EJi-r^|OV2U9njSLPIg+w}=ig(bb(P28SM2!p6y?@K73xtiBaU z5#5O|ql?KXD#xhGsJzHLM8jb2R=iB>@A7iNa|!%wk@Gys=A;>-)julvWhGZGCF9XoANpzyhrt?LxNjNVhk25r}53mm6um(wh%h zt&pTt&^-WuabT}Abe?HWvZW-?DwL+f#KP8Rn`68IA+dYeg7sVny0{oZAMG>ob8L*>Lgx zF>Cyj2Vp`Fak6SCC9@2EhLN7(p6sJKeJjtCShX}#^il-rU+4F$&(IjwNsEN0WOfDq zTWPp+x|J1<1OYsbGBcd~h{Co?XC_b)Ci$Kzm%0q9T4~XaR62Tk3W;*8+G0K2_4N<+ zXe<@;2_#nJ!kPWbND$o8J=1QmgCX+^%8|m+l+CnlCDbcvCWP=pEU2B*D{kFnK40=X z*e`>}{xo3ZMST0$O7lz^CIzARm-!u(l2wi*K}%NfF)6s*j5&$)hX-D@eR7MU)#VtL z>x^XE^0k}SA*L2jlg!_B#w;aQjucyeG}43Wd?6VuNFm=J*ZDsM+wdxBC#5CMIEZt| z2u2RN+V`2N^Zdy%OnP-Dxy<;1ko1@&fd zw*s|xAVb1&N5ty$(%s<3ogriwCWXN_u?345r@dv8;bl5NO7i6LpWe_2W}G3`ciKwf z_u&1TP~=}A;V-(|+Od-|{qzWd(>IDz9;I0FBrbCBVxS8`B*cO29nA@;D>~zRP!JEB zb_(vhjU5dQck0%f8(9skND0pI#UrUl`ukn}$zdZX0-CY}zsAd123e?zmd!?vL}IN- z!sLTAZw$7Fu2K`V8`A5V2P<~V3iOEd(SThChEYMpZ4<-KQ=Xa0JMrKz#%}-wWXN-{ zIuWVyl+{n!OS}$Kdl*13yP$Ub>JwU#GUmyhT$zi1X@57(#Qd{#$BbW`tKA(yQpR8B zwj`1z(G4su69n{mX58sq#y*VH6o3)_eqUrj`NW=rSC%K3>x-vyVtr}X{q+?H>Rz-6 zA7RoIG7pvks{-m1DY@TldCE}=MR~AeOjbdA&YBGE{Hyyvcccv%V)ygg2TuIn5z)W7 zBTf!R_9pf=PPV@c4ZpQy{wh`ABsVTIKo7&6P=n!q8eWf@)8ltW==bb9)2eNuNM?_O zEBMYOPHVdxOKuQD#*}Tc(TVm5x13$%iGh4!U-!dL8?Kkkz%@pIDcET`fZ;CE<4DH2 zL@Djw(5T=(UM%h+2#LDzQE%{VHz;b^1z30xl@7_{-&`1|-3{aWG{PUBih`G?5oo#`6i z*8rABW@3^Nm!9D$@~d#U0Q@tfszh7q&ZG5d$>quOO!^snCXhmymyg9va^9F@10<@8 z&4V&Hu8-{z}NvaG+I)W#i94g+ILt_ld3AVf*Rv#ZbaMV+iroQEcl@lag&& z$%!s@?mCf`sg@ulz${oW7m6Ebdzhz5mt>DSknQ5&1Wxs z+MTtZtKeJH_8YisJQRD2lg6~)C`1F`Wzrt7Syc$tx?Lq}T^zFmaA4Y}$JcM}t=*u< zKyEE-nzDr!V_zoW4}b^z!xgdsIZbf557p&+L>eLbd~Ibc^Xf?l?FX3 z@d;w3vh|U1M^|_Nk?2?YJFO=cmJ39^yl{IU(5CZvzND`unC#zJO+5rHleC-|AP}(H zI-^#ZkYE(;zGu>)ywV z@Y97na8tm}3%<7$Q)|EJX=TW=EY)Z(n(g z&&~e6MI^3u2#%HiF*%Qm+*Fqrrr$^$T`})%8`EsSCk7JD>@4B_^*MhPcDGVnxD#iK z&>n;u#i}S14rywkIpy2*yF~T)m#NaCoI<9)1OXs@S1eoWyqA${yq!OSJ>bl; zN4Q377~#YYT4>-wB-%Q$P|Z7U%H_y(l@O#!+_bHE1pB-6BEvMp(j~Zd=ab%kxAU3w zXI;sk^v5BoKAEns+?es&pUD4d>=f|jnuWf7)L=9K0D=E6#_lg=qo|$P%!?s>Wxk_2 z%z~a1!Q%p*_~P5q+*2kEBR(rB*M_l8L76N+RA-13eZ5Vd_pcU`1Sz(OS)D(ebNk$_ z+exr~jM>8xGD)DeZ=yvgD1*g2S1@U&!g*8h>>qhbq>wP(?Mk6!(wgS&aq!WdNc^FF zvnnr(H~CZ;(OMr*`Uz^*!GjGn&ZsA6p#zw(DyJN)T29+b&W=>i8$!S~|7)~S$C$_E z4~TixDgTd+!SYBYju)xeB5|w0czWdsP^jaQt;DAJtFt6lPXTlX9TfUZ2#(A;K?kkA z4@-sXO5IYe5!YVMymFZ3!c$qQDVVG2MSo|Goa_YeQM7l^)q)>TH8G@4mc&RFId$Q4 z75j++UvlnXSGIYZguOiIz^x$7>s2R&ZzJeNeupfPdc9)?Pv-+(+Krl3(eTZ8D4ZRC zx{$`;NqPp?7qf6N@8UEJ)_aE-p$`n(vD($UGhRYcFcL?$77qhJ5r+0-nOzkv0(MhE z>-HsS>gDY{yT6V`yBx1YaW}oh*J&nPhD<7HVNkRVjp3LEkOE{w-ueUjy=ERjc+io6 zgThC#6V49!W;PL1QeP0c-QJ&P6DCCs`fEW&u6KC7w4}F6VU}_bnP(BpO`07uT2Rg9fzkeN~gn6?)>OEB8GtNjjipMfsyx*%eNys=#nCDpJ+MwngxT z1w1rS*_=r7=IcBt3TUqQoAVeP&vq6usfH?q3HDX9Dy6?lZ+GQJ^+7+wlxX34x{Rl0 z!wrQ;_`zg&q*4!204{XsnX-u7Qyh%-Mwv~gD78jQ&6h%k=DTe*k-!uBOhE|p;(Rgy z3+{MfqwYrZ0#x^ps83qk`JYf2gS^Fz`n>gV(L7a95ZXvQgY0R+t5PAEGxK3rbm23U*X|7Pm=`q9_vh<`b7~7N4jBE6kG>F5%8xF z@T7>i_~8vCuAEs)Oy|U}|Mj7cG$Ry!?!M3a(rNXHbv+YXSSaKK8<1jA6cNoF-Y&u$efOGDFGmaLtl=e~VC( zlko1oJGx3%siV8WXpMas%6lGo7jPu;u~@mT=7$raid%-NO9 z1^uW2d!r<{8Bl;f5HcX7myd?(FNLTKf2JoyySOd4n<8(UXl3?AF2-R)J?)qBvaW4( zdu8iSot`(%Dv5%GKMKVUi=p+Ke{YnuN$s#+`avvCN4ntWE(8|DX?N00FWr;(EBTST z0D0R2JGg8uCl&1)N0nLSAh|?rv2`FmRUHYwW;hOb1vt<1;@5#eKLlAY z{&WL0k>(=|z8-WVuEO2#lmJiqsOP@az&L8|L&V@h@U-K!i_!*p9k?VqM_}wQ;q0LK zGS9C>G_65{pOb)oz)cVPCxsV54(on;7~!L1s!Nq0Bf#1L&X+FqP*#X>6an#n z@1%_Nn?CBG4ud+JG=l#*r-v3dd&?fL6?A?otdD z!$-UZ<7@aB)HkBYZ?%ZcQALjHuSwyFB@r#*^XesGAePm3p(OVBnAy0UZBfvAI>Ig> zckGrq@~lv+f5CiI-CQ`cJiUj7S#Nv<@N9Xs{FrA|?;`carguc;Uc1vc4De{h`~M-P z@U1Lq_P2tk$%+V*A>ZE7#J6|!SG6q7{xyrSgNyyQnx*~!(z1+F;<5SGvdkLPwR_ML zE2Av1n1eA(x15|oIhJ$GB^e{7i~|#2rpNkv+QNA_hyk0$58dDNaJj;1iaW4rQ^>tw zJsyJ2TaR)AREV2s%)0SFgg5)e)5XSEiQZ(5;x+M;^t*Yytho!iWyQEC_w%l!99$-p zrV01;?e99=r_P|-WI*TEl1V6kP#o2{@s2P-n~8=SL}iN=)X=X}w4>JW9r zwaJjxx83)KdvlnPpZOL;o-WWLY(L|FLYs~{5^_MqjTDu<=lKF&Tc3z_vh_W9IJo7* z4=ykJ%4W@%NT)}fv(c6I!sLFct=D<5EElGf4yM$ewECk=h^Wak_t3;#2V$%s}#%zjPalw1Vw8$XoD32Li$)jGP$}L8E zUAZ3BoIG~pj+*iwaWFx3WBx~ez@%sh=v--+JDqIDh0s|+j@weHI`#5L+6?44w499{ zg-U!^ZrjgPgN}lN;o?G?TEa! z#fo+zj+TXI*KV@dY)4(NygAc*41Kfg?>@f6#MIZ`n``C@y3t~u$XmXQNgveF86_D` zKsp)cBe`r z6&l&=S5k`}V6PQ#xJ!wpN5%g_!szOHkIDC)gH= zRe9Rf7r;73QSm1EF^0->0{WkBTFxqN`}lX&77X&Y0O?;e!TR1PCTa7B6@gc>+y6&yS*LR&q}=^ZA85N7+6qlNig-9K5YazAf5HeLaSri-_ou1r zyc80$kPBS>Fv9M%m%~vSvs?brul+utlyf)Sh|gwyMCSfjV{SUMo3ZG zx9k&II|l+v^!VWI_I7#+6KHB|IkD2plZTF$6B5J`<9Xzhg7_3Pt1#WR{u1uHwh|<4 z87f4n{h_obFMi+LY5oJLRJ1xFiVv~_sT>25@^@S7^PkVdJ!f1n0aD^!CPGE=Luf)X z!1uA042Tf_oq4i)Fr~q-pn1&MA0qJ*5-O(pPrIZ>3k(=#kx_sp4H_$h2Uo}&gG>!) z{r)K2Eyw&N)rJBxQ!qfZfNah+1v|?_&1LhD-S+irv6-myRag7_6JBuq(8FM*g(Hcs zys}ueVVh8LPj73>01d203A&H47>s~XwK@8c;h-GBIp~s&K@Zy(^1D9)%`p~GK%!(z z^n%nSe&)H!*9DhGm%XWA(Gno+5}D>XqKhXVE<)%*_7D5$9`#U3Xr3XXikm^ zBFiSJZ%vP+Wi03#aCM(Gl>GwISKmR016&vl^^;f`r!sr%BMZ3lGR}NO(ufMGJ#={} zO*e433Uqm)OIKkfg7*$cdl$}-&cp6F`YOU9TS8qVPky35n%LCk2K3R7n)6lT+;mD& z_2y_l|I zz-Lf#G>NVe<~5@RwN7AZjbnJ&7Ev2OEOzdKma%}t^;y69=wxUnj2-Hfx0VAT7farZ zi`%cz7Zu;|-(Ox__3^~Jc)MAfjA1ZwJlt4AHfZyo_|XjbdEk>*FOD~R--64s*R>lu zJqs0V-wCM(w)P1B&?sXTjO%sEsP7~r$wW&aFE2Q5$^vMiq8watSd6G!KRm6R4EW*8 zibc23j z<;QR)&3Bm+ru0byH_b}VE7b>>^VGzDg?kx}Uj_+C&(pkRwKl0Y(3J&BpF!Skkd+5w z=rAe#%i3~#^!JQzx?C*miA-OlZ19yxiWJBDkne6rB*WPbj`4_qvv^YklGsOs3sv*_ z4kN!tguBo~%-C^q1dFVx%+6B0+$2%L!?r8?^f0?lp1|a zZU}9kDz>p>=%;#C16y2zPd`Lh%aabMX951}V%ugvQjtvZH0EePFt+?LMU>w`NW%D~ zGi(}7u#yAKD4>OKujH!qQh?Q!)9D^WBe_t_v{l^~Ec|8=fFK~7ZgKXu-ojj@J+7k; z8QDaq!>nH(xt_MY&O4LZPL#$#sF(g22CY4Hm<13Bw) zV=MJL8-gMcz=$<36^Brtk6I*Zm`{qGC&xrN*vm)wJ!r?>d&M`*Hco*exCYg_1ht90 zYGy4;lXo;1G7D9B45=SP$VlLIm84GjLY;T2=1=|2-ny{|UDKFWf*}`br~y`Efz)6;ak(c&d?90X9bhX z$W@my2NQ|TPqb-f@EjXs@a}pI?-k-Y7Q3Pf3Asf$5RC}NR}*OnnAo>+Z9LY^hIF_j zPGfl`hF(xdsa^~GdAje&0?z7ycm!$h<3qfmASf_eVizozf90}Ez3?!RU<5g`kewMp z<6La%jhM}q(c{|qy0QORjR*<*=`9sIY!9gt1c45?CJ*g4blnVKi5jUs(0oN0u7M; z+)_hq2eMja-6Va|R<611Azi@2*U8wwcHG=#gX+-0d$Ov>G4O5-dlrF8lD1tnxsHlG z`wSCZlzj@qKMH3R7awvYCNYrjkg_u5^Pi_NKlWfV>^lLp{ks72@1Dm03&;E~4<<;Z z*ZLdC@JQ-1Jp3Xks)j)^h2J_xjxDj4Z@2^JcQHzMO8 zCg5Pod^((zs~Y)2^nh%-wAysE)56oRq9(R$9GPrua$i*58_x08*$Gx^qcv~RRlfas zra`Cw-mn}c_a>F`aoVUbS8ZQa$-OF^IaJ5ff)t4|SUj7>%tf@Of^}SZ;sE_MC|}h; zgDZ(F+Q#Hpuj&@>&n%Mh%o1$|8|D|Ho{F-;h@r?%WMzYr8W})BA*@!lC4 z4usqdBnL9X(DQ!P}qreWE6!cbH%+%x!G$z!QY z2iPGyRU%1aAS5el};!TCmC&QS_k(PCO&Z3@l?5FO4 z+rZ5hk3YMpx=(6oLkh=!KZbzx7oNoDyJhMw%%_;hZXk;H*_To=Kr8D-L6lZC5t8i@ zR_>~?!KUi?)n4-FbJQy?MS+~l4O4sU$PBgPZo9|bv*v7Ji%y>=XNqn)kQhAbj63io zWVXCWjm1PeN1iN3>SezyL3d@-reGMHg2_b_=<7{LI+Ja$zGGp*GTnvTFhlC|8I9SP_;GCzmRpC_cxr37k{9ayD%V_;z8SObMU>*^r+h*#~z zU%ubf1TR_8wpp#MjtE@k?A_!b#2Nj_+1aztide%(lP7keghYm)9<<>u%Lfj#3T zo$nn$^WEGRFzhAja3uWFY5EO{^D~<`uVn|{s%VpoA#`GP7VE=CTMr%W{!zh$3;1%L z@Mnf+?e4Wtt4g8|n$GKORtQ01deb^}Yasjx1=XJ$gdwoWk2PoC*W_Z3klm27UXwFi zk?isnEj8>;an3Tw1=DCSw&6ZoALMB*NFtQf&*%f&D%46E7en_eKxnnCpw**{LD@+J_qnS#@fl`r6gqtTwruyKB=hR655H-^0Qsd2Lb{rd?A))bt zWbsvawjRD0iDb^ZN4qd7rn|60h_p6g={O2}+*%`UkRLxa<}#v_Oa}6{l)S;ujo>yn z>p7Ug%^aiV39BmLlIcTf$EvtUeM=)+eufQtCrrCJc()ndPR4?=uedmg^m~t|U6DBS zHEKiSzws5~Tw!{pz-`rY zBcdk>UN`s4dPh4G6Fi$(;e7WCOlR<{C|~6S48ygg7CXQ{u{hKD*#*~v!_QWZrXKKJ zT8OP1<>-GR9zaxZNqsr+fe<7dc9GjsIcm03K58a0yTrNWmXvqc7(w^PDGUlf4u`UH zP=~xYAhc#6I(`6d1As)Nb(UOd)r}G4Vh1Hj=u>avHmVO+GGI8SHvXeiGN)gd)G62_ z=j}bb)(uq(ml0NmF6;BBfbAEI_tH0?zp*3lknJNI_Hlrx_&(i)8Vwqv_}a?uz_9rd zqa^b?LYRfF)lsAzmSWA8U7ZYV#nPGU`M*ex38-Otwr^fD6yfhvJo;{qMh>=Sw%>i4 zZ2nn_GG9We@sIIer6^6R(l$TX5O^$n1_!`R*pyji5TEt<0n?c&pbD+z8b^8&pv+U^ z)oMmA;(w^K+;6`H?|V}?`-7Ci2M@%gvDs`*$Tg8$4~WDwRw*V)BQ;e>{~?z)HmNt0 zGMK&=$NaQ`Z)caRCw6;`bl!VxDiv3^*A&-mT9r5}MQ9>Vpv@sn<#SV8ghw1XqM^_uQ4Pp;X*>ud^!LOfNsz z+DTk%;+ng#4tg`bkk)+cU7tPot_Y{OP*w(n!LQ{JcoP8xCOAcI9g&UCGs1)5fIYSrTb)o_#)t^|{Wj)9L|5gY}e0gnQDv zHDpaylM^%ltk@_q;kljXG7-Cl5$I+st{?D$CO#1<=91T?x=5B)gXXX?>F;&HuG@Yt za=K-uG|~g*Px|gxoqylMQ<$wZzoAxdUP3vm#5>G#S@_jhpQJt&>3eIw)^(NHom=Jog%Tg5*L;L5(zVl3F?vOa5j3E6mI+L&Q8psJ_vm z-k2DyxsmO)&H&=Dz>+m;HQ=jBNU8~iEw+l>D!UaJ07kCTVy$mhn{mAfBbJ1r zmyi;Ugi^>~uYww*VL@H?>$Xf#1rT04w?Qof#_bjavRdfWZ#)A#n*1bA;RcvAXpRg= zZy(E-4%wBO+EV$FOzw<<;pdg+?HV&~-OeuiO__kyVhc?RMp(b6&4{!|#IV|>lV2Km zQzBw@p7*qhkJPrCR$?&K7voOl#(xviEG9T3vG0SeJRzMl*mhw{F3-!cf#uM+&^HHV zBL{%4$Oo!lr!38ih)@tS!~2g4zW1a#h?i`@wD$p%p^FJ;!tt~bM0His&G@|dmxZKZx=g`VWE_RmZW{Is zg&RPq)`)s%^Xk?+TyR{A-ije=p7(vh<&ogTyKD;DhIjxDt)l@28OK%2`Fe=oqB-qG zM9C8j%&PUyvQ!7o9PsbFxII~!w-W_CBz2q57(@NUSovVwu3cn+odFaFK7f=|$Z&2b z8p@RfFvEbC(<)s-J^eBsk-bnXAWCmtPTRyx-6!>8i4=`qdBUwx&HPiQrF&Lk`;ywi?p6dw+L@KXVY2#!4!J%Euj2P-b}!y|B4-swrEWz8T6@) zgL^Eg2wrwRq>g5B(#VpvFrl4WIDJfb{2^9ff19n%Ew=Uk_*jv~L9qX|M}Q-|2_N|$ zNT@eTh>?9d>*m_+4lyrqOT?E2HJ?x3KAbS?YWI>d|Dm>W?y6*Z8ayZjOoXOFJ^VY! zXFRtD25%EniLYv3_9M@OcfaE78o41yc!ot<_mixPbci*Z3Vl4#Cc<9ECkP21#rU0E z@yFyQ1Mw2&j7)*3_V%@Hm!Jk=uywNS*-l>n5Lv*nnO20>zMAB4e*#X&@bOIt7GK_Z z?$70iDl8kCut1pT=>l|^Uqp;K( zL02iOU4z$(26pVxll#cGr_@rgOBlZeKT-*y7{8Ya?*n+S%4+i%&m1ahcw+v*^ard` zZY@+4;aAzUcu<{#?JIBoVj^X%^e;eYZ`#+FVF zrvDqUDUU~g*Mf3O>dvML5rXPWW_P6t;bsW?N&^u?JR0*FQ9M`PhU02Q7{Fbz$GARdkMXUzc%BxAic~Pb zlrbPaqQ>Zs;`_TeIwuaB;iY+Pbty-0@%f*LG!eYO{ZxE(A==!Q-~$<^mzQ|eyeG*N zh7FLiMzdf+qdRrNov+J{9$LZ?@C8R-<8O>X9Uuq|Gte`HD;VC&;4|WC`WDOOTf`=8 z0>j%mTS-QIr^)4ICFmAvSqkzO$Lmj<=WWFj;A|N^=v!b2><*Re2c@Xw^W%KQzs22~ zjpWrH3l{H>4o}F(^8e^WjsZuQLT9bmKoBb?0GGyn{vOSTP}X6YZg&_P)YON(1(fl^ zNCyx%vcq>{wOUjZNf1y@0TJuXaRuuAMF_q@aGJ$H83>10)BUN) zF2g3+~YOe@J`BDA~GgOEhimv~AnAZQHhY+O}=mHg?*!ZS2I$bK85js!n^Y z&R4B|%!n0#Vzsg6j2UD0(MRvzuw_CS@-XyZHqQ0Tih<$HYD^k))381Uy!`&*+Gz)K z#T3`8p~P~)?6cEhD)^Fa%$UN}XY+m6X>)G7&c4PLhI@2Lh2xIT z43o{~Vqq%Iy8c{DT7!U=8%#&y{3hi&HkZ?)E-RThdD7cErG19hEEX%Xn8l6B@nIg7 z#!`LP7;kJI?X-|uFuiLT9wb%slmf3mIp5FC*Nv0g*(MU=1Nhgk`TvfE;^b^>^rIB; zf51X1DFTrX{Mj!`eoCPK6gB++?(+Y>|A&pYTV3a;{E6z*;tR^gk2XJ~VmjY%Xs`%< z`KLt0-_?!Yf&pFtU;)ttGF~FEsG!Z_>u-)1#f0O&>EDJaAwtE&Pwtn^%1dJhGB!ze zJyg?HxdhWrrsYWH^z7;v-F7B!a-Fn>xy(qH!s4xml;)B9Nz02fIiu6ojf;Ki{=t$v zm)2?M#_l#->sBX8y(Uv5uFdg;!+k;RzxOAfvf(3;dQ^L7Ys&P(=Zfoy@T%i9*+~Vh z(Q2y5ijg)e@1`pi;CnJTx7Fm~mof=I#*5G3IMJx8S5*Ok+c-sRo-1zx;1|=08tgd5 zG$KY_QHC(Gxe0-vi2-$ZwS>xKwT=+=+&y7BL-1#>1H8W*DlBn*l`)?`d>X!W-U4ZV zf%t#6CVpNVtD$UD4||~!SBstVI;$YuPaS2t+0pGpIynfAw!4e1wWq39b)F|O(Aa(? zCuA(_-|bZBg;gwwWDo?jX^so>@P>=ApK?`lfYOdKoK_~uxGb3NpM@jwo);#)s9w9e z3y)wW!vE#rCt3__RYcByFoiZFS5f)%C;$SqjiSp<+IZ*5xKU382rfX@`wPMwL%zkd z5dcTm1tMulQqby0yv5D;R{kvMX>S6*Nfj}4SW{)BBD{*D)6@{~NPJK11I2Cq(Y{gD zd0pBdvJ#L*VMBGBg6$4=R3W%}9f&UU^bitMx2W5l33n08t$jdTVm8QO!%oUyV^^ehq>=I`NB#1;3FdM( z+?X}UrXHD%?rwyYk9YJD=s7q~NJKyDL#VNR-h{~ItNfw2Z_ti*0ssA&t>N>i$s%z?$ER9mNo-n9erV)vYWh9d1u2#sOP*z8;>KjwD#q zyPI3V2%Ckb2gQ!Vm~)XXIHKk^m_#4FZe6y0>Y*VSh+7{^f|Czxj8( z!#x!?d1e3(Szty2L~srvL1wvE{cc%o)l!o&)}eDlkc61kDofH1^DX&sJ?F{5=ybdc z`W3@5EH!4W!ulXm9PcQhpHF{R^1HRHy?X>t!gx>sMayZwN?;y-J{$vjTOwSX(ZWO4 zx+0Fa*^za92K1SBYq9g2rsn_v;W^1Ik++?pDf>p~ljD z=amwgLFqui0+f!88lh67hIG`q8}?~&tPk12_;v`p(y+kMrjI|;py#mx3e3N~zPmu> zGpu;%Yf4ZhrV-s`1quOrJX4p%oq#me^zjE1<5MO zkX_B2cLB~=OfnmQWqLW~$F5}m zWJv=6FiV3^NRkc8>LLBU!2kT%@;2t3X01O_oGpzsMNG$YI>kdwKk~p04z_E6Y#;gf zU7pEGtY-_0xt;H0kN;~MwZDM3MotK1#}UxMiExpt*fk!b1m@i`>U&1}z1O98pu*cj zu!2tHLxLF#_N|Z_D=cE(I1~{t3y}Hl%}TUnS9Qb5N(Ye$hnG>7J<`*cCJP(lzKZYu zvd9Rz7%k>$rcL%q!aj1OoZ{T_?A6MlS|7Rj$_M7JAvQb&fc2RFpzluBMaCD-@E1K6 z(rD;=@vd~+=@>6iRkPT^*`?O-&g-3y-3!uaoTA6^+o*&mFC2u5F5<*d4^T?iW{lR(?&Y;`pYP2FD*L zz{&LdS%(>n*CO=^x-+()Dn19TWNG?6@ML`sGe2oOin-6R;K@A5K3WQTkes5+W50!Jmxtz1s> z9?h%c{O|JH6Lh6mum?6^X%%XGmNo*>vgH^q9k{=DB)iRG?@_}|$uwW}Z8`itFHduw zh$XVY=d=jn7Ql!!8wRmIi>HQBFdR0>o{XlMl?zp3vTWFAGN>^s=yWES^(Ci?9F&SG zY@c2Bwq$)A;*!Q>#d10`SQNUiUk@TS$%4`$1z`AzqSSPjV!)!MH`x=bOp9wjsyuBc zB>hPGCkO%^ZtnG|j`i7QA znh`#Lme)aCORI(GM(hAMweB^sbEjH<26{4X}SFI(aci?x}lgl&8S3DPIJZB&vzc&&NiJs~bRp14eAq{R7y&GA)bIiOGu0g0Tq zQBsINJHWb-L?c5;C1xhGC5FT#Zp|RqqFiq~iUqQl^Ckw#?*Jg^8k=+pg{UFbimi;- z;qMN=)5($h$T@kU)%h}F%ZXB_ObM)diSR9q!R!XZgxSS^sCyHvR$IuY$9~dPNm^q= zhy`r)QZ!JtQom6g+L=g{NX?PctmtD4Kh>JN6Z&C_Mp!*~fv*wmk&tYmEKCD8A;aF` zG92s*Qjre7qTK@wHar>@&AFaJ{4&sa*a{rIV9ML`2l)MKoB>xEyey~7$h?JnSF|!B z>ZTNR5zyKU%B7*8Q=5eI{ENo?#-E;obk{Jig5NXt76lNzr#-XyBIsl8c@akA+fCdf ze2ZN&%uo&iGOE@LpgS)*@@W71?Xo88qh%cc1C*k>;Z7*t>_`TC?_G^>q(9>y!mcL< z_!OInhB$^#9gSCSJLm~3i6RiFEYT{N?dL|gtTJ;49Md7 zHO5-^Y$v&p>KxU;p&~jQjw6M_B95R5)3B{V`&9SAjbEg)siqFcw9m@>i+d=@+Fo)? z{@7!`L(&MB$+GplKWJ1_Pf0@tO0cb56~E!PE%bVynE&W#$`0#Xm^S0K`GI5W7-Ba6 zWcmxQ#*Vyi;v)T0Wu5N%_8xApP)N~JxgQwg364x{GFBz9;0f)2`Ecg~4=aSJ;O(P% zE_n87FIqMff!Rb>KHwQJGb_fAd+873qY~JVa|UZB!vQ3sFq*0$wmDc7VO*)_k#Ab)?Z%cbc(MGrV-K70GObb})gF!ZsD z9w^|M*Or{g!)MM6KNmLtt0nxSR=>DGm&_Ah2KI zj$8^*eskFZ;v~P>*svoLA~0yW0qiQqmTZ>u3~Glyx@*w*fVO+9Nq?YB!cjlIA%|33 z+iS@%D~CaWtFCkj@$tdoxLIL^`69z1wKN$wVr8xFE>Z40znT3(aJ$IjV(U6(yt zdK(PS=G7*chce6eRQJq+%RMTEu{53_6mfm5jq6Cg#|&*)AbO8I(B}z+Sq%)`NrE=g zqPAOZmVXJ2o5s!i8_y(_$7ImE3<*j}T2LDIy4&0_{f3pl3#;AxEHz_$hC8fX<|4W2 zYGhC?F|BAb|2bz=DcEXq%QPR_+DRBVZo|Qb+8m@X?!AeFmK#_0V^6kp5+8HgeA|0v zu08Y+o76}R6!Bz1mzGEGc4_}J&?p(eV?Ey+R7JJ^2kTIv}r-aphAx)9B!|$sK>;S}iCgB@Q%E z%v7+P|GS$on+Pu3d0vgmqdIj=D+xxYQU(ukd;J=wmbq`F?JT$UUff&G+1?*~B~Q+c zZ;$et623ViIy*P5FRrgq4`MZi8~Z&u1Cu<4+6@j5nEU$Ss`M3x9aid1tg9USxYp}J zDQxzx3iONzL8un{rJqhT&({Z-DF;pDvf%Dfj_;HC>g7q+UW%jb+F0hJ9XME107f$B z3=qa?(0>1HJQeMRF86oa<(cE5>>c?5-1#QR>|X;I|4+LAwMucW6JHViQ|9UX8G`@E z$B+L$7U((ISsOT7{3p($&a@O15Ca0pY%_-ljZ1!@Tbu*MD+hnpqqz|&9Ps7@rs>>A=RB1@||wlJJCd~NDT zTi>rZ`-wT|8DYqHGS*-;L5ntVTyZT~KnkqKV$p>};P(2Gz2Cpvfyf3oXpDISo|b(! z(f-#5Vap3&kNZ>WYX2GkR5bO!!>9Z2tAEsj6W9MQks9HdCpGGLN|J)1ea%HJiWgK~ z{P2}CsL>Wz8{y#h8}{-zzlAZ}n+*&r*cTsCv%dJ5Tz!msv_j>}kQZCwxhzeQeNfSA#?COHqpIJDrC6ALL0Veu3D?y^7-_)OMr_LZ}^(9Uw&skT=XjviJQmI4>ebIZzD5c8W6vvk z{*Cc8?|Se3FNxla|I79H4_Rf=^>9E02%uJP5o(ruIv?OpuBf6$(RJj%GzP9m23~J+ zQkE0bEqFISlj9r-7PN=j9fo2a$Id4u$YmAm@tbu)J&BaPw95jKtV_~Ne`zJmIw@T< z>d!#cFSk(*+eK4Nw~P8t>?SPT=IYhNRqh|5e!ld39&BI#TO(NYO{@y`&q5sd8UIwV z;=h;R|Fjs54IF<0{|{$&oj4h*|Ek5_)y_IP=1H8o%q~cZ$ze5hUd=8lXflnmws5nG ze*ZlrPO6WLFMjcP+~azh(?I~Up^s-(fZ*{&gD4`GM4LRbxr0`LBLY3TJVCVdG7umU z-WXt-pHnc~CVcMX737!f7tNyzkU78rZUaPAGZ^jGk5mA?8V`mzxse{@aR>48PYkcB z=IOd_C1W72{5miJT}S)~8@Ry5W!p6zMEnxREtNk=`ZIJq9&KdirD1B`9?2?0l?<6L2rT0ajop* zwHb3AY=9*4e0OK|*Z(tq=<}#c{1iNR<05l|%IkX9KXsYd3iYipsh?WXZmd^WzY?V=V{rV{_HKDsdETU|SFi10k^%4*(UPT-WP83BV#* z8=vm6Azctfbg;Ll-Fce^)C;HkY`->XSK1GxRXJI#M9cXoZII2B?aJ<@7}_ymlk`Hc z+v$3{UK8mwINg$~)w_B5+g{{zJYuWI)|Kk@38l8ZQ{$@_d2tl&?$+9+u}OEGVs-ar zOM<)H8mzwMtG%_w-8EPX?Rjom-=jz4>(OT?-pA(TP-wYz2H52Epr)Ih&NnaJmTiqW zN4XXb7{f`v!Aa05nN(8go?I4WSf1pl^N^*&f%n8XG_^>WKSIQvP^stwaM67R9w||&~ zYBU@?Z-xg26K4bx+IvE3Mt1{f+e|>JJml70FEj(Xf}}ks?@95koG~Dk=Gu6*;K^Q( zEw!6&z2K!=L=60PsSnBcG)?0Qx(xo2U?AxsZtDV%WQ7at@?|oO!sGCZ-It@p1_nJm z7B2)QIGf+n9QZD2rFI+yAzKA7Q4*#$M|{p%y7pHnhS@&Q@_z5-CF2X{he#&(xuvj% z>fzlUXc^h8Dwi_IqiwSj@-4Di7RX^rqP*6iElCl6k(w8_MYl?G18T}bEsMqnlkHrF z4KiPGSgQk&_>~Cs0I>#mA_oc>ghh z!|{ucKv{r2IoRxCbnItDgRMdwS)J7tO~`}!GqIoJt21PI zb)j?;Mgs&F zQ1FuZ1KZXdKz4CYY^l1Pu z0*pyl;GgXLv zaZ|wnlA>Jnoow|}{VlCpxF#8^draRL5j4Gd&bH5Ca!w(+6h~`7O76!mcE5POC@0`o zi5cu2gqTA&tr!!h__pf$41^DBeIb8)(!xee9iHGXAK?%ltZ)d`Mv_&n2yV5L#sy^F z{gt~_0^nY84@Y1^-WIXU2psZ81q3;M3={$m^6Z<$gxPXFv9MgQRvOsV%t;o+ZR$_- zu* z$UX4c6=knz?Lww46p!ux@Vf()I^53Tk#THeChQu^%H2dT!xwW&ko!c->%V-P^v+s! zK#o}O#5Q{zW2&Z>gv*}XRg?8NaV}Dz+j>V`+8@wA1(j8@22jJdW zoo2W_ou(1&C)0|jY1Fg^=%Sy)$j`4?IQ!SB+?qi2nCrxa_!th$-)?DFDf41v zEG$=Z6B~1h67&h+v`vA;>gszOA{Is0twG?6IRr(4ec2g`-8jcf9U+u6PM~^s?cB5^~uExag zkLb&6M9t{{o;`iFUmI~4L`DELRj-H%j=csls8<}zjEIt!4}+uF`dD)ZaS+Wl5+CLZ zZ)flX!zj`=37Zv6?l&sn;5fL9gF?$aY*LnsR@EUi7y14>0-OSNdSx&6eI5) zt;57{LgT$$gKUjos4#E9l^lEanUGY?AEm#L8<4?xnr59%%^XhoQUJ$yqR$K2z+GDk zOrC!c#H7yHS`L&m!Pdgw+yJ9Zm+APny&IK$UMNlQQ_aBVf(BVXhl2MA>p8RM1&3uq zgeJ*{?A~!e3wd?1JpQvIjN6tRBgA`3p!g60V^R?_LnBxnZf5Bxh>`QuHYTu=xQc*d=I=d_}1fsw9Mc4L#zA)Bj5C&+E>r@H+=NN5>5Fz??B9JbOZcjNW1F zW%2Sg6X03}3EJ7|ZdL%r<&gOa1S=VHLoXpsCvNC%WG_v`bg;@g>gn>7lEG*5&OL5W z*)CBo_d9d>&jPg~6Er$%|6(&#YiyUV1(-Inon2XvH4K|cT8ozDOK0C{wX zFd_9n?#?C<9N;CJYtaap+j?aTK9DQu4a4mk#?0(biqF5y-oJ=W4~^3B-~_Ok;o=k4 zl`Frnn|pZ%0G)iK<~Ai*DN!eqc@E#;0I2{HqAyjj?lfL0ZM zXGdaPmAMQ^ZD@J}eL=c%3=xM_*uri0DV{{rs0IMu6SB}*K&cXkzHPcmEI}`#go2II zSbj0b(2-4d5B+p9eO-FepkAcE9(i`FgCF>6ZhpJI*wgXq)T*vb{vE#3+^oL0dh2}I z_k0U|9X0d-b{2bpy+x80)8Py!)h=&fu$aKlNSyFf0ylRYS6)O|Qwjq$+NQha+eFoW zI$AP(^KDlD^8EYv>b?h|cc*6i6HHV0yWzF2?K@EL^mE_Wqw{zLyrw%Uc7@7*bujcI z`SrE#-MzKv$a1nZ7Iz~lo5IC95o7U_hf2oiA#!=aG{xw~&gm6fIwF$SynPNoXFdW3}~>E9cr9+Hzx5j>ASBF;^PS){G%Q3k6Wc7-=u*nfpZbVV&FI#V(P&x?rzmu$d$x{; z=|A=?x#-$m?qs-414e8iz^+!(%_}mzTputZYmePS6af+XKn>Yv8Rfo`i(4Iue(&da+N z?+ZP0gFT(P<+Ulfhd9$mC!TfJVPZR@XSCqG1xU5SY@!9{}|3?CS6Eyk=p4=h*`6_Ia3URlCi_8;YjjE2Kly z85iuztc==~)w`s+UwIh<-@kF0l5#;HLAL6obGFPKJfyJI9MGU^(0n|G-YL8 zk4t=$^yB0Rin)%YgYX3?Y1ZD+^`CA!wt8K3N*?GX2r_H{96S3<&b~i|=N?1%8EZ^2 zOWd%bSso6xXPXj%z#MJgWXlC~3g{<<=r(#|@V3obPvz!W^H%x&zoD{{{Db4JoxSt_ ziS^O7xsh||4_fyxH8qBR`t|?1$3KBiMWTQFrtq=B-E#KL)QrwnnH`+;oll|h<%vbU zg5a@sbS(>F+}N;B*taVlFhi$6WwcDGC7UI!`0JVXvC$gG&Lh)KD)Y2^qI7nRELkya z0YSe7i9O2Jh5$Zsz?ZX_8xVfT*5{q3I3LzIlel=qj*>F=c}K90@URiFP_ zJO87*cV8rUJpCukxu5Y*x--2Vd-sS@1}HShzB-@HXI;FCwRLvM4t)9rKE z%(FI`3N_TfzmOJy+cgeuct{$on6hD2p`O6fNQC8eO2DHcw`pJFk~13rHlqkqWZ%#| zNvBIf$9WrCXNtPYZiVDt&!FU|51@{K}@ z_?Qc>?fDWly3G_SUJ$?VU20a8z&)sT{Tn8&Ufoag0s#Q9@k6EhCyIps^$`B`@*l#V z()a<5S`dAIxY-jN4&r#}vYZQ{6)Idgq!wI>CFwsOI5{bZ0}w@t#}eYOSDt>~(At8C z>s&r^FD6Ej=+~#hM{dE}%b;0x7#CHTaADpx)L=^N&q*YuG6v`cl*`TABHb-$|~1>SNu< z`!_Gw18D*X$WCc)2Rnz`H-wa)ATks*Kq_*mLX{3X#neD)$LBk*p1;;HWpvop0h#UHENd)tu`$7Aada zzFE$Io;q%>Wxs5Jl+p-2N6Ucsl!JzH9{`Lx!*77`J_&`VsVgqH)& zq^lqc;TEy_bn5~nz*I`ATKv@0H0aeB2_&|ai*q=GB2`gp*Q$ZR1jhhDcuB3II`e@f zYi}~35C?P<&ysc}Q62{iI&yB;(jG@%f9J}XT4a#oxMQ|?A>F=6e+gR^lsflCLOtue zibO)QyOD(ThgOWM2TBOGqRhyPw3Gva|EcqlHz$gl&pXfzWLS8*y52ry+gF%piF6Ai z#%zHPH2@}AxxmOXO5G}_zrr1?r9GT1fDmN0#NQ9ps!$Wee%|y5Wdh-)e{yTNF{^}Fu-k7;{lc9Xe{ zmG_iz9a>WrE9cG?4Z|?bIL~Dn9%aT*Xtk;HRd2~(0 zQ|I+Qz$|;*H@G(2aN0*q)?v)Vhoh1?YzUhYD3YLldc4;r3ymI%y45O-LBixghCYx5 zo`~6&BdLC6lmKojM%c17o|PU!Bh7BS6}ai*NA+vN69#T#HasBql0)WM$CFnndhCQW zeB>z$*Y^3ll%AT^2YYGUabrOx+-yi-f2JT+bb z`A0<2Ro2C;46Y!a6C_09JT$4~0#F;A47t8>m2JMXgpH+6bdS|)+>t+c5);q%jCI_k zPGy<1-o-Q+`nBG=FvuoGXAT+Ipn={IR(xECSUD} zxZpohVzs$bbys5cJl&yC+YN(`=LZkzJJ_6GZgE(v!g-{j&-_>F1Na;tkB=GlHgM>>~25#Tr?aEz-@2d@Xf;clR_ zL|;~fU74n{0ExW}Xq(hcrX6Ce^7}x9Ur5w%AvRNExQEz$bhxXOUSz+f2fF_=4tvA&%x7a-D3{F;Jx^q}c zI0J+3&48tH>6W%MN2%OAKxu+>gLFu|_7N zwfgp|Oo5`R4x=WfG-+0)_T`-?e2iy6VSOV)Y1KkBWp;>z@pAlY^0$=s3T3yuqfBq!R5Gdp}-^ace=j;kF% z(evK>Ym^q6<11}>^~n0Cdc}DfimrB%0RAkHV|f$DQ*pPT-Vm_`*S`E-y4-3hF@mBb zE}z8ll%+Gff^kcVrgAvXcr6xCs zKv1pqO7I;4uzNx1^EI&TvEd*Yyr`MH2d!d-b4C1a3QQ<+nIB(0KIN*R2#?6eL7DHB znCV&~>`ejESG>Tan6F#PP-VV=z061j_YRpP=Cz)ZkC|kKx37do9jrifpV#k-MjqoU zzWl(fGZYBc%A*MR*hcfK-XP91URU;MiK>mz@PbcRYS@1=@wYqbqLnl5{j0R zPvtwsQ7k+`y=-%_y5hRcB5_hp4m`e1v0qzX46AH}b%wX=_J{&Uz#9}Z*DM5RK#_cx zL9=w_{PKJMExEG7*!8demo3Uq(n<4Aj}QNqO#g@Ms#@K~Zi5x!%lZ>)nqSS!rHELE ztIv-CaVn$_fdl--?VzCqBcOY(>#}She&OYQJf7pe}6(K>#@hKy;3&t*nDPmNz$MvlhgcdYAzmXJ7RK zc4%gQ3mqdDgys*qtJ%vo`TXK~ldVYcO7I|J-kIwrd~06}0T5}G~S5-jF|{MyL@yF6w0f()8I?lK1N z7VZ%8-@7O!S`(ZalSvqYJbzR6H8zAjWm}c%d);9^!C?8bZFa$zXJJ|8qtlR7%dY-N z5HKx}ofnCXg3$z^M3IL9u31AF?31=W;@!X6ATBu(`z|{s|3kf+Mbg~&-S|rJ&hJRz@lgBg%u%6%i3S8$M_6&|! z&2~B^}y_`cA zvX()VCgW2ppKMjmaaZb;Pn+`HkYnz2bcTY@^bILYrj znz`(O)#@IM42Ox8NVa4JfSxYsh&~E#Y!OI-JWvTW(dIKUE241R%{ZLTZPn%#e!o*` zt5PDvB*J2gLXa}UNNboY=fwDI1Iz`&oH54wh9dn((!|kZXR#tW8WLN`0mWHwK^aO_ zs@ADJsOeq&OPOrOjlN9MjSHu?_y#64FjN(f2)qZ}5fBhKgnA+?Q>v1SK#fm z$&pkvdK#U>NznHro>>eprZy04wqRx~)C&9?vXcWKgp$>2j(<=z(Y8Y$AW?BQW+_8d zX4*!iPoE2TZ@CbjY$b6UA7=%CJyQq-s}7VpiX-#j*)%>&`BcYmRrVfCc^AMPb19q$ zU;`!@%q2NEjuu}0z@Kh%_Xt7WLG>$yB3QwLU=u=P;LwsCe5yFlR8rUcW)K}17g=Ox zuY)x1Gd8AXou8`{VP58GmUC{IzmfC+$mL>%mf7$CDG_=BHPa1K^VvsSpZ>B3W<|fM zuCA-<1Ve*Dj4&T8Y+KJrVVe0@Iyt4W|gE6z@_#2Gsv=3QQm;M5F9e zKx_Zj!121qECA|D;}6wx?&RVL>r?~)XzwF4lswRIh7@{VqX)g2&&!X|r^kIxC<(A> z*9OT$9g)=;y2WYOyd|{XU(eAGu<&lOYGw>56%w6h^NO|-igYS^BcT3D?rvi(y4$u6 zZ*i-xMfc$*{Se0Xi2e4>>7*|mFQf`O&L{AFUxJrs?4GobWz|U?&h|0vEjdd}E9P@^>BfTRn zfeKRJ@qS^5Ywfx2Q`K(!Qmr>Pg~}yb(BHV4u&oKJG1*tL~muzJ8hk4{?&ED zLkBk=#X^mxUk-f{JCRbRAuoU49B*sLqN~UinG5;rGv|Uh*r55U zi@M1Yabxtv_jNl_(^$@sXnb+n_nkR?_WbKSr-v##GaL4lGfKg zRdR8)qa{&R6LFdCpN<5rbqX~@Wkp)(In|hU%0im-fDBcuVzwv}a<(<3=NU@Sd16*U zi%7i+Y0?S8@-_<7OKA^#Pv4hUJw8O^5!692M zQLbRU5FfuY*uhb{k3VYb>=l!0mA84GCbR)f&Rh%J(QD^52UXPv4M^OY$E!9f-8eGdkT8axA28 zDvWX(28ajNwhg`8=tzWE(#%}rL?Gz1;R# zN^|F9-%F1aoQkcjy?c!#ZkRMacvzf4gEWcBI9Z0waROGIcK|{?Le7$ zGlD)rvD*CWNuPE{FUp=A&CI}^HCk=&(mN$*CIMfQ`hYxLuGDPd(VG)TA=tZymNT-| z)rsMr^!cy{;{b|_69{9*&^uO8^Q^`ph}MS?Z&-R?10APNdvf3;>jY9dG?6Ydl(KJ! z;g&e6@MyocU+q|OtyJrflW^Q`^cMBb+ck{(-Z)TlqImEVxgSIzA{L;4_JeyD@md-l zVEfje9HF>iX^o+YIiir68}s%H!j*tC0%J6ip2KfVe1$cmppbuZuph_gf&W%_F71ln zF;^g!Z_pLh5e(<0uSe0HdnkNhPxzooF}%W=x?9mYrH>f^-+k z3C>fb*{FTy=&vL9V(5kXkKb#braH8l$AllCXp(NdB`#k;3|qQEh4~MK&Mjrv=^HN= z;c$NL;kplPBZoF2$Zz<+M}kUDlYufc!$*7Key0hS^41UNzUE1s& z$~1Mc%7rH4gP_{YdTRsw%)=08V}8ytO~Kg`+ALT29+ua!=Hp&w=*e3w_H2~33hR~?3J--Pjo z7LQVj-?LE{swy>Dj|4_U-fk#bcv}Sc-0<%u@mS&;5fXXHLNaed9xGSLR|H&6-jeii z*f)2-oL}NGQ?@9#dO$8|6*LAN1yP{3*T=gV4Mnp%Zr#_ZsEn>K1{4QB->}q*K@Y`K z!*D(DVrwH%;962nvQv>Su5|;2zM^<&1jxkW&Or=(?t(b}W~Dk;PZ1Bjb|eM|dOsGx zR;c$`zXB)d-K*Q49%h?zclOw8`0%D*272O7C4frqN|32tNSZ)Ju-x8|sAa?T>Q>{b zbHKa|!H@A-yfN!*73MoyEw~rBhr6qKxJggf5EKlD7}r7acERbF5jo|^E}W4i6}8el zYw6CCMIzi@C>v7*!f8 zTFhi`0f{sdin2jVpEXcsnU`FRPJpcQ!QOK$Wg>%G6%)sv=_%lStE2e1-q?O zceW;H|3#cxKmOwqkqy@6d}j_Qi=%ygAYiey9d7*r@+*eA<_u^p1;EiLbQIy3&v)^ScA6yxMCB-VedBPaT2=f%{P z_B$2xf0fenGj`X+|2~U=-@Iq)e`{_<5y2laB6QY9|BU>c95-$8tp*voc8{RcL9tqb z>Utm&DT0`bY)l;#mNsz}zBiR1+v8KzEs$HfXczJLjum-rPh4l-<$K*@)5p$-lt$Bw zD0m){KIPL{$jE#*C$o;%)Wx{FVC0msN0pF|;K?~(^`62sL|);9(jk>t;~x4H%_D|j zct!bf;>RP8K&Qf|W|n{oSDrUZIqxrms3Z_s?b=4uB*eD1E8~Dhrho9V2EzBNG`Bq;Lxi_&WPJ&K-chuNjQFS}6{-j2zKBBt z7PEQ!UYO+TD{QuqfHPQs$H&@HJm|xjDO3)IF*k@*_l8ibZM&-FI`q<>3r%%xOOw>l z??z~+BA@Z<_~P%l=Ljy@!MooD#Yet1{Quq_I9r)poByjqY}qQ--?c(vJ}=%-F91(3 z_Kt?kQ>;~u1nMqe%_943n&JKHC|tQT$FrT1og}&lzPw3_xQC|@tp1>XyNHVL_=;8{ z_OvQUTveS?NQ;d_9vI{WjTT-Jx>M_YCz;Pmr^!-@5(%ANkjG6HN#KV9J?)l3A!Af! z;~v25b6mzOX;4R2tTOM#$sdSL3#fQk3A3KF;t)QGvo(Dwd5!#>vZByRFVAl|1(W-; zDrn`3bN;$gwR7oHXh>?OOm^CJV7qyUxxI}@N{UTRjIUn&uVM)X2tCt>x>F}Sr2P|l z=~f!u67+^DxFvJgRSJ!k1E*J5oG6zVySxYz!zX*eSaph^C)I62wRucvq|0Hzx)at~ zgl8GB*@96B5=q>UeUcQ$MU5ntcv!;N7U{jp$AZ}K6j}9=>`lx&Nuq_H^6e}wa1mIR zhxsgXr!_p4BpK+zP7swZt~DA4;pqa@Ddq_$_uc5;Td@T^tHO=%L;dQsFBG zCI5)r3`(OcY?!*-#(U|*A{&Vr?@7-i$+)1D_#w$22MYW6(hv3{^ZQ2<>RHA3LC#FF z`zbz#yw2hG3$7|k)&Gvm}^hP!?swRy_Wu96%=*6h>eg`Lw^K=W|D_S!I)l_RFJi z{pal$Svi&+IP6XkoKKKyq;0+ijQFV09o!ZK(Q$6~?Ap9wr+;mJK}cVV!mM#e#Fy#X z@5OFBieN{dfcEBiPYG3iL-g6j9248dK%pJ8MX;3zv~3o0-kic?BfG#IAps6deU8x0 zh--Y)hmKPGKwQ19G+M+Pp6pJOQgFv=q)^^5Ly~IzTJ$xbVy)}##%(+U(}sQ+*%(IP zzI0i=O$0_TJ8;2;{F6^WAQaFqmFI=$Ce}?0T*tIS#Ky0<{$2D#1i|Ut(t36<@QN)E z>2SI4WZ2P;Wu;q4a-WRY{#pYXd#gm#d%#u(3?1cne5bm-6DN&P(}r_&@Dosn0ZVR{ zb}s6&f4aC|c@Ihz-=|?YDG>Cfte@^7p4BR>l7?|WFdPzugHvOIaL5yH?N1CA5k5v1 z;3ca&k7%Sk9^AHRl71Fxw>Um~g^$-vPg=JzA|G^XVG~)WRoaUC2DrOd6n9vlLA^6` z@hzh-3*YGnCDH9(-ogX>Kk5a?M-wCfzNy8au-u@0rn|wX!qI@Ii@o&TV zPsu6&Z6$@}WPd732r2)RkQMtE_Uu3I(*KAsPwCnV^DTfGkyC~MjfYrQXEx)7pp+(} z2{ZIG{#dmlQ6!+OczyDWNxCSs1a|`cE*|XWIz7I58kMpHQqp2QVVf-nugyZ`Xjh21atinH|d59w6)p*<6kBhgm6J5`yF<~rq?A}T+*?{}VwZSZS#22N<4%w1t)8+%*-sJK z>qmd1JYE3cA#NO}>_;kK{DFANV7H?|Z=Zt%^OdG{`DC`S+`P-Uj!mY@`yjjbhN_Fl z&J@0#x4X^B%eTexj`hXKOm}T*X8W2hTU5fmR{i&m=*PspJLWcy_X_PX+A~n8+DMJrl<3nc>Y319L-&8 z%sp+gmWih@A-DU&&m7?5N2k}(^0R&tINwPUimlO%j!H$JX08KUS+*j%bj+M}5aj=G zb9WbXJr71$20!$G*3V}-t8(ti(l2-XiJFMIR`Mg_<^oN5;hlIK12?a$)TtTSj$q*HJK4m zao1|}!65>32h#9iaxcR(ml0S6$7AV6aIX@n8N=6v2ZNHwM9UIZ>IQ~{M&+;sQx-CO zAgdo{r>GNGuE)?|?JMG|CUTx3_;oj0-gaEmP2E%BhWSM`fE$JNL}{fPuTL-6>0CXX z$HJ=96wK;J3`1t2Xkf!x%37Pdr31+2mrfzY^7MfEL>HH1kjC}Kre&sW=> z&`3CYh_#i~2H0bK=422A8{S8rwZ z$xpLm1I!U>U#DTZnnI&>umrG60?v8q_wQhth}=f~$0Pi#RYK0p?6U03Q=}XIs`e?1 z#TI1R?uUYfPN?hzIW1%)I=QceVg@g>27BeD!EAKt;u(Aw@=YIXV*L(cqAU0s1+cEG zJlOm2R&$5FQRO+e1)C%({d(l3Jk{QjrVw1FmXP_Xj-gu$63;v6zuot~gXYD#?|n!9 z4rcs&`z|9WA^Y=th$t%kGYF|2zZtV8025r3Si*sAv-$u@#Tx7+XpnDkDiZu?kbuEN ziYayve0X{8Ut6v+MzLS#?ey**K+L~v1+%ErV1JU#rUR!Q8hAyKU5I?4;T<~@S5Z|x zvOC9Q6$iIH#=J~kughl+oANb+JH}%6lE9yIpmg$}o@sai!;2YfdIDUHvlF({O1?eB z0}juZr;yWw*5x9bQ(^~PhTM1K#N7Izu;7kufltGF6BR*VqIIH7I#fYT^+>A`KB&=1 z@))D?=jtd@(6>u@PsI}*yDQBhHbci777<6{3AJPLT(bBwRF=AqpW=MvDA(?k zViDfKnn3FX?7T^>+SOs~a$U_B55S#ZpJOHC*PM@G?6o&~Nf#X((7`TlUl=NwrSe#S`Zlg}um*5{7D`YRbY__euSPHK zp(m}SZ#BUhy%1_7-%Qbea+UvwZ|du?R2TcrHGTgc|CDO^-xr3Vxr3pVF`c`$)jvBo z)=`Xbf#1!TU1e`YxEp~-x7I-n=EMmF>jbIJb~91R>7<*#-h5I_B2xBt!tr4l$Wyrd zp}mY4344lm3cUKOaqLL!baJF>LRd}%WSrVv9u%yDTqd(lO~<8z!pS;Um_4wR$QH1^ z1}zb(tCF~WMa){8)wF1LDs@5=nn_id)Fs__@xEb{)HApH-KWC;?c3t=`13j9TaOI! ztw*N(x56#|t|EB|)#s^ZWmnp?5HrkWqt!Zrd@upI8Sap<$m6aR1npo60BsfYM_u>t z<9hbEqzl>Yvs)6fa9+5?A4Q`~rACKEp4`st++ka*&)#$k0<&JS#bKSap79;qk zZcIT&5;Tmn8bHL2_FZ1O42 zyz5eL{-eT(9E{^E&+0trf=VHydQbTmn@W@{YG3(Qh6T;-d0%9oDfJ~-1v{}1eIYWc zO&L`kXIK-J`iLvRc7}ZiGCzb;KRE1kx`UN6JI=ZBMYuuHDZGlUYaqj$tU4f7uMjUz z5Kd@z-RpK^ZmOfrU~OWcpG=ENU!RQ>ygRoMRB4sf0Bty*g2Ba&Utt$gJqe{CGy^ct z`5=Z{4|QqsepPQ?Agc^vq4KV?0TvnK~;M&$HQ4(ZmUbtk#K?j>Y2`+72JIju5HScU{Q=y&sglr_Wibef;sDm1f4| zEl}B^Z|!v(?t@Tu+mu{<`=01xuc;Mt$( zz_+TUplG|7HhOGl-{zhkB3NnB*mdW+2iH*eML~1EFZNK@CC^zL;k*6VZXy#1iue3; zY*Spor0`zEDPUJrfuYda0~YdFoWp0DW*7(uuoo|+|rx%_)B$w8>6o|DiM{mQ+ zcl_s-P9++rg5b~MOU5mBs3`S7${cd~ZI#PGnjG^ZWBabyTA0Y6z>sFJe)j%4DVS-(-v?S5$yQy_(L=Zdfcz0~)AQ2SUTU!AoA?NB7P|M=D zTLqiwLhVZ13i^-~6{8>IYTxSa7&XJSsM$T@dq+s1m@Er6{q|D|3aI3`n}bqwM19Bx zq>3bXL5ZcOvGx#S_B^y>Oq}96s~U9?Uabto{2eGuT5$FGgNRGt%bOGs49sq8ji@81G9Af3lYR>UqgOiHJia8gm1CJ-^l2|xg5hYups12{mG zfP^ep0Ma1$!ROVKJz}+qnzmElbp|5u4^!*$x_C_F-dJ_}Q?6c=Fr)r38yBWkkS#wUts!1EY7!5NY zX4MAcJ{(U7=8^7}26OEZ{ph6uz92oA%}7M;9Qra$>r2i9hL{T#Rp5Lyt+ zY!}S|7ZG3u=ziA~KrsY&ksbh)OX8&_NrNO8My`$RtFFJswqpO56OvOCySOioiCWaM z^Jn71Rf-EaoQrN;5O`)MswlZEq0Nvxu}FrlrILRJcLcGmIE|_P@Z;AbiC>(r-v`|l z*w}rwfIed$&7?YRSt+0vs>+NMiT;f3iUTg}ON)`kd`MA_(+uZF9(fu1AVRGisj9NS zihv0jrkD(S59bd&E;2jViuUL!V6zw(0iZ!klFQnGK-C4}D2J?Uy{~dfP$E0V>8lIi z*Dxq22q{}(K>{|0nk=18nlUTHxhJKsrK*NY`*qTVKs^WAr_!5B`25RR5bH4?-hGb6;@1GUb52m3hrKRVxVL> z{BZVw+)vT|oJ=b@ybThnXm6CqYo3KV451mm6S)1L4zX10SOj!oEMtT7-=u~VDa@N~ z6E4jbejwC9wo@8zXK(@q`~Ak)!>~#MC~5j-Txfjl&_RQegtk;nOoD`5g--XT`-lUW z-Z6xzUnECECzwWY4#|W<(8^%3;YSBi4Z>7fUJ3JxysR3|;d!VZ*Vz0{f2`bHyWM=b z0}nj0Mz+#ieBcW=R{7jrj1la}lw@h7KF59pFDV7U8;kIoKyf)QRYFK29e1WD4rI05sCOvV`bUXMgkJvSD}ItvYzATsknx4F7|S!PcdnlyDc^|XdQS>` zAsM;r%z?`bsz#pD8{H^|a--T_*;^Q6vg@)MJM;`>Rw<8V3Wfl2^1GlxFsq>EIUsy3 z?tj5ynGmN*3L<;(8P>+wTP{my_C;pjkPYIN&amjg5SD#rVOQtfkO$w(sr$w zW*ebA$c_MAcw+e3CLEv8Ol6YVp?+1dRGI?Wu{@7y`3t>sIwaeZl*Bj5s$F4%<%)Wm zR!6BxyQmtSF|VOeT3cA4!B005y*SYoBaQY~HJIxt?i@5*Cd#_^Hj4@cZENtmx5-x5) z9QKq+-ija;3mzeLBQ`+e#RZ@mez#}Oi2?fBVGiPA`cpUtvj^!`AXvF3IsPO$+!fjl z{R}OjPe1^t&$vIEOn88k=3vS$Waj3ZKlDJVWjKO%Y!W}avmmu9mUa3To0k}?@52FN zJ;U)s(n6`~)o|hS5dyj$I9E@CJXL6yopwvEfKAVM2bUCQrh|wLm!pg~eLBPn%IAJ@ zM;cO3>cg4NrmvSlYLY z)f`^)g`FQ>@8L%t!p`7MviHbw;5wg@WY`sr4HZ%bn#ocD%i`vZk}4?(8_5x(MY(sk zez|G-EvBkQ9)^CalE*J?TgKmn-d#F8zNpRIKkoPT_dZ>r^5G-j4lgrw@mn96z9rB- z`tbNQs(bVOXY-q{DHXKaXl!l`0IyHAWyPA{?diMKc35;foR%IH@j3JUmSJ>WL3{Ls zHf;2V<^_&D;Ww>-)lI}kuEh&=GA8m*Pn9gulk^&Lnd&iJ-IKeH43u=QrH7*IPVT>Z z#;E;1oq$h!nRY5dLbCISoz_-MNjHoH0bpN7@|4y^f#0YWjS+1-B1b9MWqp2QU875* z*cES|z#?)f+C<)mx!EE%U0oEN>fRHfo%nw3y(z6h-Ol=6*;;3r=W*(-(vt-@E!e?(cnq)MX z7}-9V;%4q&^fIu!-OF~Hfr{P4fLp0zT-0HIxwwHwF`j=yDhV2a6#dzm(vC^1O1!#Y zm^uQB+RJPkutN&~W@`h#rN#+?6D3S?G91W3PYgG2{HOFZq4BZCRshV6I4Bjn({0KR z|7fp$Aj3}uVkDAVw?rtLbnqBg@yWa$PZ#aC+a{WtSsQamNgm5-mR9rp1ge{66@(nX znYi$3as>SBJ;p-8w*Q`N6Yg(~1TX`uC9)H`iQ-!&iapvIM3=aiJ7wrB@cY3hRW1TE zD+V7{&x@eeQNhEqT|P9B9?(ay2Np07^L3er-hnHK_}*lNx}ZP zkcQKRmP4k}Zd0!HGPu@CWms#dI)D?cT+Cdl&7>qy2V5GAMfYab?X>rahCN0nV|D6> zgckN(>{~cItK#5Xd7ue0#Od3nvuU$KrO@Cvmv><2XKl+nCr?h`508_s*WYU7?mX;o zHS&2^Xhqbz?Di@39s6I@$lK8!?~o!OTVZg9X}5+`0xeF*>!47(EB(WYB#N%zYUIVZ z#92uJPR<~ctBPwdACQE{$t1Sj6-DjWa z&3hbo#i8#rizrWF?l5GOP_*VZt)Y{J0nbg#wntc?VDmtw{B$T^E^}4qS7(E6A_TKD zm1Z?_35DttubCd+bf90(uASj5rfC21OgT@K0uQ6_a1LUv8<{Nq98mI&$vBUqwHvUFbv*A(eN`}J6|5gVP7iPBd=UoWm-`>zXM z7zWr`Aa;lJ%`Kxw%xw2o?J(77vu5spK92oHkh#TZJuyYN#0CcEAa4$$c^*2NE(e+o z*Qczxn=YHI`Bxr4M&2v{ac6ydgsahJoDG*Jwb`9Fo6h-KuewOI+Ouooj4~$T_~zJx zRXFWhsgbI=G;Ua9U4YzDP9FeYFw&{S4S57T;@#s7QEKZ65K6G7gJ|d$$^kDrob3o( zs%Qr~lJ>RDga_`2E|4Qs8lWYS-3(|U0||EyTjXx5qzm(dv*r2HL1z5%Ec1y&KgVZw zf4c!9`GkZZ3auIygf*Y91-4Si$*Duz1}FjE_=h&YbY-?iZG&D3X^j~7WchU`sBBkm zLp=>($!GIz+-GYAQYDD%C3x3C_Hx71zoGBgj2*_JKQnaZp|rYOu!CA#s3@8n^>IVJ zVRMXiMZhEn-&B5F{8pI|jTJrknws!Pfg<8s3#p1K#7^)gD#x@sgY7{{wsW%#GNNmQ4g+RT3Z31D!$G_Xo~mUZ6^;@MeRY2szQ|zkm%H zS9lcP6iD|emlDOT71_`5368bPCk%Zy>NbxOqhw)iE5tWX8N4 z^!v_%5M~B}Wlmu*(+>znh%+|3>URb$Ns8tdcalshvL?(P%`>@NFn4uY{ zi9CPx!Pa^WHLIkA0D7?x1PC|P7H)p0yhc07@awK64$Bbv=B)AOBc*;8^|`;YeGoapzV^=n zk`2Pq&!@yBm_>H|xg*!88UGlqr6S;4OG1(SQqiSWnJHdjnD_llAHV-3R;g;JNqnrA#t#44>&qlAUc>Ku{9Rw(|A_Ma<9Yva8HWFJUK4!-2Xn*! z<@EnJa{3RZw{x&{vi+}O5C8H{IR4$@{NsH3|Nm3$jQ_e`>ECOW{g2n{e+-38ptW+y zHvuj4+gSYgm;3Nv>-ArM=r4~lw6!rYH~niq=`Y{>(-5(epv^i1LgzgybnaSDGSabp zo*-OA;x8ekj@oQ6PSB*rgcV5=DMghaBH!zT6iw19da%*e)$~HX|1Din~BCn#HP zJyu>BU0r&CXL*Of;)i(+;vjuOlvp5MV+z~|NDhlY41o;cWd3=scvn%6>l|kWfZs+(3_jhaKMJ` zXNi=2A63ZK32yAC3U)e4N#D-i2dO^UTR!(^gMd27S=1=oGk!^dXf+3jf}T!4#forq zYKLmIc%8FD&NX+*mAh4rEz_t;%C@<7tH+_MUDox~L!=}&t`cv@vAsP9SW#sGB)9Q) zO(O4x^R>)7*CyzJ{n20~y~?2iC177Z1P!YDKG9mT?`I5F0@ zgGtR=RXJjkD$+=D8$`f|FaRFlMxr;|-p{H%z(~SWll&qH0lg%~GLz+PLSep)jTNCw zjwhc7Tv;Qc^A_*y^T&Kmid0I$nd~5*%Sv4;{Y_TsQCA-_9H%Y!cDp40~K(iHvT zC7F!_X)ea8?HneCYGh0Y#Y_S$x(*h~&$Qf8Y0?qlQ*$hHO4w4Qn8eopD$~sPWT8nN zK@o)Kz${A_R1xcA7{(par1U)l?HYdfc098Yj-z|E@dqIKJ8p$5NDc(VvQYc|;BHC} zG!TEo_TOd(kVEM=2fpbm(=Y%40{^Rbz)auV#?aQtnC@Sm|7;b7*m+R|pP_C8C;E+i zy?(*6fj?B~B;X;$f)a2+=U3HXz6RHdk>yZ}ULtX9on7|p5C zrbhGbl|V-zU1B2${|ZQSgByJZ(HXoq;)CELjbxwC1oetAZE&j>A975a(&NaEN)Tbn zo>@j6NSwZ*OOFEc8-U~N?a*+%K*=*YYL#~!AU>u(3}j?2b|6(6D;>j*CqA$UZ2$Em zPgGm7zlj+|0}Z7Q3hss3zrR0IKG-j}IXlM&s&924jh z0o#84au$$Eq;)HP8mIxsxfMx@c77%o%JPSIJ%47!=V;cPO$y;C$r<1eJc2s_1!#dF z3hUD-MR$K6$JI(AYAF_#q$bx9dvJvxuQe)6{bP~};vIpO8+!Ucl^J*Iye*)<-~!$7 z>^0)jDC>#PPcon#lA?xGdR{UWa`XW;aK5c%lf_j1MnBrC)Ov^FHK6C(7_{9xKi!D? z+vOih(2@};69pMuXlV+uK+nZB_*zBUtNQ}0g4N+iAvw4cv|~^$OfM85`!1pe9q6GS z@%xfhirxw{%ku3Yb0pj6`p=C38g9J+Z$pEc1T)A1a}j5r0PDpPNQ#$qQHk7$nJ*3{ zj+2$>w%Mox331x_`FR#eQThUYzt2WfU|qo{JtkbK=ul3!$Nnm;FEmv^>F`(WT$HiE z4vTvTLy&1r2EIQzt1o;SM0Z86pJI)nGJ{)N`sZkI_-t~ZlBdCEGu~Cg5L2bHA zxFhJk%d;dZIYrGlsM}n#i}}1U$;JH1pKDyo?T8L|n>8PD7$?_XS;<{PjWnSinaftP z-8m!@nq8T)Q9W|+(u-@CZUdTU0#!9tOMN~$$BSPF3Qvt@yOdX%J%we+&FXRedOUk@ ziN?B-%(iQf^Smpf&vWdY#w(b0X(hpG7Sy(9Io4H5;cG7t%Pmkh{Ojjw^C;J^ujs65 zPj1iOuuhAG>_kvl3IgFOMtu?e1O@dBdLh)O?VTJun~CFDJn~d@8q0ss7WCIQo?V$S zqiYgI-JHx^-aUD{V#sUY!|!aFaHG8?H^&%q+yR}SZTDjtt9YKMb-Of=XYcquTMK@# zet1(i0Kc;j-jHs+B_w;hz-`^0)>)YSKzY=OT--#2*@PW&938YzVsvPUU|N ze>lWL6Z0&+e#Y6>U$c7|S`@WV=JW;k5u4xbxV=c*csYJCc>nAX9iO+Kglnu7ha2)K zRj-2D&s?til|sS~m8(G?I%u0cgL{9^ba76cP&M*4qIA*U*0W zwN#SJ9P^-ar7;6wdDv%c9h5Pv-t*Y@H~*}4`ucBP0TKq<-PY3^o>#- z9{xUVkl0Xp4i{o~p__X*DQ0DPQ?J$4zIj1zg2(r(mMQm0O{F2)g2)xx#+pE-?cu4% z%>`(^8qRG|cZlij0hC7Hv3X`!>3n4DEW)mdZ!XY1g3+VLw29V1D*Rg;AJ6$TQu-!d zT6d9C$I#2)<&`I@Y07}V85sND7DVEIV?7+rO>K;gbPWx4jg0Md9qo(_|Fs$M{wZU- z&H%$J)*UcntR27l!2zQ-Bb;HBR!0Z8*C-Z4%i8(2$)-#GElu(!{I>6#{uu z>GhPDxK-FNIKd7vt2bN@<1v4Cn9=elDEF4%PdKVb5CR%2k#N6hN(*oyp>mgY6s=;2 zCOeV!!cd46VfZ|xVaimc=Hik|eKfn_6+M7p$5$zgC1>256r((8ycF#OSleHx-=Z#l zM1>(6=?i_tl|WvTmxGlWO{5*c~wQ5U<%}UlsJ`Z z;dBlPtVfyvls#m>1dIYt(76Q8Ah8R6RX45evK_yA6J{U={M* z)ihjVNU{z&rsMHtk^_(%Hr={#f7%XI*g8omwV%;Y@(t>FH1|2=hwlR~g?|!!M2JRG z+M!thtz49NVDl6h)~vj}Ze~UQSXOamf}a*59zYPTzzSf{w>o;+x#kp<@>djbK+;ZP zQ+?+~oQ}o|h-%rGT}b=SNw}g&2^R4-Mj-2oUMDnQdQ|fzEEMD7 zD3M%?)fkms%y;}tcFZJ=>aGtF@C=ri9Z&LZrC~5_m3DaB`qby4>l6@f{O&=tIWD?v zvld8=_!{g|=y)_fVWXe2vh-b5qxs5bRP_zugcbPG%c@{A{!biz_q`8w9a!5}bUCu8 z5Fez8!CVA&!q+b?R!EdWakHS__wPIHBhd%#;C;tb>SfSs}MSWwK zmTw>K{{@aQ_!qITCgtxJkOP5Nv)e$0yhPqw>dw>;2Ti6UQ+PdZvWh~(JFeM`G&@8X}n3$6##SveQ9gj=wUKJFO5&RPPKz|-~f zx0jPhKDUjrHMJiZvMt!5uJcmrKZ^_=T1AFHl9GlAv17gdrmTlWg?%n7ZT;$k(=k`@ z@aRS!p3!JZFXpzLdGdLE@AIBp4rR-EJJpFKg8-%@Elp6=S^@f<=eN^RT+Ib<=f#xc z_(f4l2VHGc^7N^Cy>)M-Y0N@XCbp7w3xJg$YWgs69ix-9QK|F1$-9}`^HQp;P=#6A zyN4kLxmjMGIbG3iWPOTlU(r!`cLCrD<6(`oRga_=#=qe9Kd90=VvcUd&Irz9-=`aN<<0zjd*N1FIiKLuo>#t-F)cW(9OL1>wX@~9 zvctigMhvTH9=m>8WIU?bWPkq~wQXlzepDk_9*fj`^XxYpFcpiK(fU%5jRjhbf}EbX z9biSXbUJC7!+;W55}i@}Z3m+V&03BL=f~Zq7`RzA$aWuJ6Z`Yxh0DFK(AXbYO-k$} z@WG5f@rtmEu*6U0f54WH0>M$ly!C!hT|g6sS|#AcO}^T0`1`tm%5M67?E}3-e|(9( zgq9q@|H-^Z!`tR<_3=jO~qQ`RToSZjU`RJ-q>U4Vu5 zaC;Yk!F;44!1tH=vUoN1P50r-OvFbQ9@evMJr@32z^}&V!Hbv$`K-fxQIB=0eAEc3 z2(#8D85!i7+T@CijwbUb zOk2t0WHT9}L*UZxrHjgjUKv>>tv9FytrsGwln)Z<45I}kn4{DRuj6bct~@R^4o)NG zY1rZ{=D6i?O={ji7#sxw0Sb+n`9+yvT1o+y1*5%K=OmK`YzFo!&k;bmhm0^Gj8Ivd zy%w~wh~aMn)XH)tGom4IAhkR+IF_8ym$-sv43J$A$aw*hgv4?m&i#zif#hNlu5W5q z10twuv%orrFpz@j5&{zL0trBiUTr=*CPUO1C}K~@L&@XFEpnbpAbufwHh>kn83xA^ zZ=F$v%Q{7aK&372YO}6ZcVdwDD_p5Ds40o<=h2n43)@`4BNplth{0e2F!`7u0^Meu zsucU&${daMx+0=$0UHRC`D*!o<2*Y;sTp8LMw8&EQKnC?L;2uhW6v7?n-S<(4Q|Of4P!MsX&{A%KTtgASwjmI3DSe!*4mJb&P`6axDtmw zZ)Z~cSyGbY=AP($>KYxc)$?>Jw*jKdRc+NXWzMpUKF>e4m&w`iAA`|T>hzM`N+#Ji zucsLWQKocY&e9~r&fqao!Z-%_xRzQ7N*MtxU8;x1=%*-OLlFF0qGH+POWZhOwbVb` z;DYPCF1JJ!1d?|aHK3^)y#0kZCQesoXSE8g9adnXK-LOLL_yie=c9JJIh#qO{mRjM zIR#!K9ZinG36;&;(grlfMonjYK3SX>c@At$nLjM2}J=WX`)yym6 zti8ZpwW1lF=fq8Vd-yx`47$#6hYAt^z>7QpfXM%5!wml#e$aI^Gq4wR`$sSJf$iuNXk_C=BiICZbv_Q}0{kyaha z!2YVL$ONULWBSceHaF$4U)TlbC2R90ZrEnbyV*@IlS7jDnw;@*US`3V{P^PHJz`Q$ zwx+$RUpVE5Yu#|{O33~5Oowx7KDn9}dCRzSs<>uV^!dl`mYv3&1?_Ssg=}w1lWofB z<>s$*k@Nmcv%?VfP?ow@=$rhiW$^Q)ra@9{wT@F-%W+FKCu9+JYM(03hx64EcIvG z0pL7G`NNoQY)qr+qnixU+Wa!JfRaJ~RU<4rb`YYBG!!xjdmzYPjkn zXOQ}2W{)uE>q_qR{#m~mjwlYc5q>h24z|T-)e~ExaX5^DtQF&oQ~u~2u_G#xe!e^{ z%VOfFEirKz1L(^+d(u+_#A+<8dC#ATcU@#C2?vZ&Tf{$Y!%^%>yx0PQJ{lV2+!2v| z9CZjx%Ys#+tqIE}j=w_UuiBw|So!qk41-%CB{co=0~C_ZBR@LT#wm}nz}u>t{-M88 zQ;mt+DE0OP4lYD+pe&xaA?vm`I4*-VD0KF@Y#SN+v-X*)*RuyNJpqqKb)yoe95l8I z?wq%-B;rU0%l^1%4x-%sK~)Ft_DOE@7OzR<7bIY|5BXXluKAKC<*)wWAzO3hIoiVo zlP}3%H>ENa1%H?hEoXUKz9@grY%+T)S^e%XnNk$=AUcJifvx}4gq{UT1*4 z3ff=?c7Del#}J82&%e5N7=R4&J=Py<#ZW$O`_`5j>kixoi0q#Ee^5?IT(D?G^o!Aa ze&BudcKq;h?vO@-zZJxh7TQgqKy!NA(x!=FJ3ZU=Q$dQ%RgHfVd!m8jZymi1&urhU zSb;@emP%D{>rL!Xwz#};+o$H|NwbDaD^wE0vIPs*@hog@Ji%bZ5AhmI;WH=U z&wb_E(&UnM;2IfRCMwn738NkL@TX;={%JXGlxzaNSD1G5^Jip2x7eczEn6?qWC0Bl zD^8>_{V<~{Kx{!1M?s0|o>oQJ5;*2H(o`;Ka{IdCOI^r~vvYieL3D5T%}*8T-u6zs zhy==*HOt4;78;ph8B}RAMO8G*KeH89MFZu>MHNDn zMioNpRg4z1kyWGU1e8tk31@{zsh{Na z3cML@%$mP1l`POfhQ}9VF4=ZfKl2YYvPqFLau@ zsH0ZJjrA8^*(t+3tbZe5!F5pig&6ktnL_9&-@LvAn6^g95tU8?5Th*>>c*5n+6vQ{ zoKyEazg&R_+_H0F&*f4%IqMZB8s-1#Uy(xO^CInQQpzCEs+lC-uvvwjAn7$>MU|GjBH`ivJX54Z=%eq7`XIMd!c4uxi);0-|Nw};YW>oNMJVu^G5#=~`-Uz5KDke#Js8Pod4 z{|&6cy9(VENDg_WhisRtq=%k^ab-lG%7ZYH+1W51VFo4>g==hPPFIBd8cm35AA^B> zevo~B#0)jow=4&~etQ8b>xH z({gUT{>JPxGv|$n-0%en^UV4&UhQE!ll!o4%0e}W9kF&U^3iAJ+MiIDsV8=F%CkIudH!rLxUPGMq| zC_)AFE5$3=#<{!2#-R%>>6z&U&8o4~ii!NZ@o4<8y}|q*t2FxwDG6DSa{#qQdtbB8 zo3Isi@f@$}X)M3W&9oJ)xMlW{r)RuJn^?A2E{qsp=~h+B`qRJTyUiYwj?!rOC6ksU zLHJy#?L={Ea*HuN3-xjwBm_r`g2@+o_f!E;*z;+2RV0W zbIfR0O|j3hgD*k*MLac`fDqyaT@qMYb~)6^WQ^aZdqDv)y zYmRY`oO$I)KJ^(hQ8)9Kiea&XAi*0|C2^ZwrR=57W@FsxlQ$eJw>rgEj2>07+k1v^7ihxbraT01vJX6M7A4VSVo+DG*(*k4O@waTV|1G=!iN(B@oW3q;d_i8mv(wz4@a!4PHL_n#E2CDcn_D|DGvMr5W#anL z3;U7$Q=B3W^YeK@U!2**Je-kOkJ#)#IoBs@#$q$ynbQU$lOfo>QE@&9A(9GgQ6w=Espwr$(C zZQIGtj%^z|wr$&XvSZtJ=X6!qz4vripIfKpq zoOz1L3ADS>W`1~Gm)5E-d7iH54-o#+m$zsTE zF;OvbDz(qcP&5-G?RA3HN@5^#funUWZ=TBX2Z30Q&0TmtOydEUxLe*eR&tv%`n_?B zT-6H#BVdwU2A!Z-6xu@esqLXn{%>31Y#InmE>0C>h#7BAf*+opMH#%4w;F~+kvtIx>oqrZ02?%GT|9VuQ3jPB|hK=IB1!u?;Y&J~RH}_5q%E6Ei2S^0~ z7}7)!p6k$P|OwI=VNfmsTd#BZd)@pc05_yOe#bV2u# z7&cNq|K_v^+z8t7fz?)Mk3K@?isb<&6qrRh_-R3vTI}bfACI#E{=(`6nOZ|IR3MLn ze-l@qLH|BJfA4jCEb0*`(Pg-(UOJryi=8wA<98MJ$b2LWb0Q?bJ4jD3 zCU-Hdf?tEp;5q%jMr{j`bU^wr#G8qoN^{G{kQ?H|gM`@Ga9XF&+;`}b zFgajxFMI9GL)6N8r=uE#X4wVBsAGNd<=y=P{4aum6;l}|EKSNYOpy#8Ux2kD3Wd!> zb<8Pz=lwh$SE$QcCQSDZh3qMTaIHv=vM1eZ(^@5{-r~IWh+sjF?Z11w0yr77 z8u^!^32$oqtW9UPxuG(yQFW{1jsb(iRX7}sCt@=ZHqWeE>3qjK228UttQ7raU=XLL z2&R6(Ns47V`Um_^V2wrq(gwIe=6EGibD|9bzF>jvYT)8OW+z*J_>+Zoio5`qC&1UbB)_=iFWU;!AF z7~+eUhWA}BQneAN?Nv?l#wVT?ccq5}es!Xz03%m;df~x#z$%!ue z6u2B~R~=UZoZ=@7- zCCSGAWk3j-c~O@k{)LJVbomt02o9wpN(BuBmy94J%p_S!)@;pPg|OFCBMdO7tA(m| zMvA|GJJ~sNUbtz%TgLW>yexRP1o5Fz4bY_lrr30{Hwor62L&{0itN+As)mQeu#`1Q zLIclv9`}R_M%juN9iW$EWYH`yB%*6QEJ zC6bZ@=xN9*P3Jq;kf6j&!|wAS^IB)Tg!hr_48h*6kT9_RLp$OS3`ASHMzq*CZBhA=z2!SdpLWRkhXpDptJ?Tl8T*(q9pLGAAjvU^7vz?*r@Ly z7Ul4LM15JZna<5h@Rp4_vS#YSuTP5d$0Rtl^-TT`V=q0co9I*AqFL;lsz+Y!G4)AB zLsCSJT+qO6y9_bIbs#F$3bY8E2e4-X6d_gX(kc2!`#B;T?MbpN_`Ds!>elu#@w~s$ zZWmo4K2FyDcUz{fwJ9RPiNk30`N#H{jLlm_~^&*87?iHD!}9q2!o^o+UThJO`| zBvagu>*~cvf7_jpyI(QkS02yvLzYhn8LypmeQ$DiY-9epx@K*jtvl6~FZd0Yvq|2& zxJ;gS59V;-XE_W1lsI>r=2M6Pl6m8W_&%cL0PpMF&`R%aG_v6Ek|vZ-{4&Qa;&a#O zr7ek(eDn2CKOJqMy;$JGyw zxp7KY#&aF7zvENKi9dyvPV1w1vAfiWZBs;rrAwX2vX>q+WdrTGik^fXdqOlox5Lno z)xC9wUkd)_N{hXjflI%;iK;SG@aevMo0KRR@cZci7vAgp$4V!ow%#LVNbC#Wk@{SN z_^{hEG9SL~;4<$MSpbd4l$MsAUkXL7nb@!OCUuQj?s<Wr!+)QlySF8~d!z~*NII(|oE7Nz=qtLA*77zWi3GXL zopBl91=FzUWO`{M>H1U*TQx-qeacOW4P|XC6vljKVk{ju=O_b-q#KtsJzUX8DLPD< zoXjbo21}G~Fa#p_JfIa)tR+-Tl51dSD^xT|WPNOMm?;oUtgR&ITn{Y?qN6Ty37$kS zihL)45s;hOPbxki%|djNBn8=)TT9#k!n~UX{3hp4v#2@TgrF&cCz%Dx*cVT}i>aWg zxo0;-pdFB8Z4P9YbEc&fu=CUNp`<0kc)PKw_6Np9h;0{%m`LMhaaNYo(BjMtje9nR z!?7sHDVMapB#BZztC~h|bP4ooJ}rvdSRvb9D%bMLuYdLs>Z_Qh?&6~nJiY?ulpD#8 zBeGW)cRDNo1;w2}2aOOU9J}nb8H6LP9s?&bSh{!7Kg0&Pq}^mEoR~bCGghK@2ZGMr zopwXOjroP|h0G0JBMhe@Vx!6=kQUKvOz{GaD_CJ4(Z1C|!2N`V3g~vKgf~Ak7~sG?~FDlQ)l~MPR6GHsyppa-OzfU1K|_rJ3@1SR#GzYkPqxF zFV!{GX=QVEDTuNQtR zcrS8%V(jvmg*yxSL)*3UYJlSAcstagm`s<6zazJuy&Dx{d33gQe%?KrdA<5^(#WKe zIn*OQNsjTH`xA4wnrUgfGf0awCQ<`lNAhG`Y-+QWD|_Mr%D!J36o3PB?tKE)*vQ0!UL=YDb(sH6Y-+k5vq0^v zlXyXFZdq8T^bDWfBucN5B3$7hIG=f13vXxy=<@PGUoTrprHf+}tl(WLaz2n`(Ojkj z-;O=wZ6GCixKY&OC~UqnTe)^IK{|#A6+;U43R1uv%6-z@207pcbImZRS*X#qV~OvO z150OH--^9Vy~_+h3REbO>bKsDK$nZh{A}}U^`4Bn?eEZEk?ix=gK_4~BLi%O-;M)) zGu{&}u0pGglcNEE{-gJSt6U}^ zJsJ&b`A^MPk%XPX@i;j)cU)+JCEsJ(@1E;#q0);*GeBUVa7rFukPh!N+{=`W%LOi}&;G1}(C5qfJsu*6$p?0V;A9+&s^HpE7sh4t zifM=UM~Eeqo28qZmu_CwNZtlrP?kDJ0V46vE8(-P`rSq9T{d{Iwfin*!bqPGu;b<& za)IR!cU@&~`mJa3XuI#fiopid|0s1Kc3lX=RvNeDezyWAlMbpTK~u>G9q;_pxX4AR zrkDL`R>b+ir6m5Haq+*10R5l2;b3p){NLc*z13x%vDuM$t$jcvQYAF4(pEb-MGk>! zCrH(B#z-k04-bIM1(0qL(m)yVHMHNipML?TVJ6&V+gSOn=-248oAINqG;eZuZGqIe zeRs4rSJMt<OF|dVAQv+DgtFp6xpwGMu8qyNKURi^eq1cN_<> zhr3J663X2N9*tu$V)8|a90_;h_toK%i=>Y%S%2rx9!z~582GrdbiAjy!XJG6+zcIB z*!zO(;fr|P)Zc3v+6*mI7=?=}OEJBhMaEmCh65;5BxYeKSq zugnxA$XB(i;9Z&?Xll23Py@$&d6wibz1^>*_}Bt@CE5y?Jh!Q}Cs!9W)NTjbs2P1_ zXY!x1Zv9Iuo#fiQHlR>&*5uTXtiz={^-`bHB*jTU;@5N7fFqpidU#@od7W}=_d2c{ z$(1B(|nq6vx&48GC-QgyPH^@OcGTaPxu6R z;o($QA2NE4Nl5$?-I;I*Atx|s?j{Wzpa#e;lUp-NgwcmL7Qrk=lS_;Zpx&&uhZD7? zH9}!+isD3@VJ6>6+E539uKrQL-f2pz8DOrf+P9wW1jliF^P+hf4{i$)d-Y(cWx2G7 zeq&XYHobALv^cIVH{w+MBv&1fA%qmQVoe-xfZDa<-=4CNoTvm^Dyw1n$oSvy%q7Fm&8-p|5?mdV1WTM=hW5~NH~b_+R@ zNWPf3oL4jJWf~vpDOB(+FyWVOs+xh73}KZEyii*o?G_^*!ED>V&i+d7_I z-5K!wB21Px?&sw~-c_0zf#>P(RM{BbJ{qn_0x_g%6T`$V&Z%*-4)U~3@_vt~oN!Nx zGoQ0bhU8c3$+l=B-Nt1Cz?q8CeD-Iraz+*YTkeB-L`IkFIXam&?*O?-BPcWYFnc~c zw&bq&IikUhXrL4M8_U0E&+O`~OhXF)JtP+Y@f^{2V8_zYm01W^+l}0(jp{3dqy(P* zF-n;Q(jiI}`$c?R2WA1UMIVj1x+MltN8i20zARq*+A_LiOCNoVs z6}bA?IP%|1F06mA&Gb)xMiD6JFm|};s*f7Gfi}{1?-M^-z^)6eMl3F^w zOFah3ibO1FBe^uJY24@9^DJn~Y14kHx?~u;F%a|6XpuEhUXOd%vIzUdX9{9GMas0k z^k>0?@vi+IH})`sgv1^MklH4v99WZ|+(@79IrV|w!R}H{^iuG}(eq(IzyNxYf4LXr z4}^FfZvb9Uk-D+-WjyCNc{2k90`2VV4{_*0zBe>oND3H^KcgU}QcLH9)f}tjMM9f30J9kxra`Alqb?@r! zYha4yaGuz+*v`#_DNeo0#c@75IyaPEYTi|r`*$|d*jY^-%q=%**O0=?8w=d z3z0#MRo)RFeJ12?Qi!*FG3izX*gM(Oi0mIUUN+F`=wcrML-(aY3F?$SE^hD+Q>X_xI3Rg%-OXuRw*M6D&#pO z!aounJfo&jU!ZYu^`t6bACWhNH1#zFW=-o?m@oh z!acLGdQlsD193mr6tf+Zp)p<(Pe|?IJA4DqUpkoV=w{GOq@6*hMdc(RN0MRlbI7$t zlB2o}D#DfIcYITjoAdl7qMZ#3u%PYZ+Cdj)u8WJ zaaW;4CY5a@^IA`8z-;r@V|9*^$5QzD}Viy;X-ql`bzg_v7`Cp`u(@;djE0z`ImORXtf{A zTMVJ=ULD3u5o^@se9P)3mjcp&02GKj%#&Gd0o^tOJ1aKlQjC zE?DPax^3v(B_`>2UTef$Qh3hT9g{XH7W>sn%@t?>s$iu|0<1tN%6i>0=qfAP=sN-P z+}2c#xQK>f2!=0kx|sHqz3ej}RG`;0kzF zFehB5wIQ2v#+7PLZZ56hL~<*lpbJvgoc$C?{F^uWluF|3EYiT%

b18=6nF2nah=3z^|V5+h?lFr1_v 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%0A{EfKoU%y?O={F@y_qQU=$=-MIGji@aJ6;rw= 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≪Iozytr$TxL%hnu5rZSc4G014pd~kGZT-?!Yno^ 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

aPreOyk;RJ82mhMyi=xu4C*`@@Dp3GDX{y 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

XEj6Kk4#tIK0o+Rz*hzg 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�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

    IK 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
    ulvA7Xp(}5rcfm?T<(^z+*HPB`O6A`x0jQ?s@ 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 J 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

    ~JA9Mp7ve~m7M8R(gl-oA;S{+Dv$KCR?V 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 z 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

    xkYE`*g&Q9qZKPwmRo7=(A0-6 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
      {lWRta+6Z5WDv6am83Y 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 z zD=0|p@&!=88LQsi4ao|hz|^lbSRo?n@}qzy89;xI#`qB8H_8Uu(mrWoH^O%D_d+9w zqmv3AA;CoAvD48(NMamH5GpFJQwwb znj!(9P_D}GXAmutGbwCw2s%;yId@zA7Na1BzCPN*{0LqHc*t#_{3NW0ooL+LI#lYA zC~e7#X?q_JP*pMxk)QlMK?N^!ii0z8p_g#VV$R>jNzJG40X7zN|C*;|$GC+aT@5!# z6fn)F>@Ykck`YG-bqhkO#=9OyR>lEd7nSEL_V^nyfdkSZlXTuNOxswUWvm22-LI+0 zT7C)(C`;y!?8H$@n?BBGU|7~e+?0fnh)bAyAblmGtv*#9(ze|i{cQgVPe5I7Ce#Y z!bL6joMj8ml4YaiUl~RMEE+nedJ9B6kOF^9*^yRMYB^M5=p~Kskr@3&Bqnl0wZf#k zrEWYR9c7DT0{RdBMCbvGP9w6{KCsjfx{6no%;oZ5LZtpFrp$3c-#PNRCYwxB$xJ@P zE1&rxQT&ELdYs`wcgth-WNP zsn7$8lQuP>eIliZcHY{ajKI}Pl~7cC-T^+ynDDWXVW26NQrE(AhS=Q&Uxe58nhUjv z@3I!!pohbAll%w$vo#n5s1{MoG^MeZ+~K9SqxKId760AO@VI~~98yL99QWFVNt7}*q8|VuV0ps3>4>+ez%}jp8vGtsxU)BOV z5}a4I9*SnIlT7H;!?zF`H=zQ=Ydp}b65Azjxsb7eso8aAhadvR8*cUfMtaVK{9AI` zV#Pe9nW2MFLYcJ4cQ@LEV&a?xN88mEb`H9OxgV#vvSeAWKVdP2kiCxQu{yd+|#^MG+2(#rHiU#Onf+ADL_A09Pqmo#h-A5uQ;nQkR3#RVxW%Hy^4!5FBWNWr26|>{h*jzm{NUn2p8?gQa?Dr?C6#z?Y~*UPgka#5w!u227qw zSXO}9YX!Jw9`fHDY_k>4e{czbBl_{vk+94aqI45CG561`pjS%M#_Tt-lk%K={PA%Vx81LF{vNcR^{UNt*^w9#_U z0HJUzmwl8&wWK1eOeO2Z_UlvDWTZ%d}#S)VclJ^AlcL zhbt|wcEAgY-^b%_6%W-n^Np6BhytNK=E(pRo#bM=@qfHF>li;Qbc|dDXC!1FT3Z=o zqABStZ{m43@xLSM9eWHLQA*NQ;Fe~o3&=RMG*VscQ4HUzpoQWUx!(VpF<+DNlmv}v z;D`sT4bj0wSF2W>(XwVW?yqYYWfq>EIhQlKDr+dW^(m<=4)-XSWI8SQFXi>2I8QgA z>&{Gx;ZdB;@LhEQ76%Z-yTCx*k>fLUHg5vpE)Lz~fd|w6a<1Ls#8^J8N@t z!9yGstL67vwl=)oT#-6if((mRy17{8Bu)D5!uUWNC{2|LAd;$6*Qj$ZIf|D3n*;|p ztRWS$_(Qq!TR|!jXH=PG&=Ec!YNISkC6T1NY~tZv$tCpJ6L3?(TcUeb5LQvL_(%y) zOM~PPLDNfHvp=GLlV-Y_%*HRF*(|mwR6+d(B%OkYnuIB|~oPAeL(hTBvkT?~0 z+#xg1M4_9fg-_?#+|kU@5|J?6ybJy3Jo}2Apa}&q*8O#udy-jwfI{4!^MXx0?@%6B zfao5NAW<<1AHr#_^`OL2Mw+Y~2+1kVd96-S`fn%=c3=@szOWuRjvP5q&JjgC0w{PQ zb6;r%hiui5(jRC?Fn1q;Cq7c9Adz~>DF~ER6e{1m{g(s=Qj#9}Kz|V|zNVttcuF<` zymgYBn@PUyDsh}MM*O+tMOj;=6BvWf!gNd5OrLX~PH&#ITkehod{k@v?RlA#B!qvo zm@3Nqkd(S8b`oLnF3-SIWFr&Z=w}u^7%xWoc%(-jwe1a@cK>vHe{4d}Cp0NZYtJ?CeDqr&jXl!DM1keP~ zu|I;(>_#P#YSa;IpmiB!3eX8Pkj~u4Eefgp`jx*XoQx%J;8G-#79k7DGNFdVVQBGJ zJ8>SGdC{b8b53!45Iupvpz2v`EEfw2mBo3{-#Yr2v8*%Dq76N+!oOYzUwI$zw>$Q6 zaI)pt3k1Mj7F&$2k(*S4^PlBoZPAC!*@H}mM$tK;V@W)kJ*HE^$=vFhV3F$U#rm#| z;GqHq-6gsB#F}j-!!Aha%1x%T0xno4BrqZr&nHQWHL!Q0hZDoP9Z!OdPGWcdx--?~ za~2ph9xnQKMyHeMqPMXR5;%~&>V~T_s$men5zi004Zf|!%gZkm9@ADCF8u)gq5J2y^<+4!oQ<`9h=6U=sr%c74i z%lf45$hq*W8Pc~}n>@5H74#kXIt%9nti0ceqlT~GBToaj)YpaG71pk;t0E|}o5;yp zs|!p5A&V+sYz8O=ABl4=#1zAY&UIe4d-BV05MI?B^rZ1iQ6+sRzJ z+q24R;fN%@6MGdJb@KyB>XHB%dA7J{W!P+-Pq2ABYvmy$DW)eoWd|Q;S;wWR;4q0L*jS;YYFbh@6J~K0#y`3sI@*fJTHXsCM1=#BbTJUW436<3iZt=tm1Qu~K}aJt^3BV14> zc$IVtm2pProb}kjO=kc2&uR)aN!rujV+7NmnhSodbP(HJt?SrQ|13&kAw24N3zaiFEYH z3qqZ|RV5Km#4kxlGCP`ZZNMBDB;K~Gt8rOqhx=1M@ckk}?zgLt=I%>Y@zhQf8kwtR z^DRuZt;H6cbj1Fa*83#0pl=av=&}QJ#bOp-%{B_qoRtLAbAAKgvvR_=)VW#JE&H6I zjN<`!C}$Ujzj!Jv!Q1IPPPQN6)>AA>nLs|#hKgG2>6pWo35k`u)G?vpqwfpC_a($% zc*OCJ3ns4oaZmqSPySOg{(B_jKig|2`Gee^7pE}%XBq0?BDTPl4BpUh*F0T)?p&)Z zU8$2Sq5*d%YCjKo`O;EgyovEzk8Sd)u#1JSZ-I`H z8MHl6cp7j2FVpbN!QV><-@cs(sM zC3Bxv+uE=|a-Dz8U|rXs(rcIjHB>(-+Qi~Os+gIcegKB7PWQ|rf{Lqib|5i~;-W`xnHqgGp-9;L zXyHORT9rce(LS1D>Q+B5KR|ld{z!;Fz#;AL;pdN0TK)8OZwiVPU_M}&i^tFqnLmAk zz}bf|xF}15n8L-|61|kVo}5i;auTRo*5)z%GBIgm+~oWr=G*9--&yQVDs}<|k|6dI zm3{+xO4EZbA`&r3SpeOnqgH3}%B&$OjNzqZnM}O)a^@<%Dr4Afc*No$+2um&4h~4J zo?Q5V6UW)2zI1e_C*)XWf^scGcbf&n5*o*izuetO2M!j{+*Ns|(vBs;CprH}np4#r zXbR@!3*|~`QuQvAfL*DcXSn;rO4eJshSenGwnTr;&k_%7huhVML&i@86)E(z5uYwF zx>I2lFtRdwD(ayEA%!i8L-hT**?L5XJ#-eY^CG;B&TWk*Q`u8m%4HF$-N&;riYFL_ zV4P(0K@Q!A#RKs%i2G!6a9sl@)DbBp#^(z&lHqAJ?intz8BJrLi%ajvn|84O8LIXp z{HUyE19}klj6K6X>dbF(;wBvIBD7&27gylZn>}xV1fs5D>F_4S+xR8mleRdGA9`r~ zmUB0|cLIfaeS%cIK5FrBfYVHTWNMXk3_-P)XMK1PTz$~1_FoqmBY=2B?X&>P9^io^ z4Iv^UH-qJFq(0AkHCJI0(Ay}#ZqE$c0UqE2%1ivGDxn)XanGz$tZ zAbH6bFnP|N@Y_}dFboHGIAr$<3vFs4k$0T*4wqa!oZ@EDBz4%lxV(5H@&+Tl@JB-R zU4&~4!^63rGEDa@+*Iu05aZp1gDa*pgb`=>Bz;&{t=X7Ix;$Bk#VY(H2X?BPfZ|*XOud>`Ns|mlOm6YL zbPK!?g~fS=)Ilt{LOAfC$>tpLukpRGP;C{VJDO}W!~K9&OeJEG7mjp>c7sc&7nLOg zD3IA~JJrMVdX8%}VhF62Em4&PV|@W1@xo$Sc3UqW!R5ywHMv4hIBD9af1HU4JfpVQ z=#v_Qa6L4)rql6f5OY;`j2Q!kG#29uH%&SA^StqJPQ9*@l3#42ga?e#8#(LOWknLT zGezXG3=O<6=Xf8gX=$krEJS+rYKsd1Te*7{3bQ(Zhn`q8_dC6S{8AMwO({rH^-;L} zR6#ILcm#xnDMZA&4@kGQk|m3Y_@n>0z#liyiM>a6rONf!(69l%{2gg>$g-lC$ytxc ztbdl}Bpk5+E)SXKLNXR!2CQnsdY0!uW_#g!)<2}1)zf!sgWvC$G`OipQ?@YeJ3x;l zYQ_VHo4TXXK?rZ|TkAl41Xp<4v5AhQKVG4MdQoc8BO_3=Yn-=7Qx;pV_bq7!Gyn)f zE;o>0S(=lJ%CBq?fI{Ra;qMp?65ymHFGx$+Sea~PMU;ES_!!}ltXsn1gwA+Tpx6&SAlj?kM_hrEpRI zoDZEVW;+94CG<+DUfSkMnA{y=^@aVlbRkeS`=&4rlyM=5mdDyRf=Aaz-=*g>50lK+ zv6$WM4kyxBr5{2|?BH+E^r>iCNB4?aAfl-s>oLk;P>oFN#>J{dn}w;!QFvwQ!K)O@QQvFJFdgb99HA>%FY-4tJn zm#&t8t~m(o8MuJv4pdu5D_^|20b%8~OG2Lh= za=B?`ZS|tD8e6JWLzb#wBAG+0KXt;2vyH#4AWCrtdGajdU4Nru447Sk47 zcDY_}8k{^+9diXU{%gN|>psxNTZeJ$pvFUti}~nSrJBz1da=4E8c&yDyPc`*w*Qf- zQS*`VZ2m@vRK-7`JKUH@rW8Jc3h_@9cr;HUJ+ZhKpTqzph*JA7+j_x%t212$$gvx6 zRR~BRTtxCu0IF2Xm&YpBlS7}pca)d1;YDP%;I}iT7MT%WKsY7TSlBChm?Sxe_;X+eE13Gy*?3zu%mhBXsG0RXT3(YU+k51| zZ*OW-(jFDv<*wbuIc>u^dG=G5<_(s@3oVSF8AR$_I>pt)(I2TJZ28M9iS>4JK(sG< zyv9t#zWfxfUV3-)_xFHzAAF!ng1it3iUtIg9z~Ni?t`+~o<0_X+I^{soZq_^sTFDs z?pBY_xu2Kda7bGPvrUePa=G)ypZL2juyAJy4Hl@81F4mi6cY}E<7c;l3ch1GoByHg zoWdiE+BO{t_ZQYbqgSn51f1&uR{z&Fg7ecs;M2;cgSQU-W9|IinM@S_r%ve(7Vp4P0be{md; zM9V`-fNK9Im$bfG<570@bAy%9b^WE@5vpeTf#x^M6_77IFPpuv&He6A|J)>rpNbz% zN6)L77cZkPsF)5uPIZHEMB4nbWt`2xM+?~x$s41lc3}Zr1q0^(7u4_9oK%#awU>Vw|3Uhg?jqxxsLLdoJ->%D@Ou^?~QfM?0Dg?^?f~RueOhl z53%|W*7rC}gEbym;I9AVq5;ytizTR%*>Qr15YvILHSEptl*zyL=~JIK61(*yZOqt3 z`*Y&MnXs_`iR}J*>p_U{klsb2$4Pc7x9+2n!C^KqVON^p)WknyGfiHMH?QJ_&gk6Y zlNc=;l`eO7j%bo*eGRsVJr{}TLv`lHcm;=%=EO7TUV!)-pV3_S({gq><cyban#)?A7Qp=@NWSN-Z5l#NUmG@`%9>CUU^M{(VxG_fw)#ubflWGoo37Hb2~k0+M&n7YRPw-^xdlZiwz#Y`nNXOx`7;JpTL5XvX!;o0sRD z7tM!>pZ4=7->2J%&Yb~%0IfxrSS~PW*9bAK_?a{i01H?0L7*XHobeJlcq_PJAbHWu z!VM;JP-x)%0nGs_*gY-v8bNQ`u{mvCtl$mO`M9H+8miGsX*6$yn)hE5l5eNwoW{g# zPEnt5wN)s?;UGJ6fNi07*8Q%$=tmyO^7FES&7}5;x_vdGTz|(mvS2`=Di1KY92+HI zC*%Ji3^zPM>157Vy$+-{h<_ueA;Daq@~%)bffcUDku|WBkfGoaO?~PqH-;TsxjD$4 zj6k%{lvyk-K~vcSs^JR z6vd39rhyL;H2J1Sa+L%^{D9)YST?)NtR+Z$c=a1rR>E3OFx}T_Wu@&vW>{Q^CMv{g zYLV$MjUHGYZax!7b%zWcESVUfb={MCKp;S(@Cic^B{&`CCjC&0nC5&1dqB6o2rN3A_y7ub(rJl%4_44=b!Q$g`Sv^OH)5{fmT@Gq zZN4Z#PG@F;!1Y%19n>j9mP9`H?=ziUWpYTD$M=6EumstvW(5C6e>BMYK5pNgd7X)6 z$1s0@#4w;AT8*C8W|X+YQuG+c1N|}b1uW+|D>;U!e!S)i?rW(4)24;wc*Krb$2n}{ zt1iHm7pWl~E+aZNf1)+WiRG%|HxnmG`;uG)8fK$8WI8!A;)(M6mFT7yYRPXWD?W_( zXFpZ3a3_Ev4hT1gH$s&}HEcKo6_?Nv8L#)6+((G?03){4UAu{IRxJyjGAhGfu^y=Ye>%?>ZNR$$=Cx?o>@tFTSRTrNGS5+2m9fV;!kR6_A9AH*w_`@{Q+}Jh7#9XF z3FYdajXehhai7H3@ccQOsHtu*K%tw}^;?u@3YQ;1G6wAcI|_xIHtXj|!0lXpD*4lg z;*G{KQMkg4M$HSNKi$1b`+3}pP=Hic;L|{bv@FzFldRYVYD$wAR6I$-kLG@jd{Mw6 zsr5#iepF(~YH}>&+^p()@%z#S*O_I<#cKEjoSHVdq(&SevMUgu^;y|%+prSQivx?8oyhgzuaTSLzFYruvg_}T~4}x zF^L-+x&G7+pTswWKkq8b-Y@) zoO0mDm>VvAs1vD*THp8>4w#l&{?VPJ8R=ev&wUV=KzKd4Wu^Unr*wz_U@0puiyCz5 zSvZnyx}m<0eqkxk#n|25-Cf-Q8{NFUdENrPFA}Wj9x&wr_dEZ)Wln$v^n4WYvAalw zGdzo@`n?&J20-MdIQycnJlHd&sea`!G-(Sn1!>z48ge7ypk=J@N2@clC?5_)2AA<{ z@KG={>08NZ2FlnX$)&&kHE4-L`B4XN{KAk0jz`u)jMyy{CEyyr88%I>P7iN%2xL{aqz0NPX z{J9rAqy{0w&9eNJ;(?gjiL^Gxzfp5u)e!IfM}!c8VUmS{I$lu_S?Jp`0s>wTzourT za{|ZshRPYe2A)}MRE||+; zoM9=AU9Gm`OS^9RX-4*UnM(hWq%-qb>wurnD+JYYxXTjh=~xvS-mygO20lF zhHVJq<{hkh0LIQ1TK#O-pZydIs6O9s89Y&K&CD!Y zS6bo2+>S>8r9L~32Kt>$*o@TT9+LibKqer;Di*U_y@JD=$YvaS7EKNC9+*>PEz}lB zF*yy59BM**g+Z#WZqzon47NPequRhbA1UwpR*a=CZCDi<{cyw^q7=NL*%dXRNPmS} zB(xkg#uOji`F(~Lf9mk!R|R;;X@8#XVo#~{>HOcJm5glC^g06LN!A+W-ta){K07%y!4SDRv+OM) zI9=3W?z&K`5-C3K>Ubd-`E+2J?v^!;jeK&)6e*j&^grc!+l}S&X8nCz=bhd))5}Q6 z(9Jh#NN0wq?EYD`Np*f+i|my>z#@ne;f(gkl!)^i;O&Eyj(6EXu|P!n!be8nFKTDv zAUHEH6o~ZN+2n%2YOr9;DNbatm|xjrEHV_t3Hywf#m&X>Xkgx1;Cn;2SVT4{B4Nq zcq%O0nINgbu{Gq(@;jLJnZEIWFC|R>i-k+>DUM-+P_wIqdXUf?97u_bXFm6}BdHTv zIa*jL^&_uXX#55%hC~O&?yeF-mI>$DxXF14z9gD2emw+?q=d);*n?*YQ63yi_`NrH zZ1D3E@V~eF0SOHGlHR93U!G6$J|ADtE^nTJpYM05*LkvYCuysLn-6zSpe-MNuKTsm z+shkQ?hAp>lhObrFi-!p?tlybYXYJ?6h2Ci&nNe_9Q~ah7t=K%{at{{ z?!VLH_x|MW$$y_qs8z+=-F26%pW6%C{Q{x)uLo;9e7#;z3KB zk*XBN&dam8SNEsz4p3VIe@OW5Zu`Jv#EHb4N)1EVihFN>2&T8mlLR%4+l~8EZJfkX zFvr=_>HeW!@<8(~j<&~BmX-MLOrhnkR_omWVI_sQ*?>L;T?z~Je;+q5FQ5^g%Y7a! zFad98`Q2yx88Aux8H&3+ruE02}uq&ozrxLDT`cwCPE{f#zbpP@Qb){u> zRD;?G?%d1#+}p<#rBHR%BzM7w>*0ZMwb|mRc)uyyHqTR}*T69UtK+9WLZ!A?==fIQU^fU7nfaQh z{t5#kY}$D_UjU!rYU@!93;~L)hQqU^ z=S^pW-;-ZaGc3S>)MOw4EZud2)4unHp>0TTP#Kvrisvxn$J1cOM}+pMZ&x(?j-loY zQPmCIKVLr>3YKjm?tOE*u2;tw;L&9qq0906q=BKa$@N7tnW>V zlsU<3h8V6awe{h`q&_VEnd(W8Imw!&Y zggbKvJOsSCmIP006|lny%WCH600=z8E1PZWL7Tu3u^p~^-2LWRMPn|bG z?)op#EaAs95JNmcs@I0Ibkso>W2%2&;=15QqUPt5-P|AY2mw@uYhIeJfX|1214FI- zX3VN2S6;8xKoN|&>ubhqs_sTA_7v-6q=rpR83i~AT;@s9B#MpnenPy zJe!fMCl53z!d;K<&lgWFyLHcI9(>1NIl=Bb3OefdF>>em$h{7Ej|B#$xni&mwrxj; zV9_$0i`Rj{9Z&p(lfL}!bK2|+0}3L~i+NS@y3^mJ_DU1pB1c>EHs`LIkLbUp{X+%ID9C(1{n%+<|9J|0y6I8@Kf2ijE(W23m1Sp5CMd+1@QT(a zif%x*e>-)0b$ZEpXTy^bERv2eKi%L(Z-V<^f3nC5?e2LSM*2voe1a1|X(rNf%4cQY z2(T2PY5fb!j?P?P^<#zUl^$rLuk!R2Y>qj*%1>-{`Q8`ubgeTZz{g)F1bmI_qv-~* z;%rO|H3z`P{5zTEz*szuyg% z*V-6ea`QFy-WPwQ`ZzWkoiK`yTZ!=CFDhr>MY?<2-{%2#dk`k%i5a$mZ`&)-DFp2C zk0I|pfo|vkm9l7vfdNnyEjj`M$#kkc^|(PB_LLTC$}1yejh+SIoQgSH#GFYaE~LKm zLM51cV;mfI`fE|QFS2r%ZKW|oKo(3taV}DW!@sDId8-x^^(BQDL>v9vKvXYq-UGjD znsFct{mov`h6zdZ{cKhfTCG5MCKJ%_*^u&m^)^Vs=2!IGvhhot3$2x#2wCv{JlZ}&tfW?)6rR&Rcf(JEn^kLHy49q+tX12&wd{+qL--# zv+8Tl)o!95kRtiZNt;<@Y4&@dUheemQ`HG?_t9d`tPU2zj}gfH?8`dx9JyFc@wFL8 z{(!n~1LruOiMLE%pVYvK6Rx~nft~f_KxCY5qR``j`V`I_$ky<4243?lTYds=Iz~3vp4EemOL*^gLNbz+H{P9KL7QPfvT)9Quf-b z7)Re12$9>@!%wD<8J*9Q!_6}jTHa7Oz^8voJ5yelzn%bC=K!3Kk@iSDAG$@HiMEW zKJ*Jy1J7q?-%@b~M1>UBWvvc{;!o!A@#ZWQuYcXZ-A4;4>eOZYGE^-#3Du;4Ym!?= zX&!=N_xZhN%|!U4b2dS+{kIbOoOwbRXJVbuT7@(vF*zohe-BRBq8OY`LgA>USoerE znob^5y&KQ|-Ia_7GvaX}@Csw^dXMwp6Wr*Fty9&*9->W(wj^To5oh*nKUbfiRT-WT z4I;d~7$5bvd^lXSY0yGV(P1MNKOCY3zmIX%nh2G;7}|V(+TQm^a|ctkDi@MU*xIT7 zo4rExg-hW_s2!NwalJSge%$~kv>AU8&Iu#_{R{gKy+|^xGQiVMmGWn01ysJM4uhe2?MV^Lq>I<4_^WS1J ztRXiCR(9ekTgeI`6!Jy1y~!^wGfh_+772Iy962wPOe&E{Q>4k-)vRO4WWp1`osv(E z|0SXkNJF5z-ec-b?ri^HaLW&=K9r_P|Ua3ZVRzvx7tyjGa(lwh4M|TxAUv*Rhg1 z&(*9%Lrx3m%asV3<^AzC@ou7;y>hT^{Ju5+biiTcIRiGn`z)J6y*+N}3L%d>`U}n| zKIX4V@5}2V>OaZ#LP<)9{=dIH=uf2~+|XxBW1KJbzdgy>(R)n?*boWB0q7x>_6nrYWVMchE93}2#^Hse7d}r#AT{)vWHr!G3-xb z5*>GLKaGZM~^ zffEcY5)=IY-R5QPY-aZVX7l=!qmy*V-jJVH8W1+X$b;cy8~xp_e4P{ZyO@-#47r?g z#rgW0VwtOzMq5XPg5JfAefDRMASrk-I=ytZ-p*K%oKi5D% z!27-W@vv3s>FgxW2gs>q?zN#)1-7#c-iMyRVbN%!V4UpHDe{Ef?_xRMf{&(O0c({6Uc=opOT7UZ( z419YcTPkVg;T7oadB3}VUM#(S9lU<6E!}xt9PAbF^L~1Ge?F>y90VHFM!X*$qUP~~ zufM*Q_730b>84gTMQY^v%zVCC)P7#)*N#=Vve4t8d|$8fGj)V;?${`jQ(~17H-|D! zG?g2i+@f{F!Dd56!AxfX)ul>e;jFq6tI=CHVFb)bwkLKe8D{e4>}V#yLf0@G(8qz5 z^izY>l&z@cR_Y_N!M?(fCY%SDzVSk)7h7?kMF(X4Qv= z3KNmKwahY*O6=?)iK|+qtfaof)T~+@hp9E|OcYtX8m3T!-X7IWSk-}JBTlDd<)TJ@ zGa&-e7Tb+1VRr1x36?Ms7PeA~v+YH}wXjzZB|~amHlQ~5g}py2bY{uaC+};b(SLpuPT==7 zWBmo+@&9M^xEo)$+?uDdD6FrZ{oOdfwqh}~ZfOf-Ik07IxyNy0$K8C1;l%r6=O>>1 zhq8sAY(^YIClAe{FmmoBS=l7wdt@Igu>>|Eeoi2MxM@fJ_#W{O_}jAB=D@@c`@cyE z?mtXI_xT<99)1-lAM` znZiE;2YU@1lBo#b?6eqhXP$T9Nm7`S^&Cch8k((0h6bB;R*BP5rnx1JR@uK0}DMQeR$TU>PEyMf)eEO;7rO<7>En}Z!A`V*gLrk2U7wf|O_N`&Wsr1e|)`8CzR zjO~VFPVMzQGCm-rD;?V57-)Q)ZKi$Ch0CAibB-bXzJ>Q;aCfnt7$EM?Rhj4}#kz4o z2B_rL@f8#}RJ@gIksq$gJPh+UEQ&v*ZJQC2($L}}6+n$f#FGEi%KCg#i0-mpF2UI^4TFNa0H`l#$J{ay* zW;`w$(r}MnB;_+uq0KST#@44qtQ}M6L2Sjyx?-w(BV9X{J4ULIa@SG6+Er+iU*2SE}xW zsiI6zLy3?cv@S4LDvsxJVb`WFwsKTSoY$oK+M+~>I<+F0oBy5!M(voTHXZ(t>|!s{HmuXxeSXjK zUP7G`+|>QLDU3E_X%rq08B^L%s9`=xI5K83jNR#Imko=$Vg0Ej&3QGQ7}5PPf)rM= zA&EB|Nyb$rK(OrY$(-VLhqt6lJ^@4Qg~KcoYg&DpA$BaT6mCZ$9v>ODla6G;ir683 zszTU)N*jU7byj;+o3a&B@qP*;(fRd|fz~5zti*^&=T}>#t#gA!gLL|eiGsCI`-%18 zk8gsefu@Z+6tvdYaqOLxm0swg7^@bdNOfTL6$PY?0%gVa&jimnJr*NU$XEOp%{s-u z5b~o+n3{a`u5l%@h=))TmR|WiCdoJH3vECjJ91a{EH}NAM^((lg+Am?gb(9a;LHl) zTg#+?;y+IY@}N+=6OJTfLG?Y`VTV7se;uNzv%m9LXW?mDh5}+SHWJ{Al&9%BFL3jV z3P~+g7^sC7=l@t(9cbxrT4#j8{k?#A1;hZ{X*On4W6jebD@$AdMlSH4)@n7v;^NO` z%m4g7HkFaGQ-5SNT*XVq44drdL zsn$}%Lr!DGpT&en$s_~en6jgGgAK!5z4DN7sCk~GoRt=ea-H6v{Dr=wn-Keji#|ndQJlRP&!F7%x=DF3 zKoBxtB$m6R2Q3sLHfV8gL79f@Ip@j^tGeKvcy*j7mLk%(|A!Yq zej|}TKsckaEn8U%F4do%yb&LQyab7qcp*P3DuIMUSYT7@{G|W^FhtpCeVl#WuejAJ zRnd}P+(#LyN!JFA@*h%Edma|8S@uE#*p@)Wh<)WE`HM7$ zK`IUYLMxev)U~O|3~S4SxDM^1%`JmL^h)kRAlMt%`6wfUU_Na{?ri*(DkAklKD~BK zow8X-D=A&EmcwJeO~LLm%s;d^dY*6Qa5*i23j@j0=QC=HO)Y!XOt;yGI#ASLVpvri zusD@C?o~Ff*6-lMWyCmx4Onrc$9OgGA=%oFU(076cRwR&9W{$Nr|VwEM`hCr_-j$( z&Tf#p^%Y$w(~&zvGD!Jn%$cLwVyZ%HE{ePXS`Gz<{^ti#qkoObAM)|_+(eufa-0se zMbuTmy?cxNS;`pAZ#4jOPwox@-RA&ycso;*}+tM3!CzZQ@#alf_GlZF$#?@`&`2meG@z>TYx45J6Yetj)er% zxES|6$^uiru&2Q=#(Qem2S)|72hDmpP1d~JgLmoq19HKc&MdC!f4Lj1w3n z-UVbLW1j9F{2&>N5?z%1^=MxKSC>ffs`i8C=XkZQ{pRqU(S9dhqRZ9hVqAPS zNjqq43s2d;Z*S}`Nk-heAWV2wqnP{^{u7#a24(M(RK3$xKoIy`pz|U`JHs=XudSFe z3|UQP^^~1FK8+wVGr%rIDUBEGr=C4<9n+rIs#8YYY6>cLMF5bNk=(8?+}R1%$emlW z<|mJVoa&4)6{P7tY%i+#v7=#|=~A4vLn-Kut)SC|rLDFluZW2mpQ7`2>I$P4RV6tA zG}~Y2g)2&jFVY&f_!sp(maekTuau_}blrx(A=$lZyQs?3jwhl?FXeI8VcVlyC$G3v zTK`CHqtFh)*ctt>&>1cu5cm^WJt>kjGt5r#HpB6Qw7c*cxgP|rS&H0>2|LZG*v>fP zBZhJTOl^AG$}7tCdQ}W=l*5_fL-c;dD$;?mLr4ISTlQAV02mtzAO5A)jRIA#$s&0wB@FgbUuT1H{u6^et#Kq(HWU%mlwkxJRx>$2^9Zj76HHhBWV(P(Q$XuuT!I|B&O77b zq-Lfw%U}*>VfC}bI4f$iKWF-AylL6H(fT)qD844!MzYL;Y^ppoPj!@Ms-n-+{2luD z7YD$j$YVbZSjf1S?V=dJ2a(ef7vhRhsys(-;W(T+sm<>s%1!0XcQP`S{AJ47#w`jh z3nW2*Cl>X=7dyS99J{v(`8lKK=A61g5G{W7G$0LcR>=>#L%>2GL9BdFuZl_*DGPh6 zIf>gVh1`yz5&?len$7{?sTT^@GLg^MPBy&mG2cCZUK%iKvw#=V!z$OIAw%1c`bb-{ zwf+%_rCr-zJ>@M8Q6xzc)(yv#t}E03VRJ`3_4_zlcNQ{u%p6;G3|Qf<4)}%vB-Twc z^ULBYk|~l_A2=ddj(qDs=n~eO3h-4@+LT)@aC= zZMo2zprwDfk$5!GZT5W(PU>ngnMN;ZXOj3x?yuy`)!KA{v(AsiTRHhJRu(y9J}nQz z%VA8de(ZM$+gw2p2|?Dptuh0UOv?cf+1ivDU7jA2tfLUWMX8lJo9&`Bb~KP$glc~Z zZ6hU*ZKhS#0FcSSfxqGpqjQK@$RRcImrLVk_TyUz<{+Y_vSkHbZT`)~p ziqxgejN}sD{*ANn5}bX5Fp3k4UnCDLhQ7A14-@R=O6n15b+H5rC_kH6mm!ipWJl$sHuy zuSKR@IQtoEJmvh!`{w0rrs;`Uz5+hlg0q^}j9pAZ6^1yCXG5x#z4aV9Ot@Ee0?&KB z&|gZw*WV+fsdpC@oOw0=4t*Hy1;@3lX;iJ3iry+)rlKIzmUw2Dh~8ILP42}h6$&u*lcsI1qO~5Mq(X) z5ZenIOR%L|8YUHv@j*hO>sj@0DTR()*f^spupE)CMiO%paE}$>-odWNw6CA=H;qM6 z%!^M7acU09y>Q9NctEX7(Elt^^{@|th`iUGNu9z6Uk&^|mK~ueM`YDtZVso&+3}`) zMT4o;kriGNhdgdO1yRbQL!Lra@g+Ia#&T0>0R9oVaGcESL?Dosc+^eQlT3m$U%WTm zVjN~QlFBZOR+P%{uy+kv?&1wTBYvfq65s|aj_V}1D-cSE?mOJGE{j`FeE6(d<#Jb- zehg$`gr4(?qEBQ*A;Zr^tb?Hm&pDDvJJq>$wy|n!Ayn~%O2?QLsz~cA zq`^y~K(K)Os2{o~*IQ~jz>$O-cfqCeK(keHM_AZ?4>oSoX2FA)xUXe!IuppLGrs4z zoc8x}jb-JQTPOZHJCLb97g%K&+atm^p8{C+xa&eHfH-&2dpZ7fD45h^_wlME!;WXo z1mT@PX=CpRO>cCk?chg*an1HzY@E9nR1?Xc7mX89Dn`v>vC9SCS;!WxT*F!Wn+rB3 zGz6tw9{GD3?S`N+FGJTY2dmQfj?S0hEc;3DLX=btbWw=HH1iw>nJtldM*z!NIGCop zP>B=@N$GdB6>mxW*&k$REBUlX_Ii9zj({&!*+?^SW~UoI14QlTqN2|Ls7eIS@0Cy- zInUcsI>c52uSj9X@H@u84)Fx zMXDPT82o^G!Tmiqv|j0YUs723m7y?nE6|6bq{0)fF&LV*d@4B-9|k0|pH>v5L(>#D zxxq$X4~}I62&oorqN@9Lig>Qb!I*UbYuR-$VXJWVwpL2$tRr_v1rL0qOn=t;#Rkdp ztcRj8v~$TkkWkqr!Yp~JUQEA6!ei_eFPhH8_#IgqmEL(0*%1=o*!p2#JqxqK@wGI>El%nRhtRk4(Vg_P|! z^MdC2QdjD%bLc2pIstX_%*%?&@X<3Bcc62s_;MXpQz>clablK+abBl@QW$63gj=5D z=yS_8k_=Hp)&@!Eb%>5*K(K9E8RK{s;sVZPzH71<_JTxaod-VK*=_t^aErSFXwKi@ zX<1!bs$n)*h%H-q&fUh>?l`+Y8UP%55gkVt78s`v4R>Pv)m^Yg5MUS&aIxnXe#A2N zi++`4UJ|UW0-DVdmyY8aMAU@dKKczj7}d|7Js270dZTseG6@z>adIjSo}B;uN< zZ1wC|ErITp(__nSiYQ8Va5w2RcJp<@%1b9I76@`H8^kDcX*P>$Q5vuaa?3-Co7Z74 zd|RAa2;XIHr#`kjIX`v8;+Q=PFrb zPw5IL0jSiHDsd90`Qxy(lwXCXAR;I$p`Dy^bB}G}k@hGj$hh>Bz2HLfwnn7_)4 zpRClPZ>H~s@RqzRrMv}VakkmGJhqQ5&#hAAcT+7p{!*@H%W4KJnzoZK{IZL` zi}w{wGV_#{6M@zKwI)@Y)uIG}HL&y_ox)IDm#UYUJ!f=*mc6{-PInrC^IU`XN=f>@1%iiH(cZ9$tE$|<=@iCNRZ0uv>E7v+h}uZ*Ks#^zXrR_ zCSayuU0vRF{Bx0ESX`dSnHSz?my)08PkzK2=P$(2yw}B|IFw8c17yI6n_|1}=EGdB z>yU452P;LGq9}(#W&s8?EW_4q``M_Qgj#A*?GkByE!|pTa+1Q?GirbL7^TW0jf*pG zrrI*>f**~DAm9^lli$ptLao=!m56?!;z@GOht1od#0grkrtOd}n19mbZivLxi@5qj zG3me`sj>VT1`{QY)$8e2Jc+dK-w3t&{8C1S!k83a12y!)XCqqew4-6vn<-$0lyP|^3J)rEbbgORY zC-pZ?rAYrxgzRwySFTzL+NlLpQ!uM`y_wk6pyF9y9rLRrqi)ei!}?6Lar7yQsy4-? zqb-7Dp`6r%GY2ENeAzO{XMRF4cxw|2)NO{9g1pCETM#2cY(T!QiLpBSc8_IIaw0?>h?fgC z(lUY@%&l7p?xy!LOtaG06X}{=aW4dkN*1PC-SX&^us_zBG3Pm~a=GghRnZ}9aAi_t682sAdjR}S{`!OZX~RqL$v=xXRr{A$X&_Sx(Y)S;OP zk=&H97eg227;o@Ra=Z>e8D$?Y-$4K&rzlhmR4*mrHz)7Mv3rfm){AszE{Ag_A}}*b zSqvDb;<1gR)}}5xJoSBd9ZPww!2YLDd1sf35iO?p(no1y{FRv7Wk$A;lq_4B+p0pk zL7icdMPBfSwA#=^#@-Nm;T+Ec5TOk>fi;#1Cyy8v>Vxf&Y1~6&uTgKZ-#sk^#WfAm z%ErJ;+?0$4xT^waom-1jGw2opF4J3iwTY%eGYei_K|BgKLk-yytL#$2D}=3xj_n2L z;qpG_Vmo8S$cd`74vFO0k*qkRfL#?TM|(+R62drYLKLM$1WA-p>MK`MS*ysQP%j zZBmzNcHOZUCEL9sY%FDqR_Bd*xT_&IbOHT;i!^+K#91*3gnl!JrXG=p`m_wMZ_AUrxy+CI8`m4kV|o z>8xZFmSq2zlSB-=!6xMuj=x4;tVrE0BCX-kEoj>r0Rb$Tz>l+BzxvyEER%6n^N7BQ zZWf4!$$ERZhrZ-S-fSXB5X-@ZgY?VMvQA#@lvJ(;5;h|+!`|D z$X_Yyoyg0yIalU2XvUM}H>& zzLDJVpOdT-pIC2Nyq_AGyUrfqnj*w`|2E+Hz6POK1^f-Hm@tIKL$FCYArgfOGYtNSvPPZ0E|$@NjnFXSoI( z+nM+5u$Jqb7wuBy3>zeUyVUjK5Z4KNfpjT@Z2Vy`{#=KJ_oW;B0Lz-4M!IMZB5n^6 zNUt&yYi|!?{blgZXF>0;#41rcEy!&u1FQz$Vn zV=0rv_Ye(j#=%wm3|EzK3c5O%?a#MHWOfM{MVQzPza)#aP))j0jh#(oLyGHIsRR0q zzyPXp4SMkcdc%`n*#&9URB?_A^VDm zIeIdfzy!JW#}<=!c+p8XYfotxTu;G%F{Te(jsV1(OBhC$|6&RqQ`5tcfgMSpfV6D! zOToUQd8*eDy`ohu8gN+c%w7M8fZH*z#H<_*f*J<6e-*1#WgR(Ufo{K0_G6twCbyG@ zgg@iRuQyCqXQVJ+`XqQ6D4Q&s#H56g*T95Y1KK*Kl99 z1~mY44N&zhu6R*P&N7}FI8Q0Z`ilXaX?mgPI`l~tF(o>#Zf(!^Rs=ZFx6V#UR9;61 z*1F}rQ7qM5v3%Vby9E5bOA;p0HZHi@s6T>fN4JPLN#KOgxal24S*h1hPIIDv7%K}t z!?C2cS#k+ch207Df%=#jsNM~Ta>HrF!=$9A?X7A&Moma&(!MG&(yf4YFgXZOwV@OO z&H6W)Lo9j39g7A%C;J@CoX;iFr*l|w>mlq>W<^I1ACU#>Y1WJF%HL;X|>c(&9_3#~EmsX4T>X`cjD|2}1@;Ked!_&VEJLXQa-sEAJAaIHi@Dy0SkfVJSxQuYO2c-+yra%pem@;_ zW0r8DEFZBA*=L$j{j^;G*ARzf)h!e6(^`BfYNxiyL&M&d1*1Sv$8+^9dp1&L9%&7e zH;=_C7=Wtbt5TiLVz1G4Cvly@DROcbCeZ<;j*kpOd57QPv0vx)5=cCT6v1kJ<1ExG zGW}l4I$tgPGgxj4lzOlRB^+lcX@BOi?P?0uP@dkuV~-PPB^IE8ikwc5b%97sfc(oL z8mE02b{7#15Ft+<0j54R;9skzLIRpc{jF*$-CJ2Kg_akU=*QG)!D?_}-2R>~cjP z(8k-Pwa`CEv%!Jea{0igW`=`dnLziN_YSGr%`{aQlv=qr;ANLjq0#?FH!6LL$e;Ph z-Ch!^alw-~0_}dmr&IgusI-Yo$*I&C*=g%|2)~jQ5)&BEy?U7E7fOd_t$%Nr{5R(CluhLNoF%_WBZi^Jm%=V;6aB{~J zv}O$@=9sVUKDYnPG!@LTFM)VxP9~I6lZemblkB4=@*40}3GpMe3f)U?^KYdG>(978 ze&P=XHC*b@oLk$0ryt)*uvA0Ao4d@Kg^NIX+ha$6yOYPEf{V()G8p|PsK0C8mquRc zh+#`HZoRcYUhCAES~XJbev8W?QcwD>&_1O0|84q@SO=RqGpKIoNTGw4#2Q=HiQN(v97vne#ToX}3^ ziuvzw3Pvwm4HRUVtK|k~Q+SOtMp=Ca?>eyCV%BksR^|>BxA97jRo?1F%T(XvM{0M` zfYUH`_#HJXy{a;*`>Bf(>y_NJx<6C*vHojHA&}4$pN$)P<&_LS@tb*gd{B zyeb(Kd202R?UdgqjXT=vCm-CP%LIm=7p^F9?@UJ7N93tPAY}e`Bz3Ij3x1W|A=q4TK*;EgY)7#0hq$X}$)F^5L3dsuo#g?|veQ@jSgb3LcC zh_xT6`FV9m!>U<}R3OMfmDO3dr@bwZ*bH=^NH60Z<7_sGfQ-#KPlQ^Y-{ftlSpq7u z0uq#-{tiNs*9RU)OY8Cp>Ga|RpOodZkj`h=7Te53+K0o9Z-9`$@e^I1k`F%p`yH|Z zKg!&`1U(~Bh>@4kZvW5$o-khv|0un}iCikb&ZnumV$};OvcUq%5=coW04<=cdP$Q= zhQGUUHF38^V}>b%-Xo%)_#4RW?PjDkB+4NowG`5FQbN4vI+|sKs5;uYvm|f7Q%satt-UeP?LfT83#rL&t>}@sKuUC=t7d@*iR5aaDkA@UlW0dL#GKldj)V_Q9 zPK3J@?{4=4#Jw1=9UX<@eNl-Q+JKC4#gG|`W_m>wnPG$()`iN9iu;OpVL4E{c}pgS zW&2h^QYx|(-VvE3q41JAbgF^FuX7E$*NkyGczEZplE#!5Y2nXVLd!-%im|4OHiF5u zGNw9EiV4%=@ycBPr^ifIT}|i?HT&fFrFnPkUqH(;>nsSMQTj+*{wvse1-Zp`%_wp* zGF~kzENAUbn@Ai&G^27I*?LVlCLOvl9@DCYI@ATey1qrtGGk&iTS~`pGCsv1Dlxd* zsRH#7x&f3Khx*mMm1EBf%kcWH*r;nL&c0A}VYJi=ZCa0VRwDoGD`4FZjKH@0CAz(0 zHCQC74J&P%Gs~YJBG^bY*Z-dZTvTh8xyYRC*DmS0SK+ zeB6)KMgmG|B3+iDs9Am4lD#lCJfrP@5q3_&nY7W`j&0kvZD(TJw(VqM+qP{_oHw>L zu{m+_=c~O>{-b@kPP)3E>aJQ{>%P`yqOoQg+QwG$}(Se5Y{;!C`031 z9E%V}=c#NyEVV-YzRtw9N8gKBKh2!5y?m)&-6qaUoa!}s{Cm%K91puK*DCjDiXSqG z@4T#el~`yIRO}&mbIH0Z5iEM4d7ySM=}amu>V+X-{qM!vZepph_;p@`gVUL;E#5>c z+}?J*v%v%EVWtjRO{Xy1pSP*1jP;ZC$@F*_shxm(mAlX4W50aPMghN(cl62^pjU9V zKprlOl`4|gJlW!vYkuC#B7aY$d&sco-s9TykbiG`8(L%r|I~f|a!*!!zS0A~Wbr^Q zA4zt7H5GpYh7`c!znb$FbWC{ub#eZD4_AR7B3x`cr(9$l_A1m`fyQ_|Nsjr%NV5Czlpje}>}>FU8TH`We1*IY!{6`RITwurDvn+| z$?uEP$~E5T{4G6qJK5L?Z2X!ub_{(={T+Qj_cpBAR-Pz(0ZEKkZY({N$3*p;GIkFQ z7pM_$zq88YhujY@{&_!yL{1{k1$?}Rs|qlSeXmEH5%p`}jA>LVG$|O2hqw6f0<4)a ze0uij2E9f5etv`Z8FjwQL-U|hK@JrX&Vi_eogG?$MWNLjFAg>txaNo`Rf7L$>M$dI z4cPR7eB>lP6SNdKj$P55G<)&8ZPmRNo7lzde03Sgx7sLoEVTUs(2#0iAfXAg9PyF` zLxL;kpVs~g6S~*0JZ?vMe8CPRQQCH{zO!3j2(tH!3o==(-4e|_!u=8p1gTc_M=&Fw zthrFv=N{M^U(C95C;!zK;&4zS%Wu**4cn=)O^Ge^CZD3-08|?LtFCEn-aeb=3y6xg zbK;2EZ8lYGzdXSA?eQnj{CITqdi1oo|9bXR`~0jBATwlTaripB^S^Oog56_$hwW4O0y#a{8 zT2qLZ(7~`kJD&7ceG^g3KWx`q9lo*KM6Gq0IZUzZ3TS#J^I#2fpP}@ufmP&Ac_p-e z5#mI`VQ8;d{~=t0X+Dc2+SnqhCZ61>V*NtDXgF0gDN=!jENn1|&V;T9#g(?Dxa@qJ zQoYhwvIa<`e*Id*$NM;_;()}Us>#q9Tq|T}TE1M3^`i_PDk?xk?y$yyEtree5w2%$ zSlU`m1f3h}dC&c$#D1!Ff4WiAF>O^--x$lJor=2j(GrPmRgaOi4wP^6uP~;z( zsnOB+v1}SuOBv-3|54%;xBH7O30^gIoenO!99YF`FpQtatF%T}y~ZNEQT6Wjj)NNn z&rrAGh6eN1cuf%Ejt1kVJJv#aJOl|8hWq)pu>=9u2BwsU~UEpLN!BEohXh zd$7TD7qV@fId|If1Ge|EZLP-q zN?p!+!($bjNG}uyQc30S+y2Gk*L)W4>N-iDNWa~;tT2`*Swk?@9*{gthCM@yabPb< z61i*x9*~%mG#a-OG}aDyVjXT#LLBz7xS`bV$e6Xw* zc}yM7KorN;Sv3d_um?;?CqAp&gloLa7PB(O<;Rz&S;R2pEcvlb1pxjpufZ2x|a>WC$8~Tq_qt25v91)-4;F$0q zi~fyWz_;hynzmsS1l{7p+(bvyMC|_TH zzf1ahgQ(z8wD)`?l2voLd8VVFuK6XP+8+=Q@c#PxDff|HRrFy+7QmDD<;j&(AVIQ| zN7&cbUqKUlRR5k{f3qvE;Ltk;i5#_?m+uolt6*?6i~9O-wp%WG^YL+S=MdSO*uQlX zUxh!mc(H%9|DOFufBKE8?eucBe^-(16dVR7A}QFDqo2QPfN($iZ*1&j=%)9Ra28Qg ztyswNEPUuodPS|}`n4f|_o*+puP_Xxu!vBoy1rg{Vr+2{^s7)2WyvytudiSyxbTCM z3PkPJ`K|sL($<&AwOGyN`>W~@HueL^j^|UyQdBx~oaSdS#7{K)@$b;$&26;eQ0R!k z?$5LOCvtRs!@`1Z(&k2RxX}~*3gzq3|7>3RGqgzfJ_b2Y)Pndyw8<#i>oI({n?}i%v9I4ck03YEFL22X_jLcC_?$>7-UCk3J&SzkLL>0An zk?hx-ALFtMPyf>ZmqeE8($L?(XBS_M&)z&i{~-Jv!#?lEPRhsnRk`hOA%eCcDxE66 zgshLhj$S?H%We>Nh2Ml|j-*ddkAxqgitF=EVS7(pZeBj@zHh+{OSW!4?`n0v2j~9D zD1jOceF8!%mfsh@;y;IqFW-UU80fyrmwJ9Yd{-_ZPT^~UlNeua;?kkLFk^hZPuf^y z0-qIM_zk#@^Q)XjOyu(19%J#Om17PE2G0fxx!1VT=uyhMd5E*|y@CeAg3mi&Z~h=E z?V)0Yu|dfja&Zvpg1Cg?`NeJIL?2mL3%y|egzMlr&$}f%_0*Lb+rF4&yj!7YFWr$( z9%<}525J}fsy(lSMav{5zJ4IfFtPbOiKbAW&yW939soD|^9DZvc(5dV$aR0eU?d1a zztuLp=*3C#spD>_CUS7Tn1*CXG)f9~7^vdm>(%ThK>D}4(jY>2Kjt);qV?7rFqzPW z0wvVIP~my(^UcY_891-mSlN)0O-r~sJ(Vi8FV{5_m#1dGLd>zgf`W+7Nqe$;_0EOE zje~?Fr@MkbcO*}4-f+h44`uxHED48N>_4WmL(m6}9-$A{51w8tAOkpBi`6j5*o zLBNT#xqKEAP#pQ0T=5al1r96?Rm9l`V7z8jeGE6Jcwtnc1GP(5lM#UFc*F(BexYFVTt(17GaJghE% zV-BbvUakJ~t?B#t1%MnkI`>gL&PjAiggC5OsU9~|uXlqdL!Y~wk3gZ%=llNUnZ%6m z=Ip{AR>>?qN~jbwsZJD}96l0Q~_Cu~+=j{t)75Q#mWB zx}O|W)e+a>{F}RX(h%+ll;nv5;>N=!BW1^h5rRu8kSNqB&d12=0dpIRnrC$XG2$q; zrt#s6aehSuyD(2RJyS^27nS?8*Hx*q=HcNz`3)d#Q{+G**{bayay%#@^b2w*0t<)G z-{)%wm84X(nr2H%d_ta#PoZO4I;OY&&$8o3=UEJ)T@+W~%dKC)_wCE=KcJtEK0*pH z98%WYo3vp8HiO2p&fIzOPHoV)r zgH7$=uRVk1gAm>j%-oBMcaP+T?3PWkQ{zKFn`URW7)#toS|k4C#Qxrhf%k_NTknGa zKhAY7Fy{w_gkS(U_$Ok5Yd&FqC?!;~UjPPrVBoDDAZ+X1L+f_FWRpbDh8em0L$B>CK0LkM z|Ing5b7KXM=%o>5haAYL z65BTNByr_78x9V%CI+<~cP)XwM>Ecu00Saa4QOaj0(0YE`KUr9iBf?=2k8dhg8sYx zJ$OH8qW|aD*-s51>!q3O@yJZ~N_O>H$@aT))9_-fO#_rnc~8`IO?+E0R(qQ*Ki$`y z3f%R-6aGgfcJIW8pRC^9I(-wy|12m77-T#H_&>DmK3#ub+x6r72>S6}{|jH;QAmRt z)e`(#(s77asCN(y;Prod>{YS+F^ z^GHw4?buRn)w+MFCI*D0WYlwlnJm{{+W%q1(IH_mg%7%w07*( zNQ6rwv=^0G9z4EHnsM@4LMT~G3_iL>8(JO=qPn#PuuG`E0bxfw;?Vk$Mg7yCH_y`# zf{DVZTgV1lgS_SW#;G9LSTz>TYONt@^HM6E_=5=2E-TU%Sq`-l&7sJGgLRRj)knj( zC+{3x}NOrX7OL1y4)T_lCxhGPrVc_7)cza>siH2?1td&G@~<-2H{XpGZT@pRaoK>+zOfl zN4H>72yjjRCS&9lYMq4tv1ghQq$0j;(4EL7y-Ml5sYy)VlpnjREwy%grgSbJ(zBB| zDV}270ny{g;`f%AGr>1W#UXJE92Jf0O>ps0uDYqT09aYv6J)E!m&se@5N5_7JW(eK zLv$Idn@+1nDJ07eyLef>$l%S=9*XG9efdv_LwD&9Sc#AU-RFQAof$ z=gF`iNGkQlNGcf@u$Xch!VL_so&>^Zi@Pv74#N6a% zlOkx%poqDSS^(8o(BJzv0;@>H;~s^c9jr)gM+1rs74=WQ1RhMKL)~(0|CZ*ezs%KLqvTm{H>- z{0m98Otz^0Nu`jOghI&VJ1^0yj2tvu?ji8V+K+cCb+D5j3KSK+Q z2Vnp@(_IKF5BMcBqd$dqZ|!4x3$&AF4&tdJMkt#HA#q%Twj{-_x!xKVI(Z;b1ER(D z_;CGeT!qH`9P(jPHaBlUM+e=|m}Ia`XF;yg#9dGc^kPEbEiB3A8&vJx{4=eCc)D+E z3w*5In6pO{HA<+mHpkc$+tysNmLFOj03uguKwPkw?jtBuP=fTr6ZGo-_Ea4Yf%C@_ zB8HxuYJpnFYaw`0bM3J8Z}CneNn5eaS-QWoSkU$y3UkROjto9>Z0{W&33|2z*$4vhB(^%e>XIF$wTDbUkn2I`|sg_!B`eFRbNn=0CuY&H5Rwb~*7f zGQm1z{eO1K%k8v?yQ!lV=K&7us5X;!N+MO)0ept>Ch$AzOBgj)f`FnAP4eiK{&H{P z4jLwuvZlQR98MJ7`R@0${j{GU69gs9hJpJgww3TSJscP$E=6gia znczrj8mPTyva0%*^)oZi-xaG=wiOaB&2Q>4jO~;Aup|?iXEujTH|=^M{!y0sDuZN7 z*!aBna=gNm32cuQIPOp4Rq~~B!A>!xE%fA!&Macc^1bV0xmH_UlYs>p56OQyX&O!E z2I#Qrmm~^V*QSy5?$U36G|{KZ9#vEogduW|^pf|yyNjWdHU+5gSpP8xD;w8qahf1pu-ox!f$ocX7tdMq!=Qu!Zqu`K?vCe*}D(yEF zL+B|c{aq-x`V*)$r%W|2mN!{=QgmD;qwWpC#ihcO^3BrtELuCbkJ2>Eu+K_1*vwwR z*Pv#X!U$*43K=)mAa9AmAw`ve<$S0jJ}}jS4qYHF*jSU9u-0ZbG<**dr*V9|LoK#M z(EmM%H6V?J2c)T+*5`%U4h{U#ZozE&>oP+IF7V?57qVN;&?^RncD6_w>c2NKC-u&B zqi&;Nc)C2mblY13k9TnotK*RdZDMr5Oq}Te++Kgmijhtfbd-L)m@#R{9m(e#f)jYg zXGPealG$EOKYh9OhS!U*W3xJe{!;LhRH2?PcKPYA?gqF9ogZ1qF%C3SM_3&BDQYDj zAtgYOiWklB3YXRzViwRc8FilorxN-HoztKxwSMR<5^MBuV}n^7N>p`=g<4B$!Mz-{ zAYvU&gX5b*2W35nwGS1PyuNyb#No7%1RkU#5W=kok-3_BkfdP<8QOk*K~(0M zh;kinQD2P^+5*V{{9hoL2B&F_Ep^L;?rtJG=NWB+dQu!Nn6^4RvlR{R$)25au8PQ& zC+yv*!Ri{(Cwm0i#Gfaceiy=57Gu0YcUWtcl}q0}mbYd-Tj$}gSiF?&%uD*p;V-I!3WdnglW-O`o>1XuU9qDGPl)PKP_=MZiHuLA*wDD+%7cvmfrnOHip@Sog{pip(&Y=-PXAb}BuzywM}_PRIMq^f}dDbzyf-w2{oL4;iH!z zb_2{zz?<9FY6ulAiggldg|fFg#l@7}9Z0NfOW`xf=q>lIkX1C{(5hKb+uyk|qu(9Bt!n7WtI1k>~r1upreE6lcN8KJEdTPgg>llc!TRXi1aj#zY zdhWTP*yV(=2Wxr8$@$9T@h7@8``~L6JE}RXe1NsOYp06JoGUxe>u2;+5<(EgP-JMG zZ-w&d{ivXmJVMpa29b;-3ZK|I-||6<__oT`?f8Aia3M_er$$+<6r2*f%om!1UpFlG0?D_}lgVz}o!sE)_^~Oa zp4VN5;_cRd&az50J^z)q1!R}`e>45yO)i`e zKKhkkGlH~)9UM12H%j=ez;3Hvvx5afdoSUvf|MLpCz%et)LMHRJrB0^Rs3KtDd(G1 zi#89hJUYv&Kr~9z^Xwyk#&V`^FbaDIiBA|F7*w6fItTQ3gdC&!h;JH=;7i4J-D^*6 z2a#8$dVpfDa^vb@ed-8XW%6Y22{Prn8J1Xf;xaA;)AIDct*0MkRxgd7$a! zud;;aw;<}NGm!`)$6&dE3hyoVPSnw01}G9u>jl21S({KCVnED00v23&4Ub|8Q_Bcp z&`%wF3+maV7;i-OZmm+;l?1iZ70*gJ8Jn1qVOSv7F~36vvDo~lJ|Vv0DX1|n9h+$T z^^p6{`a>3*yT~L>d$}H91s6SorLW56i6FpQ=%fr(TW3;gtsGuy&5`@j1p`WCGY|pk z>|=gzx@8kp)&A9Zyph^}h0@fHy8|(8;#$r1x45rWs{`>Ss;;BV=H25K1^*loX`H~@ zBs}~E8WlsaeNB@{V?z*RHF9=>DbBI@OmpvEb$`+k_hG-QO_T2D{RHW%z`wBYQNR zrRj$g#AJ~^@!Brh4pOk`R~7$;@r!C1@7Pxgg7Xi#R5u`bK}#r9hH>>xp_?9|E|Ry+ zg5?z%t%%>;b#^{0pQemLzyygk>9wsc_`7T}-Egt>T0zUAloQ?0a$VW4nFdfq1`+8F zKSfE8lK$+-RzaG6%x~lBUVV$HJJ|RVmf?5hbolCS8`-lzR#4Bf5!X`RS&1>_gd*)s zq<`Tci96FYKa&>ubbGr{Rp#^`qW}WmWqqL0}ksoXt zWSQLP?whY=Se4G=0Re>-vv1Tq;k5lj(tfa~Pe$2YSBQ!_VV-XLn$u$U=MU;hAR0=k zA~32-p>h`pzlJR$#_z-G1awE*!SQg7%Pkydsk1wGR4kIeoqO(WQ6)m0#s05>@% zMPPk!*m7E;W%P}aOsv>@@~y_Vz#v=e4m+5!bk*u7JXaHS`s|#SpV)rUFrC4nKTDew zh8lw|q2yD`^mx_fii^MbNUMaJQ*=RR^AUjZE%72DQ&a#~(t-U7g#Amjc zi7NAbd5zjgP&VUeqk=)LJdak`<2}pz!Ipbp&I1Ds@(d;1Q$@fy&?~X#>M(>G8`*Js z9w`WF2(5}o2e?`cd;*UOEIIC8k2FJi-3VRFNCio%FW6uRM7^e~49CXlz@KzT>L%_J zNNdZv{nf2NT*S$KDa_>;NTj%UqR6QRKFc@*(6JERY} zfhafZnwWWuJ|@MM_cD~8zov7yeOWp~j5vM6M>{!yudvi?H*gi6u|d1!pq~P9V&l## z5RK<7LmsffX4k0)Q&-VQVRgAepesmXKCwwiWKv?G*K)>9*`a( ztG=FW2ik&S=$%}=a2Ln$CFUY9a+;NP3h4#Qt}3g7Vo#ByD38kHmcW*Jss{q5>7qUGMS(02u1>y= zvgUGqk`Ep>R4=fVnI3k!Vv_L)M!2R6Q*17oKsOr$5xGbTIU7XN$j$CJBSstBI-P2) z7vws!pM7?cQ&>1Wi=7=p;DC_Y4h0HQ0eyTu7#x5&E0TnedTK$SB0qK71Z`dx2;j@W zGK7?I<>X5F2b8as<<>MlI~#t^6cZxWSan(njiLv-7Ycoke5Co1T^6AWP?_zlwshKF z;!wbBk2wc@Exa+V#f1BY}N^$n7gi7D~goz5m_M&IiQ zFX~0T!Cq6ZrkK{_3!DqE(OiaE(i_8C`kPxMH%sqefxM&s)Dm(LgIWf0B7JRNYi4s( z!-&JWL{v!#WCYb@rkyuCzQv353v^7jjcP(+b&}Ql#COsC#k`oZwXKmKx?(;;C1mO0 z%Nu*CMECrGmmJ@3OmX((!tCNz-IT5Y3u|%(A5nZgPZ4CI_i$Y54-_LjsEeM+eB3&& z6xJqfD`x_e3Fn_SdZcIuS`NI3ftANSzG}GL@CPc&B=>z?3{9#m@ny91snon&WF|2Z zP1c*WH-&qnX21QoMiOlm8_em#t8vTVwDv|WjYrdAg`Lxh4AY+Z*Gt zE{*N2?8Lzgz|GnQ+wX&&5BywBxm9JTCju;$qky-uA}S4!sWs1?61T3yiCb3M{B%cT z`??l#`LgWyEBgS)J&j1eXneTb!q13sCySS-2~4hv8%s9qxG;vEuwv@24Xi(-^G5xf zJhv3>$?64ygm99+&xu7Q$va}tckT_iJh%Vcryt}FS(1VaXT6Uaw#O)6SUTwzl6^3d zZZ4na?fcg|Z(s1@DV6Z##%w{5sjELe31I8s$e3_p7*dSrQFKoq!Ly;#rQL_ji)@d& z>&GQafIcI2uhBK!Q>3shXcADU%hX3wJKs@D=HMJPssTOnThgTBw_#g$dg!%2Qh!p& zz!@HnSxzLMpd4vCnu?+^61(=YN^i8lDzT2oS+~IjQ1}RfKS$x=RD-qUzMc&_0+Fj*)TGXjx^3~dKweY}TkpU2=lr1Pzh#w4VWplV6VkC&y z^~t}Q;S=|G&c({?<5MO$6R1=>LtGo>HQ+PdWmBg+UaNGJ@{QH10rEM{@Gh@E~1q7+e=S!!qeFCn@R=`WF(Ev6x09@$8< z$cEy`Q=-&dlqj}1_dOM7u~<9`FL}gHQ6jMfvEd85!%4d8rWV?y8HHv?6P)IrVqxlP zRQWW{Zh4RdCn&lq+g|a9VnutS9@)dUIdFFU5Uy+~C9?@jG{A%PQ>308+rO!uSV>T$ zBeboPV#%IYJs101FUZ{T_u6rmR=I5Y1s#|l=d*Ui*{Xpo)!7INH||%(y^`sorjoa?Cl z^RDJQu8*w=LF*>%M1wVr8{BpoW-#B&GP z24RFlaNZ23uYORQOK7KA7yD(V$B~1aZ=YLfsxV5i8}D(ZKy9AL)NEn{v77jh*!kls za>XrN)0wMYszqnE&)v2#wbMBZ0o^;5{ZWUq%9X&<=iJH(`xU96X(&{4QwbncDZa|4+@QsY8O z+FuK~6Qf1TvF?5cL^yJJ>wP6&`$COyLVf^EYdVsy#sXx0=^;oA7VcvXUwp5pezBq> zD>Tt4Xv?!|!*6vO0(-2Uk74~BFa{r3ESYvlF%SxBqFb#IWaDJ+s=rSJ7j;CYLwtM^ zemGNN-QrwI!E_OIDY-EsJS&y5ha^5D*bsJFJSV=Od;Eye4~0?XHX+M(cXFCZbgGw~ z9W6goriY0_BXtjvPi8{D>_IzKK_e*e3&WmKv3lT5leTKYUNFHve|Pi6k?>U-_A0IQ z#s|J&^1g>RAZ)R2rCqM!&UWhWJlCw#II6u{I{6HlrSTMO+>ECYK&JYQwr9!dxJSH% zitCN9=oD{oIyp(og+WvwR=2$Q?Qtpu3SFV&?UF3FdaqTKTk$q?U`y|IgqqWUETL?d zYrZTu4b<)>L1pZvC8Tw}dbsk2b>b~wq9ddx~@km=Zt(Kz>LCCE0I>tPQzdiY46g;&z(-MZV>#Z zEpn=S%EWAhEfa){mV=ytmN_=iz546!oc}9$Dd~0CxC3we?vRhMo<3jUG{&t)xWI6G z#I|;3E9fFoytA-WSOMOHLK2PPFA4BM_NlwdsRDyBrJS>A8d@VTcsR7E!kgHSai{2g z5@ebUr#aF2E1{mnCR?Z6YChNA4}P}e!L(zt%XWs^!PGe6#lwlM)wZjD`AUb&1K3Bq%!wK4$FI(mkax+^{v0)u&Fz#D6vT-OI` z+C}1I-*h5lzSu$yxlW4zO7OanA*#3A8>abCP__Md^3GkQY@W`2OSw;(5>(w?iMe3v z`c4xA|Mv!EdM}Rd{45!QT%j+f1^;vDSqm3U+~7{nAuPMEiz~ZHNSgrc)N7{~@cp#x zvxiJA@k}9fGWrtHT3NITaq+?RDgBmDhz_cc?p#tYNc}^PIcQD?lXoH4n{8f{2bkua z2j4zyKPgmf>o5->`FhgLX5c!7Lm@JSk)}g+uWG^~^c}>yBy~}5*?Fn!*N$bw_{#NC zC6GLv<}S4q-qp_LL?#@i_GH-8)s0=EEFvwc}9i? z2bUSeUmp1f87&WbIQ$am9%mb<5MGoZx#0@<=(f~BMSE}Z+QCu*HWceY!R;_&Cr5io zV(->N_NEm={kZeG1F@EKHxe8aCr+d~ArD=NxgekRrbQj(uj+JAcvyQpRt&3g@Sayl z@H2OT=T?KhI`P`c4svl)V3nVRdz#xTXPxdXuef-PW*jY@xK+K+<#_Wuu_N0@b*%Rr z^HBEECsiByjy7Y-u+Hn1Tos$07)Qoezj+r62y!tz%7pnBwYSy_9j+iZ_xQ>-kuyeJ zML!lZ?4bl`<;s>aeZ%T!8QTUYc;O++#u}mD$|U*0Ko*M$e1fzbEQ0g26mYc+ zR~A>U@}C-}@n;3cw{CO~>039!KoITcqLi8WB#^QSIm<6eOT7Of=QspFb#k~#3^T-G zYi1iLf5Cpn&cQUIE!>lhna<42o=STe29l_8Y4!JksH|>Vg6mVo_1zYITjyS{Yxez0Zbte{Yv}-QFrCWVvSSMv<+lCgUZ)Q zMiXfE>m4lgWgWT>ve6e3OxtwX#Seg(RHMKSgj#hi(ebfcW8HMM!S*5iD(2*wmT-_E z6{{XyGo5RNvSckC$b_cL-r$Z+cG=rM>TpZ|r@6JwkBjGxIvcnjfIqaQ9<+xy^f8P` zJ(rnb?Fj)9p1p?$`f2*{>(<6cYds!gGfvboF36sjE}56`q>&-R;KV7Qp-qQ`duSZq z9#^ZtM-j#+yK63)^vb=Md-cd8Z#iQc*{ub)*LosFGpoAJMVq^rHI8ZxL#o}>a}*iG z1hzz{h_Z~Me1{jc*SJU^z@Lemq&Ny`ol`0PVmH^h<$^G?V)qGAUNQcnpHnISVpp?Z ztk@>oR*S8DZ_G58wSxfG_OSf=-Au8`-TZdc$N!8voTP*M6(k>PDL4dEWSq#OgzN239oAxw3F>7J73}jJT_=}y*P(r`DW@q8 zHFGymdfCsYU%Fi9uo*VE{n1MZ`4O1YLgr7Zg^jO`%Lng_76)Z>a1ub}IYee2S~50y z2znJorv2r&ORZ^%nG-|Gr7J1dj$I1E2uJt<4q`iI&doft3S(ilXjO=)m2|0bUrp3w zR)d<#JbYd%<*dCd`B<_TDxrU<4|>jb#)+Z}=h6kK^SD!;UGCTd8Yjk9l__v8Wq#Vy zuAP$kl9m+r@9y|*`90m+qiQIcjG2+nm6cZ}o>4!NOR=o}SRuTu<@x%O$al7=IQp#E zUPb|L%Ri+jzZoUcA$*hR#C{q5t1=%PuJ_E0+&dk+%HPj03`s2%Ece~z!X2_jd$4K>~`c| zx|szH8R1h$v$Ih`OBL z(6ntvf!BG74oPF+Ql=O`cY(r~xt13S+N8Wh%2bzmQI!3C(P4J-qngvir^GHMQmZ&h z8;_q)lc;o)*KYzYWzY!!Lw=^2R|?eDf5&_H*?(vzIiu{44xRancMI9K2Y!TWL#VuS zXJrtH5ZjqdrNfEf3@EEM1_eLN8ubkg*?Cbqw%Z({xtE@6CT99IEjW==`C!^4JP?W- zet!ZsM`63${Gp#hD>~(1>P?emjgB0pK7^tSnf=r+#TM_l>?wio<#f|8vyouTlcF&! z1VHQamE{nt3yOgNxwKhNy6?%BO>!f|CkJ<%P`sQy+o`{z5JscuEn zjV|YCfRIlCE-Ds+5ALP87)+ayZ6H3fkT5>{oZx^fJ}9VcI}g)9%kTiuq8l6>6FoE2 zz;A*OqmNU9!6a}Mf7lzFIfs2w*hkG5u^?cdC2`10B}_f@4h8n+!W0*9EXCI?g%!Y*z&Pkz?_(3kIpPPW zi%1Vt&8-v2ZC3Sy&V2*pTG7GdV4t*-S|C$9GuaRT@(dO}Y#}dMbZEz>`GS&U$1b_^ zuKrFwV5ZSGR<9TWmBv&P!Fs|wqQ{dTm%b(D^aU_%JV;Y*44eKLPd?7!(D6EmFpjVf ztG6}|QCtIiw)>(<)_bK`0ZZOQR^l`7UDKS$g>6iNUGKieSVpl3`}(JDy#V!I!X;>r zgL*Ozm>ul+f;l<_xfWPUm$Z<&HCrbG@DzS=)G2IQlM)KwFHfTez3hh{Wb|<8-Df{x zo3D`fxW(uWZC5e+^dv~`iX?AcgSpy40nC!YyYhH|90T|4m>CC*^*Y-Qtt)yD+T}pc zz}};Z>my~h9cMf;bKNbll_QNN`0c`yQt2qVjH^O4?1gRWp!|j zPVLKYb(HTRC2Cc%xHYI-1UZxrl!$_0E`r0AsXcz5>brs_R?Q{RTo!x=h9hs!`40@m zpyNC;B?dw8O-U3A8!#zZ&S9Q*LHG?S{#1rVORL;QJD4y}^KV;4$As4nAseyzzBr6S@T9&vbyy9AdxZO_VNNveUjpI`^UTg3cjL3-Ov~!Fdebf- z?^0||dA$tvyf6}pmbeGkqi=lB$s$Jcg+j&(Xr{p{#I$~6tm&9b5BbO#)04U<9(ww1 zOZyAJ9AiErU~-~?b`ZG9Y#oyJ%l=2Z)BN48Q0A|;M}ljp&s3WHFXlp^OC+o#^5^ z9x1VqB@i5pz}ruC{OJeN1HlIhfo?hgd$m?Gq^dwhmJcd~CtBgQxB7uEgXCL>wFXMj&zZdY$Dm9(gy|`OuVdd)=rkUWH%3$Q7 z=Lz$nKhov9p8~W%X>1L|oe@@Co9@+s<_=Ln7fG`W;Qym3mlcjoDtTA7u4_&#}t6=)E*a zOz^`4oyb-Y;ys5>d3mF+MZ}?Jp#!^C%mw?#b(BAn&4IUaq@79>0u)F8hKOWuJ!Dns z+7X{mVLKG*M7}8-WvU>P@>ffd(wP_@$*9rdWBuLY%+VF!-2u-+$gT&1;5id<4*FX% zj}dLpcoy!I5=wODB_jERn8c}fO0Oim1K~yh%~bJ##jPO0O1foi*x&-@iCIJ9KCRaf zhU`2T+$njwfOyDH2=C>&S!yd($Jd~l!cuo1ED~*7h@OV&RCmm|$C!y*mdtfcrlE)V zk$20ZwMAio-|k93^EsiG6#~t(idLio7k83J|9~sm*S>aeUSc_e>ObD-5Xdz4cd&K^ z0x{`9?98}5)J03+gqqPX^y08=96bLhngQvNkG5XKbw>CN$KWft@i;0b<21BcMR$EW z;ebhd)WTw@f_6mFYo`qLBzzQdNIKk0Av#IqZJ3K4N)DZbXpN~% zNqp0s0M@J?x@`We;?AacYMDT1#C<4!K^#3NY^Vd!5Nwc7z5~z$*8Qv#9{GZ{O-eut z9{g(?$)49qfZ$({1L~kR!AE9S5+#LDH}WuLXW@V;%&6?iH-?3aIxP(J)xKGTO__K_Jzg zdxlyha1j98%i16HO)igtp4TiywJqB(raZ@P-HJMaDhZSxdH#VX|c#607W`cBo zPmDe@JsfiX%!494Ia1_Rjj*R0#tsxc z!y3MYxDq$Ct~+P#jWwq3Q>dXt>6>guQO%pHE@_%F-HRWeqiIfPYVry)xU^PmXmCNQ zfRLx3r6(a3N?fpLM%k&*(L8!ThOHU#H*3=lVT97}Rm)0B2zHuWGh7%83apt3Vqcfk zl=P)1>y#-4H@6f@p2R6TKedB>pmP(tB4m{fdoV74@NXaih#U)olIEk+Kvy3{uGcf| zJ)%$j1MsJ(#gx8i^6S?F(>>70hgD7Uopcs%f2O3LgS zR9jK0T>)lP&E2LB+(K07lhxWjuA;V;oFIbe2C+Kla;dlZuF zJv4K|7{?Z%ij^*_Jnr62+7I5_}4+Fe~g1_|-^{;xh0>`{vG#FUsO~nuo<`oUN zdE41Z5aulr^&e%p4#>3A9>DlmmLAMd(%nKecZk(kQ8>gC$TUE=o@cm%=oUO`p-80B5 zJggi9xEeqWuS&5AdGOd?gw_OCDv9um(Xs{*=RMR$4z6WDHc2Upn4QN9TDDwM>kKc5 zm`wCtq@%&iJykIw&gnzW!9{7ROKN=A41cfLvODmvnMP=CU<@f)wClS&ry24zy> z;K^YTrM>^H&{RBzwvdEPFeaFwv{tj3haSI$d(;r`4!Ez$@?vk%>U*gYGtd+IuLndkzsPS}Lba43I{LzHE*Q$e}RAj((W;$-rI9jhlgBx&-GP|Y9@)TF% zHJM`bqUZJ6ULy<8MJF&xypu-K5V}mBskMvp;X&;mX(eXm>SvWGi~doJt6D8nvP;qn zO*6PAKk&+jf0vNJd2rPgeSphCS2|E5xo{YYJeIC`bXwH~vtj*@f00A%`{Y=}+|IJt z^at;a+>bQWVu+17>_V=tL6tG_A8@Ion2Rk339TYhn{LiZu^;&vTbkW)x#7>P%G=)F zCgvVyL9$)PI*8JJ+wSUC+&H1ZBrP&R3uJ9!tqiPkI6MjDC4OMoL6A+vA3|Ujpa-!U z?BTBXNi!|eIm(+;REy#LIiQ04hDcJ3`$%f;1o^Ck6g zYhc3r!`bsKgAq8x&70l&rKaXHh4B0S_Hmfv_IuLsUcBeZ=h1bDoj!i>;bVh#tT@Vk?88Y{JF?-g8oJ=y>3`eEkF7CpiG7g|A3j={uxRPw&&BRR(Cd*zkwD6h_@FQ0ne^|j9?n~=hzI1F%q2=Z3^2ll_ zmBl_I!sZ7af-g*bTrc=`$kR&8LPkcuTBZzcoO-}P;okclSvqo}WhS-%HCxXS)N2f) z!bf4|Hec&R_cXBZ@Nx-|11l~fFKkW#W2=ZqaI<8)j|kYfeAcsRDDF-i zLuRmGj1_xT4djFk3u0 zZsv97DQqi$bJcr$dvW;}ix_Y-xPGl==4+IBUYeHUtnR%MgQ0Wi-`;sGDCFJfmT%kW zl12VeTiH6cGPp2_yz=nS9iD7_pz_+m*dXP=HR_@OhX6K9NuFc=2E{ z)JaPkRnI@OalX{q#?yWot_*?l@OrcJ^kE>WfL>gDemxlZK*sK((;KMiJg)g5jrBlW zYp(jiS(>jk+PZk~o)ErVew8B&WDf|r88P93S@k5LdfVrJ%C!Z*twG-UkjcRJu$b@a zWufzMW9=-qZ38cUz;!PDt>yGiw(Ob{m41^TZXJ=^seb``nz}4 zu?fcT;DC)L46zUN>l?{4=aZM&&mXukvfVbV86KXkCJXG6fXIt*{+r{hmZqh?$2cMt zZ)so17s=F*$Q6gjCf4!i@P2|Hi0jAkJJGw>>@}aiXE(6=?O}f;IYH}MrlQbfV~i@P zhdy`{y@b2>=7VUU%g5J_4FdV+SSIqy@`Uk3KFh1d<>bJ}f--0r{HM$taR6-EvrIA7 zHJpy#=hxT4_v@&o)Rex$S!X66p~c``7O2JxSFWDdJCQ`McG5tajJGgO2zNO@bScp< zfac|nMA+GLty4>~Dpxb9bG75n0Ts-`^A-35mkU#(twu`t=W0B%y?B+}ewqn<&`}?L zf_Dw&1$Gi2EJ$u~5v-5@$~69B9ZY*CN9~rJ36-z$uLh_P8%FhXLhnx?hUyRw3$Lr` z#cr!JuY^-;?e^CWH#zu^q2c$~ahwRhk3)h9cL2aj3smY_>c=xNX;Bw0xParc8XM%b zpUVhu&TY!r810QrC64i`c#Hz_YTfB=8srY1T5o-lac+J%gg;C1;=o3ZWh}jdkyF#@ z6t@Lcey+~}X)KWX>Op8YLHxnO`q#%^Z!v8o!IgJ#>-7V6gt~Scp2uV#FaBETo>d$N za!_cs?``xeboCfAmOEbv^X3;l?_28*7kBQQFz_OcskZPIxqdrkA)1Bhc^nJH;7;M+7=hl+FdTP4_=Pi zfZqn(Hw4tTx2IQwr3)GJdw-#=$ov7sH&YXMHNE>P#z!%F=+^?^_X&GIwEqy}DlC<( z+j`hGhSX(`$<_9?&?<6NanJZs-}T-XxP#t}jQ$qnP`(Q??>IY;zwUK|V`|sViw|cf zwxCnan+=yaLw`HOKF1UEpaSg&@2b4$Cs!ixPurgL+mCP2gWSkwmu8$0!km|}`}Ttr z%v*^;UI?pWk|mnnMJl>hNrZ#R+obX^{0kS7A4JK@q|f^oAn+xGe#cB}_YL<$neR%f zR2kN~~5Sfl6QRrd$LpHFG`LeO^fhj#}%8KCj& z)^+nASAfrC#uL?1z?H2Q8$k+$QRO2V-GdEN$#_Ib#F>hg80gEU(g}e_wNyA`2 zqZ#k-!3|5ibu2&r_`&bsuRontl6V&(E_bvB4>CL3tt+nHJ_9}7Y+tZ02e%^I)4X`v z+uLo_*)*;CrneJuZ3qy0GCn5?CnnuhV?KIzyD=fG3$uDXzyNrvGBuwo=lHS!YA>BI((` z7S#X^20JdetVe>UHY%T+j#l>Pd4xFjuJ<0yCk|AkS ze3FaMw>fj>$XYO-Ig7}TiQ1yHLV8zCKIFxo-?a7GRYQ^@d0euUXJ6~0GgK^4kS-f% z)6*ygUWqqp2Dw3R!R;b2Gi;G3DcX!vU&R(G$7aB_# zEz`Wgk~1DGw{+&6PW47*2scmeuJu>=GsG)LT&`{=VaL?UAd*mD-`Q{R2X^93iOG>E z79MZjtBAq)K=O1`t%DOCW6%cH zbJT0fhyZy0jcANjW8ue{r!cSjrm*7XBG*=_$-n}J*d?*Hg|pA{g9br7Gf%YjYi9Kf zLkTxmUHg`>lO#P-IvAN|7u_8<76`w3tcVoEp!O*n$5{;@7Eai!sor0#R9C#yz%njSUQQO?^Vh>uVh3Me zRS-VK%qo2|bCk695UI<^V&hG9d6&3z&?P<2JB&$b1fpHr96+J*aBdr-<_?!qR9$se zQT$C2S=VrNoizap2ey}mW>0?_72(WKq1(~At~G@;r(@%a8F*heg`+TGBq(thSSX<& zlK!g!UrHbT`xtO#&eibE22a3q*`S5>&mlOC)hB1u!u0D^tE%mF@0AJUm!b>V#jFQu9qn0e_a*}+$MqR`@vB8+! zy>Ga8Xmk5`yLzfeb%|R!U4CL@w`>n=d!uw-i1ml1e^%9=aConPK@Xzvnshy^xAc=^ zk{MoWz8mo=p!fC;HTV)^eY!eaHcHPJtSK7kv#O?QIEMtG)WNGVR_@e#kEFY76PjS@ zdTl`RudhQBs+mzI^+1gp8FUQ&*gqT&FGLk~RH&aio75M|wx%%YUC_`m!WB?`sp^K> z_F?7~+Bvp@4m2^{xg_RnCy&>4kiKRO@)OX{QaOlkSjGNDlorXvMYpE@WU zfENLawJH58ko5f2*d9Wx6$^+bV8__?*-!WTvgmH6!^6C}w<(hjR+RAf=i2+oLLQj| zrIj|xflsoKlPmYf=UO^5*_Es{cbD2)b2E?C1&)>aMFKNC6>liD$@TCdC+w%8*Lven zGyhwOWeSV(OS6a-zuUKkMo!k%!X^6_(S z3q{!itu04?cfwNZr81k}27XIR%`<+ow^A(ai^F3-P4Ao>NHJKwJ# z^i(^^31sBu0c7pI6N$^T3`vnl}-eE+FpA>7$tHzO}|QEiv( z!eSILn^g&NKFt*zb#0XDiDnh!A2^vX#J57Ffckvub8&?Ic0nn1BT=MU9!Vr?DE{$m z<~`*P=K+x8KpUZuB48cC4*dl+;C?N#y;>j{Au}`0dMI_H13at@*pO%*S~kooY^Vm^L(=DL6+mVQLJ>Z^QQmJz$LWv|-?p@!rPU*?8&= zWMEg~b2-~iCaa3e-TOS8li}8-k%|2EMBK=pA5(*#ue9sE&-1cMG1Xf;+u4x`=MCjH z&=D!;z)#y{@d@SV7_|@N+ZSkQI!gsKS|M;tMouQjf;;X%-?ZH_-DvF2^gH2^!YtB2 zZj*C!^FMIE>O2tsW;c97z>|Z^53bP42v1*ZzV2+n{!J8VQQI8i4<=sxe?*x=rKu@} zhlz+Itm4j6m`;va%Q(uu`q1l-;W!I;zuUb*XrD{g-wPRvTPE$1A3M@07nrn(Oght| zlUt~^`miww-(Pe!CssI)VP|jp@t{jSc9Mz1?o)}&>wE{JeIa|Fb>Y^1F!{EUlF0@C zi4i+uE@pzu?*Ech$=&~G5-62)>~^4BiVYk=J)e^AnUJkf*DnHN#T5_)DL4QAiHJ== zXjvJPGsE+V%}mUOR~$1r)f1eO@tD#u35p8H`9#VCV4mjO3gepf0Eu9be;8Wt9)omQ z5P*mOFPfQ#V`mOaCCJfl?(r^>1W&ri=sj2>;-%5-yn6av9%)lb?x>Xv+0P-tnM&{| z@+4aBRk}^APdlCeYNxI~h9muKM~*Ip<@ky=>+llTx=U;XNHNP5d054JqLkkuLk?!wvb zqCj~_r-Ztmr(ThtF~sh=qv9{QET5V;S%-i6-e7k>I?ke{d}d29?<~8DPY^Rbdj8UK zS(8w2x_V7?!h(C|dYU-$pH^Gg=7s%#SqS~f`~Mn(t7$1b3|vAFKK?kt{=EykpY3mn zsV;mn;8(4VNUHzr6@H3rn=1gLjfA+pj46wI*|?IAZcF@h$lR(U806v z0+o)@w`XaX0Cm653EF6=@6B6XK4f>X3kZ}=_G#bF9r=D4J#L7Q$yX2 z+~^xF6G*z4j#IsG*_P~-m<#p+rxT(P0Og;p{^Jksy=sOI2P2I8+Rpb%v+|KHue9w- zD7S=;K)KVr1!ppdOY9B_|3JmfKEby9dcvXE&tEYM%g_1^m`lsgUm1^V-XIUR)s}Za?tpMA#sH%~aE}?X|G~>OvVw7J zUzKDAOT28qS;N|%!ioc>EG@d|?5iN$8#&0>EgekD|812I0=7k zohi!#&4L|1^xSmPOQ(`gXNpFp;#{d}43NPIjctP`fD%k?wQ>{DPgi^Akq=NoANdtW zD}9U!G}Yvr{1Nw0j_raE9mal32)^A=mJT2a^AQz%HS0?tpc=#Q60Z&)^N=c+%##<% z^lUJXb0Og{QGl3J4}KHi6gmJ++tx(LQ1Q)^AhWoZDnJj7d5- zPt$Acci}dkmF4f=hvD{k{vx^Ey-tOI6acrNZb~?Q5(8_utJ%V+W;T-bL^c;rJbpsn zxfW3z&-KWB1HM`ILul%}@q$%xt$4#?l1G?491r$XzNGO^Widn;bLGaCCu8|!{`i@%L z-xw7yvr{0>_?3OS)kkO2sSX+A9;MXAE=Vwi=Yi?lYp;3uPWMULJ?9G1VeM;cR6>s!yAXO)G2OUnvG%yUnun(oueIb@ z^HOW_=Uw$iEBEcM_=a<0x6OIgX1TtJALedXYUc)2Shth;mksvQ&kZnExl?d@OzsJ- zb~{O@QK7Xrev)ABm5R&I@f7CTc z??g~*I+C$+i+PwJQ)nMRzL3A1G zNBJF$pvfFfJ20MY;LP$+LJCAT#ktUy(mYf4u&C&&~>1E}C>hE}Iz>(YPofLL;L?{&nWX7vzU&MCP=p@8pzA#X7!hVdGD zNochX(?Vzr4o`y;o}sI%c(w8&sK+zb5uJfVAf5^JhJ=z3t&)v~ZGsScpT=EC?~xc& zkOC5DB7y&Sgkg|9OI;ZHy2 znZT(1i)aB$Ucj5~;R;_U+xkv3|01^@&({RKh(-z6$`LK=u3C3t00;ZqxlnJAZD zFqy!V$$z+S(CRERt;~5{jP{%h(<5gRElQX_eOu( z{;_&-*qJU7sloj0WgQkaRq5Uh8AtTyp_y ziiEP`_!WdOi&bR-1xQF9oUR`k3V&z3t~+_#lzS^ z=To;N@50N%9G{1C#`c!x)J8{F!MEA`@1V%0?)0Di<*n~_Pv>T}YnyuTi|4z$F=MaW zf&(wN8SNj=51U61-<^a{}251^Br)yh6VsYZTvq-rTZ`bWbI_7V{PQ9?_j9I z$j0(tz^5jyEr)&4c%SZXO4rAC97dL5ojN;s7>Eo;Ftl2acQL{MfUKaxI1uZZsjr)q z-&wZhlPJv{Can4+{JA>DN=GV2#$`TVO?7T#+x4a$c7J$%rqOzc_fm9xthgFEUB2=b zTAhNY3%MQIqjtKPja{S*zBW$B%p8T`;ji>wa-yzF>2ap8q+57D{Aa#S9#|mIqaH3M zkfUCXB=)CtI+J!*h5KG;b&l;4kD>}_f9SthoU(R48o<7Ge3++qdwidIqO@?RzJZ>< z-zR?X4n_D9S?9CRzYlVveii__<_@(1Op^g_1HHX5OK3$PT6~=M8$0?NPL3MX&_2&P zh91gps8PO-_66&f*u1xCWU$^@qfXzbUtVT)NWans@-&DZEwB!~gQ`wWw4e&=7*SGt zbb(`#c{%2DADU8FqLFEJa+pxsW;KjRqjbFAit579ML~Wp%^blB%ILx+gbnb9)!6;N z4g$Vq)ibc4T`>e{fg+A^KgaOi?8tNjRx{-ft%&up1v)RDN&Nv>)(}=A2)F?j6Jh~Q zGa>VZ^AncZJTU0Z0#9h!{?v;0TaHn>vc8WGg2>Xcn}1S-jj^Z#kbS-s*2$+(Dg<}~ zqv}h*+^R@Iy#Tbvq-s5F&ix-2!$#G)-?sUQiq({tRVo7>B;&! z5)wfI9IO>?<%z=rND{?!Jsqo;Dg4ABcfq{w%zwH?2$hps?j2>DDRaueFK7twiL+EZ zY>{Y?Gw6obb8SuYg*Gg?16lz2SR@;+CW&fF5Hs-p_T+s`_lZS_E@H*xmgQ%4GEghN zD=r+gay=DEKB8_N)whj>J_N?+mCM;Hx%F)aOnJS^u5d0nh%DOy85x?)Va@pvlO}PI zp}uG77MdF1w6&rvIgkv#0v{oA5*EudfA%z!N1|XNT2rX|SB{u!7xaQv%aCL|yGJU*BepAwmhYnGg$@${uPIrYVfVu>H7E zyO8?>+$n+PZe%l;sT%k3txLc?3G*X?5G)dWCYz5@NwC>y6zK*4&=H3V(DJc0LT><8 zKuuB@Vbzaw)5>d1563fUNCSzaQ#;&}`JhbBN4bGj)5@G3>F&jm0MJ|bSM0zD0S%7n zfkmtoL^}iZQ-Ru{Q`7%Xe~fwc3Bki~``B{NP~fSMhK~YU%DN_jd8T2|t;fTpE$s4S zZ5SWF%Kl^}Ma)Ras8D6!X)|wQoHf}*HMFQ+CsaPeG=O&%L^>8Lx)*0ix32S|Qv=j` zYMj5XkzC=`Bq*|AEg9GQ>cOK(*6*)>ubw{Q-~(4-IFAUvKi@B?xX8&Hb=?M{N%xcU z-tjub+k5!90UXm07`EnnY4vahf&XF*gWD?vALG%$0d>Bf=+7?f?ZH2Nv%4Skrn`US z1O767Qa~&hd9*5_0@-yU(lHn+kH4-!XxdFxBn^Hql-qt+pHe{781t#}Y5JZ%W;%G_ zD?wuY;Dj|20&*?3E&_~{5S~>Vll@I{-AB8IVmxz8<>^0*6pSqB@TWLU+5~A7bzz8V z0u{pTyKKwrd|``%Yi825^8u|RceUDG&XO%3eDz;r86_YL8iJ)R@ZMh$W1P;ITNp07 z8^(}SkX{4xPQZuk4_zcfK`V4DL8GkSxe(j?iYEQjR#l-hh&|&W`SX+$(L=KA0fi(j{c6>y=}%JYf{9 zNewtCSMb0WO~LP1=|6J=!aWqBT81S)2q2?Rm|$eurp!8k*^Z8B-ti_Lo_dHbg0}B3iBY-qcSNe@!!S4h=_AJ zgD;vqS~H6v-~pf8H(AR$ms%TLw3vn zN&e)Ygd+U|q&%ly8Usi{Jg|Jm`$wl%dF#T;cQVE;$b+nP74ExT9(Zz0u?pXR;i=Zy_{;i??tI1IS!cBnMS0BIM@Fdsm$ALSbC*1cT}@ zzLbQ)w>3#$_R8VS{c5xRP06x(r50YsdiqFnQHMvSQEtXe1&w&rGKMij>7)0NHRdNS zHMy@?s<&3|jsSvM5kBkiK3%jTRU`ys)es}8YxJsmJ;%SAfmZUXMnM+p+SsuDNn^P` zx+^1yQCNQ=RG_J@CqXBV5TVg6B{`lGCGk-7fG;FfbRLXzx zxZ8YC4QNlNiaTLK#SR9S!xu;YdF#o*p7M7u48>vGY2hYVpz!)|x)O0P@H0*r(JPT^ z#J)&osthR$Kh~x>iiTjvcp9gmkYI`haX3JYO81jBM7N@pVjyBr5?%@7O*LGcqy#TK z(87+@Rr448Wju6nrXvKxFgG~rrRScH} zS8##bqfRGgavhH^rCdq;(LK8HWP0H#27ENQ71K&J7EvG>Mj%)4TR;e+r@AxW)y)=` znFiU^0Tro=7WQ=uckzb0uEDEcv6@+D!VkM*os812lAIKwm|4W5^I6l!*2@&3g`pIh zNhPhZ={guue_vYP%MZ2+3eIr#V{O7-3mUXwK zkurLTR{VD~5@|@l$Mr<=z0q=^Q-1A2@jHY>6|sz!G4O8 z0&6ek={;$}EUqt`l7sTd{u>9AawydB^fJ+qCrO`b4jd&*T0ZPMAi;^UggbpDMgCvP z*j;7>Y^#8Bu!Z(R>8w+qx5)SQX(Cbf(e`F3#!Dd>LSP}`{=L!8w~96C_RTwnM4NSB zPuWDRCk^mdpXUU!!LIOl6De;juulr`QuX|sc*EcnwmF|t$M~m{onjLiaq*pM+_Ap) znTTww`#o`pJBNiU+`C5XU~b8wHSxV-)w3dF{mz+ z%CXKCr2$k-Sd-}+Mt*;3{Ay90qwkl_&FR+b=GFza?ddDx@JKOc@(lxZAmxZlxbA2( zf|6J>fWzP#vESK$zRf9cL>DSm?X9RHF#PG+W4+cg$MtcI9Pz&`u@Q97Vcb!2Co8+s zg`xQvcs0cdbT%@flQaJLs=&9Bg#_Yn8f9VyXugJ}9P=35+i^HYdLivI$`oU48i&Du z6e7`ul=jKHHfa(-eeD$(9`YpuER7`ZePWIN7#+|~KCvd552$;qLx zu2kH_CLqbpfgUQZqp+t>CM`*0i=QoEY4^q%xP^$=C#@+9QZzd_*FgHOkbesJj7Sco{@*W(~H&M?BE6Ye zwl>Mv!dy5yzx@u*OI5n!cMyjW>a7E6+Qh-e3%`Az!E3&J<@qh8;aauDl7ZNyLo)kZ zxr%d*Z{KFIa1Wa&8Zg_);+I}VL zDC~ciE+i-7j%@CzB3+0!qwkvAJfY+wxG$Zj@|Oj`N!R~!_B%AUNU=C%nyOquED4jz zOtem~A|RSFStiW&rfWB!2>rgA;dsNi%^SCwL`e?OJ}F+m&3;p`e6Dn@<3P76UTQBM zr>?h}olKumP_6_gZSzj?w^(*RqmPfe)zTb)x1;RUS~|<@)1~&v0m{x)geWD=GfpIe zVz)%XVpXA7R`T=@+l`HoviXLYzPNwoU2E{erFvD9^lQ)rKzt;hr`95=2JMM9-x895@Nk!ZLrzKwK^CIA@D>yyX0dXiyEd}GARibn%~C<0vLZ-Mh$3#=p*Dv zC6aQ{tYrnC4OL}P3Pm$dx^YY8d}GY~3&$dprx{IUKSBh(2t{uU zxEa0Y4{Z)cJBijRJ25r$>3Sirr6kXUFgf1nFrh`o>gy|(r!TB*)=nJ!`HNZ~km3nv ze~*K&!sfyBtw7t-<2jq2+jclIr`uP;qs>LKplRICtKedtZl$jv z#+iHu!uM352XkPJS#7gs7w;ZE2B~SLXtc0isa4YfRkVb$8!l=XjC|h5^KHrK(qR`kj~$+{3>=?`E!I=vH_7%JeiEcXJTa80Z<2&hB7aRZ5HqDj0)LjPn)td? zFr)HB8zF;-cer``Z2{Mx2k%|BN^4CUCJfgIzl-H3_{J)Y$`?`A7U7;)Rh{ahhZFUQ z=5V{Q6c49SDB2f@`(5^u$!gyXL{lC&hkZlp(Kz$OZnx2D;#5)hRRv!eeKhZESO#m zy`|@rwL$P6C$Cm9B)&~03*T3>$C2gjKo1O(W$UUGIRzc5NJ?=#54anRO!W4iaAtLp zbwtH6Gt{y~0FpW=CwIwwP=ImbHG3nI;C^bYXm(TT)U-l50bbGQZf%DA>W&;3;3@Er z6e?-?M05cm$IELOfSjMDquTWKn1b6wcOwv|)Jnzh8o|#icg{XnJ~j2ktNx(T2#IDU zX1pveQSMvK)XXc945mHjs9H3gEq{X5jFKLBufi)~eEz^p`nE7MfE^G6+QhpH@_$az zSCO>PY6vEdpD`O&@ndrK%FVMIIFA3pVfZEM>|<)+R8gOz_8JTG2!|Ym?bKkTEOSaR zXLI4Yhjs^Y(%BJ$yU&RW18Io$AQUHbugJl_n(~oyHE%cU{()$bOf!4@MMNLF-s4;q zR5ee4oMBdVaY9>nEZtC;a`MNeJubtSG8-qii&_d@0~EJhJ3rkULl+Q^#Z%ccHzXe) zH34U_gcn)xJBS>Enyc0(Kyj1H4C>CYU7Bw_!#9n6y^0c(RYI~u>ku{oMmkKdG!F}H zkgbAM8Znlum1W6hvK22Vs(LP0HD7692G@L2Y*SQfyjY$*C7KH|)3$8BIn`McI`udi z)6>JUA9Q*YY9g8_J}xp<07FKs^0bgaJoEUFzmZs)hw-`0Dc5-1J@tFTk%&fVL*IOX zXPXCRl=<85O%9X2o(kC=hPS1tCxp>|yxWz4%{vKIhJU4o$i<)>3%Bg_FF0F_P{g-5 z$?Z`AN`vgcmj*L5fJ3l4Z_lL7X-N!mxpX!^$+7C|yVz2ROu7&yr93W|0%p&HwHeVF zx>TeY(X1zXn?5|9vmZ$f){4?Yd7g*?MjY5uqUkSx|YONrn1 zuHAaK6B(@a-&t%+#+uUN@)n=O6O<(@y76;bZp&U=9O^gVRvs-`4mSJc-0#yi=Y4g9 z@kN9m5@j985CSqC&9Djs1O^=^ON?$?mf}Pv>g&V1N?WlqfZ-PQBtq51jGH!ok(GFq za0_0Jb~G<3f@hkOjmpdW-r>~CEl{skeDRt&tGRn_@k5D6ZI>@GgS{JDha2oYl^f|= z6j6Wd@T2uw6fQftLuxpTzn<)b9ux5M`q)NYxLxOerJwJGl43Z?p~f&%Mg==*q^6G_+#umhchx&Ldvgev zTMFdj_-BqlfXlFXjdumFuAfBXGZ~7^OA~a&=1e`++QD~kbB~Xd1{;jwG6|*^djNUi+5M(>^V(WwImB~8Yc@MX$YIgai*o^+_U(<3dEtisd zchho&k~NbICV6I5`?9ydqM_&k)Yaxt|j zwX^S>)6eQ~8)-`}s^GXz>uUdmdY}@V2Zyy!lf%m;Rl&5bN!SY(s@-;-9bS|2e$$Ubig&pWgoJrJWMMs`M?>A87R!n}Z37t{h8Tf@W3jG&ZPyU5Cu_GS`!}mV zCupC%LcJ1xq>JP);a6Zc@TY5!FxqeZ2Gcv%yQ0#cgNYyD|Kvmdinkmh{qiB@zYpDi zQ)&G#KE%PsQqSJZ;eW)2MAu0V(4h#Oyi?Ky0SacIpg7q`1ci&29TLI5rLfT?0!d0e;AO4ZeVOqZ3zwPtM^j#~704OPN6Iq~#KTHqMKi)3&5g$EXq zXLI)@L;PO3nw{batoTA_#_>imDQbUBW+yHN_#9GR5|m;jECSR(g>aqUq81OIOF7W2i=_28eWZai~I!keDwE(p@~ z)1!K;&}g(tG`VWmEX+qiIHKE^L6&6CId@jHzgW`;t4LJT1hKmn-woI|3)DolE{@q6;xP+MA8^>Fc}^)h`GE7bYpntQoCxTAPN^u z>Hh9^h~dWCTW`)%P?}1O9AT_9?`Mse=xuWH4wa~?>v*<39J4CLFfKs6{tf@Gx|=I@ zCb6gn!hT&nwtX;EB`1XDkq&q^r_|WIczhViia%jcU%KqNE)*GZNZ`iMlV{qD9EH>X z6}iqb-x-idQex6nJ^Z*R?tZ>OF)2+`Y4DRB5ORh~c3D_oT_e1e1@4Gz$U=k}zQq3O z-#ExF$m}~xChFCE)O$Hake#3mF^t}1h& zu%j!JGjv_EAM*B~O64(p#rA~5H|ZB~&-IOJz*WbB z*PErMYBpZI$;b2CVJ){u)7|~2g5^)kyT;?r_sZP|{Hj62&VS}`wrS3L_&0~GzZBqq zRXP424fOw&M-!X>KR(e*e!_Z#4uMNWhdu=;{%YJB2V;paWKjyZz>LOuI!LmLxSz=^ zHc^)Kw8uq=T{%NUW`BBe8U|9TL^XY2ZoK@tHFb)?(!9T_&*{LzKr7s$2*DIwBHB_y z2urHO)fPmde`UTeZ5Ya*4%BaCywQ*ubrmn};Ng7&{3Is4o%%1R+4iH;HKBbJbskd` z4FPjNV8_z^vA0)%JcW3HwNa;4AqCw}W2))BhKk@EA$mtA5tI6NWPbe|P|G1a4EtNe ze&7@rUR#Y#-WccQI5w7#q3J}mkw^kWpFoEl9NZ(bhHB0pRmt!&7)|? zN>P<=9@2UuBiGu~w;rzN>T>9axtCj59*Kf3X7R4Zi=i`u*O)q8df|z$-4F2|=||;0 z-v8V&Qe82HF~46tILQB?;#yh!Z{E_z*2wyoxTLYQ{Qui8O7dC?>;F)^jD3d89D@Z3 z>hNjdnpyb6C7IIz&li)=18YUi>m^)RDU{wfJkST{LWo^#o-esQrq|q%71co#G(j{s z_4}0ioM+=AipFbBz;2#j;OWvG9*O(MCyVBJ`ty6=TY~q~D>QhXAfKchMlmP3R%Ywv zF-1s9a2h+4TQnhgh77|{Mh2`UGK~5l6%R4dL6{yE2_!&Ca2VCX$nE*0q8GeL!$S~_ z-TKU+_}n#Zld#~r7K2j)iFin|P|(U^sakU(Q_0oxCCwu8$=4C)n||KB)M=o$2j7p? zjR3QdHxYO>RtFk;{M>j9Q0*3kkJ8K-lV>)!$as88U*c_N*~@Bre|qh1Uqh{UF|9lB z@Kmkx?DgnyoC^8?roq67^jP^t1ITlZlrh?=F=Hvo#c3v0*{qZgUfTLLSTyLBY3ee@ z>LtZeV{FH<^C`;j#pjJk-Op*E*lzDMj{B<$wg*paXE|R&AAOrE_K_rQI5k!Gjcx2TQr0`C9I)31(e}jSt_p&demqs!?|T(c5k=KdjeOD8*9x*U-q5V=UN^ zleiT}8>S||fGzI^`HUKrZ5dWWqsF2lMHWhSi)iKa=1cC2x&C`|hv2NKZq035-^mQv zc~Cu0DqopJq6TTNiuw)yKR12>4End?Z>bFX-TYMlljF|P%-YFS=T{9*^IuN84RK(4 z6rmhWow_Rj@GiNc(}E=;aXCAR*L36Q$wA}z_=qb{wVf{pWLj!!f1YE*ss`4QjiIFM z6=9Sjfu5C)-a_I{Q%!dja|6!SM5LS@v|y?<)^QH8mIxDxS$0iws>$LQ}CmG0=siNk7IQa>5mDBLoT<$b*fFIWG==8e*sT(oD&&Sj=ar zY3MBC4}QBd0ojGQ`J;H$ta{A8(c&g2#h@Yi_1YERwDO=jS#Qj+&`r0C+w%(c%;C&C z%wMfV^Bj94!jh)E&^SG5@~v|?cRQYv{DK!*7Zk#^8? z!rVmRUAK5oGk(#)!Sa{DJ6m^FBb@uyx7$1hOLsv_sg^@+MfQ`o0ysAMO$BN5tIjP; z>-2WyPxubu3M|!}r3&|zO&PD~J>Y+4jzyp7?3^6{z!eJ+fd0Q_?mwq9{&%58QkGi6 z0b6`-4y8{JRZhEANx9%TMA`7M9}zhyC2_o%Jd{yQ)ffr~g8>CYBC?3mQT3D$ey^Rp zKWF3DtX0-~KOoyCZgfCzO^nM4bkz^|V z>Dcj`%C<*X=-`=DE#gEn0)i!mPW)up6l4~ykt%q#(7RgiYYIYoED!AFRpsINQx8PZ z$4n5LME7STDAoOr++r!1fY+$3GxjZ{6aF1gmEoXD^$>7xiz|n+kK&j^E_eZ`Rx~zV z$+%DxG!yl`OTb7$_T`1oi}VQE>Zna4DtN>#mbSC=`c2j1n!K}UbEh0pDN4%(#>0I9 zyY~Iyf@AqQ>5*irzWnFX;T#+7v${wpub9k@W z|5D9RY#hewck-f`Gi(}h;JAmDLGl8HIN5xncZROPWn0^pvC$cg_UI<&J>G-p9!jwg zml%}0fe7u{-mouK2EQQOOdEl%3Ihzyn3S5))4o3pF7bl7GLzgIi3j?j(KPAkH+!2I z4UAfBa`?SjvI#N|pnWWhDhcFud)M_Ukx7!rKg7f3Skq`S(SzfM(#&1MRc5IWO;}tx zcjeGDbRl*NkDbdoK*g2W_Vd^S<9>VQ~Q1gL>N^yvC8JJmi ztXylzs78l{5eO_}<^K<1=M>y&(ByZ7>APqtu~_*u;Y3;21nB^X18hHxmM=LLtqMUU5aSSt~#7*NI^sY5Yi^ zeS01{=mQs+FRDJYFsU&RnYg%W?%t79`nl8<6QZR9C?(R^FkMExVYWy|HdxuB>E>eO z1o{b=YQdZv#uOzT3!61M_K*(UVwWRliUZ~F2ns;aZf)>x~g&d?=wo#Pj*FuQq?v%1dRwz=j|kz`%fvC86Qd>fMEd4LL9=iqXcCVFzmF(`x*uHs977E|4L%QZt{W(_U7 z!ateOc}6^r7}_V2783u|O%M2{N*hjrhNlZx3fwJJ_&RWf4rneC6&H2yDC0BgU@skO zueMe@O4%35tjV%0bl52J*?1UIm2pthGgxxLGso_SD}DR8v=Uckch%6MXAdP^$vbOi z%JAYb^y*xCujZ+`S&njaj14tA39hJQ2S>W937O>wh^RfN_t;^=R*^UinK*;7Gkwd0U6^{(oHDXa6K)F-KlzQDgOL=-jS;rlXSs<42{x_#N&TxK0 zW7yvM!XYYA@H)eGg6N$*v;~T+=A(NY0rN9iAd%Rnv)BCtU$*klTpR?Z@(N3HjxltL zsU_t6Nq!XS8r1X(in?Q6xz+vz)^-6Dj%xrp{wJHZsB(B}mVzX<6IMc5NN@&K`0eA? zj9^)&sB^Cf5s7rnGarvMKvZT41&xh8CTb>P2G9|v-=st2&~gYIKQVnA$8kuSdB z=DdrlG-yB}_(8K;Ks!emDpN9t<$y-hj^WIa$z?(o*TKPTEfjKYyhDc~ zd}$p8<co#l}(fXB8 zX;-r=3cvRC_zfU<$&&ymombb^ZO2 zzb0s-dkGE`vd;3;qG1K|#2FQv6-^3-Y)FG)zp$_h#4<-?*W&n$Udau^plQa&RXHRN zsP}85P$(x_O=iYZnjRe47a1|FLTpil^Y1~{8xmCVy$S)uP0=on#{pdz;BYgH3sgy$&_Ap*w$CgacF3~O~Ro7G;k~?Z16${UZy3w0xM?%#-T^L|iS2V6!}*n#tVgLo?LPw;vDOs=S#JP3|~9>$bhQRA1ON83YK6gtjwrc5Ss`QEK-T2C5*O26+~aRIJun4 zpm6GOGEGCLeGX9Kf`FazMh)RMhdc~*p%IeXy{xDCH02hponh&ghoLh4 zj$q>6VRQ*~mRv!DbT5tSQ`!-H?f<;JUAxr)*dL%>at}4a7JNA>Zf4R4zId73=93*ddz(K2skYY?}CqSTT!>J{~9@y5=7g@pHyGOp#fUk4M1Y`CW?aek6{U7_|$lHbrekC{OisF~^PC$w;m9Ob|_E zfP7(B_<~dvJ6}I%VoZ~nzoeZeUsV`oC-fE5_qpS>O!Ha+j#voOM7?4CkLINSRo-P4S=j%xJimg_?7Jg{c7$$cwXVWYZ;&werrT$FZUKRc7`DWc zWe*Ez@bt%pvS{*39$9!r-9K;m2uIb6G!Xg*bHE#tfYdLmYO$=H>Le-gEna*j3pWsB zTLJ-R&#{?9n=qbfl6)aZN{~@BI)G8bZ*|36bQ-i5H1SMANs@ymc8gbOhX}LDh!JxV z?d{(j<7V+O>82_mW8t=t^9NO7j0 ztAfuE3m^Hce6-SM)s!7zU8y`lCGzAS#ZSnnCm&2UfIdcs;;{Tx6(-##&R_D88g2nD z0BJ07@8>sdz4E!Pn~AEec+F4V>HLvpMpbJRg%dUtV0l-oWv=|jKr|59;HOJFMl<19^-Mb7+Ls@dNB*`%z&6I6e*yKO&MG!Ck_s&dSwU! zK=|7XKe~v85I&fAk9lCQtd#4@ zRfTJC;M7J!-Fww(yx3Qo30c-M*I8EB z325ahxv9@twi1VUBIx7MPIwkQdN4fc5`CPj@C6L;EMs4O=A|;G9Mr#d(V=&$!P`Ze zA6iXsEXW+UXazW4`y0T>OWWn>)9j+SEZLywdnX*ChqE+y4(-T*k~9xb+uKACc)3ZWTz%Qku0G9EMX4%%oLSK#y`uwx zMbpNHJ9g<{4@Tgr5ulyBI~$Y|Ed3}JUe7)&ql@_76?y5RyM%RJ_4v&0LE1)W5IeNV7-$PA$y$R(bg?5mXs< zy(9OU(uF`$=o98|7dfWzNyKUr-w;yM@Z{2h@TaYvRuK+GI4W}j#W+i`{KYuU4GNSY zxOt`0g0_h1Lic9OZpb)m9xBrU?y(96>rqEo2gX)?m+&F&UD=j4H%!yxj}V!0FdRxc z`Z6nQuFSv4-wMm}J4J0G7%1!K8P{_es*V0e`SylkDG)a%4JjUvUliZ)jJAA2>6u|B z&@K$}HIG?(+0!ou>p-V-hp&E$#|a=)MPJ?`d?a)0%F%L)dQpbxCt9 zFYF6tJK8#F?O3+>E}lXPKzpLrGJ5}=!d*h}NVWG~1K8|xy94@4|D1H(pddt~nn%Df z!bOLC0{m3X-pfIeeLX&bb&&^7W{O+-gj&xp-w`^yw{J9I6q06ruN!nYuMl=IyF-oD zJ)L>5@1h3?SMZxXFz|Htb}66&Zev9}-8NA-uk#Mm-flYaqk-m(r#cby6Ebc&IG>&5_?57rWCx-V1ZrY zCty2G)3zn6HRNQ097#v^to?cSh`5DqDZ5Qb6~T7S9_Hi0Zzq+TS$^*%b8hK#_5-`* zOdTtQJaDL5yYGT^8EHaL{G`UKDBG&+9E9TuzW{e&ZYZKNZ^Ge!_STp?bs)J z#!EcoA1|Filx64G+Nz*EJNai$BpboTudD9!_%1OTL>ac##A7$+iH>awFS<_EbEK(Q zdoT~+icREe0qQ<&66%38jHn$;wAPKGkK;x~!Q(Az3qn-(jaEHZL4}&Ohwo)ND`&79 z99JVV=rTx~(~8&Q+3x_Xe^RO^A`_P}a3br0fph$rcI5HpRp*X8Z#DD4n3oO7p=gV0cGN-@$}RkabT5n_HT| zF*jT=BuYm`{G5#^sDGzp3?9lR*Dy9xc&4PlR7)#<93(Sw0hEW*d1#PF{i)BG;izqy z8ow@P<#po{3DbZOcTCWcLs?19BsU^wD#)ZmlSuAKo`)-NVb7!PGmqT@+96CXOKk3g z_||qJ44u({Wa`6_%xQcQ4l7KvNe731AzmK6%vZT5Nh^G*I$DF{Oi?bCqfTau=h!sX zr;I_8xQ@*x#EWoUPL10da zqMjz%p@rsmyMq-o!VN1fdUNc@DxmewG%h}e7#h(e*YzA_+b3=*zs<=1dLRbAqz7tm z)i;Y{RE0YFkk<{1J*6xtv%|dlO^a*#N#GL#Li(=UZcCVqyeNI3S*MWuXWSwlSM{Qt zloR}K1GKJoPsd7CN`u9~j|8*5)`r8C39}2W-GcusxbnU~i&@#^(3W`!PpvY6+U)ddCn%qA?H1;UOe=*+;vD~@|d0hfPHYIsR(iK_OD5$p?^Dw6jJ@3{-sR{ z`z!;IYbxbu$Y$jPwVa~{;C=U(tc+Cu2Scr3?Z+Ohd1R^8XFb@InGnMVh@hUfOs{## zr^REk_TIFDdi@ArMk1}Rz^1MpD(4@D@9$Y<77qyai1@WZ zU%D9;@#-PHhL7>458;FkCvWpeEQ~MKx8nbtm@zf z)V4l=ggwgs0Npf6v4#K3JW?^}c*7B|&uA|xjTh6$qM#+EW<$!r!XY}UpxOE*y~Try zaNcHYS3Nrun;HQZW$m#*R|iiG$4TiSw@oBSTW(H;bw8H+_u8WYj(r`!rcY$Th?2I} zwCzb3;^kZ480qnNzSg`Pj*rt^*@bgkrG*LjTist>hmRYSkO|lU>xlsukV7yHyYr}h zbl{=1ufuDZUL$S*YWMKh%S)e{SUB9L9#XUY6_dz;LOigzbP zo_cV~vzDG=*1Gl!ub^46;Y$?htu^G9v#!r-R#dJOefTf4T>3cf=>yj9WYOaiw2*ef zTczOb5s)_!{9A|e-D#~cSZB!;)&Oa2PF~a%E%jl#rA9-I;t0}tqI1`eoywy#OE#yf zvX#3RE#M4BZQHwc>Sb8_O}3D&CwvMEIm_gEOIYKl0nviJ5BiH>P}RyzF|w-8?b;8f zwu`$7OtfbfRpe)~oQcY7^%NazpVF|DAIucn*o)S2*vh4iV)LD{I6o6LInaE;_a716 zUlY`H&HV{=#PklS`S@4FyR?Ox!jCAwvPNv@Ohx|W}&XwsGrf^JaED9 zyWrhzAND|JZc5Lp5*w&j!EE9|+y-&kwk<6JL>stpVj$4VqM@Us@_lu(sep%ixp5$}>N{PI z_-O4-9V{@Q+M%sxC;@Qhv;an)39curM9j)_!$4upq6(8%;-~H7MI4J*H|Xu3F5sRF z`&`<*xPt>a*3F_U*<9`rPnqH|MkW_<5`p`Qw6HsD;I|WpOhMye#bDwA z&I4A>0gko95j@O?)^zw2wU-rpV&;I=+Let%iVkYJ|0|~HbGBdyX{N;-Yn&REwR!=D z)bHw6satzUS_Jx*?Y$d&na&Eui!5ZbS`&(hor;K03*K`y2c;lI`NNf?o6@-kfddZ{ z^+lCcVW71f2Uj4h6$)Hm4YVSVnI&Hu`P7o?Pf=d{1_5-9%!1G`(@9LLL{ z?|emKY)9ptNxPk%+54i%iXGz=8R4yGt|hHVZx}*&ZM&cBP=I}0RDZOy<(SNDh)bb? z6dir7l|mYjIKuauI0O)&F3&XmFwKJ-`|rPd{|wWvuy{20p@7J{-l6B0TPS4#fXwQF zp#+Wba5cS8#<{kXCgmTt7aq#v6q@qNfo?TY5dkvNV!EG?)xtBs`D?V+U{(E4ym z#Jb@0Tb5nQ)yM8P!;2mi!Wsfjf;ZLdJ|qPUg#?EM$J}(ORW@KcG&G`>dKa4<@U}W$G|&{NI*ap}+`AAkpx8Q!cx7ZyTEtKv(|+t4x8Jh# zM4Q}G7q!7?c}A#qy^breTrE0joYmct3?Fq(zt(8zWn&G7GDz2I)$%tiOGL&!1~+}q z@1G=2!HF8gA2f$7N;~iR?K#z>2uMF7Hy=XTrM2`VTjYWqgDj&soDhpN<~?brQvS0g zVpdh)*!G7~@VD%3C{5O)jVbHY!q-d4=h2ohNfQ{-YIL6GsZN5cH~B0Yxrd`)*o%%y z#+*kZOL@>obGtcc>a(OA+C(uo0<8VVR{mWi9= zV?)ONe}GLw{J?wivwX0_b!lf|;ZC}hBqeYfd)*G)$AOhNmk7|cr`|Ha?pZQ+rvZ>2 z@ZN$o$^PApPQpDxvlC1(S_&bOLW*J^-uysO!Us}#;N!#6L-xdIR_)=^e`wXqcQYx} zhC5bb>2Wpe5)&-zd8RhZBqkP&J>ioYb7y=T!QnLt^aM0P+ijARMetct2Un2EVoiU{ zed)t9V*BpJ(Rlm3jeW-c8*X##A|90+C$k2JKR>Dedm;Xy)@Iqnet(G%p4#vcz}8R= zY{q=v!rwnBiuLe2i1J5-9#;aQImjyF5vjinVOPK)vX20J#`v?*h%eqb%RW5zfwe4SyCCbM#3;6UEWB{q^q!LUqVKINi z4ERtJC_YOsOgESnW_Ji?uL6WKL;|zFlTY|_tDk>Q&j`ropKh#I@)v9w2Vp(3S(MD6 zdEbWf$0*cDuoWe+tN7&!Q*SdD?B^wNbqK0^g}qTD!Le`=PT8v64qm1;yR zte3XgZFv}N$0D{|$_Yh0PBo(@e(+-I-}AkzqUKSdgvE7_T*!+eQZ0~D(m?MF4Gbdk z!!yJnc;0R-l*BHr38kxtJ)_Q_kSo|aK~XCuZ?|MUivlH%a^LqYt6)cX_|J+h+^SN1 zzI&E}7t;WZVf-!_4)!rHveqImJJyb&l-@89>oF*@)+z7l=qurYAcUZFCsH9%4GQeqPBh0MF;4lM z&fgVUa{4&ff+i2g?H)U!66NNh6dd$}9w8hQEQ-G>Q`Apg!GmaT*e&!Q-XxoTQ3$-* zVgJ^L^~P(y6Nh6tdF8S#5t#l-_yJZ?mnSs20HXlED`cfBr9TYRQ@u5>7uMa6Jx@;` zsNR9_^8+~^;&o00N=KoJrN2Tt&IHjzQf{wQWC2|QJuB9@S4}NZ$`H}qxhMFt;`Q-K zp!XSyYZ3z^MO-JCFniTbgxg!*+KdQT1B#ZL*${%ty_w^ZFNLNrW!y(^DPK z9B#=j>XR#2n7FBT4KhA)P{&0p{>3$7ObfGV?zr0lc3C=0MVgJN&{oTzrK-Jl@;7gx z3$k6^pXAPC;s8@kE=8pbInwUR2J%N`SHmk4Ldpolo8?%*F^yUEk378E{C+uCl4s26*N8hYBesnPGPn_+upw4r=qX2X^u%5SD55~zz z6wrNiXB>3Zg9t``L>tOFUfa*f7F9LtC%+DC`+OoSGdc1asg?inV(gV6^OGndPKUW8 z`>k!Ob)o(C>d6S7zLAuB9cs6dMB;M`+;u%yUoAU9(_O%aum&BiJ0ipdM}~xuZc55JqEyx(F3Gve<9o`YPMqf?*oJ$6|H* zoC&)TX-N?c?~U(Ys>{&R?gdoC5J=C~$^NBtP(1+Ny^xm&#doJRTuSIhMzBio-xFHr zM3tY#R{F~q?gjFlG&r|8SWI)}^#KG$&5U2i;Hd!ikjt(wL=i|J|pRA zP%|zztq`|)f-+^`sXOyTyvoUi=XBmug?l_T;t=5#v5KO&%!rA(?+|#9;_U4;9QtIX zN8Kn7U@(1$;C5*(4{T*wAK|{V0lIaTw)pW7Bu*0GEXsb>qPNpyi!4HRLFZQ~f7ksv zpwxdZ_>nW4skUSon)h9tcl_ss_2wuCh7$ANYX9E54w!8X9Y!l~l0Rctix!$A1zDY@ zIxeg+>(y;TFeq=IUEcz-MPEzEt*MhwRz%|r+)*~M8m-HV?y)(-qT$?grf!*M;Vvy2 zpOkm{a{0Jhl}zMS77F zDRW~zJcITQ@m-?5AlZ6%{PM;O8hdjV3o?0ekLi2P>ks=RhP|fD)SdUrP@?nFe1YHD z5WCs5FmUXs>o-vrc#IxIgn4FB-qQ@)H)*i+thvcdTSD>Cl-eT>!k9np?42Hg_1s>3 z@rt&x*PL^Kp?_sPdvRGt@sVpSQ8hApgE2`^JL4t~gM@kh?KhZatnz_M|IoA=twX0( z1l}ZG1}QNd7xP_e#1DwG*f;;BTZHx)Ru8~exq8lD!$}Fz4KwCAlCE&O>Z~pwVocG| zYe`(eiTG6^EA=ttI#l@XBy2Sb{@FaIMMukeU*8zWUcMvbq|ADZp+SO$+hei`kL=+slx zyF+tbN_qYe<^GUYxeR=E>kE-jhxHx!gQ<|&#^Ap@_)9Hp(NUgsA-OACV#5KJHq2N8 zu}AmFRz2m~Y{y9&60WGo300<)Re2VtJLYK`5#Rf>DWSVFQ%C2|#oy@~n=BvC7fSeb z_Tz7{-UETSmGSn?|;@evZA+E3F-My{G`zLZ$;%Vq^xjg!#_~6$m&MaBUtlU zEbI9*aK>Frvect(v5*GPN~IIdC5i`-Ie_+*`R^t_ESdbd#(`Aja>`2L;BdGkMR`w3 zs+ah-pB1S}oY4~m%=<6J6>RhLPxtnA4U(!poC-yYacO0xX*c@EI zzd&^H6y}=!&8xb#6m}76^PSvUggS)$4&7Mvipk868Je+!luwm-`_6i!A?D955#YG| ze7-Gl@9bFeN*Eow!AAzkk(J-ZqTq9-67rK0xC+5REaLr{V!LCX%+zBc>_M}Jf`iis zK`0(B)>ox2fD-BJ!T%+Gppc(Op@}WF!)VrT#j{gzGnB4fdZ`;a`AK2>y&Fl0WN1P; zO&mGBh4n)qnbdbyhN~B4m)b2hbXB%@bKxD@@v5(;@gO*!oMLVm#sQjzC zH;!g1YTV$fyf!6&nb3aY)J{p`I{7&}3aToZ-d`>lmgYV7L497BCq_gYvy6*Ju;g|6 zP7W?S{q@e{ICMNPmDw*8L8;@_K=>V{5o$~QBKc^#OUX&Ttdm}Ml!ia7F8}fd&r<7S zfgk#Lo&#^QOEur+^+N=E1<}poX))dwiU$P$$*DEkU^=B1#V%#vax=)$V|QID&CM#@ zfUB9axI}Yu!NMGlG-TxeqkMxiGt>RYG$E)B0YSqy-@Kh>|6-=AzvOz@AB@r;&;q{75*tB^Dheo6*$H-zk0y0788&ZuZHq z|1l5Zq#8HyZn$~IR9pxSb8omR7RGwex}-SAm(Wll*Qz`#J<21Oy!u8owhLKbf#osj z#L`G#=O};1OCYvbc+dJYb5V=92;#~@Q?+vn9}*;GVQ~?#7Tt|SIjJ$?^iPry{*=KF z4vxmuD95&v{>^-I+!N>QP)R;~Jjrpfm8`Nt0@p}Tw~wg04SXz*EfnAAOoFNpS@PNw zbEAAx(mfm-CXyR1=+TD7c--m4poa0DF$fgYOG%!O7&02^LB1&BB{`E3pF~9syB&ds zCH2ZPBrFDeNn_rT1$fVz)rxkPtNqtT4OQ{eS#*I^9`wf+hCKo^*!tn$#n>)_!lw5v zc?w4r?IyegJ1}+u+LOE*#J7Kv1rB~0-Mv&D_R;9R?^(2&T;c?5(_1!>IMLgkR|L}VcuQF^O>XK4|E5eWH$o=6ecAn`8= z3=^v&dx-oaDr`3*um>^#7LRcNst>L2B`KAx?d1~*g_H=jsL%?$aB6!#AaDnXt#RZ8 zQWxFakU5TOh^!|1$#El6BFtf24^YP=PXEQM3$BE$Fv<_&6tF0`CNkfv-y9*wl&&9! zRKK0VSt*M`tFFRaSv5DC%-X4VNzjZ1wb}a@r~+bRQ#tsTUCtp7Qaco-0qqu{9r7IN zvf_$}GxEOAnkI2p%jLlQ?m*6Z3IMoSa%KDD`X^)Y@Vm3Si-*tW)d$}j#@oQ3FS{FG zr`aZ^$qxZX)hl2aB&QFK; zmqBF&64lL-&8M{UMAnza^=@3QpQ9D7fmFA|no^RL{laR)p2Hkh2FX#8W8$39>y1!_Q zczF4~fk$6jBBFsNVm0)mEY^jfsN6lfUY=*@q@1unK+1QtpRL|M3I--`G2afG?q6uE zAZq#i`(i)|z237Pm!DI_sxL<7uP(!$yR@xl=GS+x*=HXmdGq8ESCA@lcErkGw_CKR zL-sWxxujshK6&_fal0*ZxN1T`O{89mf&FC^-32NrwU%eX@lH;54<8^c z)}KeN??$!6Dyj!OiygR}pGs`jM@$Ibt>Q8J-V=^=ny2$+x&$UdpDUC9 zsjUBzjq%X?+m)v>a{siRcc|KhU54@{R+(W{aqZV0eLc;MD~s3T<->LJCOMW%Z-wd0 zK<^%)bKVD|t^Lcx@`|!}pTz(c(kG`E6VA+Gij~b$Sg_zZXFX-SkgJUs& zzrKHa+uOCbekv;;!*^o-oWyyuTQ=bM)a(6cSqYy7eDNeuZgClZx}%1^R76vT0l{zVV<<$>wQUgOA%sg8Yt&jm`R|Dxr6-{x4l1 z!`%uBi+W@|qOB1!pRvf5;6X({uLX#}O0szdCtx#!EK3>aQU!J%8zUE`&_E zBM^OTxxq3_n8DERjW}~d=LdY4B8~-Hk-NjfH%%>G+PyA$a8j3h>c14wzzkNeR{wPJ zcH>p{Aul|<-CaI>Sw@+&=jLpluD3j!9DVQj-4NH@pYLJ@Zh_IhGx@+tz76jU?Jv)} zSX*vTi-=hBE23pEb$kE0NTt54?3oWpauj|Mn}IrCccIQ47xy%5--ysr@OB5q^5-9D z8Zn=a3{qWFxQl|G876oI>WeU5L&xgE44WBdtrVS(W>B7uufs_S`n-4<1x%j2+OFJx z9GoYI#FUIcvK0&QWBEyfk0_7@U;X9EXe$(G>8bV6J3~i~RknSHZDIU$0rIaeif-Fz zK^10;K0jHG|E8d^UudX@5w~hKd5jIXN+^}veqx%zU`9lbaii+*c-tMpE`;@|BN%&p zsNbw}g#S`PCz`nVz|=01b$6{I%&>wZt>Hrh}?g|o@Su0!$u|u#L`ka-W3xI^XvJ& z>Qm>nhdGXD?NrIV^IT`7t7&|%o2`7p*El~*r}!Xtn!{6mDeJ=cs*T-WUN6& ze-*rR?U7vRWfJc~&IWg_G;+Snbi!oBtc|z*rOyVCj!|v^x4~Cq1|M7antcN|5{oKdKj?is;8!hqm}du6REL{Ze!YwnbgGGce`-w z+^ehG$$@34AJR0@lg<-#POB#iB?96iP2nHh=INOJI#9ldIOaH~bQ244_2;=3{G`-6 z(=Y-Z#O>zoo@_N-0FAG##o)mZY2dWg!b$w6M(Pgw%_{tax$gJL$MSm^ycLarKcmP8 zMbju4U$>9J?a`JVedB^ z3(6&pZC5ml1^{?;jOUBbH$p$>07lD@>mz7>8hR;;gK?fBO5xuH!IJy>S4P*jS7@ISQ z9zbh7gx*t!l*N6c{#MJ8@Gc~8=E4R8RoeEDc4BsA2XO3oW3%zG^>PM=Z8?PkdacK% z$P#2nje1TJ(u0r2fua}O^q~DU@%u|@@XaUm?E{so(8AmI8-HbI9UGBidwUxUJNugq zJ!&xK9|O&Vq4{CFg011zBoW>RwJI!0dlg#a z_t(w;;@~}8w3|78|0J>h#CJ3QzfkG_VDQHFMn*pv{C`8i|95mkQkLdVes{8OPKh^o zOk|7x`i7n3LjX+R)NiB!Tjga@F$zN@H7mk0Qa#nF;jibZgtCdT$%NGGQ2Q~*Q(}7Z zXu>HTzRx=;3o{wKBkB$(o0^NLrlyiA`fbg1$PObf zyY98Bum&xSiqo2^vUv^8^<>^Gn?HRX-;bUM1zr==e{-aEN@UA=JRV~N&T&Hi@OiC~ z+UYc|<$U#hHN9^>svx|tzEwHBTT~43y=|-f#;D@Zt1|B)-TlhxY5uAi@?L$FC*gbg zxJVu7d3!)~-Tw0GwvzvTuUa%q5(fevg!K*-!R{vTxF?PdmeufqT9{nr!IIlVH{T>2 z(>WgwQ)O>vW$j$6(3!fw`Qtaz&3*ISi5&82GTWGOe820k7;cmCx>PLhh4z>oBqG-^ zICCa!VpRhdg}viVYKGL}LhrrQF7df{*l=QbfbVeYD)}TZe>m1}2Y-p9e?}*HR~|LB zzFqm+EZf7|Z`1RxH+yVTva7?gPe%W-m$|&DIjLG~)-g~@5vf~r6=w3%YPLK-?rX5; z81e5|tuN2dEfv7-=)tAU!$AMeKn%@{>W}QMh6FB%yMDMoPFNJzwIx=QqqA>VBf~LS z@45zQ)2b>(>`3r@r4K8z(Ocx5)(MhDZwZe@W*r#xkyh1XzNfDy zriFMTOC8qU(sItZs9p?3Mfh)T6n%%0VkICSE*UT%z94b&h=BKffP-Nq6`o@zCsBBE zhM&ZbWec~I1ctJo__*FU)zl(eT&*`d9^fD4@IL9`Hr&t_2TJ$HsYTm+79? z!7r_We0x8?98Q;W59x|ABBy2YA%FOb{_)tBNnb7eRqFV3a6Z>XE}^Dh|L@s(JO*c| z@vn~IF>XfZ$4k8l@zhs!Sanx=dZ>Y!?f$2eu<5?#J`Lqw*4(gAawgRQVEdYRN!Jph za%@mX(SFSGmx|SwHAbO`h@ez|Gds0~nFYN;S}-^=nEFKyRTjQD(sCM4d~7w`Si&YX zyq|R|-DXtwToljpQb0|4{%U_axozZ9iW0J}xRss(Li%)hF@hrcq`K$ z3*fUm9ZCC$gXZyd+O>oxb>vlF&mAq|)#A5Eecsdn@%>Lzr-ST~hBh1a?sD4f{i008idQ$`3ZgSAh#Y?2cZT!Xao{~^6vraVVZjM7oHkV^V0djnDA90$ zBzkFnd-z2e#cwZV1OHV%^fFsH@}|bG6NEQl@8TPD+vd1hxG3U`5=z{Z;!eJL4txC5 zzczY$%j)DPIQXsNjJej|6q#D5fr_OUpt(AUR9h@>S(nlIE+D3J0e&jkcJEMq?)Z$_R%C>qbiseQ;SbRz_US;OSP@xsVoS5@z0 z51x6VEJ5%YVQp4{v&#>bu}Xx>3v1&*NwA7o!VLAzGF>f~SqQ04TO`T_ji zql&PGJiC=go;o|(`ki(*f00!VS&OL%J-HzgoQ8wUqoP&g;UG%qv5hw41vN$}{JdWH zwr!;Q3Au7=_elk1z^>IA#&4Iy;KF|-q%jn{RHd)Z-HlD+S$TMK_tK9)iG(r?{2IcWg{ zWMa<`KR}ABB*Zk^{X=_FMT%eCuW1o~+|#77o2}hft_yub*S00zI!J4uG{A5}b1phF z;iBHbC-C_%P-o|9sl;^v)hes)t5jvT= z+J|L98fuJ0!-`t05q3KTrYpK3cz(qD!GX~7%gw!(u+e_zVmJ={aDR9ZWnwE9{V!jb zgh-X@yo{`MO}E4Jj#aqzl-Kb@r^}5e>@A1i*Ys?YXnth{K_fs|;`@jO$t=5!vNRAj z0wj2(XZlyxW0TZ!Asmcp7y^-D)04nP-gS+QdPdw0Wslk-PQi1dedB)-Jibjjlo)RM zGVq(M!+%W=9*s3!u?7Hl#tlvY+I-;F$|E;*f7b)lA`WYCm~2UVu#6icNWeBmTilyc zaN!eL{*9=Z-Yq#Mn#@xY0dZ4I!=*h`gkA-eoj8-Kw=tkaS#U8M3HdE2FoDOy4`D?E z0s+!x8bD8^1cl~|a)7AXZ0k`iT;E^?S?27reP%^=Dh}#ldm)HjAZ*Io@f+h2Ea$`) z%?BI>cx(g4UCu%#o*ndJ=@xz12HS<5+Th37P#hw%kvZEs=sxx5RnMc}4B~WuYeH^f zJ!1(&r1zG<&Ua_SpG5?XKcRd8Uao6@DfK|9;v+u}wJxajCc?U5KpUDHWnh5dl|U2T z4#|RMM``e7$`CWwv+!KDGnir*m^oP0KLP!c<#(T4nRU{51!(ohgcwZFb5KP{gXjug_hlP?09 zDzUH9f2RisGwfG~$$=ibss>6(ThUFjHGd9eA#^p>v%;;*^Kz0aTqPoQJp@$kLX=yg zfHvCrk7o=iUt!oU22Qq5d)ke`)HQU?n+%HYN zVyaW1qJ+9|v;r0G4M1r{+eW~)a(BAc*zB&Y@zsj!i4x6T00)b}K*~&v#$8Mfg5so) z3r!6et4D;hN4zT3pa84r&M~Y1%I^1%4BwRc<<_N@%WuhR0+?`SPJxG$Gi1-kEFqw) zXE1FJeqb@HLQ0nGhjlG7D$VrQAj~8DJ$u8=e1 zPqU^bQz>fHC(0Gyh&6IRz4a=RI|eC{MX8qS40V<_oQ`$o$Cy`T_>2ync`QJykY?J7 zyd*Bo!XpLE*`T`GC6azH*flP7%5k92S7l1Y5J!;%xZTd>t15o#Co_-s4HtgLVQwLz zIN=RS8#4oeioXy#WucUW87dVatI}4iulAr0DdSOBUDqp2!`Xi_c}714u!QB0^Yq>O zMXl=PEYDBmRAfR;3Zf-YOJAH_|3mL&BD1;Qb_E?e{x8PfF}Sv%Tiaf-Z9Ca9cAV_k zww>(Qwr$(CZSB~$Z5v-+oUiJ+av2?g$~rhKUiNuIJI!B7~~xg zGd9iKhdkf~F+pX)ATzc}> zeL73cad*L4IEBJG0tz=&P_wqD*}E}CvA;$>c{DSYDiKql;gM$(jB<6ve-`o^0*DI; zEgE75Q8dZ+kWT&8X{VdVhw_q%d!3zV*cCY}h{cd*nX_g|GKv|~r>b&Z?mgG4ut*HF zFXkL5|826S7_rv)Fi+9d?SR3EL$Y@yxh4io^OP@YYIPFjxNzwHS;5KoMl;Wwsm$(w z2^tl=oh6?c>ik~D%YB`A`O@uzonhTr(_tJhr{~*n5%T2)GlQsVP?OX zp$X<#$T($zf^o2}pwOJzt1j!J`6fp`QT_TB1q6GC5;HaF6B!ZkB zYoc`fS?cHDl&O&+tdYhtD(&r1E?qW>GeHP0x9rU~K0bcUBzVVMc z;_n)e-;2OpppKPlReicXIFdzpzm^K$-w8=|d!oS@kU2F5$|oT*-`$1W2*p~3CUhk0 z-xZ)XJ}^dNaAyKxjj(M?!j<8nD~1W7dV)aKxT~4vk?>4&gd|A={py?op5r6->`jEiZ}22@?J*DBVu zfSpk;tkbl4O=8}C@bE7)Hzth7A0l59LleFd?`2s4WNBr}eGY|qQSjoI^lG<{ zx)D|bACcMDJc30JezqptjbeGZwoPW3juMpez1l&)VLDkydujY>l=0um>rILj4*s)t z2oX_(0~7SlrDhl&y?X%NU)M@=<_u@X9nYfdK7g^TH3mrVZC#WpKT%vST24O)OB8dg z*iQKMZf5#ccW&<{*pg?_6%vT;FCag(p;}Q-zhk#0qdqVfR^1h7o4};vo`}{Re>ucs z4AN}L`ynd&p7`N)w#7FO(dHV)otI7s^HlJDekSu3vRE+z@hng|QLr%51?8;DSj9Fg zZInBO`xS!XMDmzYzuvPlnx_!TqRn$@U8}oZlFmrdXBJnO zJ@P+%lRce^TR2X16W?1xbBXY=?HGZ*Vsk32vF^s=Gkn=5QofHOb8i*Mdde!*SUT&D zdvKT|_MppIuD`P=4%ssak&ngc4;Z+Q7NsRpCelU<>lWG)dZ@MQjZ~3VO{#ES5GbQT zeNW~F{Uj!8$mfhrxeM3Cqzxu#r1o8fn0_Vgl#z(8H{Pb6m6Rzr_Tg{GMIvZCn%0c0 zNfPe0`z{lDQ=jvH=C?cNjwbC~l-|OU(m{t#giurWq@PZEP-%mc7G_ULN#h5!B168Q z{Wu9RX`OYXQ-LhyCXR9P=q=XXBk-oYZ(mS254}ivx=?7q!ph+a4M>HK(;Q6Q^$Jl% z*_Uxc?|{eq^B!==_(T7OZ_6wIpPI1ML0`rVbty}{n+W`wZQp`na&tMQ@}@B-eE_iH z#P7;AC*gKvN>cUxucfnXb4h<{(#$&|_OUuv_EL9AyTQ0-3v_P&3%Q6#5@Oa2WRy^F zLsbXLh%$b6;|Os93By%ez#JR4WEjy<2>T-htn{s}#~A{=k4&?}ry88xVe0sClIP_e zo74&eNH-A_Nmwi+NcKOg#$bvm^9l;3-PZbx!a8+2!aNP=mgB5(*;LQ#17wch3R5^L zVxH}xo)|j+G_E&g>6t0?FJB|mrlja!_a?e0jNa}9WV*u89v5emjC;b-Mi==5BSCFS z?;$r8JneX*a4t8pdashWVyPvPi24j;Navl)ysub}J2T6;yqd z?14+QZwt6RodQs)`9@(f06#K;+3+A#J(c2wz2JmyK#>;orRD=XQ}n=O2>F5?=An^< zHX;BaS&^FzBzEA$M*tFr>ssc=rU&sP<5?00`4`NT0B~q>W~^>9qBBoCoL#*O z?SFrjT|FOS^AHsAdOkkHVlgF4LMDxee*;6Q1CnDT=3$jGb0)sg zo6IXrq)Tv;)@Ikw`o8!Lujsor7uQL9CUuJ<^xxT0Ms<^7B1_#TW@F4igyzG=onU$0 zz8czBh3c`X-*Grz*)Jg_Y2mld1;H;=>u_8KzWa^iWn6${oneIAC0AWgp7)gczm7yr zj4~?er;H`>yp3%$VefMiDo-SuKRypllzX%J?ecd5B!9FWY|hOfc6_&0t#o&9L2R3D zncnsGK45l|Dq#I8vV3kayLl=U2m;F3NLwsytkz)`xdJ0h3-JbtALj@|d$|q>ZURlT z9@?`t{!OQSu#UY7wVS}CY6rQ&?h(QeMGHJzUS{0eeFW3u$4Hj!ht}L2O{spNb&c!p z290WdvS^G+d184mc;j_Pz;;*Lyl|e<)mQXL{0ShH9`P-WY_|m$|KmvyEQRaxxfyBwDU?AoARIX97A^?wN?p5>yh{|@9%$4gG9K)qqrb8({p(1;{_j}XET?19Q-&`#ql-NF9=N{5i4OnV1DsXKWm&pZ8W%ko<~MyK%!b4FY+wW z++aHiAuxlp0w40*HG5I67b-oJma2RHDxO*O5ld4uG$-9!z#5)|yN!^cVgvYZk};BAp? z-AuBSn03Zg8*&<%#As(`G?1T;1LXgiOm4hhd-gAx&&~jr!Ar#Pzjn|YI?;r~_T8qA zvTH4Ru8{u5{ZC#lgTiQ6QlIV6?5o2J>*$|7i8QlU%|6y zmj>L;*)>2(neR`#c{CgyR!WSL&Hu1yiNnx%5MUsY z1-^R>eD!BBYr}yv7aGpNs0Ofz(|doP8tJ#4J?wubpD`_JA1o)~JVupEGYwDl`{hq4 z5PO+Dqe-;Bc#n&;>7m7napna^T(=nQ`75LL1~HPbmgf=i&=!J7@!={69dRD1BE8mm zsFFuR67xELGtQ;UxRETz;ZlpCYu$->L!v^<8w20S06_=65Gi8Dr8TLs+Xq6jEp3&H z9PEh76AOnzi*)=&X28Rn*Qzjs4b-Cb;(ixvHH;iKey8m;SfGdoxIMnD*}D{pR!El`r#+ZjIGo0f0{`0D$>FZc;e9+5UCV{Xep$4z~LChOEs0!DTc_ zL(`>z9ohTp0~+7O!=-tD@V1cP$Zv&RA3OlUHhwFU2N$@0AlMgU*Rj6iep}Tg33Q5M zKjf;EM~N*-qR5|KH?!vtetEm&4bOG>>ch3uBJP$&*_s_k|Zfyzky9MX2!ff&K?T5G3vO;jH1|0ibrC`W2&g&eN z*NlBr_=NfS`GlVAOgWTNfmQASg=$5XPop8zq(lj`W0Ob~$+Se)3@U60c4>Q=3XH(# zQd`??yzs5p>(P?H$b$*Q1fcJC1crT3*rwU@qZ0@8}2bJTKfDiO=n@wJ7EW9Yfpyo-1B2dKh8I6 zjIF3}4`bXl(*Da%3Q&jQEId=kzN-cOvqzQd)z8DvC$21@g{DeuWc1MZ8y+rVs)D=?yxIvE&O}{U;1Q_$u?(aMQ46CMo#kKxMtp% zex{|tq|>}Hf*IwwhGKc=`*K?FG{51v-bWbpnwV&aR=4+lVd^YSuK=S70E5I#+KFRo zZWwV=M8831`hX&@J3Bq98R7MpdI%q)rdtVMI1kR8tQe5+C`dp&L2}XF7lu;DV zD1W8TGgAzYmm5O_Vrx#*GwRB{@rH$cfGvs@o&OyU8rRRd?k$!T8|7DzL$$zeD&<_@ zOK|j+s5=m2!k`cVLxTkteDhPJYqKZjo1!z`=0L)A!7%Rrn{0+RqA_FmvU|aWp!$gE zbaDcW2_(eQ?ji7Sf(<+{2^Eu7-I69B0AhWKsD|L2x}qCkTL15yR;V(uTaIjPPJ6>x zAGKz~_m5yju_Ax;rY%wxsvGf0*z@}kjAG6NViOL@_A5W4`<4K=7u`t2FDW3ma$)z3 z!GunFC0ev&UgW*^P8zNr{!dhzJ|>^CGnXt9S0aiKy0kp63(r?6+&FpGsbhMIoUbrW zY%7G6ZMTgNMmlR&)Z-Ok7C)g;1bgEqs#Pew(9BWTQpS0AQsE9!EcJ;1EL*-9ILdt9 z+H|EhsovAWXTxMr(vam>uCidB`eKXsW>X8{n-*oocuob8CF!mERMp?v9x_Op*W?fx z_sAOGekp*roe%}~_=)$qvc zgae`^%TnKdjcQ{tI9r(Drs@Qo=o4C7ZJu>T0x0{J?`YfW@5-_cL~6vC(PSVC%`WdO zyq5iysfA>PSuvA~p`v*nb@;Rh-i9K5QbzeK|AYPo7c00Gm~dDq z*R!)9c+cbAo86~QdgnOO2t8M|9s-oWdqy3$3~q~h27??wN@&D$#~)v9RYDla`a{L{e)UGhBSB$Hr)L?wgpkv5oD@fRj$@dY$^FlC3oU-%du@ay=D zwwquFq!9X?PFR^QFz?5tKON}9d%rBr^fYK

      =v{Y@-D}5L+2-U#`=IXkCss$c$m)6Z)^3~X3QG7BpY5OMWvA1}k|I~Bg!wTQA+ ze6>Wyok8Wso8HDzP`%`6ls2Qh6l4APs?VUIsYUyCzw2~<24(b(b@WUmmw#r-6Jgn; z%^#ZiRmY{R3UYfTa+7<=dW7hyhh)9h#3bP@kb3%#F8lw=foeCIXq;+*5rW%Pf&}kP zo17IV>j5kMn(apSYUQ?;hi|)bXwiOAymDZ!QHCF)Iqc~szZw~UH7-S=$!FXT~HAeXPkxC4puygj9CG`E)rN zVe`2(2SnkciaPuSCnlF@j<#-EJtz+l6wU($Md#RqhU_0XLVi9H1r4EI1sGsAUTxUq z0WQN*=9nIX=6|#7ZNz@hMEM++$SskD%w??D=G)t(23;}a+rw`rOb~#z;0LB25A1O2 zBvhee&y)r0kuUS0HYoVKPCgNZm=58*#PXLl=_tazp086*${pka^DN9zMYEDln-Z9Z zlJtfE)U zYAjkCAtzNn=FfV`mY-A&!*8hVEO{L@jbOy0P!-{eQ4vmXRqsvqSx47(%c};+sv72b z?{0Gy1zEk4z1gp`3R|vr`Yl-Ryj+6xBVs11+N;+Mm1`;whv|jBEg0pS)b1wH=G(s6 z@ed@IF;|GBX3__DF=qMg2&S4{quq;Ss6>#J1n^KAv>n6a{%2x>8B$uY6)v=&q8u(k zj53;fIC#e~EKH7IpSGoGmjdgFe%Va@mkiBc$P#lOzpy$n(+#*JDf|J z%Qw{Zz+J7Rw}B<2yf2$RbX(r8w?$|c?1RyxyE0U4tRE+@8?YFWz+APGqA5CJnfPb?R2xaeCK)_FN4bihUH8e3 zjp=#MVzYKx>0g`O*q5zyqq6CIfUYCB0x|jJ<4ZC(4k@L(0(dN2NMC`W_XoO9eLY`9 z@#6)Y|N33Fa^joS&rhlGDtAx>u#o&3D=u?)h`Rc{itNSSv_&clF8wGSgY!lVaJ1Ow z2%5^#h6E>C{p(*I##oNzg=UCoBR||7&J7x-Jp7KuM zDfUEJg?%d>dY8f+WUU)_dt%~Ee%k8M>7}{+q+@IdizhQxT67jeFF8Di0;`YjIB(gO zx=o9F^ZxHO3^iI2d}xcR{Sn=}l7G#F^RM2WmGJnMB^KDnP`?B|3@iyy#5ANbl{QL4 za&3nKJm$zf_*YS2>yE&(-pAl%nSzr zg!ukXs+j+BsrkQ_Bf9@t!v9eF+#!P#{afoB&64+G$I?2ZFl&m(nsa|`<#q_1e#e_7Pbr%~1Eq3GL>T_Eancfd5pazAqjbQBt_4s4zCo^%}t+(_$@AJMC>#y5zYrc$n zyAXXGxc9c*rU-Z%`bBS7Zay$~YulUMUeyrH98UdQ-MHL?Js!^xZzO(sI>-0&pgdDU znpY!L^2d$vfrm1u=*MbOI2KJi7TmBaVEcVs+H_SCh{X|`ZSB-GxQ%g%4-)TuS!Q_6 zoembX?*7c_<8}Fj!O_zYOvj}?YbpyUNLXME2TEX=O!{2aP#QCuBHs5)WxgmuQ9BJS zR5K`=vXZ|x*!tu(zo9wV{}8kUn1@|GvhtAl1Uer@8x(QRhwcLU`?AyDq@*8Mn;YZH zo3eDM3mu8VT({|;*qmrNQ;u1QK&Z|mu-Mv_aS4)*jWHc3gxnz8>}G@YaT1Bv-gFpZ zjvDocAFnpF$xA{F16WEb_^>c$=nn3mI~-y#P$Eap9y~Z?A9_+Z8uUdu(;g6Lk&SH} zl^dN0U~ic{S(7KJo2NuffHVD22tIEkY0p{UZ+uy&sg|6 zc$|!k+Gk;@nP)D<$WWz7)qz4!8pf&QH^7WQb8Lv=Vs2UoSjmzr4)`))o_Zh<`Z4qc zB%n9tjGdsHIz9B053re>xt;}@UTnoh>%z8`uD#bo_Q_E0sq93uw!!#dKif8Qsb1LQ z0rrEo2|D;+(5#-=K7`2G^ilRXX-c4c%<1=W!8o7qke~P0Cj5wtWJ)(6 zeAPkOd^!;eJO0X)`h2`ZRxq$+P7(I-v?N!wS}=Wx;@__OW1`O*T>HU5x5~d%mbrsG*-2AF2&Of?150Q|<-$oQ>o3SrSpl$q2Bwo*LORTqg2z4Ohs>w~pJ?wmqOgRkjkU=Q>^lFFsTKVlW~V zN!^FY9hDmpQ;zeI)|(k@h&p#iElPuYL_C^|kvqB|*^_=6UqRFm(?b3^*9jtb;JOnv zR(+gccGzQVHH$k+>4-&{$( z0`txuZBoz+Sz^-aA8WuLGBw(&v+T-sKQ)=M$1@oIR2v1I+RovyH18M%2PlTd1?*0X zKGhVD?U1#Oe9`J)j_l&hmGN3WvbUVnn)t>^<`At4Y4yWtv+WGt|M-LOYA#!Jc-KR( zaMu{-oBk92)6Don_`pP-nM^4Y@LHLP6%qjoJGc&}{vf7`yfy;O=)!LolA;2ga09EJ z;N1i~JNSvH59O6kuKo6$T2KA^=?ke(l;W>xyjpb;87zz)21KzhW>|jNAaprM8Fn>v zoUApw7zF1<>fo(Zzk&8I#Q`I_r;$3bAnXhFK_ub+-7UTR;7P6PoE&EA^9yxG%Z?-R z!xk&+f42EQz7DNM+3Jjgw?U_z6^UJ>1Lv`nz3Q?(XViDK{_E^k=aCtsJw#J&G91Gc z{b9jh+X;|4`|9%^?n&^+1C$#)`|3dbH)HhrZig*@-B)b8Ghmtta2uQ;%Ds}_Js)#` zgnS|i$DTOAaT0+E?0j264oe)esAO*FoO6}UWrm8P z4W&_dMKux_4^p`y+}hSSveHU*&WJ3$-Be-3JQBd8K2!TnKjk!Qm&~Cku$be)2>1Pp~G?yP2w;6iB}b>x$Q8|CxCIC6X3r0 zVsi0bI?4_T4I86%y5mywJ3u*eE7@ zz~;27+wl66EftQQK;9MqbI3C2oPY?@Z>5{_YAwj?9Zla?|f>(;Em>dq9)rOLR8YG3>^B9x}XCYI|CpZ05h za!jL*8<-mxAt}YLRxv@+iHfEVZysRiPTL|=E)ikZhnE60lvoMBW#qPaIHN+QbS+)N zBS9+@=OA7EqR$S*{^u1Xs7-lk~1864O#<6b=9g$ac{ZlosiiJ>4D+|wF zCoB=rJkfAX7Qy749)>+;dJe|y3!}8Q_CwMf1fN#R$g*UwwgK6Rv#+RBLZeTs27ZR` z)p|Am4S$$jX^JAAt~}kIM{be7eXt%`RN>l7357f&HU?sw@z3zkfo?b&o$A;&F>S$> zH6M{ykLPRvjIKDqSo}>|2KU{;Hd_j`gYwU#L9V@LdEPO}y9u~o9NF1loPyShBm{rv zGXHN{S>y7B3JHwLmFqx>$Iz8aboyAO7&-zc#|95md3E|}btT<}TbZrNhp!69*ABPJx{l!EqP$t5ghGQXp@EqY8OQ#{!K3V1dn|bp zk?(=~t7+bz4#Y1E-5^W9rrQU-4N<{eqt*q$6p&O5pL^oETg7fM_$atr!iHtG;w8O) z6n$4sn=0FF+*Qv%$1TAKlwtk^iK0ziu2}om0X?g_8pxSFTn9w_p;_)>`4I?FHK7pk zUlfEg2ZkLM<3#hs!zVr?4`Y6x2*9TKkwYFP3on=c_CWwsN4M1E#6_S&le(qa!+K6K z+!}oK%dyI)Bdpz3gXqJ0G-lFhY~vvOkT8wOcgxgoFYMlcS|Yn0hDjjqnWPFgUHJP^ zw=fHni85Wf1;svIrA`fy*J3Cg%ZgAE(6OK>M0TYM4Uo1H$iN9Cc9o=%C)f(^#?m38 ziVSnbjog3#;F4IBE>iQUusZ{&up33t;BYNVONG(kLRQVEq)4b4j ziojlEpRDQ!nVigN16lMJEP_wY**vj9%)&NO5c+uf1>IeTH_*D3$unRH8Z({ zYlf^-T-(C7cU6!wt8h4j7(ze6YaHClCk}`75tnf~lPRvbLlR?`MmaMNKrLH>DMWZv zv1e1B=uh3^1Mw+6JQG7l9_OPWXOp{>errVOziTE!b6?7H)Cc7#Zk{rTow@3ybb!s2 zeSsq_PiB$*kv=f4D@%c=3_tI@hqIjH)Pmuoq+VCz4W=2^;002rD|AWIY|5c#<|NeOYahs`0?b~Lr z75N+M3%ZBE8chwKwsE|S`ca%a{b{C-mg=E=zFfe}fUsRpv{^7k^YZ)4_=Aizw$Y{I zxxCq)`*%)S-SBV2oXl7xSr=lRDzwv_C!W~X^mrVZ;4}>fq7I`}QlSJgBqfEqBKa0K zdjWh>GEeaZ&SarGsldcQ?tD-lRZmH<0wlMsINuK!=SQ0|XDHz^Qg})b@g{gwC=iis zO7*))VNzoT@lhl0I~x-o^&zNBR{4WZ2XqP~s6k`fEpdZnFEiG8!VeNP`S`jQ7^cxI z%NI)7_+dg7eCd?X63#$tN{|6wUbFldUA+1@W+D3s*NJ*4KOe2e5wf&T9?h5ej!`2< zFWl&3^iNK$dyFHF9h&BVBrL!Z{$Q9GTB#N=ub2n;H^$=z*cY>$1tKz|W>OHBQ5q=q zYxz>qgk5$+QJmHo_CE36duXVqjn=$y|6_cGP3XkXG%{l}A!;=; zig;HL97sQ7Vu_4^ghHiFC4E!kr1bQ{u}# ziO%x>x?dyIfFHwO2oDDR`*=5vdERf!8JPU_NdiGF;5ag#&eR|VfFNb_0p&=0{i@;6 z5fD6NgrF3A=S-K!>^dMxk5TH(;|^HK7|_EZty%qZPw{2SQ|nIp7YW}0VKA#Y6_0(c z89gKxIME3-1%dTaPSTnOlu2ZU8bbD7kI$%y8mniEE+}e*tR59Ev^PhacSv z+3hU%Rjk|WUZjukr1s!%s84zRti-eA$}uBV+Bi+d+i*useOh*`z!WWTJG06nEEO9e)f z=_)iWAUB8$^jE_+uk=t$51sXObzb_$A9Tm@?*JPo>`U*oa=E!zW3$vtHCH&37al!o z4JiTZ`MXVzCelf5KT0#7f-z=)hQc!YHq8-$!5`N&yV4JN(qPMFBKF==b9!5B5#NNA zFZ0g(9tgFkO7wS*A89!eSW_vZ+QLoB5K5}2UNFHJK7lFB;v<4VKZhQFVrti9iIhr| z(tw=>Y1|*^k7X52=nyAgR3(58s`=(qg>1%&ta%R{C!;dg8J7dZA*90vl->uECtzAB z>?}#Zvb;0Y#(#yg(z&c^!=L(VXzCcz3^9UDk1&~d?rX!x|5m-n`B(vZ@;7_(`Nw#k zZdAzA=Wo~8kp4@B8);#O1OgOH;Nd#p%s)zUst0v0avN6c#bwYewWZq*V>2O9S{$~R z@lOH)(rT4(w;HvjCD&Qii24AF zx_}Ql$LPd9zjGv7BdKEET1?@^4_`=2duS*C3C{uq?#tR_AOYv%gSHL4Y3hbz_i8Zg zF1bdM_9grw#a%t57#J9!)%gP3N)4!nHYh)yhiMIv3)U5utIh=QRv|>V8+-* z*>=T6ua!n=bNqE1PY?^bvuZosuo^=UU51*CFZT(LK#$&FoiQWZc)_9fRf_2!gCuMn zY$DXmRj@{Wm)%wALzI}n(B&FzH<(jtDa|vN-gfFAx0f~pVN1RdnZN?yW{etuaP=d} zcwqZ&kCfu}Aj`rW*&ID|%udu{_j1+Lv)u*nm`k7rhB7)}5q_)V#^=&&t@8a(imrL= z?g2roDhQX+GGuT&272ypB)O6pQ}~YX%{>eN+PUCzF4MNL5DHux%Q#60%YEK|ss;$* z8PQ5)PI=U50t2`3g+!Fj_JzRrEl1yg|GxAZAKZ+j{9}3>@MC&Q|DOO7eFv-mOOM#v z{;(si|H=23Uly1VF=+at#x*|-8)=5{7Fr@QxYUmER-?V4BgwjBwYm3;>H3RFGZ~YJ z+}&(0?YWEXcNf03qq-{bI4#{f2FQec|BvqSs+MYTL|o!ZBODcz5-sJaNEf~i9Dhk| z8w10da%QiSz|FQ4eVIa{o=$*1?shhgrX+MCYGxvZ)zr`NfK(KPOC{hu&p3vzo;2vg>4*&7J%qx8}dZQI7sAj+9WE>RASwz950*9ZD9eJ@TQfM@hdB5A7eM{J& z@{)$hg3#?fmJD4yP8jEg;3KUtdZe6F_z(9*_t)D~Pm9fV&sLA;*VAVY@8{Fs=bO(< zUWA+;ueZC;V_kfnZZEHwugm-OYu@jN8W#kFj%?*+m7C2V7`oMo^UZlHHr?0gKXCM( zs&HP@LZ8dpe=Y_Yu3a~$t{=YN?|Hj@zV7a?&X2dZqThRZwXU~5pKj-C2)16+wg=!QF-#wl^!kKw}?eHolA`cF!>_e3$_@B|AghX*Xk34 z$Ie~0rwj^F*ew5p{b{J8?3pe`%61lgDQ4M@#(1^`=9A@$(M|T#O3~@?@pI{}IvTOS zn%?b<`9`Hl}Fqc)2YP5XZIEfa9|X-Kr}l2V^t6! z0$pI;B?qA=%oK4zIatb7PlkpCT~MuOkjgnF3e0#`PGNoAd>sGtL-PoT1$5`B7bq5# zmqLa(!%}>5+H_~dm;E8Ypo@6r$AesJI8GJ(q3q6;Vn;H)shDIg7HJUJeIvaUDI)N@ z4j}a|1rPHs3Th@G9FGW*LV1_T?;>1c*H{aD?|jaUBFcIBYKaT5_~4&F7qlkyi@^^}Xd2Gy6YQm)jwCTq)@hqLlsiTHEI!CgNkL*mMsEIyf1l^#>X(Uq=wy0UIon zWc1CnOJr}yIruOY&HG=0viUO-SM_E3Euj$|oT~`t8QTJbi?H<;?+oO?dr#F`R_4MeMQT3{+==Y++J7R=F1a$F?P&FHQ&2TG(}Ve$37Zgyt1uJS7#U0WxcO+9 z<%V?3-ooJ^gD<-i2O}(@DA#PNKxcU5uTcO8#{qGH7VyZb3^Q3aWLLTX>8+Tr5k7Ja zM(joxfP-dVh%mdI(&$>6SvUe{aJ_@_;3NjQ3L|!oAV|d1=@cWD!zsg+()S<+UqCXY zqbtK*^kk8Wm0ZCsSVx*j5qi~TqQ2Z+(+(;&Am$`N`#jw&0N3l_vmfJ16p~MZAT3#Z z8cizDS^(?aI@`E;^7SW{F}fm8`~Z}eDkx!qoIF*WwoLH8cIR$k$e~Rm2QunTIvK(C zyULpmc1DoUNplp&k?_`Z{lrVcvcqIL*Fr=kjLt6bG^0;+j`xwEA8njf`5gpF6K--s zbp~j^10efhW$KP^ec^ECxp1`A_s~SXCWE89ASYwuN|yvMqhOsX)glNWAO-h=+7TFl z{aPflz)zoatEIH|MEphInHGO&DBmP^XH)wO%pP?XwIsw&RvZtbN3MiH@;Y-66te{#&MR08KP5olFu6 zKhvNRMTVrBSW+fXC(0PmSNQ}2dQHAY8HVY^l@3%W^qwP9+5UOcPXhjvtVDlf*XdkB zgvz@VXYl(T^m%h&AQ>!JC38Txhg#OByQfr|J^Z*(jP!}pk^0B^Q5K&jpJK}@xkGwk z&sLP>c;TQQ|J+(LNNXuW6(y-?O>u0xYy++}W4yYMW?@RM2e8-`xkh%WXJUb>qS!y7 ze_TJ=>}+TUk47|dXA3X*_;2TO(p%S|CMZ|zo57^ewr!$)K;Rv){T)(Iv2*C<-h*Z5 zIr_Vo(w65P;)A(`KJ6k`Y+sbxl^e_9ghkS$#i=$a(B9M4#Dm;=EM(|8pFb3)!Rbr| z%XyZxD;fAmpA#f0EuMQ58Y2hqPXxEcj!^O~^d;LP@z_7bv3!DA@YkrEmPhNr{9Hn` z9DfW%?AF>H^GVF`jE#4UtS zIc;S>Dn{I*6=L_*8q4Zx{Q7O;`sXmTI*e|NPp4t>a3X`k`HY~O4c}a(dA##fAke7P z=5MG$9qyB6i$PP+D76Os!q}g?qJE)X@jw@~VKzA5DyFDc;a7cTt{>J2#~dJBUt(|D z$YqhCZE0+O2z2(x^~)S7<*MGs#0`_535|Miq4YKSwdwfx00Ov;#h@Vkj}Zw+ zON#NBSM{nQ)pb`Gtm&Y!j2BxSvFnA0Jry5AX*ns%m6ecIgb2rbi7=jp_L4Q?vW^t7 zD_I#muW}gj3RG0$ReuXM#$DJ@WU^+vqZFa@wKLVQ0*0%b+m;k+G6gn2Nw8S#HPC4Dh!ElH zQ(l+=R8*>4eyujp$d*skxk1Cv-^S9o+QlA$?~aMo_#KxYXJ%| z6851)2AiY9z`1*{%7{Y9hu@ZdtAoF12a7Yj~y4JW~oqcsL$ z1Bk6d_LX*AorEkS4$+eSnmhHd?NCN6wm zy|iGjFndPhvG?;?j|gzd@f+FfN8#**DKmD|%g5^L`hHy{D}470r}w9a^3w3~?D6ze zrLbEF>(qXR;sy5ceD!KBtuqhD{RmXS!tIf_#5>jw#qm6PN(Z(T588XDQ+o?YKi2+h zjP`GAyt_ThZK7kfl$rwh*@aezFQzx&@$X#Yjx&vrPj9=S8rAspi;U)k1qboRbD8HX zG4q*)4ju@JzoEI+ch)@^L#Q1wGLsN;*_>tmCzr%arF=mSd(xnMreWQ&?5; z4hn0I`KGu#%%dE%IY>OY{e9XVG@Qph1qe`Pqj5y!a9`g9dV`WWS(vr>_&3n)^rK^X ziwmPXbo!jo~}HQ>3KYTX>9((mvT(+Bccl z@~|3BrN8V}7vf`C(ai7L`NH`gcC`X2f0em11#05mB*V}^_9WxQ!9R#S9jeeCLG6YD z$NW9S)C$Me_?xUs-e;ki5bGF2PBbYwZrD3$VBG4cP9Xw4_Z!@z?JAXVL93R9tG?J$ zec#gGDb6Q{$yyBFowfj9w+&H3G*^`aGqkOSQFR!#;J{w^@FW~R$GpF zA1+6>UQ%oZG`+*f>TqsuMfm7k-uTa$)1y#8jgh@H2FN)gWlQhB05byf2wK+4I0eqw zFKmZbCC%F8J>3L3UtiAUS4o+cCQJIUa4@08<~ModM2SV|x4trBSS#Qb0sb>|+`%jkTW{5K{|ct!Yhk489*f1t|#?zowt$ zNV9hziiCCBF(}7h$P|PjB=24)LCRW9TZzf5ioOCu!W1&IR-LEn{Y8bN)_T8A6S-G} zQ_J(Dp7%#qc-^8Ar}=mqh@YcRVS44a1);st-M)_@}5vhI{lq zg0p%5!$hDm-iEbGx4;@WvSB1={7jm5Jp358{xlv*L;Uz&G~Y{Pm7Rb$hUWvN$+7Rc z2LFZWi;;V?kvGdwwiL?f(>s1;^;ZlkQ>@!mF<)d^G6`im$k@mkuCyw^zEZsVDSC-C z&j2N|24BVuIW|@K(B?qNTQ;NlG(EozwQoE5G5Fy3oQ3tB3>Od1?SftS3KW~$zbu)? zrl)H)4k0|4vg=>1eyr%(m3tQJxCk$J=bIBBKviUHm{(>V&C}=DlsK?AT(l?L*Y?fG z2?;Q}OEwH3xfcK`$F6Tq7A&Ji5Xitx33MluN>e2^W^i^F`?wGU zbcRZjd0kpFYY3(_!^NZtSc)I)94FT~BjFdzM&E(fH`daERwx-&$x$-Ag+-TpTK3ZZ z!qh^#+LZ8IO4lyL9%wGFzNDKy9PS5$LBe5dV~nL4rZ}vU36l6mM{^m#gFlY0Pe#TL z{mK7h=9JB&S$U@<=m$H;_}|z$s5*L4+z)n+e$h*0E*u$HNU|D?OLJZM3-u=P$B1ns zM>?9P%U>XK-W52=_+!tmG|95OL9um%YjiQ>y75FA(a zaO!ig^HQ^f2}qfoGZ|Xtx^G=r%5kdG3l(p`$cKzqPo!g)L~Q|Ue0P#t@Yv42P-Gaq z=TVF6o1Fj$5Ji?t@TUKdvUiG(EPflTW20kr(6McI>~yS-E4J;9ZQHihv2Ckj+sUN= z@4T~S=4QU{rq-&uI8`^b*4gK`_wy8%R0)D=(MA4v^b?Z`$Y9sjL752r+8|U8VA&BR zC+W-=(80j%EyiWA%pjg~Q8tml>5Q3C97OB=jVu+y_(@ON?W$+CiYz=k_uzlo4V z^zHufBCMionXchnK~N8;kD|7C3N&Cq2D9j3&O|wcE(-Q@({sl*WAm;JVf8IH92~2R(=|AsWmlFLBUCAAiZy-VEr@TlZmfxG`5q)Qu z4g@j0S#`gNpdaCf@y}$i7q1J7r2S$rDMb!h8Hp3NaNpGVB)w_shx}!EACRN+gqRZG zz+lO5K^N~c$kp%Y?#c-H^L3s-a_(OLD_C+d!gMcBGV@`-$R! zlhEh4LI-7Lf{w>s%g}2a6>6jaXnd+_;Ttoox7&-*WD=mZtPm$d-}hLhjYZ^kwLa)# z7abCGsVJ|ND2?qP8MonOZV|u4^S-A77+2-n?pXqXIq(o#F(` z{jq~X95{hT`g(y44g$L=)WdG6-?GjFxri!FV0;K!l;Sbkj1kMh`&^aZ`K|U{%Eq8C zWVAycv&}1dl2@GO>R(e zlZHe*^UoWdYzwJ4joSJw4QqcD>rf$jZ>@bx3;c{lvkj770_{6>WAF)j8*6TPbpr&k z7VOwR^IYYhdCvULJU3Bc3W299oWAEZTj-J6#?YHOGljL`C0;ffyqJobhPM~OcGJeH zoUhn^5o;Bjk13cirE^>=_dYfvC?Pwg24798uH$!t98>cDd$JirBywDh>XL;PXu)hN zSGAnjfVRJmDaK<}W9I)>D-=|bbAd?4B71PBd^|$Mx8kg}ChFAF!S#1FqC&0HMFBIJ z%+Q1BCD+Q?TzV8ALd@4h@dZFd_R=_a``Nbe`N^J>n^jz#3!u+-) z54PGzXu=;N+;%EsMUzOfk``;uwYpSrr@;9SDHcs){O|n(e(86=)C+A??sR^UC~8@j zlM|+FU8&SBy9%hPHu*Y?Y~<2Ks7;m3tkAkYVcy+Fa9ujGXiVAqPKcL+Lm5pk7Uziea% z7mxqw?rrou6T>fMCU1J_tKKi_E-ghz&c%YuQ{3;TAY`Gl9nw zO1mSDU@H8ziJ^sT{L6@1^W^^v-;E}37ObloCbn=~i0>IiG{RM@P(>;jV`s_&g4nJI z!rsSu{yrFWc>k}0Br{q6ZTh{`3CjU1Llk}@suI|F-mS?$&z(#qL15up`+|{qW7i{T zMjo}tFJCA8*XwWgW!ET@Vp`2P(!|2bj#e*(^i!&jZ_ll6wdyE(D33GBOeCwTZ*=VAq5*~Ycb zql*eUw|u+$ks*0u{_!~1tO-_p@)lR(qgdX)VBV$7p5gvSy`f~`!0CGPICRaC3m+wl633`Qw@o1NkY!vBtQqqRNk>!!jFJ%clZl{zys z(5(VI{-uSs_k{D-OJ0XHTQ-x&Ych)Q#Z9MV_rDe2i`vO1K$*U#L$2l@8^L@U2;o}WgC^t3?6wL zdL+p74ErJ*_nf{u;r}8V?Iq_gve_gh_1Yw4tclDxl$l~FhR;$W3Hy19gn?1DDuz1S zB&NNIE`bul{~J{wPKr7Uac9w^V;>B@_fkc^0Guzb*nEwLq&L&zAKs{(f8h<3rcu@s zdCw_#e9YZHyrG#h1omSA447Dcw^d+~KpsN|G_K!`W1G`2rxB_vH8Gk>emFku>BD2U z1@;6yjSkm5`5q_Xhk&Y*;`|EfcEq;edCDtYEnFBh_E2G4YYYB(WXQ+gC444`vLQH4 zY6~P3om%8hvKj#|a$)4dncb{cz ztC49K)M9W&T4x~KsOP8+z2GOLoikCADm=J-&tuX9pgRr8szfmrOyAob@sB;Yxgq`V z>)#i2r4kkLuZ4sKmU$0imVB!VakY$){yn)%o=>CjL}L4aBEh=0uwWSL1e1S(k%&h2 z3DU-kBzqoM9NsZ7$XuL&q>Mpc!0f{=x?wa#kvze@<=2^hb{kbk96PIQuHaPSM{V|)Fc%j;@Vgls!_ibyjSfNs!QFsA!{?B{v`ryAs>+vp_cH4npF68Qu!5AP^cJj4 z;qSuCpT<>AarxeCqGye^@P7c5h*$HIm5>VqxQvK3BNaOZ!FBzy?y7$hk3vji0OS#X z5t`Bp*~Iei2UV7iFb{AEF4wbeG?awNlZ36=YqAM%Qibr*Vk48> zD%e{G^0_Fm?Y17G*HT&A*Q6T%dPT1Io|l!0K}e}Cga_}VdMLC+@bCow1wij8UjXFR zHuCUBWrJH_$=G|@k`vxBwIU@GWpT=W$+(yM211?S^~BxC321<3tFlv#H`>6l_zG_$ zZF^b4*y;9~tHlO=5)FZ#2R(lVkWNdkmT1z({n0;uJz}u*$7YJs3zw`NklIJOFmiEx zB3qa<^fT8RI!GrsHtKZCMW5PP+L+7IJ`z8##_zzs#Kbfun53~dFU(x0(+2ZC{8xDU zD^m+tH2YuSts|_fT$HFg_DL$#EtVFfm#uFo_+6N}B>L}ru0k_l0u9ViMS<4#&isuI zX0v3CUM@<;l&Yts#AJLT5c@^%-i`Blx!QD@V3J&%P}l0mq<+8CY@|T%1V4>wnTstH z!U0XMKR~3jR!yVfn;**ECOW?VGdQ9P5l_%@%@+<;)BP|@3mzBEobfOW0wpS8IvJ70 zihl)%Qnn}OCAM^E84W*FEmVxdJ@>G88pOolwlH4)bgrO3n?h|iVK;5n}?9hBW7!dY%{;rwRxJQWYKi| zSmJ)Z?2*+od6r%G4jxOMQNAtpxF$JKd4^g3K2(nQ>>o7J=^H{WDmH`FW6-xV4#=iN zvscd;BZRVHhjm(7%hWLQaL!q=7B9CZu_OU zUN77+^QT=oirL_f4!sqoTlE6YCnl_mzuRMlFH55;`5-~g{QjNlYYApw&5PHzJ+1P+ zHM}*w03wfF1s;}S8{#Kv>vVel9Xb#LwhxrA5vPBl6lR2WsKzn_6rwH{I4Y`EYD zv!mMPF9xvKzy>t~;+((8pEWtspzp0$Xk#}@pk$@#2r7l9>A=S;P|M66wEcczWs9lG}#V>>QkI(Y^wAF{{G)1+|_>(uHJtl z+?sk8Uk&E05iHTKC@ET3=5pY^aO3 z=yXcoc0+2i2)?|=S-Dh>0+ge{?i(e}r3m3;Sxan%RE}{Wmm>wP;0sA$w7(Xz(D;qM zEq?WgDm>zmvM^(u1zwm!Y4@A)T8uF3E~4dd&b(%IXwcjJ`5!S#`(L1V=B60pc&H`~ zh;02Rdcq)9U^sQgP^^ItUX4VIYSusXs)j&?5Bf$uKt){QeX5BYM-;+cp=2=V>tuHa zX1E(~OKO5bGg9-I5S+d#?d^WxvXKt3EGi*6ymr;AibZk5J!_@eN=B(xwG^tEhD@*y zCH@x*AJ#0`75?+L zDODi-hh%xwBBF^eUwuAV$2F}!7TN2k%O9PXSnis(x-Aop#>%7guM9UXni?sbJ3W7t zBj`2SQR4we`&~uH*!KRn?|$kS#z72CO_w*dKGO3WlYaTk(S&91D1&E&Zx6 zsjc5Ihj}En_G}o5pz-tmyOeSIw5kzN@!gfa*`%YkwzJJ+jWNloI-z#X0NLoWb41tW zYUXO0y@?;nwpA+so>Zv!<^5Z?&HblOglWkk4h_G5S-0nDT3B3c*R$6ms$ZS%n%bJn z<$@xIx#fJeK0PS)B24P)KwIDC3s!x{ljLc`djaki*+ zwC1+dFeMdJFZ2W7pLh2fS~Li?y|5%KGswlWqz*$(bjB=U4v%M?VCC8gXJkaDPR*ap3Iz%U76%RoBG&FOZ^{m2@W6*$el(1i?IDwu6&%BGF@Js-jz z-ccD<9+q^#Nx4iM_IlU2KItXHKJ6>fl{%yJbDq&4D*V%YS4I}*dQwyBjGcNx+?~sr z?%ljA9oCjyHZYiv%Ju!;K+M>|njIXTu7x7gE3pdQRxO!=W|O2~OOH7J`4;H&e{xIK zWPiRpCkO}-1@!;J!Hki;y^XztuC$!HO^9F zP>%o*TDPL6MY?jB;my?Xz&a~E-3(6p={;6q( z$g>WD967!U{M_)-{(Qb=coa?O|9oHDn>uagdFx&wj2_F5e%*b!95^rD!rFSjdwsut zYkHD06TUH6p~)k6R(CqK|YkO|2u={6#Bj=oF5NG9ojTkiSQ0#&J*EF&idRuNk6Aqa#S zv}XJ^k$c`QoJYjre|Ebnt`lSF$s9P$eDA&{>`NcN*DN|VMlLOl46B#ujz<7jUcYG< zf&UXO)rnh~pRL;8Q4$@1pf|@h*} z|4g*bRSyj(T2H{SX_`8C&)V$ck$ME70Uit)Zp#~_6)BlsT}B~drv^`yp$!bTRfsW9 za(rZAln#SfzYeVQRKCFiUNK(2q)mhT`-Xd3VC62{69Q2Y4Lw^#(uMPgv7dT0Y>l=r zc~+8sA19ud*cwrX9qY3Q10!O~vPy^JDUk}u6AONi<90>0OW=f%oV7uBTQmskRSfp* zV#geNww*0ME@%74pSp4yiamKp91c*dc0};z-Z~?Y*VQ1|JzA?e{}|6?n#$f37V|(0kJ!B2^aI_)tb~b*P*vIXf?3~UAT-c^nCglSUI3fri z{YJO+8P+i;$l%4!0Yr97t`+IwhyBql)P-j%y8L#sYZH=MIkb7>6Z`-q46{ONPl`H>%0y?H7yTpj!PB2WAVJtTd3Pnf`PE&! zfykTp!4M-`yg96M$R0zh;$~0C9+zdm;}WZl>%?kYD({NvTq?s8le7%lVc+^u5e3CV zk^%@M#czD2zmb;T1sCzG_4WbxEZ?nNc0;kE?YGP}){-_jL4QbjUf^^OHy4fJ3l*}c zG(4E%bq&ko{^if6A9P~y)!EYpHb+OzhUOW`J`gB6dl_ojbW0qMSdPffZn7Ws`?l*C z!oCh>Ky+4aZ9iJA0K*Z;j_`<3{KeIjvtEX_E5u}>4zDigl!%`X%qNr!>XFz7&o5~1 zmx5CLc%=ge)CEU)3)`5i)WNjk9Tw}47j7ts?x;rmllqgO^z51Pvf5mqgtW|&bD6gz z&ZY}f2a=82Xfzfp0<7}H@g(k)Su^Q&4f}K|NFs9E5Y8n|GO)>U@3J)x!H!D!EV3^- zvIRv6??x!5C32DkErfy_ZZF*+{J%$a0pl*+80+kk)FE+x9FMQ-Y_1Z%%EK5vd$T8a zww2F~Vo2M7-Ca^vKs+^*9FIdPfOhj8@~}e$-TJvbcI?6{=#DyCMS!~b5RE*(Og8XwSUP86c&|XwONuE<^`Rs9o{ld8;dG(g~U>xti zmK(afn$p~HG8K?38#tn;y6nRS2TZWB*h+?nOR5Iis> zo$`wJA_IS=AbI}V)c&Z>)C?U%W<8OrsaN9>0ep^0UL-}1%K%7)K^-c)xSGCb$8e4C z(uB8@uGD35TS$y3#gJNfeng28JJnQV1R;}RuW+SWz)Z(N!sF?CNE}i=!{Akl$Jtm+mPnz+gg#_N~=9sk9hKDn;{=S zd&0pMPfo&u7>v}t*s#xmiGGHBd&N^3>~E!9R(rxeZcviI1dxmGp4u&x)!vKUQrVvn zZ}>R_F+ls1o8q)c?zP&I;3XyIF;Z-h)?{o_V{HnsX$hQ%$|+{`JcY^hU+<96dhm0P zV%AP2h9Em8Iv=Usfd`tC@&zjsSV)Eylry&R-SI><6GpLF;f&M~1#t8fG-k#^5klJM z$EDh>|0JwbneBLjNTrEn&5{5~&6P?cVTnl_f8S(H*f~whYTy_kyZUy1s-j=E=R2-W zB8>(ID2TV>i6#|1(X}z>9;cRM3~Ov^X60!X;h>5^j%4-3JI9$AHttFQOT`0sTa*U{ zO)Vi!N0Miqdxu!9iXYU6_9}>_FjNo1%*`@dy|83qAN7nX$fpG%ovfzyT>gn7tV-hM zDG;wDC!+-?NUjv;+-m0r7C&w;wb~Ha1g%uZaDJa3Ns700gMUC0F;e(`RGbi+Wl10q zmcZOcWN%1UW&7i2wF)^GhGY94%WuU4?NGC=pc{ZLzw>I29 z@t`M%zJh6FSS<+NngsaN*CiIz4AcfnB~I@bW(`g=ku{UJZr-;VmOi@rJ@lE?^hW8B zzE&IA3YCQF7O2s0L2oOlms>}`M zVfx$l)^kM3s`K7Bs7jwr%E^-+Mhf+KCAkp``{S?9^(d4;YuCPaHkPrBdipur`0qq* z&p3UOsOP( z-P)J{@jZ?r3BKR|CbA3iKn^u=U0-6j>C`_pIkj{=Bp8MNHMybQ3fyTVzN}J*$*~hG z+lKq=kI7Gg1VWohQ96_diia^t*EPcgO&RU>7teR-#bTp_OD$CzWD6;q3rnsp;5OsA zgao?2r@3*Y`3KkW7AFkk(UzO;k0bO@?Y^GXc6`j7xJrj9umm8$i58#4^5zwIz=o46XyuvYG-ugBffMw24hx=V(nK2RmCWLwAUEQ( zY)$n%vm9={v4wP6g39edWRCU1lH9J;b1$B*c(dKFO$84KZ*7Ve9(Dr6)(2Sr2OGn!r;ut88I8+{NJ1jRKBc)77DF2gd%8SvpzR zdi>xB!)UTZF4BNm)^k!=Ha8ik(Emf996HJlF!>f?zXZ3&Ze+&Du&U2ua$7VjmZKL? zIhuAk3+wE$puruZ0fTuayO6ua;lwRK9r~bRW!zdwq25T75lqGAM0YB}vZk!+65{so zH3th?aIbRkL0A(@mSZXlbpt<2c#hxzDZ*YQzB8R8RD{m3a@jIDb!pK+v|Bl7x{9hI zRRfi_k1D;8=YV@dMt|5TIhHxX>eVsNih5Ojz+@`-vQOQb?@sD9W0B}JC1J+Z_qS-baFls!zqCG9n@X03_8wja-yqRyGi9qrg0GsD zG?W_}Bh!r;lbiA=YyLTy?rRAOoQH%!geuyJSQw7p>)r41hHsX6wVt_5(Vlr`xue`s z*QA=ByKCM>c9%^UT(Y9y;{V zEDR=i0gky(aE&mhNP+)SQYi;ozCHM;+ATK~QqcEH_y= z*MFn>PBEkI(S>C(B52m?{iii)7K=8S!18ArB2l8%1MBH*FVM)cqx_}La;hLmGME}a zqIiaJq@|>yGdg>!m>E{JfQ6sm&mKd-FtnL3$!fk(XrZCi3Z}LThP8g9B+8?ziYfzf=OUswEFOq4*(%)q!9-M#gV-l32Fd_#;VO%@-(^vao@b1mtMy01ciHLE!z>!BxMuVVMVQwx8I9}I zBH1peVb~Y<*-5i?&xKS&IjzK>jgzY23*O^y6XZso(ptV(f>8$MQzd{RZuFbtoXPCHV^mU8a- zgYYg+P^w$ot&}Yh|KATc%KJ_8?pOY$ugV%pkDB%`joc9)bNCSo8zQiz!kR^yxw|yW zSLS*&hKyPkmWwyXqqHt)rxo|xyQB zjZ4QWOU($8R|E}BtXcFECG4f7_qMjAQ(u6A#b|Yv%Qq9It z)TZ$g*|P2W$}*{4bc>2^SyRNQ*?DGGHCNkoE?DMmeT8zSaLkvRP>zH}p)I(tJk9a- z%S59P=T>qnDhj0=kz5R}*AEcJTcnQoYGLCE`xhqBMwW9NSGBlfqEdS*s?$z7YR9`N zM=UXWo2Vu&+BJh;s7v;9sWKoj8ZNX^6pb=xd`RAdx|3&DHa&eM$a^ZrDr|%WH~Apf zirzS<%5~L45&U1-vUY+LF@^{qE#gEBOYc2vPH9|WRgc@zehWCxyY_>i0!=GWuZzF0 zJ7cq991coOM9UrdfNl`|R8XmZ^oy9-1qssFUWP9A?^V$_rJ|-%@U_%yC9rju{2ESl zxNQ%?_xQZTaFrj-rv%@E^Yeo`ZqIMX6++(0aAh8SAQ;7y#Y6!WNOBBxlQIP}CS$_D zDg)>DJZ*BP!KiFGrp#u+vURNJPmcKjvP7C+wYw{aX9h(#c^J z2f$-L{*HV2b5by7oTEi=34gpe=H-Grj>p_Xbn!hWE~J2|E-Lqj#_~I*{Q)SVTXVN% zSXHlJ5@TBy(_h~B+_$>U$DR#{tzN1Yu+Gy!JULy?6vDM#GzP$rBU5Z>oA0#lTTJ7Z z1w}$jc~fR4JVTwXMyU*&Za79Vlf@n9C~PC*aF=#N*fAix!l25A&P^*f_y) z37r%H%^qN|FG$^DFx<$Dh9!_S*6LT*W)@ykM^QO@e=o83cihNr46DB1Wwd#58Kpa$ z8FhjaIm{lSH)h6V=4k7-!h?!gY{e_CLP^cTt1VjcZiNxN$1EeL zzhq{Slvu9Q-U}B@j}&UNaYk?-*Gj>PpnMgDkLt~>?Nv=GzCcEfA8F@h6O^K<3#)Y& zXFpJtt_KRA{=aRW21K~AI$B$DR>cwj&$(w+5)_qr8#uDGCL zx+2nU^k9I`x`KCHOG-Bz^aoBfkSf1m5^)HQi4R$q)F?hudx~z=q1k4ws9;4rt!LKL zn-J*F97&OjeiOyt?a*mTRq>}Qfy+k@8kPNSiWV>AU0eFft-(Yr;vhA~@2&0L?x!TV zDH%W6V*mX;#)E?DD}6|H;dl{ch(~949AKdi!iH#YOWto&b`JGY_{5z zP`lZ(PK(D1^gMlvoQTp5+Ir$===KWxYoPg$OWsd%h|Ej}yNdAal9#2D9ZXvIrRH}Wg)r~am8EKpRl)Mb4f zD=Wf5{30?Nb`s{6~Z0>mz1=G;|=+**G=7sH>p4I@V_KrAvs9C@r+p-I=dRFG}&9o;~G93YP!PO!3i zvBYJmZTBAjX)sF2`-z=^BrDJ`X_du>)FOQOqR;%q-FDdX(RF4}A!ZkIQD$0ix#GX8 zw}PRQ8(ZRn(J0D>F90MP*$;2{tReLD%8z@X4^w8Ax}CN6Jn{FIf!{mTQQ{-hc$QjF zGn;D5VcXEy%n6d9xCeGA#LfRU0TCa3+JAGB_&HkL-1U?g0sQ1}ww@>jN`QG^+|q=2 zuN;SDTEm5{iJS#YOvr!_lv3ABSz2;3COd>Q^?*O!Wo)E;cBPgkNI@!wxuskdGo@09`M6YXP@dQ(Y!2H%UE%#6peADK*K;>VNQ6^poo{ld*hrIcxLhP^vWj~Ptv zvF1+Ewy~P|wKxi3c+6zBVjUy>L!8CyRp}mj2VgDunqO(A7Jfj6#Z~nzH)2{h(ffT# zoJBwy&`y-yK^aRcCxc1RtYlLf7(XyzAq;h)ZGKG9vudA0-dnrRhD^RevMt*$*48=? zpsdyESIk?hBzMVY!VRWT5>wpeV#NXE=RSHX;yPc<01{x_8cH)O9ODZpI&#Tgd*ZUk zg?Pv-CE{}dc4Njr4;;3dASXCvjpIDXsA@CQX@xFZbXcFsFsfP$CCBRxxov#}P47d- zGK_Q4wNRpsnfv(OYE347X4U8rADbT1w#p0%lWJX%ws`OTNDFmwQjA4t5+;)8@T{i_ zV9OHO`QyG8L@o?_-&8@sLUp79-jC#vB$FS+$)>6$%>MrRIDcP8E}ZTtO>k$+-CbfN z;XV;?`|hqUHd-1?DQo;OVRoXBPjpFmY0P#QYnO(5?tdodHJ8$%T1;eDe`5D1`2?Wh z79Kci*)np22_IXVPHR*9ZH0C?l;aRRl_C7@k^{}GQE7>{ycNM-{M3{Gw%AE2ztlqa z&z-{<%dJDD5;BkyFyixYfV>14zbVl6{??rBse!|+XNetCC6=-m%`u5X*oc4qoJ(7e}e5YetSM-?XATEuKrNRc7IG8E$Ib9N zxVXPnDgJ7y)zq;p$Cf@nNIKf)ZIGON=JjijpMp+Cyk$*xL!~T+j9(&-2kUrN`yXT1 zDy0e(rxj-tolAe~hUAVeh^Nr;dthtt$IsANV*$Nt2H0sDIjA{y_@@C2N2m;JE5z-7 zWuF(W$mZt8{ea&P35Ij(g1G&9*{-YPNgxe2f>R(||jMdQvB!~+&Hc&gDan+a#+ z2aBYuBHeQ}ZAkp4M_nfw5pfImxyw!#Awd`MV{H-^%Y<>ML@woruD)x!0A;B6(!L`Z zUvj?E9~E@qvPgxabfvFLZpj;VJ})}8O$i88bTs}43mSCpL4!U6dz#<}tOIghMAMognDM^MhllxQv*)dVvrqvwFjbQJ`N0}C$ zXdy0AkN2L9?+k@A!B;a$0QO_Z%48v|?Y?D>Bl06+=F|gI_D<5w7~}{V$NiN zXOsLdfS_L6_zdmo+|o||#r>-tS_skeBg8JsR=OyQC}@Ep5`P?K8iGG!yoymf-S7&& z4*4ksysDIYwGb$um|SJ^%s$2uXQL?11kH5vvtN(dCza1tr%EBpY-B&8kWF&fHrU9P z!@Q~AJQ|#CN8zlvxLOW7NV48NoF_ISgGo+hKjcwMWDf)wNYVR6FVFSFs7m~1>rX(w z44hFD?JUi6uZQU@g&VP9xQxTlyym8Z_=x#cjAqa*lPr8aLFusxkk)oE=SxFypDx3G8Q# zg+q-g`CP3djcq}q;f#EJtc|`9sBoi9TXzRt9<@yB74PvL21bp$V{ifh84zuS7!6MQ zOb3rXhgajEHhABfOwN*G!ygqhEm%P%^KZ(`ywj3GFwhcng(UR3bNv2UGQ~hi`!z!vknEforxF z8aN^-u+>%PtFhx7?ZRYnUHYzV>0!kUPSM{Wt&sDW@^^!82faOC%n+jPS6V zZK4b!7=K(EN3@}FB70Lj9v6>j+x#r=HTz_)S8p{3gD(9vqb-2L$4E8|5Tm{PcXaX>d( zx)-~Jyp$Nv&okxFwP3CG&Rrz4=643}FK&(vaO`buoIl^Le83h$F)ixIkaYW zz^2H*hCFigkz-8V+CP+p!Uq+P^O3vY9}rx?$$y z&JnwnWgk1weQhm{8FTnewp4;I#_dJ)*S9^$Zv!OWU(%{gs^ieqhFco9u5v;e+_v6@ zbe2IH98nS1gYhLJnc}{$^YN!APIZ_wap6UK>iU$|jPb-cp#Rp9p0K)-X(iv^i%Yj5 zT>t8Nk|Tax1gwr>-=5_H@vlN%iV0OKr0#}u@!-1|h|OBdUQ!qh4r5r@If_*wAOxp7 z`NF-ag0L<$CVN^@OE8`k-BbiFR>dqbs3qvBG;P>XO z=L!`mI2UIa|Bh2hiqDcsh)j0YK3HS#t}h%zjN`&`wwZvBT#wk4*X5og4G#J&ggp(; zcf>)GAJOuCzP++7-&>hdp2Fwfji=@7mQu+BYO$+UZ%e~G<&p)8NV21DI>>8Y8F9lO z1dM-;%a`s)YfVP?Yv3HD#O^ z+F6Pyguf>|h+C0il!emS`4|7?;ytytPF_j8z zBDag5!$-?a49zOZ<=g$wh?Oc;MK(v;1v?+{8D-NDfg!s(LM1K|VOyH1La`YS1>eyJ zQFo6+th1p1vOmIlB5rP-$xa#?7;rn!m?* z1(mw!c)ud-T0$&3TBs>ZHsq{on(Et#@JMj>7eUo(S0@=`6^sX#(8~%f<#xXY{iVU3GhgYQO;|Z^v-r0s8IM}X7dHm|1Txtk(|*=) zcSTaD%0dOo!aR7u*t^3=PvrM(CVfJ8k6mV6VctPs`lsx9fL-#n(uBcbp9Rj+tKjs@ zutoDbR27Qq`A{EnR4d4X^!jJ#xClAOJcXjvp_h=5>|$?M59EG2<3`F z7avRkkPhV5iqIoRF5tVFo?V0p8~THaLUsQJC?>SBMbwSMLuVfZ9JU|NJE5qTW~v}= zMeAGhllJmPA;8z}C~rDdB&u^wRG3wN_BV?e%6j`1##6wC(=GK><_lb9wKh|$ZM&Wc zoB;;FLZmLEtgHz1ph9Q#NUd5IQwqRSH<5v1deb$#Lyxukb01rQHS4CI+guKt5f%Xo zxhi_s4wsx5KiKm)3X#OFsLoABmXoDSc|55Q`RWP~s$k`@KM)nv>C z@|&N(Qn(s4JZ43V-KBfRRyyqO@N5n5#d5dfE||@y-I01peB>txOCXj@P&UxI`_U zTtk{~Hxo8~uf6;RGt{o(;=jh%DLBduS(LvM;CV)_NTdS+IoW$_>|2<{H?Gg++=tJB z0EdTAfddit`mHT8zW{!Y#}-+*eYKRG=ia}2oW*fqsk{<*6IPB_-Ef7xv79M^(9E0m z-S>&o9K73rKuG3O4lEelt~|EqbTb-Z$)X4kcN|ZaU=t=#y zdDJBTNuNO*z;YZOqQa)h#zSW<@MQR-HEy?-FJ(33*>XA25+i}I8TSbT<2HQe?<074 zHOnU>T*uP(wbA=`sQv0yU7Fkac{k^zXY42Qo@nu|N~D2!{%&l7MW5LxdykW#N3R02 zC)}%)a+TW=WoDalbBw!O)vu{3s0+F>1l7;w!qia@&60(?>YDMnUjy7 zK0u$3NUg*>^}Hgg_6#uuWq)LGDg9Qpe4S%IhwU5!K35$|+kz*%HD&jS9wijU$)}G6 z9|u+hZ!@)W-nUUj?Lssz8qI%kPyuqJ*Hk2pu3)NN|knEq&% zeh`3P^;!6!i&n#In6e`CY06%S{HSfCzV`RBj_>TX)EI|8qkG+I+W~)Qsywsmy8?Y3 zJm13R*V}603-kngh}?^h+6j1wd2kVdkgqrUG$v( zD0!mL!R6QUN%&}X@(FkdzE6Gs`bL5A(;J&cf!`kj*7r-4guLJByY|?5G#XMxJ#A8S zbQSb(*`OpNz1Dmh-087syCT@|8rcb3pcv_IKjfEaj9sMtI{(V%Gkx83)V~>73I|Mj z@X>w?NCe2}ZjUs3lyLBAFt>X2z7qEvHm}?WMb{S65cKRhS zOwza$a^jjVz6);J`Y^CIh|=n0f`GO(D6NuzJ9uZjB2I$jmSt?uN!~w69uI?t9zS5n zk+c^`)7g@9RHzVQy2ivN*hz;Jse%_No6rMoY?gaY@mWUld64pTTIR$ zYyqieL0i*{G>Vb+;JBliJwtpivv>&d?)*k$vy7czxXjR7ltiU=Obqk0tyjUOda;m^g~QOhXkGKmcZOiv+viOrUSIZ2-J;jL z0lk{>*{*@PO!b0NA69J9uUUdAc#Tp&il0#)=JW-&O%$Z0_`0JramyC4bck)#wb!)e zCg?$~VZ>*cf3AetK}Whi268TWrn~+4>DLGroxYx>(@fFtW+|ao+0wKBILou6Y&JvC z0f*!EjNsg(wv>jfVPWl~a@~UDBlg3|E7TGR+R)y*u22K`jz#}gG1O+shka)Z+**<-;pkcI=j(^@@#R%Ge8{qv3cLnaGC)7 zJVn%N&)X^DQYqw z%A=(>;HFPQ87rO+g3sESE)xR*XWh%#3*$AE9NIA+#u$p- zXK^#Gw=?<(?)7SiDDrY|VkxbcCF>(96W=c-j&ZN?lH+vW!N zpHIOQqYWmYaZ0s`v7)=@I3FxfR(J`_&~?re_9NCciO@7bHdN@@kX-?QEW9{ptOVDs zsq)-`1m*rmicrsvxJpIw>y=6-Y^?>EH{SB?bl&x^cj?yh)8WmDSkdr0n|OdOjjNAl zaLg@6&m(DJ3^LPah zr``SpZ2%)QW_~HamwNDo!JE(xO&*=dbj5%-5zE+pqAO*1>pNzZ*|i%z0Ard|eOPog zyKpIaNXIuv3f?V?sYOwbAK40QJM=(QVr701%pdgr$G1FF_eyk#YtN-!Cf3cfIKuZ8 zVcMF?zcuG7dIV6l=G>KNWods&&yjy~m?f7%b-HGdKNX7Q42KB%z-59d2Z3z+kk)X+ zb@BYbMuSx>x)lr}^;Zxz778P6!*M0%ZT zy-AiAxVLyLM0u_rJsvV^^z?ei7=GVj_%*~JxMOi4leZ{x&lrCE+hU1LrP>@}*E`dA z(oggcA`xol)Lr_7MMV>trTQwjy`EF=Ahw(jN)43$?JWBp+hPv=`c|U-n2sTS5&6n5 z>WT?|_FJ9>IK>MSVZBUAV5fBDW za5JzBVvOvSY8hhF+y5^p9;yesHf+j2SAybsd z6-}2rPaQw4Wq_H_uRxO@4Lferhb>j$=DUNp|5W2$Szh;+cn$ZYyBHuxlND-Zu?UW7 z@->4mtdA*WVn)x%vdRXEr>siWYuhL#7tv8CC{!qf$|j2?ML;CRImBGUA%(MI1LUJg~8aY6^bB+7A8CedX%v*Q#~H1 z3fY+l*AP(oWL~^OD0-ef@(ERcLlHGzUSDt|mEI_4y|s8f9K%J3DZDL*$jQNx7sivm z&L+BZSXol-drk?>C4pO1+I3=UZmOuCej=(pa5%}hKFREK-rjDUMH}q{Us$*VYNdknRG^6Jsr3jrOwePZw*>Y47NwfiUL9INAu>A`^2? z`rrht<LBawj{zEhqWlPVsfh>Q-jav(WuBH@36PPO$U6|BO4 z@E7CL$%k1gY=h^FR8 z47sn7L)N`6+DhUB9F-v53zs|Bt}ndb%&FWP=5DXEi(T#*Ktc_!H|UjGyL?!FP=v`c3$vI4|GJTb2rBO0mngW~qV=x!c7K)?0Nb30VDi zIsLY&ewbJOjw!zgLI;5pr?cb~fE{vo?HHgnNjDcXTey=pkNed5sh}KuTgwriQ&-KW z)fPw-%;u|2y$`7WE-*lq?BC6YqQeBQ`$<_rA8+ypMjt`)Nn_bQz9YID{R=#&;e+ET zrW48urvw399i8BmfUOBCo0Jl2AL5-IqY&Z+zG}V&wUv^pC96poo-b z^M}Kc6PWR%C##}1+(*r8Yg7!&&w3^K#=xDG8S+LS3C%>)`G~uNI=0J=$rEMyca(eG zd$Whug|%fV0mA6%$-%MXD{J+w$;8uz-jj&Y+gGhd1&YwWq8yb8u4ZI+7geg6jPZ@* zC?X`kP;cV0Y-!TNC*z(2T>scop^2yWQTqstSC(>rA=}N*2ZNEU7+z*|MjBiaC2r9} zlkqBOy4tKX#$p$sf4LrS38Ww&j=4l}Lg^*5TPqrKd+6(32l_A^Tg{ z$|ovV`W=0wnGeT0CQSY6+)M=P?1b_jrE`li9EyC)2ETNcb|5ZdyR)Zh-OE{v&WMVl#KO}4i@C}{epOq2O=Bd+B%EuBtmXdrY6qmfwUa;u?6MGD z%;&OovHiHQe#`l>b#i}-sV|3)`~0j5fK=G1J4dBIxxyseVuyn?bcUSG9KbS_&Y3QX z#cn+0OdNntaxvBpQtRYq0Ot=@fhht$c{kt{Y?_v$zu(twSx0lqNf@k~q69Qk4E6_+ z`?07K1!IRlby^X+tY7k}Z#)QFs2n|B9atJJ)|tH60a>kI_Q`x!_4j!D7%j|ICVMz< zclkl-(}9RUQP5*MkhFkAI_Qpltehd*uXIW~{9 zjOBCk6TsK};OGf~ne>lVqUtPTMv|h&O$ucjo z8TTWJ4y~i*Wd#PqJz4BzypBvH2o$_r4i7qriL~oz@x(>Rt)m*Fnu?}9YYHNYen|#=9ES5fO_ttC%OhGFABwL|QYu89QiM>=MA=zZ(q=c$We4^K+1D1b z4AxN=ht-O2g-?zJ9x#))ZSBEHoLV5}q^BwikRp($tP02l8jj)YVx$9NO={PQ-_f?^ z1fTlk&-&F8Az)ob>Zd0#!^g%KWle8SSB7imWb+#$$X+X6?hmit%kvX}0J!w~7XVD| z+E4XF@#!xaz|{)SI&>D2sF?Mm@h!YTfUMsc0-xy*vw7bThClvAL~pqMIgu&3E-R6g zq}MPwRz5sM>^Fc@uyeGx#4J&zOM4ZPT!4Q<#z#c_2MuxMF&J@ba1MV7k87V`agH(q zeAI=KqG5^)cfmn0@(c~JB{i4AuRcQZG;+!#MAUo4T`KM#5?)sN7Q9xKVoeP)napwf ztLB02`Sau2^;?x3BxGo>XWNNVxR2hH5Xl$F?F)$41Zl2bAHhvk+~6C+GYBho1!PGHS&A z#i!3x|1aS8?*F5;akSL=zuM9Nf@TR)mx$S5{mX6h18FerXP{Q!jv2va7(YCX6%P=h z>o=sYH;ZKDKoy1+e{bOb`9d~MQ?Kd>i*A^IW6%{LG=H-r)1JkpcD-ISpRcoKT)t8A zazm2C%yd-VQjXly*@4j0)19%%^GJxSGxD&D4VNg-zB%a`34sUvB zOaRT_sR?hvu{1t@un5UAN-UW4@0QxZBelL+39JgXpYeP)WER6RW5=%|0dbtMZuY$z zg|`)_5+$E66koL{&Us{MmLoE42rUN*MNeBl)M-+0^a6XHu3HG9ieQ3cDHH|M^Jg=F z>C^(GGYv8LVZlOn{hyb!w_`DUb)3hN%D0lR;1sHWB z`TI$a@v>d%2&rt^r1dcw3C^**A9dYT>IR6YM&MvI3~L|x1KJUisuL(c*#%C^RiG8_~Jh!0y#*ZI%3+k#sF+i4J>p|I)vTkH-I9NyQT4Hs<}!h-AYOCJ$? ziRZT+dA^R(<=P?Eh|!^dG^Np`c+q#HbT&H-$_}5w54McNU>ruOlON~5ZKcmgXODV{ z8LxTq6Kjl-&u_^;Dj!1E7Q(xpnUlExx9oL#dMmU}VIfG7D%B1LdPTG?2&srJ`#@{1 zuQLR$Pjlaok7`=9ZbYCw02%_l@f>^0SJ_*w9Bi6W+3!;QpkUeIF*#-Qrrk!rI4Q5kXJ>C+w#~Wy{m=HN9^CI7;?n_qn zqr14}2{)EdcwpjWz{wxg_n+D;#Yf8}{oBo#aMwEuZglkPTSK?$NN(Io1%A0nh(82C zT6Vy%@q-owf+bqP0v1Vh28N2MbG^WZn~UJxE$Mds8V^HIdQ(9rdy;RVDWh*XC)bLDaYfQ8v}Q2Lv_7qniJjwWW95_|t9w$y-p1I1g+bgUU;fnxQTDK^uhE zdCEd>&<%zli=7%{^)f&*<811Y^exNxEAu~wM{4^X*lDoTCFJv1&|)hWrCA&%m15oN z7jHP3G#ApAmlpFm_2w2OFaSfC zs<{Od)tEUrvjEtNQ18SHC5?q(W16){+3nJ^!51|6a@@q2oXk&lg07Kv(rL_QyPZeY z@|qcgyIo((;arU*Y`-SVYtq3JtfWbTd}08E#NGDQ9wE;tARE%! z)!xpg!Ll^4G7PJm&OMD&XA?Wgq>W3Cl4I>aEVh&w^g|+;i13V9_=p1z z7AhA>SwLKZncs|=?|BZ6$=(c9-0G9eOam&uv-a05uLqu<%HjcfuD2snIduWq^JtPg zdTz3Yo30wYG=*gFY9)e3+>T110@M|cTgA)&3nZ%Ya24Fl-AW+Add10mLuXB- z(ee9kxeYO@y~-aIj4aQt*o-UjG?*8egEP9b@nQ!q7r>g+xpRK{H7P^Fxypw%ugnR1 zA^s1hfBmpMc`uW3GA7iP+_f?S&vwW269X0Vj4nDA-9^l=afqPyB+|6?EEPoGRDwy` z<58+xhq-w_>|5(2ERjT+nG>#yopGfdLr~p?w`WhgAX>7f_uO~;B`=i6mXC?Gn9-v=q95OlF<5yPSZc+UUTX0gb_T;IQ?|ru*2)$LjLK6 z%QTDB1`0$JNx>h6IT~5e`A^!$T@<|&*RO<0=2yZ*{ogR?|DS|O&)(|S;NzgA2mt`J zP(rT$Kf}ot3g8d$DG&g_|CypR7_6|}O-QI50j{|g1?{|O6vmX`l76Xmy5 z|0OUSX<0dBu%moy{y;Y4I$v5^XB1{lUtUX@XkwCVukM0uS{FNv2w1M^MfpL7+Bm;_ zza$N21pW!AK_qL#UH1jBn|9E4B+Lrf=}BR>_?gSeX#SdRD9X8nL!Fl)-W0VvxSZDM z)Mz^^1M=@rMt28oYToWi8Q$7{l8q~(P>XA-#(OEEX^FR^lHhXUye9W5`w;pf|Is?H zh|kA}-^9hB`rOpH=AY0OEiG6mol%}(II(a5DV(kIwrZ-3I_c*%Z`tmQ()mWg4vw~= z?%Pl+`6HT7ov9E`=H!n@VvYMDplc0dF%*Ax~-cVD6 z8ngFTfWXb1tgalQJQcMfF$ad<_o2QN{juuuGbx#eX3CcE=}2UBs1O-!deZQ6Cc;!n zXU{qn*}{NP2Pbg`v;!4@P1_)`}+Hfs7p-}$oqjMWwq;Js@gT!kU-mc_d^fl*6(H^ zfT>1Rtv(P@(K|KZ;+`AT37lm1s^!@23gogD76IQivT}uJ-_n-JMnh*+ z;(aqN`81c5C<)kA4foy2I->mhNNe|3!ZsKOM7wQkKGh4I{7Zk(Hl{6@G~H&mOCE@oRG zD=r1XfY{V?WVAJ{qOK39wm@KH)A#hWuh9hwtm&w0MtkTjQ4j!)v1#%F{%@&+B$!jU zw&ryxemN^#{P&G8({VL-@jD$|6yISu-n=9nK09 zq?`}hp~aj`45o66N??XJE+~}C1tE&Zjr9Ru-nMP2j!abdyA&BS&myKtir_HMOyh1g z-K`?Oy2Jg~KI*TaJil1lGheu0%%zkG3r6BezbzNvL3)&r)<>1!B|$xb#OvqinhpS* zY(sPC-2Y~^iEcB!rLG@>A#K3Jq;1dlHZt4X1N+QjlDYeW-bLqQX8WZtMay%w(_sSOEq&DKfrLtfH$w8r?p`VCoe|M6Xn4zg8>d zU+((MVZA4uumYB=1h)2~wnYj+@FJVip=}G5{nSp#GzR7=p4SoL&O4Pbq`5pt`e&6F zDABOGWp$LRySlW#Kf)Q&D0TB=9 zkHxZ`k~PLLfahMH#X?rsZr(w?dg#yG^JY+HWs@L|M$mWfxsCbv8?wd~q-hf>Y@!cg zT+?%NowPUC^9C3e->rG>_J(aK1iclp|9&gHkXRDY)x`>FMpJjPX8dvm8XF`V+uNJRIcWwNDJzo~>##&bdBs`)- zm#=i_sKzdHT8}SxTrWUb4z)WImwG>4j~zxc>AA;`K`r!^dMIu9Cmg}@;R(YEbKgy{jJP7 zq?3R8gvH&tO7%W9l4ON>$a-H8qhpAMUqcIRfvN|Jx29l>L)O3c--o?vI8;7lt0(?3 z2f1Ry2?3WlU1B`D?+H%SnliY-MeuZ#2X**6!PFSYM}7Ub7YUv~jxkA<&+VU5pAz-G zUU7h9?m&zf)(jz~au7YTBz+y&06wz$?E$<95=4kcKo}%*+FXtn9|gvx8=YmxgVVUp zf?!0S=+#!D?HJdTzVAUq+XbbJ);}CaSUI93 z?C(A@%A5lY){as1*v127n>;5kZy4cLMJ`f?IzPk@#^OhG#;XM&OFz|8VTE+^=GHn!VXhhGcTx&54gnwZa16a`w*? zf@0y}haYyMhyv};@R2?;qgD|D0HaNZ>ZD}y3^ub z2}Q_E-G4_xs}r)kjci#XD?WH<2EZZXABSYUOFpBw#RV`7XTPv3bwpOe9lI~|T!L{@ zL--=TIi}QF0+Qy7^nF2^l4ByEeE3VP-7ozgvaZd6mU<{f=BS zqJ37a!snsg;op2Z-M(*GPad7p5FuecF+xXoi0dT)n?g{Sqih>f*TW}{7~R@~&>BLG zX-5A6(!taF9Sn-I$poLDEuPR*&f+nL+LSH65h{;R8Kq+@R13?i48?@C=s$$Z> z4I3~fN`pdS?_%{nf)|QRzLc6PzmViaVbWE&Nw@U`B6mA#*j1VD5qyy&uQmcNgupR&7j4U7*ve1w! z*R7dsLU#ZISD_YGsm&9{w&7E&S*^|KJJ`}&$-GA^XHl8qcL^5-fDi~1HsfcuzV5dz zVz32g_%Qa@W-w*JfT-w#hL%h#M!vp*K1P_Q1^z@oCE4@VAY8on8CJY^*@8&d;}fy= ziS*A0?So;YLg*~-q+{z!I!p9X>`-{CH34MA613(XVKK)8>Ljh?54Y~DKLLbV z_3fKue$r7ap{>8|h>?tO8AI{X#rvE@@a!LkvxG!-DA}0{M70pJIpxyc-vGE8U|;)U zX2b&1$qqem2eA%xlyR@!1_TO6$=NvRKS2K(rV!fG2|AzXSB zt>sPKRoU3E6FH(3l!Pg~tc7c-nO4KL}}JD7}dDJ;rql~dz|24j>m7j9`EtPM(PR!7iCy$-rg9C!O(uij&| zV%n4^Z#c0;ZN8AJQ0@>k$BYBTBdQ$1fd^W~Z6p$^j2krj(P!7Y7^5v_P`oBR65IYy zV!Am$O1a2KwBZZESovDP1oPPKaFk(>rkddc2+K6eX3Dt~&^_G$K_vK3T9TYfYtJ>75$hX^=bz8X%nq?*jRyChK z`=2|<$4{#%h~};56~OnSiN3W?R*x2E=q??dZp(aHF$)zP?|{D*BS~C3y**7n%hf-n zOS=U>)oyy~Pz0tMOJw)WKd%MPJWQ`f2e01GbytHQz&%e#ER;6iOlm9PKi_H=i}tX| z)oneUkC0(^V|Q^$$QV?W9O|WN1W7mfuSKOCAKgY60`FhRpWgAVKh9RY9n;E-4IAE5 z=G8pdE;<%(IRhmvi&SC%up}s2(o*XW zCsn8x5mBmaq|5nGTe_7RxQLbpJOK!#K zyV`P0*(GlmpMPx?vv}>4ut&cuu+<45sVr7i>D7=9HhM_6SL&^A1VO+-TFarjKCz%@ zo&wD(K1C~biRp^R9Opc2_T{q!!XK85j5jR4C>zlIJf7-DL1VTMEkPw39-a z6?FDDZs>%e0V82ocF_f`$J&jaSaFfe0slCzk=X1BBP4W;IgWSBs60oUe0cUqc5 zl!BYkq>2mwvipUwuDg9FX^Mm)VtHz+wgJ`PxGiME@NWK^zD>h>}7Xb)`Z2lq> zGXk&C49b}{Sj=6@yZq=EhFs}s#vj{aU+1ki)ggE$EFulZDfNfiDwMJ=V4oP~({f2tU(#YUw)YhZh6PGoH>ijH$ zU0JSh7lD}_dgaQ)pj=c1Q_Rhf2t?wBV1UtH^GXTLd}sDtqhAAKO~ov*1*$MeHyvwT zYa;2!&&J-sm&d7h0pI**i-Rfs)vwKk_kw=Ob)MC=!e$fia^6oWd*2ei(-tv-zJiIu zVL*^U%*n`D7XU*-K6qRi05sQubwQyYz^aY8$Pg&t4JMaL0hRD$-gVCfd9!aP@rr-c?jD>1; zAQ!G->z~5((B7vtEgX)x(>%?LjA0&CK?3TWv%GPZm~>^2@ve-Dt(lu)Q3s4{zZ@PA7Xv=rv8{ zLno2e_S^5qIbMjx!N#Jd)c1s7A^pzAqMLseZgHXc3S$}R^Vy)k)R5u;k|6t<+SkE3<*v9D7UY1hU&t;Xz6t!H%fP+=re z(5lIDscdL@UNFT(I%Vb9I~~QmlCtupP+dy5R@~bt4nY|*Cq1F*aYiG9E<46i0enQqdGdP-(?c_>xp zVkLQLR+#WmL>sViMrjY(eeT}o%02O#REZViM3pPxRm$%OlDGiXqh!I#zwfyTP*EVn zd*#l8Lg?tTKGQ#m)Iq+^vSe5yYofi&6U3;p!s1aKhwJ}>Dha$utq1e{Ma>u>g+a)I zM1b=Ml+oY&=CzjNRDrz*Ls6GHM2t%6#bw|jSRnbVo$k8-UAirD#V{ZR;$)d3n2c6w z<*hu>Vl7=P4Ed`2N1>!GWx-iQ!~BV)gqevZE&!pDD5iH^bL%+GDkTR^Uyhv3CxEwJ zI4#J_Te|vkSEYm$j2n~8jyY4N4i{WVl1!nAqU4V%;wY!)VRZ|9uji)0VC+!XKdhq0 z#>OF8fr(~P_+#ic*w@DU!44Sd57C_T&rD)56R~7h*mrX9OI}td?bQ4v|>|@2dX3sSamu?sRrs zh*gsXgHTr5FsLtfseo7nR6#KpC6Mn!gT3MRO@8Vyxh^=a+-g9y_F83ko&mG|OKm)C zNUiv%KOH)mN+ln19PW_1pT#U_nD9QK(W5*YI12noPWHYVdjZ%-Ny_wfrxvsYnD^+O z%5Hzk0cVaB4rSkWI41~MFoSoH7DZW>*<{2vK*W-A_gerI89*M(c0WxjB1gEr2f*>z zH-UCsLCUbPBGN^g$zjp6i_kudbiRm|YZasIGsu7Hi<3B^3pB%c)Ajx}tKOh))~H~F z#ioVwL>Y3s!QWG@?I;dP8POer4BOD(pps}J9usc*3+8=uUTxX{%c1yD3DS}9O;A3=U$C+8n<}I$+r`BGX3? z)OrX@jblV48F4g=c6zD5>v>U^Cab0`1HpvV6I7uAKyYigdpc--`8~Q)Ghm=>&nc6{ zPnx=7A($ji6b{n8vtL{s9?J!BlD{|Hyo$TXmxZ4M3tEVhDQhjk9e!G~$;45{lh^U@ zC88J%jL`)U`yc|noXKPd_s!Xf|BmUyM(>fNzC7TuKCYu*$a29w`(~U6j1pK^%L2=p zcWheAF|RN%PoxUPq9u5k;wLJWdgMEzC^*Rz<;pb59Dc|T?LWW{o3}`XuOZLygcs>g zH%bJx8`mms@=_zaQc5>({^JB494AYhu(Ygpy0WBq!r|4a(cWY^CHc&-V0~pJyXD9c zGBb`a3L>wS+ya~PYgSa}v%*Mz;DY|IWWIrAk^|2(|+a_^>*JdkMVP;9>E@- zdqm?l+5%oS*H$C)UoxsBgmXBw8ZQLo=0TG8(|KpHDr9n<^|wJ|-Ol6&(cYSlG(Q1p z9cc+ZWV5}O?Q2NIBAz}kg=nzGPhm}c&pZw#UA-Eg=_ zcQ28ZOfz!cPV)(pdIM0(jr_KyRa?VU^mE1mZU5T?fgR^1ec2D)GQX!zPW?s-8wFDg zkFc`bNG&XK&1q%bYs|wWB@|Cr6*MV)+Pi(zagCRQkgt{i1ZuONLwLxPF=-=ZkuMEX z+y!sE8#F_$T8|ndcz**gkX3>u&z$zCiX~;#2jN^8)aJFLETH6KU`OASdiauPc{Ou- zJqGy@Mve&?KSt>RL5!jl(_X^q5SdJzaPC7KWI5ij27Vt*u++#LNwaF6s^{(uR%{*g zb2jSdn2tlfsjYLvDDFL_xAC}MVl<)TEBsUd*!5Y})Bq>UUDMlnxdUE6q$8}UxcPSahD)0|H*ju}SCDY3u}HKR3Snf0ousU2Xp#4Hxd_0*PB$U;!w5&WIoU5odj z?ez2m8<>@OQeYe3=hE&T+^YJ7 zuOLb{O#tFOTN&tsO1f75l4p`zw#Ru{!o)bL=cC@9p_q@_5<6Ny*uo|!4m{-piElf#*1_Mpm{;kei2MhD5Spzc+#pEIo@<73|O z?K5*_y(FdZ+F(e;ipFAM{ITU#`k4M~bRP&_g#`=^V#QUzhYDvU*j}T3L+a3~2|=1p z!A8nIS(7WpPr8x~(#=ZxSWu*%u|_Cn$wFmyM=hsq_)=KL2VwzUi~+A*uXyWNF$`4k z8dPH%y^_)R_pwX83A#TiN8ZLr=iC9poP%@4 zqJSV=N|i1)aPxTaK4P($wdqwVx|q-uE!&Wj8xxER{-)5n1hScsgv{u32qzjUZ#Lzs z<2?t;z3CBFS(78kt`RYSjZ083DwQjhaTq|tw(F4zn6x6Mnvlij+Xqsq-|Vy)@09|b zawW6uk--;k5h@qu1KD+8RTHM*_xzIPtZ)rh2DHfYtm%?cpdEP`5e;`i zjQion&R)mr4C~?|7iEoy0gQ9adGmAK%~nOo)YoOZC#ko(6P+RE6v);m>Ko%Sb`1oe z^Z=t)rJI+bdjdfJ`~=o#kJ)yQn&m41*KT=C5Bs#{G!0u6nLpt$+#c@pj+00A);6Er z4#B`sJB19oniqR%`op08z}d|(A{-;c8J1pcq7_#t@H>zX!ImoyqbfQx$Zx#N;yI0k z@M=_!yiA24DsU1SZ$nx(f^*MFXx1InB%7fAEOqq9`^>_-Pf&i`IaWvd##Ga*CD~3Y;PNtk4$G-YMJN?$aesW=WZVHyNIU;`)w|H~s)fW&ryx_B{gVZXw$uXB0P&)<`wM{Onk~gz=>Z|PZFW+Gw zn1r$#uKt^4!~2HWHosq_iJwi{g6xT^$ObKV;iFRyrDGo!`BnqgcI!YD znG*``885PrIE~~cZ=PAdH3I@E4&@b$6i1;n=J^NMCrHGvb#LnL&HcZ1x%>r(nrB`{ znM;~ku4r$XfgB|wo6|7*-R1enH=>>n@rpvWyqu1~@Qrf;qO-zan!46w;-NB8cD4qC zoW~WVa>qaxq>25)p4NQ5ZS%ZQ%kt#jGekG~rF7jpu2>e0x%5^m*Y?}+iv1p3qxjV2 z*t6M1xXCWO<>ina2og}u6#lt92t57XncX7&32S0yS~^PwflY8C3)s z2{-KlvGf0}ZS*@(*Cn&jlE9r;uf?_D+ZTX2URrD39FjjeXxgzBHKMn1E&o0!SvB~} zt%s(17r6lzSrts`Y3&-9-6^p%>I_EM9#H5z-ShzBjVKE^V5bAc8@#Af-pveE*j;ig zq-Q9=7L2X!W3xR+V1`uJbjinSg)fs4xJz($U}srGjqW6e3v3P`V77jU=a24l*C=;1 zR3dk-dI+PME!Z?jEUquhLm;%2@r-0yIK%fDy~GYQaDeyKvp|_Da><_^9e#F6ne+}e zBstNys@ISZa-xb0}lSu#oAQk}r_wFr2J$n~3Yn}go&nziR z&4Gd?zBK3L6LOgIX;8C8jZjF=&HyJ|>7N>RQyYr-c?x7$JZH4s2I7h9zVpuq6yaY9 zxlv#dxMqS+1PT1OQAx_DgP4e(pOudm8z0Y)@0FXMx1$kURHgK+aCOS)d=xGAP|rFa zZD^9Z(e!fh3(vUgjE2{qh)%V|sakk9I#0QtiSDkR&$sVp*RPZP`w83#T<^DotFMEP z{Sb80wzZ#6Jvy!L*RPKppRXf0(!(8{pOclHZIoZ9*0;~LcK270j?d5iQI8Jw&(r~N7X~^@AFfq z`c0trtJ)f(4I~rjHoZ+`=7QTct2G`UXpgfDXBM{hom{~CQja|%zvm0U|M>cnX&#LL zoxoonX8{nZ-x|ayi$GFK5+23&Ejg(#4a?)Z1?uGouhXcG4+K?FPZV0RHzK#M>QlEJ z01{HSod_7~Al@J;7L?kysGqq&bK|QI`#qtdTqtcmQ?AD!X?L3Wm2FLc|H`(6IlAWw zv`Yk#D>UKUvRqEk-pa-3E}`7T`LEium>6v0HUU>3=fv`gwwpHxmz*s0nhg>c6*>{S zPN(s6miejz@Z&6p`EG@X+Yh)bbQsIPN^9E6pbC@Se>UO#aU@KOn=1{pY|r-=O)Ec? z4Jkv3U=1waD-U_EQ#4gN@n6LL^6@ck`*mtiv8m2zjgh8`*e&Y((Q+6@p36E{tY5n= z@{iiE%3bWhe18Hcy0$hw|FSQc4H0drRVn{N_vbW7G^t&k=FL0Jny(H4LAM8BOUOMK zTjBCOd6~E(g5QND(%;1(S+0ARhO!;R>~lXv!DJNKuLr@}c3VOxCJ@ zV{LkQtQ5C_Da;qfi~Ip^LEWreCzOCaUdMBHY2UV4*~~G8`%;uU1;(hhAHRd2lY%e; z|Asn}A|&$(isaqaX{r1IHyV-0DmboF_S}Q-Gu|QD&b9}s>2b|6>f&YBnfLWVF#sn- zbhzGs8)iPkao-gyfpT=|euU}vEWlnn(RAoi{|PsRszf9Zl&E^%OMQMXhr3=~7M`sx z!s*5P_9ExiI{BCva}LxD_Ed!m#ML<(z z1M^nOt^2mR(+~?|UW#!0DB=$Bp*-wpxB*kc&;IWvbHGFs>E8ncU5lX%O9p?37H(lU*2YX5Yvvh6Y42V+KisI8Ke zqM#`9Kat_zLyKJW2=A3iO}SCup1T>*e@xsr!{iIOn2sJDJ-oIsSeXx?(XPI@mSxz~ zqBYTJnYot1qcfA9o(yyoaJCn*vh&wy331!DUxn(=P%N4{YJ@mJ$Uun%p(*CRlUV_Ii4jct1XJ96fZFFzuR$HFEwV33507d)`o`Ahzu;(~=r%E5x z;ZOk|<*&4E!eA_Q0@x~x`DG9gyyr}@kRj;;LFs9`*i0W~_7wQ-US@U&3w`G7;g@)N z_JT7%xxRzPL?K>YX%CDxBL%Xk3fq=Wu$vx>W}Jv)s*Y71Z!#>t=k^X}ga6-kLV1UP zR~QzP0ve91k8B0G#sHdTu7SR7u7LzHHREWVxhaHcvW$*r(MF zPZD9EqOQS5j}B9RNfUCn-ia2)K&OoGfQeZZ6Q5~aO9ng*TLhD+p#nt%+$VP=8q0Dpu<3IS-*g@nBt9c`z!8Er29XJ8sd2_`+9_z2RE zeGTLp!gy_Qz86hqFkR&$F)SRp%6F=(p2!PIcTlut@`2iqe~HHOftfz_hZ&n&?|{c~ zgcoGwOORtRr1+gd8}-0SmUoGN$BD#?ZrVxag&Y?p5o;8F(46pwXB((%DQ5mlJhPR~PcI zou8x4HsnkSE#5#ilALBL{wlVBtVrvgFZPjZxK`AT-E&G_`P(Fz zR>v9=;_)0RHDce1+<+dS#2e6q(UCPO!iBWW7oo)aDm7&WJB>hDE?M|neua`qYTl!c zDGkpCOJLqO9|UVE!xyOV%Bj1eomDjeUfy?mDVXrJgkdXfK``BiiTy?Oq_Ao^5$FM~ z2!S_GOE`wb`iDlFk+Ic9Fy7|Ih5@Ru;p7MJ+I>G(fmK-u=h3Rreiom7qZAfa zSkcII^&yafpEstIEs9BjT)I)8?ADZR#mU*Aod2LewnTSOt?KP%=IWgDdPo9`B5D^v zQuQ>cW2HoubqOy$Fcr>GZKp+5(W)QkG!m6>4lf#XXK}=|!R9OaMxw^PDTg5}97L^9 zOeg=~EO_k6>M3|Xbo3SAvuJ_|t0-`}FmSVYX|0I=QE}1 zCkHeG0sX)McmcZ-;{p&P@3?gAl!g61LT-E-Ns?_5GBJd;Chb58>S`_Yk~$f(k}-Qh zoG(4W3-Su5qv<+j{F^Fw{IBqpF|Ilh#+|dWlk-5#t1&vg;!N)1nwgEksb{`u>dN7B ziz#x9+LfD90TAxY>5_bctB=V!Ditku=h;bD@jk$eIBP0!!jrK2az3!J2`{9C+YYN` zZplzAEL<{>b3H!ss47c2T*HE0_d^n_bm!B|4;xL&XxDX$6cW{iNFz6Fki`1+jZJ}T zlA8%b zF-XQk5~}BfeDutL6S%>Ai%VF()8$;nN$f0egs>-3r>z7?Z7V2$Fub(*b!wGsX4;v# zGw?AmxP=l4QICA$XIHo~*zS zRU!B#;D~OQM*&ogzcZwHI%|f+lgXR5&#*K&gaq~`8R^1F^{{Oq-g>C8jl9sN`;V%4 z1pbzWF;~^=+{g+aRb*M^R|3GB4XrRJ;f<}^!+q=^i?Na`f}@V@Ru5}z1&r%=vJ-LK z!Xs>y{0f)9*C42p9VoV}PE|i%7h}%zu*MFH{UnhAI9guZ%B!)aZeLc@oxjAP$=uDZ zRZ}b`zgBos{GAUO1;KZ!n+NiVvCPw{c+nBuKN>{|7wt7Vy2st(iIBueG!2ItRLjMu z0XPe>Ev%6&xchL*7ew<@urhc%(8VN_zRqTNfDy>oUB|Ih8JD3%>kmX^PoV~KJ77(B zZ~?Tv%#A|cuR|TobNHslaZf!_c0A+&W|yh0QIfH)lUEY$-{nd9s}Vi3U-N_sF!u+` z!mkRgHn-O`B2OTY@h)7fd+9P+B2OoaOS0nB0MbfHl4+eoF<@~w@=mAWXg4_RaV=}+ z?ayQnWS7LUD>1ouI!U}tQ7r4^#31^NJQcqxa}Qy0jaM3a@cJ{8`#{AL)B!KV zlYd9$^&nn#;qh-;Op>$-GJ)s{t(>b8y{4P&)~V^K#Y;I;LW3ik?j)Fg|6*(=USd5Q zC)5~N?Yx`1iSKI^I|jl?U}@Ji;@kmh%U2h)yE}0Xc{!)&735s5fI;Hh<=!% zd*P3%^aj*F4%zI@#N~3v=+iu2iWbk)z;s`Fo3K1nV{R22Sc6;ZG&`3gq8aLbU*MES zVt>7M`Y&E~vOJ93J*B`rGCSD(9_;6Rn0TEt*~XkC$yvL`H*w-f6Ms2g{I4)Iz6tql zj=WRKj;C@t0k6Qt3|0djWK1h#G^u9NVH_!@tuDM*7ONp;Aez1ziQ@wt%}KXBRG}Zj zLZ`fwbk)v7suLi<<8l!%^INfIf+6m+lV<2;TSl%2)B6T*t1vRubH0;3T#AVpmdWFJ z0ugV>AaD7XpmfXWUp1wzXur7SUVkSb5f=2>kM|W<%o;VjoR)p4n|L~gr{MqJy2d~o7WA8)Ej!fOP)qj1fmt5%{zO}Qqh%@Qwmq0sgmlb$`XPE2PGWgCbj~ z%eEJ38IERdCz_eL?tnbwFG0GDysX#Uc7NI*CZo3(8+J38q!fzjU&Z$+qS>HwIl`hR z5QQ>c_{Lqg8zqYOT+Rfg`55~bCu+N}Ba|T(j#)8vnr*zs;=BI5JQ^RKWU-&06p{(K zQ8-^E@j4GVAB-pAxayXwe;nkd+jUIA=aH0Vk#(i?`{8>le<=t=gB+^q%+W zsJ`iew{xR#xu6_)i*v?U0 z)FE#?b6I{{_q&OEeE!t{QI@Q^v|EoS@$Tu%z!FWJF2ce)^LfrQ3!Ai}bsTB(F5&~jstcTh9oqwahRdVm z{nep3J9lbmb6qjbBFjwwESZ^XB4PO|*-y~T*Ge%iLA~0`%b337Tcs(`x$Hq{`Ds|8 zU`<0fT3(;BV^^+p4<5IIR)oT`8JsH-H+*2@ARNmDkcQXt(OkP@Zvxh3*k6e3^cU=k z{=Ih8#ghj_zX&Pc;(^UFmL%)Bri9Cgs~An=(M%O6dP^cfr}c(z#=+?x@1svYaWLBM zTwVbx>Py*h0?&GbooHRMpf2Z?QeQ}AM2*4>Fa7}i2w(XCeYS2w_<%;xap3i+;I@Ht zO1>lAMJA;NG_~NSWE~;WKPDj#kt&lXMq{hAybNwAKC?~ftH+lLmT`|~?9ND?bAJ)Zel z!@dpgyp+AEy7v6NuR6EUJyKs@?>JXmw!#re8=gK2D_W=XsuITnFQDW+vi-KvI4A7YazdgoMJZD zBB)(@>;OTBg_nVWYB`ae^`dY-L0;hrf4K2qapb?^%74X~-*~eirp)1$GYKicMD{Ge zn_10%GCJ4Aed5X1#m#O_dNT7yCe!Zh$v?(OZXE0lEv84h{02b~(XArIi-8BV660jhL9nv!^zBp269)Uv4=ch!pu2t zT?(~#7au@~=tf!-rJw7$YY(jd z6gwI+XujsYy_w8?8^x_asok{gf1m#mPAy z%1y@nytHbp3}M~~m}1)DUmdqA#Pj}%;*#)dIu{&aK%A&%!@eeQ`3kS3J5k=oqeses zc#&oa6P8JBnN?M@juo4=me{5(v-T0ESdVNy%P#Ufx_T#>Jd+ywJ-=Lm^{$-|#UuGU zHYc>b7*%rbioJQU*d7(_ycSBbAmdwKa^-jn^~@6LXNCxOe^-}O}_?9N!9#Z7Sd0|(q6u#QFiG8tQ|`d0CL?nIU6fbW$EMhFPL(xtgg zKj}n&tFai8{H;A_V`LJHAGrRJWKXHtLMW?xLDyXnn?YWnD;3Sc2`U9_2RkC-EtdH- zJJvO*ew@k|v8Krxm$EKW<$7Mun9owHR8$&XF@$roU}eIaT>1ODe|rptstqEUK>U`gtl z>^`Q1PWHgjFW3u_>XJQZIPfzR?5`tp{1(oRRy<#^sgVQ7vUitEEjwDW9zE;9{6~2f z@K1CHEWzVYb(UcHEE)@``L!DuPO-T3v=Kf`+o8HIldE}I5F2~x3xL}nDYZGwfE3C^ zU+<5<7vTFEV7IR1Z8PU=iHoS!@=bGH3r@g(* z&g)b2&j&OBnOf^Mr7Gz@`9{+Z2l5S-nyXd6fRy|{mOJL9SYf~qYdPd6B}bUGN_T1U zpK~c9demdoMT57;@9+z(zBd?OY9N@i1o?hQC%vv7q^U~b;`h1$)(e5rzM}I9)5Kpn z0{(Oh%8BhZn)+U5-CT~P z_)$3-a&mCY>rC_|GbrGW?GtmYSYJ+n$;Xk`$)HgO3BHCFD*=pb1EpKe!(Ee@7@*^= zOloJrfWih~o}Wu`o^P|NgSVCq*@iGg;@a*}C$kytvh za~rS&)Ar|?l)sFzd$K_lGwtfmmlH+TNG5{_ zlbV=-68_zk!QNzWaxj(1OY>k&us>I;?FGue`;YgCwP32EC%z;3c+1~KPufIdetV;CrG|OD?zSp%nXr^^ z`E9TZv=p!iusy&K@D!`WCq3K16uJ@SrGBSV;ED5MJwP559e(8!D{DNWY`SEAc-Z@% zCgnOWC)7727_=+G%%U?l9P$1u)Q$xH;ZCsmk9Ok;g13eJfnDxKec%9Li))GNOt3wc z3S52X)o8$05y3(W_x*=4pptLtmc{}~eCZMAyDUEv7|m1%qwvSMDz zMpoxW7Jp|}{?bVFuK0o`=8ZLO1RHF}dkdAfK|BM06dr2@D=Xqdt^c`I0#yDm{wDWl zFP2y4f+J^gVh1ki^F?>WyFr}dR9_v_4-~H$Hj%L}2F))&bLJLlHa(p03IaNMEs)rsG}B9;^^wBMRSaKs z-Fc=FIylhg^^3>nmDWhvc3VZ|N`?#k1>7==R5k}@mP2YgI*ewTH@7@Y)Hu?-tY%`1 zy)q9Gn>)Er6wf#Ru>6hrV|+{PchIUFXr%+)rkc5|f1+x;#v6l6(NiX{{H}%eQs=Oi zSrezB=b^KfA_RdxaAnK z8O$4@f*?UMd}zVapl(4QUSYpZ;bT+a$dEuBFvhaiszR;oRj^jr-n3(|vzlO!w*7fc z>lU|5O-nB;X#bKqn_rsH>({B^5Mzk1?(NLZ7_Be)a%K^}q3W(k0dUUi)r7s!#_p z|J<%R$jWR~PCL3Mn%vRgLqEYjJh=NDMzr~vxKC)*&y?Tt7?0O+F-%*%yFj1xFX@%v zea%VoPieSjx&Ql>;sTR?B1=Ml)c()&Q-EdXrgjz2>+R|N;xTX>%j3Sc(MK9SoxMkT z^kL_@|Jmc{MHh|M|I5(xxbvm2b~WN~hvuiZk$iZM@rw!~=V4?uTK&-iW&@x2=Tr^u z-opOKMJ20W<}u`IXWDZESnPZFwq56;GgL0j%G=L=(>Y`=?%QR~G=t)8*XQ#6UWQ&G zR=?=$tmtCcu0`*0{t0OFC)UTMd(HB#i0_5{Z`@?m!P^ti>L~Zq6WvkK=&G%x+S+IRZDejjo?IR+Tuu@XNF9e1H1Pg_QsKfy3O9HM6yy3M;{nA=c`Vv*5$QMh3e}~6_dyr(3$tF zm2&7zr9@lEer_Xmx2jsX%Y$I(CU1wMBY`HpQ^_tAI^sCOtu782eK>Ny zIXeWwLv`$92DWS1Ci$CvE7q43hlp@6$&$luz+FMsFi2rsMQ| z`Y$q99dn(`(A;oisZ)WH(>)q3k$Ab^bvEQ}X|QGsypQwSc~PeL^7X}^ora!S7nnQ| zPTv`=&(aNhdIb%~!a>IP(_~p2_<2SHK~pgC^#$GR1}@x(h1NH5OVdKD#5NZEA-&8u z1=PV{w0khyn2$Un`T+uujC^vCiFb}#mhrlRIn2c4ui->*DE6gzvt=IC$gm?9YG@W? zP~T*&luALepEEC7frvBVPGd{J(5^MTb9nC(T^XX0D9v8eMo5@n|Dv=uQ71a<%*J3d z?p{9AsKd~n9L)Ht+GJRu;Z*23FM^E~^iNb)#c)l6Gp^ zxix$?9}y>%((w!WwmH%pIQz$SHQ*eApCzPSt?$3y!;5pi-K3_*@tg+x6uw!>Lfy8qjU~nE(DURHGqBUn4)$(I5XLXFV?z^{K$MQA1 z$%=K@jkxaf2wk9AGO-n6B~KDNug_^?)%`rxl%mSExWpPRr(7K%vk-jzq1{c?a|zSUlg77c7egso6IAb#X_&2*Ta7zO3xb-&gMf=hd&O#uc>f8nc)v$Zz$Uh@@7sM z4X94w{OW56`>N?;`3kFmpUk$ev$O@Gr%~k-s}r@HztrHY`A`r6xiyRG-?&MOdy*&q zTp=kd17O7?iIP!^}U6&}9+N#ec-=1WHnC!v$Z^7yb@F(S7}Z;GuDkTz<$L z|Kk2BR+tOV>HhG8^_{HrYeCJ5Z%h?d^<30WkJml}VnSZ-3olI-_NdrhKg{EBPF0KT zib=MD4{#<1M4G^s1I67+G`KB7*`FWkZ$A9@Dqjde3e^Sn#@AOmv_MviP zZq?0_{y4GN=x0kCKpKEsoX62()_Bj{@(ysxA>9m8$7)dG^jq&;!qqvZc78{13!*<; z=DJ-I1_HE*PVJaN8@Pw#u1Vp?E5)I+xEOK=KZ%#tb-E9I%8UDruyr)m`btZ zmdGEv?wbomU9-A9$2o!w0djdh!MNtLq(iiOMFb795x`rnc%ez>H&xwW`iuzh!Z9|+ z2k^i>T-^yQ8pKv+b$LE$EUqmW6mh8*nyUc>mY1!19@()*d!LmRkmvX0L1 zTp?kE#Eh8zmCv`$ZAw=^pglas*Ma}oGYnVoFTvQj?EhaE2%*6x5#Xmw|38m z#zH1~nexqV5;5*M50%m;Jl4!WXc3%RyhQ*@Er^Xozm(Z72RG;B^;%r><9UQ>8Cfv% zEDZ>yK}0rhvF(7KzI46sOD8(Q7k-nuVo^1##a4@>Q`j_H zZxBFtk$QO%7bzzQq{s;ng&c*}lO|J&+f-+R9M}8Q?d-`h3oZ9X! zn-p1@XZBa1T&cp2>tXKaee#CB*Rvw5hojWHj`G?ZOQ@(k0EtEgz+<(~uL~&>RF5S- zhhQHDpl*Poup&Y%fVfC+whF8;(Hj=0DH1dw2Tab37jn4(a4HQ9z=pI(4vA`S8bO6x z9fAeA67eN8KeF$xugea=V-8@Z1t6d%S?x}MWnUFJy%!dN1E-rKcMu>oV0>8tm%`4) z187JTI5;2W1~`z8^t??tAHQ5|*8>KaCoyZOG|4+1VYs_=H3Sg1 zH=Y4eC`7hdoM;V52LPb_ zpUC;P*8dTv{?(eJbFle;NdaDIYCA8EA^ElVixR^~L>x%338PBFfEdxK3Q%NkSMoYK z{IVNzMN^xYm5}IPKc5%3nG=to$-MEN&v=Fs%--4bUmjiJu6L}>v{=KKtRhdbkO~IQ zeLYagok__TQQ)*|${ZL`Z^=RzX>vxS*mqfA0?Sw_3jTDU2?DqKEd%W{7Asc>j%Hv% zVhjfY_~Z<&3W*X0?BV!$taEeEo$;WIp-d!%$1~=YBN7E3?m=SD)i!8phz~B(@Obbj#~g7&|sA?#fCG)EP4{LG;|bvQVGmH zjlmBJ?p9%AvXa$<^POjfOHlBmWUDm!G#q8t&>kCXovRRjkF2t{+^z81w`oM5G-)yWb<{w706rnsS+UMk)C>&#>X zi!#MR1vD{u>84zNBD&DRg+iFabAk5aN-g$CvLYx%52y_clIAIDN~;_Bk~`aEX8N$14yj)9?l;Pdd|5P{DJ7=USbQI-Bs$|CGduK}<3lQ)l)I{J1?#14i<{3d_h(FECx8(g7i_6vhGh zC%7-IS~F3vP0UTNtxoU_a$@lMI(N6L-K^B$NI?#M%6%qoVJj+sgpr^T0PzIo-S&q! z*%B*~7KyEy8AeS2PSTq^OmyO&#&L7nbhk+cw58J%YK&HU9ki2ko;h{&)#8uWpRNad z3qMW^CdZ&nl0W~3HD4ag9hk1i4K-048v13M5^AyoqA^bZP=D%Jy zTgB~XN|j>fpro&;}>ONdJfyQwDk;BDd~rJ_Pt%kMLR})I-Nv!MY^i8~GI`Ynkj4 zZ|#C*PB5V=prC|ux3ZwZNK1f}+v6 z@k7o;_WKs1pY~Y;7<(g$fttp;S!9NWAJG_$n>eSE2;a(JYMP z5$)f*yVJ`P+}=-8i)6zYIC?^nJN*eZ=^M!4%J!Tc&2#XE4zhjB6RU-aZY3w7|Di%V za;q8+(v3=bZlm99rn4Fo%})xi&is*pk2uknxJ;4C&%`!*#&7 zfPX3H+`aG_K(@lexiizzveN9^)4dfyJ^+T@QQ+-Z@aU!i^;OodWJBx8gxbn(gJul6 z51J9r3;B*0Xk;C3uC<{mHz08W9Ulg1v%wOl56fH^V5MT~M!iw)D4Hu)87-k8RgKlk z(xjH=rTG(1T~JFIPnn2rb4@O~FM^n%A|N=Mt3r0|5XlylHA=WbeDtDaLX{Eohk)y6 zlIxY^>Smo*N0Nz`mCYb^dX87Ja*Jl+TZ4tKfSy4T`z&{qyS3a7Nw~(38rBPNN`y-D~_0eZsYJrQQM9MLnMN6q_DQWcHmNI1#3j$8=?!6A}{sNw7^Q_EaSUI;f9#{-5Os z>L*_ob|mAwB@E{MkAjauWwf_pRnJT1?^;ZoQWGSNY<5J0qH5DNiMo9w!J#H?$CCySw3?3ks?j9-GCwD zTsHqH6=^G{^YvH=91UG*N^|?=cD4wQIbk#Xi6$rYO{UFbII0{Y_m@9hWKEE74flC> zPB1c8P8(rlbDQ^RPNv<)%51XdS*F${%ZyT8j6IIgd5bK>AjUVW8b2Fzi5Q02c5X}i z?$=k(m99BWS*`Z9rUz>lwmDJ6Zw0J9crB@wkqwvy_R&OUvM&rLyJv@%mKV1?4y&sk zwQj+qXD4DwPCMu#V@a8#TTy1W$+az#Yfep~u$O;rVT2zs#F=_n390lgE->1`oQtjJ zZ?7c4OaIqv0ic7GnzO?AovT1C4FB;VN*oX)7{*;Xnc2nFo z$N6^HSZ_t!Yrdt7jqdRNHgf488k1^$M~`!!-J~{3?rjDhXIU#vkD|#Pj5=coOSP%= zTu>mVIu#sW3-^LMdUjUSF~Q6%Krd@;yQbpEgwp$IZh?&Txgj~=}IiO z_UM}s&3^Lxaa23uTmx}<-6WEbEg_Sy@^+a&t6>Fk>yAewELOA~BH!I!uS#7f$Ahk+EhNNdDF=!86h3}O<&om3%iOVa_5o{ypHvzPF2WUUQWO$cHQy|n z_HqQ0^p`mpxrjc#Hg;)o>iVx2f$d`^S<RHqKlNh}I9KKJ_+oRX9)*WfTXQ=9SrD-en9_wZLe}i z7=-p)+bhum0I>c~wf+AQ-mtg`@bE1UyYXS@Z-Dj%gXz|KRtbYFK)hkysXy#(t+OI zcHCcHvO;+_-B!|b$;BPJ^Xsse3=%R&;5LS=B>8!v-$UYD7#;X4R_{N_$~d+XzJQe&4x`6 zerEToe35;>)veFWN>}8Loj}IULfw0E@%yW(&Q_dszO~!56a4t`^UqqZC;0m_95hz$ zD9++f?_8jhpuHM8XXmY^jgZSbuG@boGH+r)rANGnnzNg%|}hQP8I*sSqD zN@8dNbK?|f0!E`+d%?kCFz1fxg7vM{A5~6$Sm0s_2)kt?8(Z{g+)sV9MD8egC)S(H zXiY2htpMS|Vo0Bt0rQGl?HGbGq;|3CYO8ymI$|-T+ISBajv^b-j9ZmrO~6Ieo2ch# zZeJ*8@Ph`_n@oaj93elB_gF~~u%`a{adgH4MdONei2!48yRauL{>o7)9|esg^_e~| zwFB>lXOTuWR2nOnVS1r(hQQ&PWem?DF#{Ojl-6i@WpE!b7>upS0bmHj#^8wLA@u$0 z*vfb;-|p|&g4+EQtXoUP;@Cjs*lWgeAdf&8RYnU13+G0;-uOytQ5h(nCJ7+~EKa|mByJyfQfP>a83c!6NEhih4s6!R zn#N6n=Mat*3#Jodxt`&^%hb;>#>tI#VTaLzm%6zIcw zkYiI+6FPI|%#D`yv8`4>N{{ELc~d&c)~ck<+S@VyyEOswV_VUmR5X>)z^N7bn~ z{Z;s5?rVG)!U7rEIVm%DQXoSsI4oHy+Ik$LK|Zx zcrG7WX~J0pst+nrUreB17j!%+RJ?ngIljoRhZAuHvY%spp^z%k7P~k6gZU zp^~KEYPS+!Rz+?>2w3C9*Ctd@R8?P(Q#1q%q4iLUoTXivv(-BTQC2%K=)e`_Ks?1n<>Qd zPmJK;fTxngAGGQ$MkI*sc_bVapr4}e3c$tF)C^LzlQ8J#MK+II>sX!$RW-77C&(_> zCsru7l>KK_bxQg+0y>~^c|g$oFZMUV=(NpPGzKThWjTR;Udb$@BD>>y%J7@P%Uxg4 z7e#DP2x^as5G+OvT7QveN~s%pu(DQIfJAox3}IZGxVyOYA@vq(>kD9HrC!_^+Gwe7 zV+F>LV*vs&&rt;m30Qu4A0YyPm=XN8d?iyr!6p=pk>GI-1P~?s42wzH4aO& zI0m*O1iBMEI|IgKx=@HXHU#dxTWCk=%ldY}0V5diD1o-~M$*hQ0T1171vLzy*&e(Q z3k86{yC!WyBo&Ti5{8iaifZUedoYn8#mLoVN}UOj{DFDSWR5n0OPqc>#S46h=rU#6 zl*T^Pz&;$;3oFcspoqRk`lH3USkb@!>OO+M!*)(1q)81J12WPPm{Vb6yP7==1RPjH z@d?}d0?~d|#?GgqBxZ-&Ta1X=2mb8{TKfjIS2=qpsb1F=`p@tLS+6!GIu)|ASXpsJ z*u4N^GxaiD$dah8K;Lce3KK~#BCUQZH@rw(L5f;1g$3$c=FxKZ9B7u$m5~wo^pEum zP{gu;^1QeU81j+;X$*iNO(`;+>oPEinv}H{ognNIOps9khnI24yfInBFosCTI&G!= zScOcznV^mDz6_!y!^k82Rn-KNC4-pErO&?FT?fRD3w|`CQIxgK+N221N`#cmP?0uz+H@J~`M8)(b zEj1Itv$W7%wz~R`{1xx$sN>4R9Zg(nfN;r|vEn1JqYEmO@38{#Q+5X=C=e^cBTepW z43SOuUsRdZFqGdcyhAQm{%3Z`$c3ByW@64b3X#ADU2ZIhOhH`^SFI9C3|3{vwhaLg z$Xa?V#E}>-e7Kcxi6&z?g`ijh$d#0JK*j(plU^=@eY(plM<8HL)0-t^JU~E~)1O&j zI!L#zore>_*Z@7&&JNJf)zsZ^DMv4{9XmpCd@+9;Mx~Q@0ep2`hxqncX?0w|@4avV z!Q)vzg@8X@5?{v_vUT4}RMk%#Nv^6E(VGXBo@bRR^p6#-Zyj%m^^5Xl24a>TUY*`^?RvgRrZ zPHXg7CSTW=SKgFI1GSA?+U|i=@+>V+6fn6+=h4d=9wtE;4Zn5A42Lm}M>4MX@=y?@ z5lMMWW`7(dsOY9F%<>fop`xr-Sdbtc4!NS7ZfD|P7SPB#ZjaVSgSbi6u($T0g#uYo z>WU~@lflT!-6)R>4yix;Bt%M(RaTMoN<~(#+&3KM6is2V@KtUofFmONohvSpnc*nb zVSmYcazO_!=9Ap_DJzR5%|{KPAXFq9x)Y?Rx3&2}Z%FtOr4>mtFhoRjY7)PlUi|-i z5gzTnmoxwi0I(PQ{~Zt`<`hcAC+<+rECwH_>aB#Q!B zBpJ4p{QIjY(_fT|s@T!{V)AkPW%&vIl3XfT6=5YW;i5miFKJn0ZfHp7r!3cv%lEPu zGdh5jPFMCdsol@K7*ba&RjZFjwezNjV8=*ZcCK1A-pEo9A$9CfA%Dfa*#3rgEaAtZ zKz`AZO%k+*a!t>*MC(Xv1v-FskHK$TPv}XsVCPD`?wjz{p+D3SH*dEg3WWc7))9ZT zK0)Q?NI5Tg(0v^!ElkDWA+N6Vo<0N`!LYcpEz6fc_%6c}o^>{M$9Q@(Kh5z5*nSee zKUOb#9Z99Vy4r@@Uy}Ou=h2lge@>{U2T98WUl77 zJs43u-UJj9UbC0t_Sk+?*1YjLVN!aL3%1i?Jt;q$z$b=9n;lXQ$4g*bG z4_1WGY7^F^iu*;F>nv(DQR)xf{ZGGeA?N#C*+4kBzXk2 zo-*#D#%ZH9#tll+<1=oV9;X^CU_hjvbo4>tgNOa)%AnW=Izoht1aJf&cplKsVsq8p z3&z)forC7}(X<6HjcMEHR>Q#9S7(?idSP%sG#!9JKHOns`nR&gv5UuXS7QBF(8txD zi#sxSqhZCocHc*W2mmHi%fu4`a*DS!xLuT`YPfGks_NUJsbcdh2q9QpTL#_iAd~@c% zItBVvXfh^y2u_IV57Nh#GmHC@JpXo22tc6;Ms*e4TjWk-m{zk!U5$wh~;UT!{9Z*ZRu z1|$_Bfk;A{8bBmQ6Nu61>yGFZq1YCY>Ny}zT;`_HExvy$`(YA`S3&=j2w=3pyySDy zOzkM67cte&xb1Tr7k0~~L8>H@wlL12u}w!nJR;Rjv$B6+$g~2UVm5o4(&+(Nygw=q zez7PmZ~_N96CTo8%lNWVbC$S7!@s4wfkzzDTmK=kg@X;_4ckSLEC=I)_}W(qY|o=t zn<76E0{MK?!vrz1RJZpn2VD^AOSBoEfJmx|GZ@_mk@LLKBZ$U1&BsOI7BS7-L6V!+ z@N4Eml29bb!3t*-^V*>>BtodA!FD&+nao!hY6L8 zpGcK0V+vpqm-zWjjcV;hotj1xrR#YO^DUE}%{bXwa;B;GQR z4Md+9K>e$U?=$V&ZfZKk8cFb3`?Td2iv z2|N|Nen})Th46$x#91-7+7YW8()6)wTD{KQ+nBZUVzZ}oZS-|!@cnFFN)IF?yHn2s zf>d>7)r0j+y;11IKNIIAHbP`-Jof(Pa zY7!pPVO-yy%bVro3$7&FJL;jxBaRdB$k&kfbV}T$H;mliot}J%d2Q{zwG2Mo!_mXB z;!enKQ+qNgcr_5>rxytg9W868W@c{5&tS6%O|Wy@Xmj8Y-iy{AD`GJnFBb{|Dt6e;;5F@poy}OPCpb&`-dU>&YI&~&Hlb*&0`CvNuE?K3@K74W^Jp_$b!y(Dc8 z4^4(Q+7~;(j%8lcelCIyJ8H#7G3h%(S*XT>18MX#j&{n1>OE6)r3o^-CpPTeVfj7D5y?|<|LZZ7dc#r-loaZu+5EU1K!NDJYb)F zOd`G7pMWh}Lp@3Bidya!tl4H#7>^r7u+89Mr0E*dI)TeG{EsT5SZ9*-vRd_s6JJDG z+EJXoNZyFFE^S5YY{Z;2fEjtOQ&J)qC0Ty&91PTZDo@GUqqQL=C+zn**z>`J;38%5 z{f{csX3H{!p(kg7{#~32+1DLMIFd%AwKKQncD+5~skA4yK7&>`OCNu7)Q+9Qfb@?k z^GuBfVawF%N=U2tH-*$|28b8(f=q{}pSHMA9z-SGqM|>WQ6-P|ybFhM`G_ED>y#PB z40#{i5Qe;@?E@leoyh2}>fE68qi^~?(70m{xNRo{=RG{wh|AT^8r_QZGjur1O~N*iiq%G9n+n@WB+yznwN=6EF9WHWd(J(Gct&ek9!@ zLR-0_^;9`4Z8aNA(TH#+;M)npF3NtI_JF0;g8ZzqROxa`E#UW3umxQv5z#&`=}Y!K{Ug;0`U%G!ke+u z6k_6AzUyC8VWl@@++P3*FW4w=6mLy$Qt0fZJ)jn zoi;b{HdQ7)`~HyMq|ppMsUYZR(T)O?YXu5;?-mjKG=!2Bmf~Zkk`mls_*rhgue%$; z4}9z3X`stJ7>wt6d9HJMC;k{ii5h;7;p|z}d+qQejA6voI)}(>QkweW%!Jv#9OA+; zO6%y8KTeur&=)sI3yBsRL4WERGU*3b&AVyCsOlO&k@4-1ttS*n{=s5+RfZBD6G>^f z1I9-0Ra>MSh(_&rNm?E99t8lRm-_8&xn#6|2T?@|%a08-6V#BicND74Qzj1{)VsJ0 zS2s^;)M{h4=~UNr2LnQ0{=9+FG)OuFbmk`IqPUErT!?@e0fayLZ)*MwvZx>GARhUq zLx$xI#=ViIq21!1<+JRF2=r9Y-K$SKcvKPDd}E^7U)n=Hx@ZY!Z||26RiN;YQsnhv~l| z1U{B*I$Z+%*P&=-4d%*m9r3G3f5RDhtz!z0>ToS$LzZFnbGE&1Ts5{JbhCYMaUUBOs2Cj*5v+ z*g>Q^bSimuGcsUC8>-tN)R1Z~nGz?*>=n@T7qe02n1ygAAhl>3-wDy zrO|TgEO$*2RzIA-=gEgrXEV3RG=@4w%R~Q!GU{3vGa=ONgzucw&`u(Atq7Ka=G4X2 z7ocHk7p^NtpZGFDl;``4WsEOL_PtZ&3@qZc9-&^)no7A>GD81-U^}QNIn~K_ghV7w zx{75CS)?*3^GysER1tD?~n4A~g{U}2pi0Nc8e=m># z{%pJ4cPM2JJH+@qJ@F0oj20CXVJ4}l8IiTYHoraDBD;`2>7MO#B5UnNLL=}9i;Y6& z=GViwoe7BY4nWnx?nJfN+#)QyEz~pyDY(>pO7}1)TI*&m{~mK_t}o@irQ*pljH~gs z#k1Go{}XUSdYziIl?Ne-V%g|!BOVqupd*yaw^#P$kw|^!>$)3rst8qRtbw=aZnp&Z zGGvx$bP&}y*IUK4qxPgR=ijI1#uBl`o5{aYQU@QgGAZJjAd)}NzYEKr*Q&Ybg6n># zWp5TpG>}CMkOZe^5 zmXqx)in!v*)l+*dUQh!T7c)*~Y-Zfl^8~z}bVa;Q-q40B`Kb(|n#i`N*72(qaUu!% zua@dRwUob2S#T++008H5008v=&CvXRm&4K4%D}2}e?OL~U5Fk<;$ucKu5WLCz&r6AUvwJ|%kd@!pV#bD7%x<-_9D=kbDp?rb?dQ* z({Y&o$f7DaXbxo!Gws9ZiaCrx_an2Z*M)tr_`WKhi;N&rNg2@rD8>>`ABfihnh9~D zLP~+MIJnsRIC!k{nGCWVcEbfcnV_MH8|Sm+0?4OO9_(RB9C8$4PD;SVLPnw_iX=po zsqgW`mD0uFNwZ3^!bLNY`fJ0%YBr1m6NnbESn$doGENo>+KYU3d4O*BwfMb4tl`-A zM~XjU@kyVb_c1tAHfLuiAlEEHMrAp&1#^ngBs%I2#XI~JVc8FI))nRyBn}MlXGzb3 zCgWEJl_GZ^A=f?=FI9BHl=H6*=!d5O=l})U;M}4nuG$ed%(cvpc!Fl}=Xs>?2@~yu zZ*t=D(?rVv&8|MRAUsfuPf29)k*x&@k5$SqAoSgVl)yfX!Iq_>E&)1yvq<)-Ekx&Z zrOA>JnJOutYp3JNChS3-@9LFrMCpVFf<-zD;E#yEX!r~7^RjNquwCSUO=M-q=CM*T7 z1}@m{Y0l_Mn^|aHmEDBjiI@TSbBLa-<2ujyC2}hQ| z&2F8yS@p9C7Mgr1gzU^28mcJZKZc?SfP|gfe@HCZ=|f%jv$H!fJ%@5$a~gYpyC0x# zhuE+FVycZ$SAyvZpwsKQ)L}NgAAs^;%HU~q!dB7l*Vc7#Wx42iplT-8g&3{CwxKhw zO)O@Cb8fb8_jdBNhpq=QLK<e~%*X${N)MkA1Ky5k|y8BEm$fQ2B&;Gh680h|$xo+4zvP|0|%8T-!- zWhp@^54mJba-nPY!Wk^G)B;YG+5qdg#2OjMZhz3IfC%ZMf1<7dcXz0%ljzOt^-@jp zcTc)>szCPH-R1tdtc+c|U;lnTK4+ck*F5%#6w%}_LJiS{;$XX@=`yjEG*|8%Fg=Ct z9%XosfNoK)OXgv06xu7cFqoe5Pk&zQwdbsYZ12>C1pnogAWi%SF1MyFbMmpbDnhnu z40;~h-2g?%tFQ7t(@lQQuxJ#c1|IgI4@5TqK3&Jf-4PHwVj?aq)1mIR)X*FCskiJY zGOkyuc+NvCV^gSZ>4S6hXcObA+l7a`1g11>73pGv8F7 z_#DxDi-|uGdz#-w_p%AyD!NUS_0TFXAC?4)C0H`gl?F|RD0Fi&CezfL9-z1ccxcGE zHeeBJ^%Iqf5HqV#e%nQ!rOk){-I+|9n`z$-puu^tM1jCb*mdY4@v_0X5As*+#5bRC zmI9|dP0yKD#L%7=_W;0v@?|JbDwP}s)G_lgAtWq|yIfFs5v-CG5WI)7rJ zpsXWmn1aPL3ckzDZt1wUkU|K@2PKK=b1t;d?o4>KG za=?9Wgm48qO$l89BQ>rpUMddUjnxP=sF)q78KmF=6S5selB4Iy`sTLpbim|mF7J-^ z^DQ6FFX@##=-f(JPdL~*@=AiJq6h zou`>FbasB~Kg8i&6K*=i453eZYrr}tHf3KS8#oU7rqepiI9fbLzdeAo`W7Ny(0vSF znhLQ=@A2~=zT${YB5fSR8VLUCif$PsJPG2{ApoKnm_@LP8P{MeqDVn{VfK7E9?2`f zh4+VNItYmc4M}0l$cT9-!BNWL0D&S790aeL0bCtxj{wpH>aAjyDI~KUV&PT%U2hmD z)X>l?5S(~92}<=_J8f(e2Y?_L8wUx$a7F9ib8<*2dVy9+xXhSUyEIrF{F|p=PN3Zq zr=n7*^>1SABCM1!Q{eLEthcXay0S;93U{Q1dEeJb{8|0Od89uuWAGXPC!!qQo&l|# zLVMhVdQfx!9?pPY({zf036G5AP#KEGj}T>pf+3^ET;q@j82JXZE@|P&iBwK3@o+Xb zeIR!ziVm{vB*z@M(dN2;GC>C!rzy_*>J|Plz!2((WYZc3?diL%-V9o^JX#k(N(~%*ZNS;&0OukHh?w-} zy5CJSc(kjrdTRGM!ql1L6*tq*pC^iMVtTs_ZF#k}Qb%`MM_~u~%@iL=12aKg6!N#O z0PbzV)MM3#7{y3txal&|c3vw5BU&$V119$XFKTA%)-pL}V4C}0Pr=ApDr?3sJ&^47 zuzK)AeLuc_U&g9gJIPvE9C}jXS{DT|YZlVWk21$4=DKtOZK$u6Fq>vN)DW6-3gqrf zXSrWZg>EcoP2-DmN}bT=5kZr z034qvhU>X#Zz_nu`kPl;r-Q9OgqzVMmk9M60XxC_4c;Yn63T}Xe9Hj@l@p82PE{n?)W-7)mA_zSU&P{Ju9>^MF<(V$1qLl412g>pn z&(yyX4EiZdZWIX)WQudBPtB>8p=Zm7sEDdPa(s$f=-f{L(O1Ugs74H#aNjZ+q`|5` z4yz|iofIDAEP2-bzB;LOzijvrHuC*(LSEni-whNqA0SjtZXXS{_3F1n6&K zg{$jR84VC%2g)%)it*>9C&0?lhmbh)N{VJ=3JEZKy_Kt_|Je!-<>l4iv%u#&EPetR zaP*8+E)XgCS}ri7@zm#D^43%7^G-Do)t?n*z2RC6s1+xsH!Yp~Pb&j!K%Q+zTCL7599+`)MhQ@IS0UFNE zh2_A_WB3);fDT@tgqGHZDdPoBRp*kH!3Eu5hs25Aeq1-Yl5?0bOSAN$|1(bGO#l-% zyX2|_CgM|lf4F&`8yymNTc*Z)a(SzdkC1hd2M^jo44Mg5uWYdY{G3JgFFV*& z=}0_6+7wAZV$-+;^~(ck0DT{0;JEao_5k3nU%ZB4HB>`xpeTc0hR^=ERPs;sAY@jB z7g#zDLQ20fHV4a0FiO&){K(!O2k#-!D!@!oLQ&eH*d*GE1^MiCHaL#k)nj!V^`G68 zJgMDMZ7pt=zlceI%&yR>m8&ZTq|T`61a-DPgPW_)_n+??uE--U|h`uVS(~fMBd-~BZa5)r#f%rtgzV3fdPHIqn zUq z!VL}_R^y3vJ4Kkp>h>=vS9Y{K&O$1SLgw~JfNO&u1!<8ro$#B7n&Vyi57&jGv)cCK zuf6088KLr!^w>$fDi@m7y&l%~o&*qZj*k1(2$$y+Q$=Fbz06jVM5>j*nJnF`)!?J- zZ>ZPIby;2Z+v7z;$!M{v%9vP+6giDf9Yzi<{w-M!1<&l*o`J`a?Vzz&DeE197=3CF zuJbae3+kOENRuamGP63SK#Wz80AquTN0nl53GfUO7h~EG0l@*JVV5ck1a~)hRSfL0 zDcDD+BzDgwBlt_}*ROeOyqp8*xd`e-69}+{;n;n+60iO-I-ALYwxz0r+w0Gc@G)*6ByL)#LJ`$6K*h-;NO$S@^JQEir&#{)^tiGVGo3kPZC={HmRZczSTNGlk%2L zmCI2+JVs1*IX5id>obKftO#XQXsYVq=1N1p=Y9oW!D$vX>Q{Nzux1m)7$ZUn1SmIa0+gpRb zUv8dGjzQ`4TsT$$lcTU3$r{WLng~x+7Wr4p9DVMAFaI*}jwp2OeSe!QRc1(@WuT#I z{{b4yb0n;Uc{!E4LLH2zwWPEHc>hbAsA01F5pgwx2xWEA<#2mtu>Zz&9PKl&bE}a7 zqI41oQRC3(EX-R96l-D~(}dI6;OhiTJk8&xCj$d@4zjf7{>4y5^=In1u1XlDt; z>mTD)lO2!`Lfs8Xj@*b7-8sy>8P56`ZrmSLvE^361_c*0^jaMX@7(#SCZ~_~sMCDM zZp8+x1>etY8=(L6dP|>HT%UI@5U}N*hOE6+s2?Dyy|7MT%k(KD$Op8C){0&s{{kmv z^zXD^Ren#DF)}nmA_QNi7CAl%KxuydY0^#EW^FDF#!jjyf|mieTVjtk(z%qTj?RjM ziAE}|T4Z(k$k4(BOTBY4Dl>yl`}ss>2LjD&!ff|fM)*-75&TNbpn{hL#DjS>k+TNd z``=<}SF4js9TBQXWqP2;XmZ4ySd&f6iV6GpVq|qZRQ|vE+_`1#0;FgW7BoOoh50pw zm@wT%IArrgbB)fj^HD8|nn(+|i!{_yvUNq)TpAU5<_$%WZ<{y=B2;)6@;6FjXuEFl zRMC*~mbHjkLdO@$-q%%Gh+%=Hpo)cU=E+`R2^vsv?L2ZuLS0w@o%irkS~H@rq6o2% zHq(29P87M~hyp#KMe2=4E*b-7*9VBPuE&>mbKY-xRnO*lfG*fo&m;H`f))@;R3F1B zEBi|I>2;WaMVTG-ErKRlr+_u;jfyh3A|s(#eE#&C8GC#u+AL!`VMqfVVjw_ahS6|T z?Ym;4Xlgc{75nZ>InE}LSE}S5p#HL$#7DY(4jjr^EKYYF+rYLu)BTo@wxPB~J*GS< z7G~6N)-&LQa`i!+}f2* z!Z(S~cbI|NJ#4oHsQC}si+Z-R+&@hX#P)lRTVGlf!Yrm+7Hd&1kFTNE_bR|B^}#Ra zYr;|IYKt6bH$lhqC!u&wJ#CVE7Eq^K&=Zz}gJB1qQDJs+eJC?U8+D=I%t(=We&pNATWS4Um$heZn{? zN44p0Gh!`azLtO-GSW~Nr^Cf~OyMm<$Qa~A;}M{+HY!%92#Um3`gnqGp3{?81;8lA zb102W!nS;IR(E3We%X^2G^k&LuH6Q$88)_&CsM$}h?+I5IDBcGrb-rBJ(;+zz34B0GmCGK zHZDSIZZv5G%G+8*dbXkedd}J}Zlfb{hXms>DOth7@ z;XS3Y&)MYggi?75U*SDdh&b9ngeG>s_Os09$Vn9X7L4$cX-S^EP#*Gghx3CO%ILEf zNkP)GY5Vuywxbw|FJe(WO4uwCiw^Sbkpiuwwr7yJ~h6zTEN{jDw}FifZc?B5d?C2E>HRTt?QH%%7t;4wMo;Ip8}n)3C?@fM~`rfE%x{(xTNY- zw)7zw65re>cEXPREJ~{08NI_B_PWMyikim|4*G@Y@B018;ld;f8cF1g_}4(BbSMxE z%DQg8je-J30~O2#AeoU(kkmNZyYNpJ@d+@cZzPi2Kpb0=mZT7t`WbsDqbi?W_qq{M zAHV9y_C3GHsWb?_V*o3~T;WgoD70it1k!=y7{Rtc@#XfqH}2}9xCfO({awdZ$;d=~ zOo_&H(|Emg3E0mTf0jU_!vQ8ais%FIWpzIDKugJn6+0yqn2sEKMAbXl#5g(}CPgry zL>9Ya+${p}6Dikf7|WE9qS1~OT_Lz&+a5sjTc`%$IXekPa1|`NGvNz4IJ_V=xt;XN zx5eW?2hLtwD2QWIO4rl`x=gq_{m@JK)Z+thxRltcto{UP0YYf$2bu}88{mE+2O<9n z1GRIPPABjt*a33K$~)_F`P$eB=9rpclsYb{EBR}@+{vCfp#$6zrwrp!seg=-ZxR9{ zkd|`K+OqWSy=t^$KV2-3%0S{E@P1)(QaTRK%gz@p<@|X~8g~p{Q>+bM4ol1{RM-F_ zvVwp%#6Rm@xmyvqcA1D6RXco*)q+9(QWZv}))_+nm>|n%!~B?Zk6%Z<7CHR@hqqPG z`mhSQziOs%nMiY7DcST}c38JOE^*2FfYS#usGI;qIXO(Q&lXli)ge%s3kzlhqSl~n z6IK<}@RmU)CNMQYhlNxZ089pbu7oupdxi|f2M&YGc|86>LX0Vr6LSG5Y^TFFFtrQY zY4S!=lD<2?3}cN=Ayrej3EUgAlktSVT~xp{(Yff#B`L|DBoG7Z(C581hCRb5|i6VXTGO^Qgir5Ke<2_cy_nFr-L@E{7f0{~q=Cx@}B#k$1+yRcz#J zQIY`hg`^cZzOs1h~ zbtnOxw!y+L1}4LJbuQ^nNs2A`{P&4@US4M0Sy5&^NSS^kNnq+~x?vn69+!2Zse4Hv z@j?y`_@qX=dj5m}oB4gmb zkaGIiZ+}vS`oKm^rR%1FW@+Pw)q0yZ+Oau`yi}pbZ+=>s;0GnVy@6q+JVDTz^t^ZwsL5V%ZcH8%4qxi}_KKkO#f zfbn}{-SEfF`OalUE2v^1Vs))p6Z?+BhIx^ zTBpSw=fxdX6n2b+_=obGi*(+E<&XtyFpO9^E1~n#tOTlnlA?m3M1+JNWLxifL|hWw zHNO!-w-&$x>km2cjmmHNwP$2~7)HGD)!Xqywk6wL)|!Ey$gda5d1c4XKj-VJmA^V? zq(C~xpLjDh&)JZI;CJo;!9TNRX(pp8-tu8AtLdF3Z?=! zDRkiukJ|*6Q*U&B&vww*DhZ~#oBqBxzvBPr$ZmV=G$#NA0QmU#k^Z-l?Oq^%^fl(lC8y|0Jk3Fwej2jYaq0lfxAm1`5F!bz>w?LoImCoZ;?6+R4EQLf%gpI+6gc5C?+4Oj-&`UE)`7LAS$=R)S zn!Gr2F(UAZU58!kqs<5^^EaqUSRjI8UEW4_njy(mXJmHQp2b|&y3RslS8S5)t#sl8 z>bTKNV*hxU*%T%~qe0d}hC1*2N&n!3Vu}?rRxZiu?z6IgtEy4I>V}Q%vczTY%6oh? zQja9WI>^o8o-8|;zIxq(=n0ayxy33vy0|a&FMdJ#DkVBMPisBuFBQtX8e8 zD2yd;Ud&Uk52aq8Y_fiP#)guSnD(}YI|RO zzIgF`KHg7vxFqNwi7s`FMO4YHTh69?pEo9}Qd2IS6=^)iySgTR%xo22A{wquBD=mp zd|&x&c5m_Fx=&BP-QI5DUt@272YhAqVmez7^Ibn(ZGShFZbx@>;6^)Fcm6d|p=+Ox z;@7iwU;munKVO&b=J0xZ>|Fn@eY;$B^X)`B-1hSEb$31U_Wpc#?Ec~L`gwvJ-{Ir^ zj-zQEzbFv~QG_8m5YR9&XBOk74s!jY(Hhe5#@MzUI6R+;cunr7uehb47Gj(y7j zADdRotfHM<*_EZalMQh0X&Y+;A|ET3=sBW}5rd-nE4$*wZx>%2JIW5XMVwk}65nj) z-!MDrCE_CNKX$ByNnU;Z^n$5qy?*JcqC!%WN4=nl__+YGi7}zEi7vBG zyIp0gq*y>K;#o##{-M8TOqN}vqx>;No*5uEfjW(oz%u1<;Y4~EDT&l3B5R(pG9t5} zoM{DPl1`7+MDjfKq5&uQvZ(AK0*P3a#yOMq1_DS;E%n)uTQ_+%d3EK0ilNT9L7b{L zW&A!<6KR!i_n|bEYIvD4zs;jx9;aQ_5c?Bcs$~g=1x(k!DC+5eyq&XMd%VJ$_&iw# z%Hb+5sW~}u1B#+sTJl$VNjB)JaIz^FBlL?v5SZ2kV6N(vG)jrefN@teT)v}MY9nS!{aEvfD+%A?Ug+Bo} zv}%pXDD_F|Uou3B4lQa7+`BSml1sy`sQTMMfOfO=!X;fTxz|JEWG7*DDJm&(;05BV z<}brzRDwo74FwKM!Pq?|y2y{{$UJ9z^+lIPZhUpqt9cR0d(vjI8v=KN|q`s7nrkjxvK29mwyu4oAABU7bAu z6fO>XSlZpRwYZOeS_xqNAqt&07R<+W@HnI|df*SH1RV`ll^d4L9$XvdE^_m72KYzi zs`lOhY*2)efqI}367ZOzDK^)?C^i-VIR4p$u){vkD}YbY39z415B-Ep4m_VCbJT?0 zmf5I=ZRE)yd>OD4XJ~G1*gH+k z8j&-C0Wb7YRe|JV!d4Uq=m3M-BrSS(T?3%q%#c+RbLd_G!#dW|mc^i>&~Wx=jE+qa z6v!LoH8f=NC0D&#lY*YNR}k zM&MA+mLKsjtF+U`H8XDEh4V+3q4C=BfC0-<1HYX|1@sYb>E1(OpYwyIhHY&_$M|Gp zLw3gMxQs3fD6T&spK!hg|KJE(7hU;VMJ3{8*PA-=V+eejEQ%VKlV=GvT)2H{KP+zi zZJFWzE{3{%tUhK#geLms9C~v7fuMJK84z{}Pa^^Wy8MR!0b5kFV`%#^uR2F#aW|yb zljuCaB3u4xY?;dB@DAh`QLt4bZA zIr`dA3Q77WU+Q0njoX&iv6{umjx9HBDr%_I5?(T{U~ZP@_mzo)NalqwxwQz0IgV+U zdl?~LnQ$IADQ>1gIvrAH(K4OUJj|s^=@witn@f`7!m;{5L4WFwex=qmvfefl7q$r2 zqt=s(`%Yg`n2cnlbSr_QhD;z&(dl?|F(|dk1~MF{ZHT~yoC-*~l1ot-pz&;T)9-qd zKh=D7Rbmz5yP=uL%CI(nAPRwlefl)!C|DKYsFw3=GLzCE=*okay$EjnaJ(_b>>Qdh zB+`;bYSTl;{Yf4p1002-YL||FjbCcAiL~kyK*YlufYxk)fRaH|rpQ)BTM>>1;9YRd z*<{+rwoCERu3cnt?i%+n+Mk$M5)F^g-0emPTc=W=E{b(X`>V%{q%sn}33@g;woo`< zvLfIRplp=9C?_m$qJ;3A~MN6EVEI~+s7iI7Yx)2*tQ(Hb;xr}1l_&q$ftha3o1OT+MN|4$ZO2y zbij_gv1-bG$0bMhyFx*q!jz9Kl9!)I<}3WP`TbV#h<(l-ueVGs7~nw)iH57OJrpr5 z1B=uXGbbO2;qr#q{q3?3Dl)jX)=>X;-+6zxZZ+BRYl^!ts{U123Cc7$A@o}vPmQ8# zy3CjCI@!eHCfN-bi!%&VGG+e>^oUU_TXPW^p55*jvk~yMiq?sNm^znO*R`p%X30>5 zW^b|gV4tVRLNL&tI(K5f&U>1_Ie%KCOolKaraCU4PqTYO$QH3F*BY2!tgzx37+o}M z#SxbM-fCMMvvxVOF1h-+7B7@gbhO~R-c2_!j1e#Fbna*>|L`CUd>LMs?anrjvhhzbVj$ zV+q2^dze0Jk$cgP3bM*!u~3A43$y3E$#!ExJ4&Ftby*Fyc@FbbFL2<(ov*FJAHR*l zk;do3A)2qJI)cSQ4RqzY+?hU1qiTMQ3X(CB*4*@Awd-wy!-aVi93;v9%G4g+#H(|? zufTZ>89NQpT5)A7a@=aENh5iQU8z{!G=WWIfVFRFhc1kvvHo==p&1i1bs!{0R8%Pq zTe2bFvvIGf(sbPc&oId_wNSKYe_Pm6S6}G>835(G#4g z!+gC^ku1k)vEek%*nh0wRUoHPPdEkI2EW|?D5J_mu!M}QPTPm3q(|F_poH%5ck&p# zU>7PFep7pIdPE+iOUH_8qTV@^ic?du;fFD9eVPiz8VATVzBxaGcp9`I5O}z{A*gGa zLaR*b2&iv@fFh<%d5IYt`qpjEa>}(SOO^PHlD^_hAsMV0T zPjyXX{X|N0(Ri9Mu2>#iG_DN@mURuJPXYW1+ZjY*@a?Q-dEEnXN%$zEj%*|Ydbk`F zeMMNuQ5<@e0==wV!bWtwrN5 z4?{CPC6`hZoy`DF%uNYoGxS(zRX|pHZc--ML60cQnIM-v^_>Yp3fwWVRKngz_8vyq zftJm~uHx`&P@pu~U9)jlDhp}Ya2gk>*^yL_OsgJ>G?Mg9EN8t!RMTEV#ffXMd z@~%PKY}`=6Y&w0@>?m-LixSD;rokDMV;-9%(xG2xG>VpdqixEThy5zLkbblR?b+1jswEMP>!(v3f?ve48;&cY7u`p$#NXFZBFs7h;nC)eV{a4V6%-qWXH`#~1+!J|f?9Twc=REX`Vs;4B9((i zyd1dZBhjAK^z3W0uWmK_0b4@V4!rPFb)>n;k#o4JT=4D?}exFkqf^;gbfz6>QU60ZXN?J`V}VH+*0 z+DPk!k{ppPU`dHci zag8L~_STX!VynP{p|yrKFM$#QM>{2_;TgN|ui3U~e`cQ(R7%^E%O_f3lbThkjb87p zGgbE0xc$JC-*sOWt#Em=zTUzzwDTCg6CDwNX z6q(}VnVP8ft?WW}1h;z|S$Qs5`SQ~Yf zD6YMUOBsD+`xCwBe_@_TN-aYtX?w$u>W61{DqJH88nG01yS9r+4AfapcV;yjaR2&; zC)s4g{DX^?UR0rI6`Y}`l%aa1e-SP4*S=H3Pj7cF(D=mw3ASs}R^Tm4y6&k3`st7= zw}Lhi9aZIN_4*sgcA%%Na&mr)H5iU20=)t>7hP73j_L`OoSb$(4mXb{A6f%f6|YB7 zk2>a7y0NVt<^x@m@VmcXB1CPsem_Lq4%)3waIlBt)Clk?e!Kgi&j=Z7XyQwSjS601 zIrxT6i|xQUxdMXna+O4#=Jer8k^nO(VlscGVV#hv=Pl2g?7qA6Lbr!!6*+~=WQ zs~rRTo7qFCXIWRXXG4%hZEqlJ;APt{AL}Z)Z!c-O53ct0PyLoez-jDG{IZU5U^)nN zp2q+=H#zON2Qi2HmjJc4C_el1@l3yh6l@b!TzpCvKLi1gmNP2M=)}cw`op0Eemq@v zYCpn*guV5y@s@@&hiN!*s!bInjZzZIzFwJA@2x>R=OYYbmN65W5-+e+c=<) z+u-#tDLT{Hb0WhvCpEw#XD;ALD(J;&aIDS?yI3dI?b?EIk%+QI&jXhZuJYw*CfRxr z(C#nwTmL{F$qXK_zHhQFnU1nq+aoC(=<2c;F}k1U4=%Vfr@Hmf)9{ZAeF6 zxTBi}|9mD%yPg&5rUGr!1kP7~E~x>2XH$%c8$yJUA<>ubM%06v@s?c2e{X#Gnf!liMhDyg`k& z`*6t6SqSEiW=Wq$QJ0tg61M(MgEZ4STp7@qc~pV1zK zj5p2&sR>0tY<#2S?wlRsOUcO_=UKV%3J2|7@AmIG@#G3QGNOky3l(iZM|A8(2tK#u z?em}9;tvE%35GJ-Wzp0O=QXX`v_cr%QOC%u+F7;d6-6vkm;99DEl}CCJ1mZusB3f`<>deNLuB^m z?T{)8(X>bXB$aL99%Woziqa6Y*V+^Zj9EiPNS%$vR~P!imPZlvNPZq(afD_@rw${I7Aqu z!-DiecJ>WzB~kff#Z&TDt*aKLN&LWX*Zi?+k+|T)-94AzJt+9~viOTrNQ*1%l<9Xy zRGThXePa7~K&A1oYo1V?hLdWrSt;*)F15;3c605A7{+$u!7L^Os!P1plFiCw7KiF9 zLOLomNBh^U&h5@Cg$>YdAWNM7(n&5pGDC{tak$eu7S$0K{n!}4n zI^Z(JY3xcEV|=BdCp}Z zV%&4SOW?L+JMPj>h*dH*L`5PDL#M!2kSw%Xx!0+)%GT^pJ8SX7YGq&MYhZ$$p4 z&7EW)1z^ka4%U z8UID5wG3ViwietGP2r-6H=0xw4z3jwOy)au76%Sl1H7f+Bn|(wr$(CZQHhO+qT`k+U{O$+x@R^ zpV}AuT%7%1Bvq-Tl1gUH%$j4q;~C$4F_quOlKFuk@j2&-l!~_Koa812oyg7pQ=?hN zA4V{^L6@CfZ7C^0C9zk|$16 zkdomA+{CpKZvj$1#qlr`+rEFK1CJ}H19Hz>$FlcnQKLCYC#7fNK5PzTbF4&7hTLNU zNc!y}M8MQ&1E@E$F`7o4Ci}XNuMPm{`JF2DBbxtJ@F{nX0%a^`vamvM_d2D1ET_2& z4Ei2x8OGpzLM1xhgfe5(A*j^We61~a73}Y)9ctMCa@qyp@WQi(KbFCaK;`&aVRlTP z+#pGDTD}`O+7L7(+=DYt0Td>Q!7z0yV|w`==hb$=w47&(ldP&2WX8> z+Y+wu9x$KCm`3`f4D9>>Ww+7lTa`#Yoa8F^3w2KG*eO?+z-of^s?q^-yHZzrIerJa zd^qeJ{u*a^ynxuPp}uB1LSS^#_N!L!N0j*Y$zD}6^ItBa0s#(E@KQDN zc(6rdFQV< z4)-^l_X2QVq3*fR;Wj|?hbWeEd=L|lT|B?o@hTBrH|&HzLkkZ(hUv60Rqa`3kK>}a zS$M_d@}(LSo|^T=#Dc7m_^{PVph@O2o^c3mmrJtPryPl(a@+*`xe;>+AU+aNwmN?+ zYR;QZ)QpG_#9N8dtE*PVH}hz!ZF&cLT>5Mj+ju5f-$$3wC!MB)dof#ud5=b-K=ng? z;uT)Hao**`Oa6#8dk!|^YEWcpz)mmsJ8;M8c#7hM#mP^H@Pxd-@37dC!m2Yzj>u2j z)Qu+O`3o##>q6U|nInXkEkLj1Ot1^EI~QjE$wY?|A4G+4WdAMa-Xh*FnNmy@M-$O~ za2(@j+J?oo?P1+cr>PzhA-1EDg8|1!?;YhN69^*ZNsr90wHY|yv<(X30v;X2TIr>chMk5|ptMUc2B z`>7N~oX<55bj@K81#^g8fHKE5+onIUPv}N^5%55%gTH?3q}M(OmwzB)d5Z04O%CIJ z5Y24lNe=22FW`l>t^hg}m3^m!hn0{&od!K)3jN^hdFnKyvx^;Hg>>Mua~C=V~Azt-0sdvM48Vj6@_fORd$MKR2>X=8VT*v(<_6e6t_IoowJ9g>fSjHx_=6*~i{1|gP~D8MmJHb==P7iN5TCH zBt1U}nprwdrD<^9xH(JD+cZym9E7aqTInR=_89`Y`#u;qPNpjgX~b^BQQ|GINCy~o zM1+)NtyJ%Rb`%oCx&dn1U(&0nMA!z}#xonqbb2a2;Nn>kKxNCk(bos4yr-%KEC(Zw zpTI6i1bJv+bI)lD&%trv)2(l7*qy^4IsO*%sO!9h8qdtU;h;A~*N!{)*b~^Ohr4j3 zTsh~mNx`z^jwW4r4|&0jRJD*B{Xt5iy-E34RcPvY8N|f+zOl71wwOk+%U92iy5U}J z(^JpOx-Esl@Uaz4u~bAlhp9i9TiY4d2`vvWOsN2T^y^jT(cT#KD07dDZ6aVlR(ODk zkz@7m_#wHodeDAWbi>!G&6)+}H1k;3_^;EcGfx}p@E`c!@o_u(fX8_#)_rDtFDHnu zE%g1(tFVo~8g|PGlrc2wev@Z)F^+o0EyqOl}WzeOanF8X6aNVTlPer5Ac$D`UQy)!1S1hhJG(Sa0Wj6P97%#mz5x)8Ui z8D8b+z(qXm)BEf-aUB-a3DnuK03qvo-Yd9Oi!s;hGSRpW$QyS)6@a3p{7C+R<~DSZ z>8;vz@^=bfeA2lOh(;YjFJ}22bOO0D0C3z@HaskYj^L=Umx(zZW~=j#aG~OS5*ki5 z#0M2`SFGrkfO0|vXa(ttBc2aIIG_Wal>S^<+BXA0)3LZMjiMP?+#O>P4=kKX?r8=T z9wbu-0SF(F+hza=|I0R32LuyWsIgwmb|%^(^7lhLfd($4R5~f#Kg9}Zi_3!PrMSC+_GED&hUA+Y=xKCT(`1$%pYeU zNC`X3Ns>RFKyU-K@h}XpDABjmD3)!COU(e;1H_z6{FbUCYYq$whBm3W5eySm*qf%h zuP`2#0)Y>0HDlE!yJ5a@1|~h}bvt#;>gEfgaQGQkJSTevmSsE1XI8Z~A!^vYaKd48 z#KA=flJztY8T>m|Dy52JRs7o-Q_8FuJ4naTjU3X3n zfA=)rg<5rIO|QPwH6WMHu!!?9@*Mh+N>soOg_DciLxHIjo0Mszj;w>Ys3Scemrv}T zrm9YXC`;P(`fQ$WA&WF^Jz9F*#BgBqtYDs>5kQi^UX*eCtNbn7sI71s6=mSYlwD&4NQc$Y`_N^D+bby*p~ zj3sey?l`0PozL@c9&kNO3BM35k;J6a-e8HK8nIy-S#RXY0UQkv5hk6|4v0Z;Ez zCQQR@0}970kL9L0Eze$O6cN_$vL+UYP0JL^@ck}#YNp8KY4c7XktVx$RTN&*(C-(M z<`#%J_b0A(1qrWh?}Mv2Ta=uDgZJwbc)&VUZ{&5?63Fr|hM0Hm|Iiytoqk zAl=RlFFvsHA?_&2PjZ5xOT4GBNMhyo1i=5TsTxH)R<+#*#8lnVT=+eSuKTbU5S^;r zTnGaE+nNhWQGX5N-)L^YjlA$+jBax(vN~&c6+nA{eohex1pGMWM#f-oV-EB*p?@H~XTS zpw`?6++<}YxLHv!V2cg>VKErMrxghPwAjX25Z^Wuz-Ps|x>b6&quxm`bC`t!SeFew z@mG*HuDHrBX!UCD-)*rm7#LO|(9*9~*K9yQz_+k3Zes2e6OP!8+j^*~>yyUP9~W#? zqVA5zAz<}JGf#Cc#(MuwjG&Vd1#BNCc?ZhNSwNyyG>?Sl1|JwWj~&Z0;`ryYv2ABn zt=>rt26^x7f$jE?qVkdP)o*TJH_%vrD z?=oVM<^z(oyH=zF2QO)>g4pHU=eiGHL*Q`}*fhUPk&qOhHd`h^&*b^g|BN%p9B2ZW zZ1dpb^ODNwPd=}8hZis** zamS^9QqkB)66R&RpfeQuEpYg!@8GNiU5jnNv68XH#;MRhdekVDNiwvIdA))vMNWWZ zF_1R3g$ODXnJuF2GNcE-dLdB+9n#lawXir)s9Ci^J5exrCkhtpYE`dT-Ni{Ma+k7` z?t%2yAPOu7Rg0M@;Y=gd>mJY$78T1*fQ9KSN45XlX5D=O^ieOF!qrTH$*+2GU9hvK zUr0ka_yJxlQi&Xl6u(T(!iE&UQs@kOv1lbwkbbf^nCcH30X^DCHeQu>o5~?wj3Bui z#44t1x@7C~oS?S7m25B`jZ_$iYCBQzgSw_jWm~NgzF^L@>RGKIwG&KA!ispgv$vuPBGmx{2!al~~> zl}o{UfUBbLg3mx#3@la)U1Bg;&GcM>AU6Z6#RA-V8`$;0!oQ>aq7`@Y(oN*xhb`_! z0P328Nr#1i$%s!lECx*R=r9>En}vkQ2yism%$Q!mV6tI2!3h(X8jv6|;r3@>GGXa` zU@~BZ3F~RoePIEvKpUb}j&d?7* zb-N%$YbN@WRg5g9ooZK7Z{dkqPOY+Mw^3f%{K_WM>l5|Zi1kU18P9&2&y6WmH z_niL)Nb0YVF5pTtyWVOxmEla9kSuhalT01u;6bfl@#UT%AM`;n+MG*c*%saH)H3-Y~8pY%_15it_Y?+A) z>&{_Jur-Ne)_Al%ngO~;M9|Mt5ddwMy@Tz!pT8O!K_2pg)0=b^brjgxk!mOnA}BwK z1kNb)yL~uwW_rhQCQ1rVsE6b(2GamfMtS9lg7$)ttKCBLSuP1W859K#o`BJ{I!2Zv z;85Lxl~L*Z*3Rz;fjGVl5(YiGSn1xW1#Uet9pz~x>S#jkpy8IA5}QJ3o+v#SLZiGa z1bkWdpJ}9c^iQWx&jPw*)c~u;!(dE&G_f1(iyBedO_Zo2lXH?*K!N1*(RTWfI&rO? z|M3y#Ba332IjB(YX&8_Qu71ekiXfUT2P2di%Snnp?pWC|Zu#Pp*j1Cl3^R)KhL=vQo)FO{bz@fMg zwHtwuW`60346{X1?x#!xbj0q+;r8``1rw`ZGPv+o$UX+HPU>+MbnLn0u>#ursSTp~ zXB*pV)$lmDVRd<9PF;TjcpFP3|DUdGd9_kRI9N)N0zU4mdcxETvt!A8Mg(6V9DH(& ze9Fsf%sREJA$(-B;7YOgo+~(S$C+289PG6>?XcJ@*17Fdrk!NMrZ=~ZU@-Z&Vl^&c z|7*?FS5q}`m4f-^7!NY9m#;T=_Aowim{^NuhH4>x(8-^)3YS#KE0||Y&~qlH8WPzAUI~VM@wk2wCVH_#&TBgOgf8tiQ!^m zNy(qeLmeE%D5w;7|OXHLte-LUj5ssxqwFSUsVgrSpR@+&RCLkmA-`(uPN9*-<`5 z1W`B$LTHdDGSecHvgj&Uhz& z!S$0AnZcz~(=30%Bqx2U6yzsfK}Hi%C_al4MGp3%3Pz5Q&`|YG9aut$86(VTe;Zl` z#*4hsPVozocCfKhen)7eZ~i^#-#Cw*>+rQHk58-!i%EH)TeC!O+dC&sMxsM#{54k;@EL=>g)JpwgOBOm0BgdT#R|l%WK1}&cDH>a{bPjEJ>vXY| zsiYFjl&z>*Wk+wKCK2g9RHYIdM1L>eXT3b>Py>>VevGR@9eMBJMDBQqxg;mNa;!B! z`Dp=`i^0Otox1vOb*ixYOrnsJhiSfuct_3N>ddZE%HWcg6^_^Zl6r6f+Xbwow&VT* zQD@=P4mnzpBsWZoK51eR-V2jl#_20Ni>ZcGv2jWH(-V80nWD9@J&-qYbp%j+836d> zannmc??QMM)X7S;Y+zv4uv9>Fl1Hw*tQRZq5Lh~sXc8VNS zk^5;DwXdeCw=OFfLNABD&axuc@H>!E91<}3PdVwUhj95}khS4)K%UPoT22=ZBO?y3 zQLiGYttk}t&AAZkvDG&MHEa$^DLxnCi>-k|$L;BwN$8wT3I}P;Lau0b+pdQ_1+|OS z;-!zM{sY3voLbz-a>MYpeq>UE$Dk zLt-Idbg+1F+TsbYU*76OLOwY*(_#=D-cM4P1Ut!bN2Qy!r~d%5a-Gy8p!`gM;j0up zv?&@3RXc|j%`!Oi1z*nr`58dE%76>@P) zwh-Q9A)HOcwUs{$PYgmjxjtV&JYx9vs>?3vW%=zbj2xbpB1f8E^?eQ;@75B0<5;Hr z3LM`82al+GXN7O^@jmj%V8X(9_?5`|Jd2-V`nCtvSH-=6I%;1tho{)yA$ag|x%18v zJQjV(kKNZe7_Lv%y;G-7>XRzfpNzi2dgvQjLDdhvBh(%m334*Ux7x99!@lLQ3`3~1 zn4xeid;9fed8l|6JO##3XhFR}T4N&NsKLSC&MB!I=a_qIka0eNxNQxm!IGSXftnK~ zKaBX>sb2@*^kBb*$TeE>vWq`ecV=}r4nuu9ikkg8avGi0_1I3!mK=aHjLRC9kr zmUJ7b;|}2_8pE(Vi5;@ZCawd!%~pL!A!+-q-s5}BcqU{Ehbws$)Mh9Qe|SSE9# zQ>9zcPxya6ouB4=Z~RyJfBEbeQl+n$cx<O!Azx(&@TEMFVN{EKBQt#etyV%`6>!o3h62Dkp~JmGzXNawzLu zyCOVUcf%FWt^SYThhhI>|CWsyvBwn{T%U5 z<46=yCbVjD?IXpOh_P!M3UlDl4UL&l3myzO;F1FeI0COO2F6TY?<35RoY4cGE^R+g zzA-V*lIVt`F>k6Ek~KPMIf1a|=9=sz)da{E8CrPQDA7N0G5DL)O@zv1gGfb6BIc|| z@yb$5-x!-w>q3+gK1{Z|=ieG7<@r(>$M=KiY_)cb?X-ICBVb;m5O*@Vs;*uJI1jHa zwnWWe*kuYY$TRiW37TC%%=hCs_1MW!IxgoC$l~U9jSbBMW$3CCQK2!Eo z&Z>jK8x*o-1f^sbEX*q?yqH2UlxJg9{Rb{i42c>Ce7+YLp3SyD1PWR{DH^l$=@{N! zQ>R9Nr(k-<&f|#>FqZm;HnHb5FlcH}>1vxzC~_a5 zi_3*0De0nem^uw3c3ZyXJIwOoP|mB=_-tw!##Fu-a;HQTdK+y_lu~fm6gGXDY%pwj zk~FqXZ7mu`x$?qzR|O2OC86cez>%gs{v{Vz+Y)ygSdx&@BdM&MQZ>kaFDjf$8Pz>_ zw#v8(%3*a+YQ{BzyVO+&x=pzwT#7uL+9i#F z={{wR={jp*-A#5kchqT1)i&o)K&+}&U1wfgTq+uE^^@t`a!ad+)|;iP zMfjayEstIVq~LN1UaY#7T37l+k1?w%MslUA!4?56w;_=!28iNR|I)@noa*ej(<4NB z1yfRN^?O-hNsjYAUe`kn!|gS)qsIu?Yw=Xj9H|@#RfqnV<*F%azi4b}7&6pwSaPuD zXRl*NhKydslR*VMS0$YWXz`ebie^`@$(xLLDC*q#J3N}U3{0Q+sCkmrNNcaI0JnBM zx1o+a!qIc}bZPdEBTS_$AQEWfR|ex1-3%34Zm6b~n{{uh(Lt+=xuY(;BeF`?{wG*P zJRyr7dIn6X8aM3Ib3nQNnQ{PX7UMhvia-~XmhcRT0$!1cgzy1?AOvdA zMG(Rh32E^Wq>U+2XM|-)9Vykx^$?I0$oqg{P!w7~3bqO_6Y8Ua$SR0Z+fxXh0hu5x zF^>RMP^rQ}mLUvR(m@@nAv3OL#48omxAJ&K1c1+0o!|rjbRm6)&m*-z74@F(?ZxE7d4^Ewo|GJ|T3)wCx~-Vn53U-bj{{Wqk#oRb^Xb zgX5*VB60zZ_#4s(RHK)7)WfL`x#$NFJ|I-bVts&T#49pAnn&m-`HWudZ^{#Qw{Bhz z-p=QDq;DhgrAGF?>ht|R&i(uQdbjz1{-wQqBYYDbv!jI=sygK|kZTIu`e!)%@1oQOsT*uef-wh-9cli4t zr}pzl0~HS1kKgiIumBK)^7QwAe?9$>{fM_A`(e9F@#6gU>>2;*9zGCF$AsMI)7KbwIk?u?%=c2zs=u2iC_Ff z-*oYP`w9=fQ%t;y892fhjmFd49|0D*%fsJ$rFVn>bJNRz^RvCfA25*!vgo^eizirC zG%WwQv(@??oIgwK@wi;?1deBhcC+MZ{gU3^Lwcq6Y_

      $QG|jsgm^^SX1i$6FW|&p}t;`zc<^903an=5K3Gva622(4Lam!W{{~(u7tEMA zZhYs}*jx{mOp4@A+$cl07Qdk5W*7f;EN|Q2-;YDcTXm9xz8EtiLh~uCnBmI(uhZA# z+Z~jx|M%zT_44rdZj=>9wVDq)vdQZfBB`TK==*~Ar?!+`L=v*EmrwUU$mUSZ+s{+E z%{YQ->#wfN!jZ82#Fg5YA5|rx6jb(NbYo?`KmU!tzo%EvFMm}=BPm$#o;!S1_Hg9q ztm525>*GO=rc&JiNh)@6*_MVajJ?s9R~*wVo9(BfMRA1z^R*%H0<=#9I=fbk{{6s?JUW~fgSk*plB3UY_9LYhk3*l+coxEpd&e4_wL*MusmaAOM(&%AC=pe+dMk3 zU!#kk(Hp?+jDEq(5r_R-X7PSEp;LeFm6z}JXU$Kch5SEXAk}UjAD4wZ|Q+oW7te^GZdo-1c`w-d^{_bq)3yp_fM4Gwn@6?`^k%X@EbN3ry zu74jXzW)^KI|O$4_ID#w2R?mt#rf(_d_QJuH0TTZ@ES7Z=Z~NS*jZ>+Ql(h$<|p_A zAn^p2_hW1Xao$|tj9guK{(L>ZzOqvbpZ!X?HOqJ`Fr_Z!jRdR3YgIsL1f7B5**VL*jEq5Q9=5C&Q?HP*>Yw5 ztZ@Pfg+D(~p!*os!dvkem_KfO2pE)wa{6=J;NAW$i8IJ9Zlhw?Ox!Dw_f~lP&_icV z?oAlEy#Ks;e5wZEsQkW#m9H?G`0zA@#y7`^Uv3=fN*H^&v>KRK`rhwlHfUdS-l1wFTg3Md*3Ce<-I1fYa^i{Pk15UY=iG`r%-MxBm#ul&&p7H2r0Wx;5w7WCBLEzx z<#E@>tjLL}!ufTrAFOO)FDk#i&^LQ4Upo60Zadv`5cqfj|N2dY?&}RS_4M;kw(3*-an`Z@ic-r}~{ zIgbN6&26wP0&%&R^8@$%a{Z;4slH4(>e|{Lbs+xqyrW+D zQkbx>OE-1;STut6v|V*XnhGbeqtl>;5iQ1HX)BR(ZRj}u_L4k{Q5EUokf*c@)KgDE zje43%%)yw8_5V=W;ticHFs)t2|7b2~_5`T^dOA$6sakTST@G358g-d)?=R=T9xczX+jxe?q9I>?XEPJ>kfFbl-^cb?!l!r9CSSCioe-+dQgV@9o5E@pz6GIi3};K$wc_g?_RQ)Sto1AMg+<6}~}ZJ+Oj? zuQ~d1+>E*988gU2CLk~aK*1$qVCA?%4lNQT*6C9 zJiXm3D+l%tL&kS5Wfd&J*^canYD;4+hP$eb@QUA<%e3I+hZ-lJyI!#v2vR$kU09nI zdPisn;4W+fTSArA1?Ik82WoVDAkZcx&_AZq(^fzm)nl2CKS0yE?Hg3rcN}!2Z!K846~P zWNoF_tqu1ccD^iY#}4eH$f7mTP6J@lPuq7Z3M3B}g1+@;n+O$@LgfRZqsXdTK1>fA zFGGTs6z6G+ITVLD1AX(KyJKGrNFQJuNNVaqRPa>@fy>FXOKYEJmX_pAEUm?4R4gpR zQ3=Kmc3`a?u7e6~+Qo`I8SuR6K4j=)WeC|0QKODCdZO@fc-;Be+I$0Sqf;4m;$NaX zo>G5}wUy5E*w{xH#HUvu#u#v6Xe%C^pFI)b5)>^ak$aBf!Ys4|;JbWU2t%Gv8~<4cYlDyPk~Oxh4yUPnK~as*7ijv}cd8TSg!w^T{lkQ!Cq}x^3H!!?k86 ze%%|(CbFKPQ?0k@Oaa0hO|+EPzZf2|p-Y#q)R^0=sRic0*q7n_5pH5%1^ftc9@Sv3 zs(}!}gZ&MgAKd8RtBk0<0$*ag{o-A&)FBoAoEX;ORHEOX0QS$<1B%9M55T}q*P8GX zdPB}iZ4SgsRQ$Q3WTtK^id%VC`tqOZ>nVee$x8Y~bJMe9CjAKEU`7fidhCVj_DyItvOID~*hPs7F-i$Ez%JO|oE1h@&yjM%jfP4J1jg=h5+P2+)B;fKoj zL{q%b^(Bzr7;zrcqAKen+@)T;!cpLsG_yFElP z_R|>N)TgCbJ4$Y}wCHuq&q16l5f~2^b=a6H!+lcLS}iGE-E)4N&v%rK3 z-D*d&0J7J4e$_8qt?&lmB2#KC#Mz4>y;wMSMSURl0Njq1t~gkL7R1IxGMO$3?3y7k zlh{(cnDTFiA%U&%j-$7gNQ^fZyka1+;qB481`QqOnBUW0amPKe@=Y;QZyAc)SY@%g z;9}({k@ve_8AO5hHF2@Zb;-r3rznhnHp5a^Vi+r3!n6-z_fVm2m8c}op^vWVJ+nPR z>TpE8xN%fQ>OVNEuw1or!WOkb4rxBsD{f*rGZkv(2`zCx;IF2`y!{LXHj#fx9?A+m@|71 zJ1_w|y%vM|^K@RBgSwX@$N>|#lTS-57`iN?PqWdmxy3T=gFRba#n zo=&S~=Q{-p-JYu4T(5Sk(>lgTVR4+M<_VeD-S z-f1QqD@qrH5$Hk&MIuA;%279Nyx%UWCfjT#aP>r~;UykihI8w)gAv2MNA?zhh>BOs zcqy)!1P!4_hV08oN*3}WNJ5q#dl_)$gMP`BT7(H7^_we=t&l+~r3k7r;YG6*pNRbR z_*Fr4{Hz1*tBjk|-*LUU6pt1c2qvQ6P-kVEQ5dB&(m&ddrn*@x*jc+3Jh9KBx~PF5 z$ie)D=F zu@%IuTVOPJeL4XfV8c6W`)53EGql_D&tS}aXq*)IfRh{@gR+?e?%8A%C7`Vna6-vC zA>B=ntgT0YR`v1x9XYQpg(NQ~ilv=jkRia=4VbC?+ zx_Xs=5Kq}H5DcXnqr_6&qU-fm^MP=Vs3GjT$d6>_0?_=!n}yFIfY4E?oKDrQyG zOAS>|q8}xKMjNpgimLQg#5OW`W)RC;Zx;2Pcr=WwUs1-e9ivb?BRVzWFiayiwy z#7 z)Vdp*(>W{0mU{v+;v2=}8P|O}ZviDt9T3|Ud^3UnpFHy~!lBebz33TBrJSoqgIqTR zAZ>@>St96(s)l$W6oNqrx4}+wfbCuygt$R|OOan;D^WtIk$}a_AND4?5yyq@yzN_DjhH9T@z{<9$ykzlI{%Pksr0BBw(lH-9HZR@t>!0N^>@(#vW3ReLY1edTVpjgWLHl%R9Fj)3q{_Oi8>mGxGs1ytIu@>( zeu*ao6mMVXvXVIOH2YgdTCys%VkBtfcYeb3oN&N9^6xZrsMDYc9Htg|^xKgfpNvk9 zpal^tkZlsj%|Kgl-Y1T48a93B4rpI2dh?k6;V`~QmZFr{M*6gHvx(NYF(F}3Z3Pb2 zf%`6ufSb|U_(KrTqffqtQ@KAiL!Yw_Hy}q8j_Je%Kp99&p3{?Q4P2Dt3}|wh1SIg_ zgARK4#x6+skBVw0!-$%2Baj2Chc>?qPq;OCh=p4$PIkpVxsthh9|gf*MV@{a`SJNC zhr#)~bx;&l4Pa@6U=tDCu?T@k^RHL$vTli%Rkwy$60Kk-DB@stI2PGve zaYyfG_unrPQ4UHMBTP@wT*8?ZZ!&u8*gllO!)!SPK-hO7oBzzi${(P^-?L&71)A}` zzsIx)9L@hOq2*6UrE%d01e9Er%_VhxcwOTH_&16vvaq$buP`fV>!Wvz_VC(iT=@}g z0~zqrB~I!f#3pFbpCR$yBT4zN!<&8@qp_6!x>m@NcaPGLq#@fw3MQm5@QBs0c2>S| zV0ulyA+S-w{p^2gqx)2?<8t24R%)5e&gDb@=xOYF8d4){tzo_4kv=VZ-;Zb%+U5RqD z#GUZ{e??z*D`aHq{NqIaC;pQ5e^Y%7oo)Y{?fg&ip>tMMfdl|vE~nD^&*tg@4FCvo z1`Gi3U%S|ZSvep^l+d*qWgLGbRw4q$Vrc~_a%u2USN&f*)rdPg9+Aaj4 zqUqhd+Z<>6_GoKeb}^Jv;eL0oI8DipKNueBR>s^I5|Mw}LkXqL1U1Re-R^B5xx%SK zL;vhL0IgvX@<8_z6jKcM01h+sayHf_qEJ$DR0?z@aXOSSkRNYW!w7{E8Z!0a$u1*0 z5mqLP9DCe^&NL`H=$+{Un^n1u%_vonY#>KT<1e}6_IB$u6)E3{aa}Braa9Rvt&eiRnLmiH?N+Ge_Z=zz{PJahd((o<+Z+glYdW_ zu-bf!)K{`iM$10cw8QqUkLlSqoqpS1{lWSiN&BVlrQ06*RrM9l^a1>zyvYtZF-e2} ze0DGZ0EYjq32m+aDR*|Rw*MVpO6Oqn|7yih6OREh;6gvKEn zGze$UV%vqs9RcrPL>(DVT2l5(Bnnw06Oa|^iD4Xv4B{G5LG%O%DI#wSXH5qogG`c% zRR|^VIHo0tD`J*25Taf#Eb_2QL*9`Rs0NgxV45QN5>-Vkgu2afuZn5q>mc3Eq{jIk zU)oFNK*D94q%+psa)O&FX_7VEamh40SlD{}E1$&%+r2gRfWM(usD1w7zJ4ql=DZ#b zRGl&%VUp{{M~o`c7zq%Mgbsy7_arbOFC2>{N}~4xZ|(zEM$F9 zUFpGu!FLI>ve==Rk427JO|1 z7h?CeF2M?S$GeV3gQ;L^gs5@NdW!TrkNUh!5j4;JUH-Xkb3b+-%6~HCu%1YU&(8S- z-Y?|VVC%oPtKY$t7|j+=CL^#qmHSSWEDV|GUor7aEqbziGH0ynWAamVZ@_K7DxPQI zwfsMh6-u3q#B_*6o~ENz$XW1L;HaRidvDzs1kM=cm@>y%tBXvJCPP8#@#S6a?w+|EXyb90-}s=xf&WN982RU_KIswE zWx~lQU;ZUB8cv9%o!l};!Xinz$(2C+Ek3eZF;3f0C#PcSvfVKC%Hn;zOb>-Oq;>IRb{2y+t*`bYl z^vbA`{S~mNBGVSqBoXBnD>gYwlZdM2R$EV>i~Dut_bs@D4kaOS)_=IMryvOvG9-0h z&ueqb__LRn|M;!x?YH@U->uCthnFnUT#qEuQx$S$xsz*hzPT=kKAka5mgHH-?UViP zWuD~ImvT(9m-1h?Kl8)m2aanSJ$&C=M+fgm_HW~Fts6b;-E+h7b1z$skB{v~bsPPz zesKHPpEPfZ&?jqj^2e0lIP#|P(s-#&KVzg~`PyFGorzRr;o za{YZiD6?vdM|*<*p<=mq`iBbvqKy()77xKd!Go&nc!7cy0-l>XVksR;I-*X3`T%Z+ z0d<|=J0^`%S3LE)FCl?mfoPV`c?v=F0MW(IW9T?=Bp8M{6(8URERp!xZ&5lx=^`I# zDkTGpW}96C*+hZ{N+pwGx(pf4ie(X}?}$Z9&wxj}8Np|E4WZEF&yZTC$R+ zz@nzG>WsGIH9+snKKxM@HDrqhwW_U(Dw>Vvi9=(7*k*b-CquC{>&hdkP62R_(k{u| zN;VzT1xP#55L7 zzAdVefR^DVu!kYQi~>B?(bP#_c4di$YL|pCjfa6WPOyeh8V)_4!f0edZ6OVhQ)SR{ zaSy9uq+bwJ3$mF013=ON$z>8zBujd9N#UN|f#pJ)uI3o$WXR57(kcPn!&qLz>;t{j zV$Kzt-Z9f)eZi?aA`zlQsN(RpPR6o=!DQH}7MW(t0kfRLckC?dHx0s=uR?lkgthms!cO9xg^L`Tk466W?$td zo?508e8MHgmg>(>4pMg3&CBQ|q%k#XW|boIDLN*wX~>j!B)@hUN9Uy97z!m|3l~A= z637Z@h>U`e57#Lok*J+*h<4E+pYq7AEQyo=K|?Bum%SC03{_jYW9|^v(UD-G4MDU+0?pdyAvI=T zMmWOq>>#0<9+yNTuuWER8ba;=5^|2ka9}M6nNAIN2uet(5DCY6N#i@Gq*OM~NG>?T zpRlc+ZV&8b1@6-+E`${m`=bV8FWV+Mhx~t(ol}e`QM0zkwmq}Q)*jooZQHi?*tTuk zwr$(yKi|o@Iago)o9?WnvpP$a>aMq*3M(11kUH2TQTEy;hju`JguNM#1$n};K+-8D zV7Zp{KxaCYuuBQuw12FhZ{zSJY8Phwll4ePg*&UCa_Jc6;CZ2|hodEm*Pt|ZF}Pr( z%*49aw=}z97Xk+LBzdGFI^}=PnL@{a?kQ)hmjtfiqE^0TyW_|4>H$HvtdFm$mbz)djH|SU1p_g@A zJP?&YcJ$pZPoR#h4Ha?la=W7J$zcNW+;c`HV15sG4ndQkNvcNBz&*hv#jLnpZ}sFz zNMSVKN~E`--2I@d>3y;s&bjQ6&6aQhd9T z%w1>YY##NoXr`H+1xxhkJ`$VCCVeu02`EeQ!Xd%aBSOeN$Xo0HVUuy@o@1s~d1yCM zbHrV#ne=SFMwXrBj5lRPRZITZUP1YyRn6a{(%hoL#~6tQg4fs=n+aWfjD%W(+j{v*1V~zY3mOXhdGkdEiR)eGq-r$NXlZ|O9WISz ztFWPGs0g}s=B$WYKiX)1gt9fZuJY@&;BK!a*V}2!86hR|;ANu1dg(%{6gQJrihN|v zR0!HQDD5p&j8&a7M~{dJk<07R;mUclLy46JY&dFlT3^>sc>mZfEMA!QPR(QTn3REp z*+V}PMD7c5#^Pc`U<0ZiRbLTjYyh>4+th!;W#~*)8*Xkj&7h^r@{&NakYpk&2R(-X zQID5qs{Zuzcbg>+t^~bvv=3!QSl(1BOFVM$5%Avxh?eq66ymwFrM(qHctie%($3h@ zQQi#V5?dK4K>?m$M#-x=vjbg8wB1&jiD?*Ti8Bxm$GSe8l9GhQ zn|1Uo2VHD|Sch0~1T!>`OFOgo>$x(hH~lAG<-EISm;3aBq9XaCpH-obPEcY=)cAmj zlJJ%IkT8se(go+yi|}{zOADD(Vypq#m%dBx6r)nR_`i@27w&AjM4$5gcXXs&BEJ2vzLhN5{Oaxd5 z2eu@wX%hhUa}<9SlTLvZQe%k<`A@A332kCg{2UyYs4Ce7h=?I1Tr;MKWyKbE38vaP zq#Qwbea|fc`v;tUn;Ic1r!W+y@~CLGFt}Z@z*aH1YZlHc+y)G1cKV{avtmq_Lcu)$ zX7|tC^wKjm|3P)P+L=69wCg&EdC`TZ_(+^^q{3^NPVN#wb{dc77ml_2@ z&&COw2;nB3{eq`bUW+^`s3i?b!kJwL3z+u&Y56D-ZEe7PCT_J-8zp&^)z`cRanSnL z!_CEb?ZpQ9{n4AzW6BqgLX1JcmXOJ-0M*kL;|n z7P@2p`&`fn++#HH5M7|e7Nx`r6)KDui8v0byFmjf9*?obt<23CO+Xq znBw&kXKg>gC$Vd~6=u`M?pf1zoX8~qG7DGiBKHy%YuEu)-=_X3Wscyy$3J8QQm&c8 zaZb%0>#=>x`9~Us3xcj^&UA`|5KURqvG+J@i_e>CWA9dXdBZSQBHxrD+8w2{s9Hl) z@q%-Aj(0u*ySo;p80t85Q5sm(&8@0%lvOXJnYP7sc#V_xoruOwSESaTonOV;0%S;q< zOb|AC08HLfID1nlY3VGUF;-cOj6q`Jf~XQ7F^*?;)LKv|_@U-}%M{Ebq9=9xS0ot6 zrKH%Y<1U?55wVm#Nx;RU2O2XbPrsVa4>>fI-bt$EopOs*TNGcKhtonnbwFh$x-&%) zwe(mxKiFhfj#`IxA9kC}%{wOx+Y@Os`B;`1u3_*Bs{PTKt@E}6JGo9}Mu>uR+Ec&Q z{w0J-b!$7~8}8v~5uqPWL!Erg>8gxDX>UO@YaE)ZoZRlDDuE_DAL&T)B&Z+1#)%>` zV5nEuQ%}YEu(C{QnIg7L{&L$%>P1fEvy%IksD83T4_D2nU=oL*DKs1QKPu4&X`)=V@1G&uFkcIH`Wg zt&JR-qV|`e&opv&5knkp#&by8x_*`lnUxoeB&Mt0yZgdQ%81yGnRR>;N&+O2gZfoY zut==e&z?Rs7)S=uWw!f##kNbtE_o-Vv(`2yMb>aSyxCy+E%fKe)o{P2>$HHsy6n=wX%gN*Ak zcfoo>44Gv|wT~4I+ABnGr}qj{wIEI{Vs{!wY9L;$YekaHD_8sZD-EyyFcrAC%Zi;N z_#KgJN6~ffZxtCv-${l^U4&ujbK^uK}4FGwHS; zbI+nxgs;;00$#(qO)<(h&Z+biF8(Ft&v3l<km?+SsfDSbMv(OTQ;T_hx$QS~MdP>|L(N_S zK5JGHZtN`iC}G%3DY6JWZE)5x+)R=?hbH>;*SAF4pK8880Ik(7`b$pO?sQ|117_q8 z8e!v^ShV{Rp>}ppTrP0Xo}4>(1eJ|i4O_Id1v)*BuHcv~{IVsgM0Mp>!k=2TvAd)! zOowC%&aT~8&~C^KS=}5DG&>1~x$^GfV?FG#p%rm2#j4qW8e&$O2Oug;C>0uhV9ya3 zZZLzb;=XP`^Dv1ub9oYmj4`_TS88?tX~nJ=&*>9^HPsajaHiuvurMkdjjf0v>0QJ) z02|F*O(V&e39O#a$_E?BejDZ)q|DrNfv(O0=JVP$0xsa08B$DF8~+ng1OO$QB$AgW zW(P6XO#%a)UmNDeNgEXR_1XX)p(Fr8OLAg@nV*i!2A%IK}LFskFfsrO$I~ zY6MPRXrK`^G2wQd8rXedce>+VQtZo$-*OLnz{$?OR%2qmCfLYq6f{hjJ)QbiTw!ux9bwRktFICq{lWhY+LkH%v}7IW5kJ zHaz4r&j8USBhq1RQdtIQ!m_t8HL2C2>q=KjQ2GYqkJ>4xA2{+*-}Cf-#tHE6{--d| zO`U<^3%W)QhwD?N6oI2u_2$D5SMGurm}&)$(ws44;??)hOd{7~E^W41ZZ6C{ZCah{ zz?_Oy!4DK#9@X1OtT6=Zy-Ld`%6KaTnY&8FLTkHtsErYlDuv)LB-MOETF_OX5~)5o z9wk4*X5jHG)7qps$iL_8B}e*mvc*{EqBbn|Oyyq|Y~FU|$*g7PWP(GNy;0#lM3Rl# zLoM?*%upCl*#vpTY{eMqgENN-Hp+0*c&R@uo4laKZd1JDIa~M^O7`}v%M$^0mBBr? zEow8n`pl?g!LpqD%&{boQsvNg1Hv)U(f2L4JD*U>&sm9ZdewDW(;YbN@|{C_bivs= zt>}AW#>6_3=)u&0%gQD0tMj4{Dlm0c-j*L3uj%X5*fz|fD?P>&xHr1aq3dM5bd&Ht zI@pIvi}SAWe77nUkX;S$F0?iV?)oFC8$?T&_Kv@*tECSKi+mW=E6+vJS2LvStud4A zL4smdtPGQMttAU5I$rj{9yvtdU97OzTQkJgP2M5n3^s@N*c;v(B=O0Hr76)0WBPV| zUSPM~Pi|Y~uo%08Ij!WTrg%MWuXfF`IAR4YUr#%lqGHo`V>A??YBKG_zrChB665-sMbabX2kP~94OoU^1I z0F6?%b6pnJB39+DxN{%f{=2URKmwR8Vdxib%K0?~X6}(0Rp+S9!bKM;OZVQmyeXUL z6cjadY-s(ltSXi7%8o29w?6_hB&9lWS)*fI8AXdt2XUkq4oPv~xFD>-oC%}obV`B5 zuIPVi7$U-<==1P?KOhqI)bq*KtT;_isrN5LM~mwOqLNLzCGYYGQ`pzjXe3R|l9A!P z)xHO2xn8)H$XW@-Zy)5wPuWzDUk(w2_|UWz{*_b#jLe=_h>Cg(D})&RRxZ^|OF^b$ zo=MMkxLQc(9G1JK=jr${e{MY4b9e_80#|^M(emFR*F& z+xjvY2?h8$OLHHexx^(dgZv4qX&sU&DXCP7Dv2qciTSrKQ8X0w*`Q;qMm?Gvi?nsw zk|2^!?XWGTwrQ#vJNBTC0a$N>qWjSLgD;G=djZZHMjPSFh_ET>OVkCVwQ}W^GTR}@ zzmz7;9K#xN3{~>sbOcQlt7w`6+ZKh|DoZb&-Z_>DHJm!)XpdLk?LeU;O##%O?O`4p_>G#7R!Iec>6m6N5Ys;ZrGf97=cq?a!l^iwVsfmW6 zn%?>MmZ=r_IW&08mexxPhvwE@3&ui+HA0Ps zNYiZjf9f9r2XvaM)l~Z7$bjm3PagM8CW_H#W&UaUVFfD-NWNoQDL#E)=4*J_nMgGA zNJo=lSTUaAoMCs72A%$&((}UV%w16Fc0r-zI*#`2ad-E@R z^RZsr$#rBF;7LEUdEG3l*L-FsKBI-dKN98YrnCF9MH1iF6cn)pTa`H)xM|9Sme3Jb zUrKBh441Cy7<(;u+kusqA%5nS8r-D#V|9#jw@}#yk&AK!#9MpwpCuvs zmq|h8_P(|bXr0g_(P6r4@^q_T+nI{m{P3iGW)1&fV&59dMz(x>yRmEy$Lmk>M8w`* zcrIgZj783VSgs@b@*BK>r+{N>p|0CFy?SSWYfIRoO|c&>I&9Xth2Fk$*aMcI7MVCL zZ&l`=nZt(hp1Lc*$Dy6h7Pp?Dx>+gu=yuZd{TwrOYwLB-M0~H3DwWnb_=wcCQoa4$kLtIg%73Urv$u?w$v8{uGj z6U{dU4A5pRwC1tTlT(mU*($8DGMenD=O~QWp|)_S9!ISzwKXYlyI_)DG56zuZOj)U{WsmZZ*o=*VO;j7--gZZt?D5&E~yeDnRhcj zJBLv9kF+Dn-Stk{@hsR%3t>Hau^Y%%z)^ZAU?er zFjZql@hw#Zpaqlc{^X_pI7)!kRf2mz2yoXBLEb(vAnBS)Mzwl=zPV%L%u3tYG?GSk zGk?PGwqBbIM<3$x$MECS#)rc>wuUWKy zWseq$mU|8}T}M1{W`e6+>J59QI*)x@EAmH@tMngpLU1BfybXqmrPF6BVeY=Zey#aYX}c*B7&E?ZyQ!YhV& z$5yEgMeFNLLjgs8pHLgDw(Srb)mX=-2k6WzCDyV$GK8xf>F9l_@Qzhr`*GTBlz>L?SFR*`F>bY(#LCT3P)-VJ8ziLR|q19ff5 z*7Tm}QSgu9^oTjdmU$8sRlOHE;|-D%7r~+6^o%^Zh6x0MHtLaQ8zU?t_T*JW(;LqK z&A$oK4U1iv!2iD7`kb9+8oeU6=aTgCT3_LIHWX10HzTK*RR*CZo2Txa-M_DqHLCaH zU%Adypc>nt(ollPGO0vWLVDSEEGe+Z>}d?!<1T2^sUWN4aGsnRw{&&@IY?$+D#PX_ zDW)58GoTHJ?pX6;k6bWKNKU>4GWKoiTKJDr!L*d`tj4;o=td}aRn(RBE-uIY*;b*%iFkAPJ}4@rB`Xcil)?6RA#A6CN!LR2M#v1dKW~Mx>>QO4gWgo6VBJ;&rFa zH|#{Lssek~Z><~oVye@sZRmqr(FUKl}>zfm$$A>35Ix1zkxk>fh6zN@P1hr;PPz7LZl}DAcJk^Y3oy z9#D~{aBaXQHTRi$f@=dSa4MGDw=PxOnRM7!245Nj622MTC@r2Ko_e)F^MMtx?>QiI zHnIkVv@~2K)X|Nz!s){mHRsDs>Fk|ix1f*fBH>GZQe{WOHg0inXv^N+fv6kkjqjScjrjgQ&Jk=+HF;TaIIi5K(O+FCCyBKfP7rxF`?<(vuq#%D0osk#Ab? zRG$Q-dYDG8DEjG71`s85=+p*eY-nNt8yC)^EljGbLcL@sgF=0vT|Fkdr)Hm+V8zHG zxn(Xsv3TsIpV*i?>(>Yht4W~Gj}6?O1F9s4J2+ATFt8|uMbZ^6Y8JbsY*+}^~radSo(%IFm4h3 z@af`DK3N@t3c+Ht7q{Rqerok_*&);b?-JuqTW#yiYKf`WPS<1EILrCc0z-27U$pS8HiF_FwpdZ6FL!{ zxWpFuqxQ&3$B)UI@>(@O@D5T6=MoP~w#UxyY$0IQu3|hsv@Ggg7%MdP@1}*#%{NH0 zp(v)28uEl3>Xgm+Oh+rGl%>NVqp74rRqm0Hf|8f?fd@@%h~B*me2*vK)(;#`&@$B+ zzYkSL{`7oU5ibbftiu2u7qn36b%0IHT}FrBRDsn-KCUTq@xjIdr-t%;_xk9Xg`q|# zZP$6p5+I=-UpqoMt4DpD1l1u)A8&oi?O}dGE%Mg*e}w04EEMqUpnCQl$g@qaCGpp2 zrykGq>j-Xfi>xwj1B2BB@wBuZA@4XX{kbIH3?C}+(f9b za7b4?VvRZ?r)MT%a3CBcJf|dc{IdCD{Tr2h1=}XUSWhgL6|kFsM=_!(B#X#mP!g&7@rWh4c4pYiS52zMECqUeT z#g?3H^O_zgJ49T;gja5j8i1naMXytp6jvgr=(bL%iQjYQfUbbcs24O}0}<-0haoOL z=th&Y&DX~vywM5OaOAq3{YNN`^8{n!I2z>-5w*f3CIVzN^zy`Vqb`9Cr9+aH%z>9c z=Y(DOo%x+GEf%r0fuNs+Qldn#A5qWQLVMBI?_* z`gz&0h%PjX$c$Kl?*byF^17oCo?uVGkyRpHe+HcV>5LvD!8-p4E(q|v^zBoAHZ|P&1Vea)s99V3^ln7?2m&#hX72*E)#%DrQuN6ISo@PS zfgVZJ18Chy10Rw=~vop^|^_!9`!Esc=FODJR4GGPb9WkEkanb&gfFLE*pFc4c9Kv>re-fqxHD5{ z;BSN*`xkk=jNWp>5UfY9GGx%Ad6okDu5lysZX{$;pT6pN=Fm!ZQJ-AFVu`o$9hCGO ze1Vfvs=_HyMiaSH!CcV|Xik^NM9^z)(0DNDxtGtBNDEYv&C`VmWc=t2O@gVOOjldJ z2>o!IEoN(YcgG78Zt@_&qtkrSK9^}@Koxm=`T<>;1vDb@-Eld$uHK>b)rVLB@l7WO zJn`w0J2~6FJs8!AVQz~fvD-~m{%N|WEi7=KJM=MPUNq_Bfu93bFWb94-xggYOjn_u zeaQ1?X}kpQv1#5NsB9|iyO(BO^xGdyUXIw(n+OgVSQH6z{!_|Lxc5&Xh}|Gu$uTd> zyl8bPEyO6rF4U4oQIo9~mnPr^4|qNIiOqa`87^Qx|2&Tb>siz@Du$UA7l>#r6Zz4{XI!3L0x-`LCi_ zsN<#vI3znRiKwekPS+n60Fr3$4r)hk3JW)u_3zK95{vy}A&*ea(0ATu6z&8Wth$4& z&TUdzIoAoNa{1lXK*eEQ0=Atm5v`;mP&Me?WPjLsmf60($ik?s6P0~~XeuSRS&^#Z z=iivA0>Q9Ij$sta%Wacp&N151$ciWv;dOopi|&QNql+;;wj>MSfrRlOZS&?sQjj0l zgGFkX&YcO(IV4Xc1+AS3=1{(bVp+tLRZkoRt;^>7lP#rwa4k&;`F09gum=A@F&Clj zqU4~RmDLkl?z~a-x${t?kyi`JU^-87$pu`SI^z&*op$esrsbx8NX#OWgQOe{DmKn< z6uQ(y12x0=yp<1oi($nslAz8ifwp4})g)AyhwM9iD^mtFfC{J_YuwenYdTgJ0ZsU@ zjeL)M*(+}hv!}{4!%)|L8BZeH899zh-X(v3Nmg| zTk=7p^zQ7;e@|e2{LC?ayy`8M=I^*=Fl}34@Tp;J0FBu}MySk*_2>%RJH&GZ`ifxp z4TAcO5j^(Z>=|70>JiiDn%5upMFf3A@yQ~2eqnw#-x90~IPDFx)5Rjvf=lJ4bF6eD z)+ygwQiilcj>DT_e83rOI@zf5`l3V3qu|DqLF4f0)!FN+9kpY;O4>r=U2z-WI|J9_ zN^=Ju?CGJbQe0!l5>|B0F3u&_Is!pF&Ez;yxqDYq(qQEA z_f8}NMZ!axCx>=zd&6~1lA@KB!|aGk6AicBrsK>tB#M@8%A5g}fRAY6?LLyzIMDM` zl66Zv@kTG<2x#}3^k*myoCrfk%0Ed>`s65ay?*6y7^h7h=p6Ogo@)gR9?XMx@I6m4 zaLD|;H?DLkv+^8Hcg*vQ?0@u=37y?|x;s49|B*TVkAe|$W2Wmz^yF$}!{y=i6`Cj~ z=10%wR`yrXn-HGw!Y5rad7)aqf3irggmKY$$|8YoQ%P340jJ*JgI|mJQ)!yVb9@|& z2EbyAE6O>7=ci#O`5vyQIvXIq_&z+tzI-8RC1PMGEKO0~laT5yw&QP2tP*eh3x?E!CgtgkpA?+(Q!aM7}yg*ja2{zk;l0;+s4;cZaZn#vRjGi>N04 zAqhdFU5L!$r-)lq84H&E72c;^i+WnBkWq9J@8nn`uaGY(j3l&rb z5*oQwvWacUO45<0?D*%TOzq(Qs(TNCWB>ZepZ1brxkJimCjn=#V861aLA**y#Xrkpd;`3HP@PH zF@jy0BR+* z2(AUh>1K1wl+{6iv0DRui>e3V+PqWm&JMZuq{C4Qp|7F!g zU>eH33~A6-$KmC<&82Y>rOXjSx{G%_141lF29Aa>g2P7y@WxFHZb#zxilq{Q13*n+ zXTTsVWF|mu-WDo{aQ`@GB8rKn$RV@S4hlxg6|Mu z80a^i1z?0I94#)Fr04G)f&d?nFr(52v3B8bGsgc2LcrT~1Ym@z?EP1BahkC`-0xQ{ zFBj}JWCd^H9$AV!>4hpMBK8LuQi)jw+8o^(He!udV65~3RbbRd*SMBPywON`x~^G5 zR8!e_my`tyVyjmLpoO`$qXLFvpLWWPzzI=dxa$=zEFw1BjWFjpeTR#S zCFgsy(*r|0v2;>X+5mz&G?!#BqV%EvH(2VXaRW$I(^b<>@v+jaHFoujjd zwPWVz`K$!N@5J!r%J8GBftQN~m(*`>McP#@4m+cn^@#!~4}inY+&o z7oM7u4=)~P%*cuD=L_QJ_UD!r=f}at!f-rKNDdwg=Uk!oL$fz`XJ-U{;I(c3>D9}? zflO1WKO=B;-ApCeNQ|n=pXKzFgNx&*+t-4JyUsU9N4G;t@c4@B2bYIQ=W#5rO`GkE zX~hTPB{aJ(Z!qJYF8i&U^pik2k6vc*rUngcm|gs|Ox{Eeos6GvJ?=l>Ayk(Qa|zY^ z10xyaF%=honOfd5$|N9;I1IRNPmb?uFRXN9Y;AcZF=PIn@B(1|xGW>;VJb*g+FN@< z@C*NIY4C-=s#j|1qsxWbc9zXJ!N)a;o|&by%^GNE#O!^C0ON%VdYpp3s7YA?R(;-U z_4YmVwpGP`eBA#0qHWhHBV#%T#5QWF&=1|zue)RRo5UmJ-K~d_1fTa*-i&* zT)u$fT)Xt);rV+2&{s^+mAiyeZD}S9@AP=<@fp~3b#x0v^2o!7=VlgAovhVOZU_-{ar=v0?Yws3|=U^3#38ckm%i!UBLr@l;Ap32C>ahds>@{L4! z&=2B;$;P>7ZuQs5gUU$4z`}&#zy%daV0WW2K!4{cu1DUE^+nNJgS*#(v+u{FH|Z;rZj@?(LRWVR9CsYx-rXz{=!j{M)to0!*q4{(UcsF9PI? zp2&ySCMG6p>tat<#6PF2$F_MV_|-pL-U~1`_#x)%W5jadI)YzMbz8}L)?x72wi;Oe z`4@E3KOi|^V8O`&$7g$9!|?%+IRRcTka2P#1A*NhWW7|Q`dnihBPuteS4p_@{YuTP zG-!i?+^!Od9QTj8Yt2s*7FgYX>)3liWe@@D(?`#yFa0B5;21%J>WL1d>#P-$g(aw& zhoK5TTb<24P#{gc$Jg|T^~M)hw{Pv=tP2|c_pS>B%Zv#G_3?xQAL7Wr9|N?RU^^l& zbkvUdb2p*`7mlK~1%18Pp%%d@zD@J z5Lo)&ANs+Hm|-tcDV%eXlnoN1a5Ou8v+HYM2PFH zAxo!gh{co|jL8M{wK+8SYiXF=tW(h^WIL=}UR-#1tEq5+<{*@)IFe}??cC>9$C+ST z-~HdgWtu{KDt%LQo5PPgfDq%!9LEkjF$imH)djke-~4KarKZNHvFlbc=YPPrMCJ3k zuZ(l)Oz^1j9+ZMyp9W%F#n8VE_~S3moEwbKus+Lh$_EO=)kA&r%+^^IsAO1 zH`tqaRHoCoJ@lqih!sE2EYlGHr|&Q^R^fkw0S^w0_{@j^#mzQ3KGQCIoVc=}_1Hf- ztBrcGGotTK$+gD|k5+bg27d#t>_T$AOJ5}aJD4_^>8v<-eQ3GCzY)nh*rD!mw^lpK zFhz^?xgb}ki($lsecc>d2Eu=I;Tl2c0W0BHcMJ~SaclA7?e1#fNSIM*oz_W%xR$|{ z3Ds@wj)K%I9=yEDU_s`wHdlYwJ%Lc=z^BWQ84kgKxT7|>G0M3On=nn-zm=O3csFct z=Ybf3d!-hc7P?NL?)sPLOy>QOI~XY}339j0Wv$bVuZ}B2?I&wFcsN87G-JJZ8vmW1 zv5R)Q20LM~^L_gHG7<-CP0b&`ApA+*Gzx;pldabI=9bKBM-nbZ?5ikffY6LO((bXr zMd>bB8WQS}#hZ?QB2T%CoIdkOmaVR)F57F$^bRh@u9LyL79{x1k=*m$wCDfS)9cZO zU1wKS%mtXUyMlNn1-cP;2FdZda+ns z)`lW`_JDnX;ZpD-iU=JG4@(aZz2c7`8|4Q$0?Zv&K-}bC0*ZIHh7evcUA!1D7m=+%iSsliUc!5GKAyFrY*072ghO~T&NX;}gGV^a9ay#OF7|XMNpD7HVWuZ?$2v2Wh zPGT#c06)C7eJ`$faymTQpxD{pq-artF?#gW6Gj$C*<;~5xQP~hQ?Kn<@c*dgJvcgB za8SIYrRLT;r$KLvf85=?e|A+|IpP3R4gW-m`)OTYx>m>Zz|ByXueXu6V%1bQfYgds z$EF1J#AK*{eD^a0sp^=eQ#3_-LOyq02vej0Du2mimu21X6XJe zTF=_(zoPY=)3swZT2Vu4ID7h2v>R9JjAD4@EoCmZ8hui@MkRJzLL)@hYL zb>&MElnwh$^zgSGJzw|VM;9kcBeprN8$B@%++3gEcMG=oKTj9qGWtI+XS_Q*-)dh^ zdvsq_J(knw%HJm?OCBEI<-vQ44+b999JFIQDGLwf^4xD9Q;(gjld(NJGBdJFw+rXy z9^2I1JJK_pOH7Bao}b(&bc+uIkDKM2aXq~4Cs`^Xs%J=*JTkp5v5N?3c2GQ)2H%Kw zNEVJaLutw)hR%CWU!-n|WPXbEOPSy4 zMT+%Tw)KQ7yNOo8m5I~K=71$emd;3T*>%4U^fa2vbPvq|KW491a`SoHLbH)v_%nI{ zNWdpD?IvEX*4Ex+#m9>;v1Ynr?j|qu*;awCb;uMTanRJ`)C30PdNU&xukdk@$VNGvqS;OCoDTxcjQA0mZ4?G-;wnq&y2e|C;NO7%#6b| zi>zYqUjXhTES&kZ4*W>?A~U8)a@N}BDv^z4DN9`2_i6G+=aK=iJWZe72=Eun5m>2~ zT&NCU9ZyPK`(mQ&Xg)t{;lE2(p(-)frC8s-I9Bc0s~;s07X%9B#9uh2-b=C8O)c%O zF4qCVMnaVl5R2yAtEC|3@qp*jN+&i5bV_DRBdkU+9stn~q%)?1n7w$M!7mT8a;5)HvaZnAIo7NiaiagI4B{=fn_0 zKyD@mNN6rO85rRHuIU+Cs9|WI&@jl56vV-nx@k3jD4~%4yEar#F}8Fk3_?ceXbO}N z#F1%LNcBvZ*aD~l`qaEBG$3L9Jm@|`OdJhrs38}aaAI9?;kohbV ztrt4A59RV4VoUG&2+|jjf7!88#d@UD=tJh}2*~9&7Gqi}+u+~~FuvO*kRRKy5bq=X zoE4fb&{}vqLzn);ElkjYlOKsu4I>f{vG}?wx*F&jRw?2P@gCDv>vfV*6n#sgTR#ID z2M#Ej06=DGe`~MAsSpt#h^qt)1Jc~~iolsyQ8$JL>8#AiI~H59Iw#S1Dx2aUDW>7) z$ZYF9T&Ojphzu9WATGMq#5FuoohE4zPMEip8MlA{R&`Bfnn@ps6U7@HMuS>qK&4a<4Id{Ub#30X#w{tuxh zSU+oAa=VloE`zo<1Pnw8Ma2)~$2~AZNX;6$LIefUjE#aaV zG`rj{sip!<{Kl#>J_K=$gN83RtGixCzD>j5d0s4224yc{{)B`(pcs8Aqw|^eS^s9G z+*n{5lOVHLz}aa@U9ZjvQpU;2Z&iqb3)~Sm-3YCuEVkchhOFOQ;~|7D649aT19~N% zHFoxeVUMY)PITwq+>ebQ&&q0S5*MPRjO(fE2{Wh)KfhJB*%+!aypuJq37?vPk?rHvF0e_@^!#wR7&}!+h#F;}4ua41ms}h2L z5IAKQJ6Sch7!7V9$&0GRM?gXaQ;pq73FX3^6GO6zBw9Yp6b2 zb{iNni*ew3GH0Yr)+QkqHkB1;!mOqE2zdnk-0oFI+c}-aZnCOYK0+bBoi6D}N(A{X z3+Tu$E0&w0r``N+8ODoiW0z;VF%ft~nhfV+A942{!8OSi#w0w%K!p&g)f2+?ahVZm zn`gqLr7|fDG7wx2%(+KH-NM5t6i6=Y(p6#~<}QBELtC_vNMabO$qwiRxg%*70>Wy1{s#AdwjhG_LPKs?Zvp!|3UKJCjOOHRFuG{#DHE=Lp}N;Zb|ue!a3NPZe}ii)=19S8wiR?OIHJ!hu= z2?Rxc`CvNWcXb!g*{W)@$ssR(d*ACwNaO#Vx~&J7Or|yr$etJL?xl=Gp#9K`*14#6 zqzm#4&GWGjQy~VTc{p%{)EpU)D0UM8t7DMP1**SGBnTVqc^eoQkX-y|rmZ&&j>XY- z=>cyDG=K!RRv_s|>_8yP#j_o`kdsBjw00rA;wRu5D(BS6D406n`SIeS3kMFmv-c>O+M28nlWdX-~ zKNP}hO8i&w96E$R&5X+VOyCw{tl+TF=@SiNs-*L>zkJu-d=95Q z94o{kng~XM;2o_E3d@7rAMKg*NFuHHuTF(I%H;Cm(xD)zI!ja*+*&_yL0pi((3&3r zR;NxfWi65)3$+T?i=*%TT7}J(KQ?gyaj%NEtz*=yDfu_3fWJoWG(wm!D7%sU1lO40 z)+J%d3&|L*!~d3{yuI0-0uJO|Q6vPuHK{=+GjZSLW zac8FrPzO18@a~QgKHfL{|Mfh(kr!PJe?89<%KvZA)A27mz1x3*O8f%e zVh)-SM{+uRgYh*RM>UdZHpuV!Bpauyh0e*xJbf6eUHLsnx0p{&{2zPhME7G+*vBQ2 zP8&WMaHhRXPft#kUUYZ9U!D)XJ`Ofk@NaxSA2(W-9zHgFb9%mCKd-(f=w@=ZyLo$l zUf-WTQgXh(9zQ!R)Z9_yYiP9`raW}2WL}hgkEmP}Si32e7wFZ$yp_w6l)l1M^L+z) zJ}!87dVD_WJtkro*o}JN@jX|-dE_T{&v6h%>2CFJ%60f$oigNZw30Id{KU# zoG7z+^HO~Y`0PmSFq@*jap!dRSj;(|f4IC?YtWAM>`3oSXgDA4ptJd|{N3W6^i8R( z{(9;9@@(KU2;{ASTX@kB^Y9%x`ydeSUp0*aJ3OM%&I7Cjov_Fly1iqK&qj@{6%tv}Qj1zg51B1mQfT3+1JPG-_`y(8>QnDXc5C^Q*R7L`0XJ^U} zp1d_#zyhL&PNB4h+|1&~UFk@H4xm+N{~>w)0=9a9r6#JAX%M9mGY1T z%%LTu;{1K}1-91NuUZ({6dU+*ljUi)4qDc)3%J*Ism2UZAx-ft^d{B!Y(l>$2OjeuehVA(t> z&v-1p(+a?I(=?r)FIqKbQXC8-Qw7?%{)Za~%9qs~z|EJ> z@Jk-89mxArSH%(uo&j;EA@nU}7Lree%wWch<6n|D+N9xN2pajpyB1^JOFSyW6%N=d<_ENb#hy~0pv8WaaH9ca{rA9>lR z>J1WLVF%WsTWeK&<{nBDcz3YMV3kr6L<*cb5g%6M$EsP;k`g;k{fdsdBB9WUP!%= z!$L|D$%7mE&h74K7!W)oiI(QWgJj`OlV^nzJnEXaY=zG2(fLTZCx+6QHz|cg0Mn|Z zMPj1erHFQ+*?~?_A6~9m|)CwP>CeVa15h9O()ld;+CBWVvuJHh(7z`Ht1e0haaVb2oYP)OL1G4FW({r{z_PJ-n1gR2Hl??f|4C4Bo4u;LV8EzS;TpRTFu<}G zYLIwG6L`_#JPtiI$un(ua?H_9Lcm5WllS;ac=XAJ4OlI3B0(Z>D@#U){)v-nR{vCH z2?k{ych6*ar5I%wAaJFy0EI}GMTcBNxK@TEk4R8eyTSqj#)h5>tzY%zA`IUwEbkua z-{;N!5JAy2NW-3fV0^+{*4jzFzZs9XN^?$sDC93NRcjDgL<2&yh z@jX60*{>-!s4{UJ!xL{LK5u#N%|gQB`zs_>a)g8n3?e4%h||we=d1xyE@a>VUJT5H zdw<*qi?yL@aH!}Ha>6mQcL-Lv@TySuVQGMIiz5CTpQTF50SrWY{|4-?3@s`v3};dBI2V&D z)0jwSVWO<4CXSLImSZ9ZIW$xN&?c1{I|hkyCLqXfgax^F7ocZpr*wOW=<6X}q`wlF3iO$vG;ejB zhXApa>h%B);I&oD!WCiZcD}TUHI_JkXk2St<%|^)2*%am>dpY0!19* zL^8D%Hn<8HBqeQl)l0O=Gs%0_H{d-6?ei$mT8kj;DsWs`W-d0cnk z!0eYtAUBec^NiM_5b+Qa%*x*%ycssp(k!kvUo;a}$?A`X`Z7+`4{$C_ITDzC3JF0T zZD{u12qDS&$a&D+xdS$xE*jMi4T7#Wmi{&+St$daBUx-5F%ar(<*cr00;KgO+Mz~cI%mmgbzhsfQUhO(e_)3!b1K3#HDEr}x} zz>zg>6(GQmw*xKdg)3ZON~8&?#^JKYfUL1cLAfBFo3NTUe&)GZUYrBK|K9ZS9iNEKmLBLR5B6(!%jdp`?PF%cE{#n*Tl=+`<8{7CnDn15 z80Y=e3+rLRP9><53Y17IAt2ba$FSPpRlB*azimzYa1{>aYX6?X!a6*+a~a^9&-oTh zbn5`|=5m#S45&y9JO^^VzO`t+=N6Jd026%+cR?iR!ie?Bq$BOZphFVX@QUx;g1k6Q zECxXmnE>C%j7_kCcx$_GfJ=1Xzb!=PLf$TUShHiYUkGWO`k=R%K2sAj!azK1&wES$ zaJ5N9WL5a{kXHHy`al2AR!uQ*w8H@b@p=LQvHo8wsm6vjHu`p^E=JBK`iB39TI!Lm zw(~{@l5eapcve{KVMj!c8PkH>CYES{%@T5XqRPAsSz$hM#imf#hntKSp70>LD9EhbtoV%>6hbnzFzKQme=id@-X-t+-KXL5MiM7|lafUA%ZT35Jxvc)(uW;_R-6ae4BPufiC!PAHW#Pi* zy9@=b(*E`sV#oKhjW(={c?+Hd(uXwJbU_4oSG58=wD!~{h&^o21bmmR=I&%0cAhkc z0~<$MdJIGP^Nw3dAi_T<{kadl(>OmI>1b!iq|fZt6V0w4(%WkO$m;7%3^$ido4>WA z=8JzKCiZx}8cuF>W`xB8U+zbpo{QGr52w`JTy!AfuTp;m^6N-qyrkGOfUBoNtO#Se z^pkcRsf)ls5udvG@?w$n3ra+4(5xz)_5#DmZT^QJ?E^jRtg@9_Ye@V|?eS^509PKX$rDE{9 ztc0fR{vK#d3gYYD(kV0dYfw@&(D{MlX4OsF_{pORt`g~&ZYlya*``1p&kDHO3kwIF zif95P+z}E&B#3)hkqFyK*5#o%cQav^QSmJsk1VQ-5bW& zit+Cj-aU-`bw?4jrC#p@pm_Sw3~SYO@?p^(FU&d`=q zYtP^K72fIbvCjv|tw^#TN3$5ANzpQ#g%Ch448gl?&18EXK1a5Up%9f~+vOI) zck1npUu@QfsmLcy5Ps_?hk_0;dsbXL7x|Ic9CX%5J-dFL`t`m9yr%i1_-DSOe}T_R z`x{NSvv}N?7L_Z9nil55g2Ix;aR~~PBT)tx4Wp2RBgqpC+wACu>Ybxr7pSJ(Bpfv% zRDP4d?LLd2oTI%e)nG#$a`#zc@mfK9=h!PI;m6<~ z+S{{L!&U8F(R>%PJh5HSO8Bn&?(K1XlMt9Ec794QW2;jKzu$2Ap*@A(1tf*RCXTqw zAjB>m+V2P+hc=IMg7wmuxr#~AUC`W^U%H;~tQTaOkUGqsM}#ZUcAWXvdNi|NpvFok z@r;T#dxQ+B8ZNeB3>gl;;_;BSHZkQ*bD(L4Yqk#= zZpS8pgLEHx*l*OK-z*I_!G54C6f!BfCXFF8bgj1P9QrFASKH1r>~Uc+FrwRrPRghMdw6uk zl(0YDr5h>gdiuTMU+Q#9?*^OU<`R($7nJXp565=%e~>?2$~Z{0KK4tx!HO^8Y|`6G zSbt|X#o2^A18=d??L<`Rg?Kh`QfD#rOdNw0kh1FknrLFfFtQ9U7Ybp-TaArn0=^)=0PZ0Q@Y~;GQHdq9V=x z<;89Uj+ozkz&7JIOZH4fhGWR+ut1j&0XM-~ix7?`;W3}W=AKXLd?b(f@}d4^o%Nn$ zcwMlbY!cm*o$qJ1!HDe zkTyix<^qivM^7D(drEy;i5Fhuca94jc2HF;#x_}}Ho9O)1R)aq4qK@dJT`D9)=@d>7+X0Y?BP#Xnzy})3S28y_^HA4Zm=d%l1IOnyd$HE`Uxm4t_c!=Fue~Qm`<(NuN#MXY(pqa*cGvQqT?wo-L>! zdWg^ie^7?^G$Y|@V%ZtgZdqiZ#a*1%4Q*dv{a~WhmPx&q^gO=6u=5imkaAMif)8%} z%AB}Y;)?`AFffAddS>wm$&yFe*h1ZNo6R^`4~u;7oP6&zc@8_{(sD9BYN_8GSEv70 zO0K5Yen_=U0H#^Il4EI$Yp-j`V>9X^Y_{l0`g!Z>gVKPiuCTTK*k*o@JoMPDHZDg0 z0)0YNlBEso2+S5({=3bIY{@^J_>lPJq2q!%VA_Zgfm3u$5y^kkdlCAf> zDRi3n!MCKrV z;P#EmGAppSK;B9g$rzUVwsWedyg(Whn>NGw^Xe)-L=((U6*%V&WN)%NQ<@zW-!>x& z0w#;Rfm%Iy)VhzI&MgAkLkp)5hbxhaEr9P8@#&!Iaap9DWnuO?vK{Vhh*oFx%P~Mx zW(Pv`qE*tcz|3+}QvHwzwW~o8%_30t{Vt75#(dQ5a1W&MRrtgw?c}p-ou}PqOYSuE z8Vq`@4!Tt`F=#TRf{=8O$K3hWvBC*{SVP&H+kbX=44s#&*Jr8r>9N)LS9dg)b8J-o zI4C|pPtld$ZEex?)py-G?bOXnMK?Ox}e9{_0&8eA4O ze@K6RCHNp(9X8)mpz>g~fT1&22^xQLw;+f@8 z&7%w5n?iLpuIG)`n^~#891w)@keGlWWnNf};IOQ>45C?ilTsGS`g}IBNfz?Ro^}Op z7!$U+q*JL~G1`MR2_K|cgqgS}e)XxZ0V62QqnI}*uPS!?ACQI7M~(f&VWxL^W%ak-=ju{68@dcehB*6-QKa;JkG}t%j5R=WhMt2zw+~TKj9e?ory9j*s4HcJ-2T9ZQ~b zm`~T9^Q*J8I{0-@ZmoEqx~t`f&RhANp$AiA3Ab!A)#346-$4$f1PqfP_yStL)0?+P z{e#68%b(+~RG$obOjOBAgi#%v)B$qvRN-v{VGVT_3$Fl+i})Gw)RqYp2Y8gT5%_}V zQ}y&A4Z>lA4^VeWmxLrep#4ORl8zl>;N8EJi;>B}_w=;*-*tbku73J^P9UI6Y~cSx z;^co)(*K9Mq?G?(Oj?QUA52=4m0XU(M7N^LR$EWMqjMU7NyC!VB*#PNc%(;A`p5xA zOp5Fa?XKu^%llpG>&MmF_jdXG{`g?I^m_vk(>#&(4Lnymr5;+MvY9Sq`rK2p>k(0} zJmX1nER?Bdz3zzxNf@%^vJJ;5U!7mBU$-}H7dE+Wzy9>{^6~h6z<=TPUbFvx*FE_o zZvK9?`ue)z*vjAa7nSDyi%P>apH;PvoU}gc_u%pSc&^!e0WzrWe7X4Pn_;DZ*sa&e z{YG5t)$#4^eW|>F+n?LBQj3mQvlYA#{;#>SKX?e>8mWy<5oWCv9EdtT2S}K~AU4NG zOeK8@`&OB-Zy-7$pdE+b9g^0FY$FRCS5UydgK3zKxk^EIfzZV^Q0h8x#2dsq7aZdG zOJei?-l24W)xpN_SdRx0%_?1kvkeCen3!k5bNyv7E1pG^oP%^ErQj@_xB*q8v-g*k zR+Bum3_ne-l7li81~-MrxSa=e1MZUT^{k+nG-DI4R#jDO@=zO`i-riu66f0r9#BoM zAwMG`?#tOX)4YB%(R5G`P-QHYLhmR1`Iddtk$dr{(0q_iLIQ_X zkkC2AGBh4W#qiKAF=0TL?TNZ$qGr7E?_%^fnS_XUR`pOOy`YGY`Zq2elww__bP#!1 z@fVlgA`L^ZVyFV((l!k4b8{MhacK!s0509~7ni;@gc{wRC90pL;F+bM=!t-7-6%uS zchbbepulhg6<%(v8l2!G%`pxmh>1-k$vt5DRa0)x6qRsOw%@vY6QFA0V?UaF~iBz1rZ=BN1Qsrv8fi%8$~0TkuTf9N;g(Rm=vtwQENTv zq$LV1nmKQeY!l7P+L~2Gvo!>pp)I^^_?C(7;FXDM4mD;6vYa_^WmX67sTnmM$7ddlKY1!*52LrQpj*%v_nKjP8n4w+@2r7B{elQ!V!=!XOA16y`}fY7H>`_ddhNp^G+ zos!|^>irr0%O908>iCKADVa9Sf()EX(<0)~u`au&dXV|vNT>DXFIA8`1%Y=N2vsGBVv z?%Xz?x+VGbKG9B5A!e{zI}o&IYFsvNMAK4QDL63;h1pK`Qi1E7YhK_{1}t8K!AT=$ zi}zwId1k1&s%4M0Nac!G($qS8#|*Ze@jPm*&icE9x9C`E5AsaVSDL6TT*Rp--dma% z!szW@EYreHY~2HcR>V?z@5yCo9BsH`N=>h%Qd8EE9iCx+%N{}ZO4LRaoV@N1)mm=N z&eQa8<4H#N9Ui(0QoaR-hg`Wq(<{RK2>y$YzLigZlOv7XyI9U_Q7$TEILSgV1ey8> znB_49h0v8t`-eMY`{<-{7gaa);QTvp1wE-pXD+Jff{C;GY#QIj@u~%`>OHevRU1i; zSQHjl+VW8ewP%pnzrE?M(WsKq`p1#K-n6Jn^Z)RsHPIZkRxa9f{Qu=mt71?6Z*SW9 z*XW=sFPa=lYo^*zms5saW%m@!6%sMM`BKN2S=Fj0w(8W_qOM0Oix7O{?H4L5g7KW> zy2!2U`5iRUFWdCrlEklN!K@Lb)t=oF@fltyLJ5U-ojo3&82ai%0|^jVs;ew5Kh2<9 zEo>kcP77jC)}iEAku_cFD{K#-D$3<&tX~;#vNLHwl zvP7DvdG<5pu2i8YTu(ApPCz`jb=WwZ6j`$$c7bGHzK-P+(2rt}L_8*n#sb-#W8MP8 zE_znbYfu3p@WT|g1NBk!V}fwp1@QtkUSyB+5tMQQz0e!wT1wlj0__98(vd)Bg@|Ve z83;~_7x(3Ym8XEP>W5#5UZu6YJ}A#uk&lkCfg%J%*?a#%0ZB8_;|I0Nl)Yt?CY6ZJ z%0F>MC0`G??9o2%vLtXXn#i^?Rd?u@4{4d~>9;>vEo~ zA?QBFmYD72L86LBE+2uGJMIbYq3=(;L&JNV=b=la=@m z{tl42Qk5OGuv?z#fL_~rzzqRjwvt)bzRRBV3`g_ zhi8q*{h4;S%2JjgPyBqVq&TOzBXnZAr$dZt;a92X38~lWqg3F9Opr((2_VdRgz*7R zbxZ@(TD(sGu{ij7%3r5iK;6!CpjPq2J5TBo;8feVW{B^41mLoQJNU>Kf zLTVY{_HF_~_K!J(yB#8yPeGW;}piP|7_daa*?$B_z1V`sNx z8}|`rgT-5u%) zeJaB0DwHiNVR=Br&28two+qzaEH0rD^tb@QF2ztyAmi}6a8(MR|IF6*ZHV$@lfupU zzNT}fSDixC96%sfG&_sQyDt*D82dmv(MupLV<4&4GoVPMj}>N{ETK8f8>H4#Rb1Lx z9y?~i9h^jfoP)NSo704RMeO=r5pA}Z9l8Oz;#V~SiELy|zJMqs=+@_;J4r!-Hs0?n zs&TVHqx)rl3%hc)Sg;=$N2>vf2v)Y+LyT+Ug}H9>`;{njIXXWpLwPg`S6I~GJ*-53 zFgkdPM;;$a-LmAH@c<}mIUJ)QIeF>Qg^5(B(goO5r=fyBE}s1zl_Ia9RLysV>(jHY z4HTt+4#fXMS$AZ^D^Nvl;Lw#n-EGkGAE#ntQNh7@S9R~lxxO%v$ z1W?xWHN$8?uh2KHG4$^bujvpbIdib2&)LEyLsv2Y{W?)^hdET4RL>cx z<|#|Kj3bWof%JqOQng_QH#D^bijXwByAafPkn-br2V@BW<7*gvp;K@j+K#`ItkWCW<&JG#H6mdGuY}4mQ7}$g2^%-^Lsa{Ycq+` z6I3yKnGoj2O?_ELxnhz^#gCeF#Y><+SA^ik)?boK>g+FV9S40yna`UMlG@v^1ytKj;}6B*WX;uw=N z-)4@ZG=u!|Fe3HL4hsx(5=~B-)O#yup%-LQi5Ul6nmTq2r%;1WHxf0`6p_WRHS#+% zvsO(4#K^anK3<&gWX(RRM1QTs;=#;|l8bKVsVknEf(bfZ5Spuqov-j@cE*}$Dv@R? zJsW7)lCwW2a}~=he}rbwMw5j5$*$CQWjVWBHj9-|u#M57>gs#z<#67i@PddtIK&mlAr0!zdJW8~p`F$wX-)0E0|Hv|v<86@+`?*POA|NZok66WtrdSv`*6oC) z($$CCa7{xc$NFrL7K0P>*7KaJ&=a{Qyn0JbHSJ?zDGTiDW;^)Bl+l=&z)2P%+IH*8 zfLNo4B!Et^b+~$o$9h?EYQ{ACtpcMOKS6{`^WW zj_f@VS6YUWO6#Cpm>a4lhb|B)-5%AJge8h|qdYZyhIsgBch%$7e%t2UAiFBn2`bU2 zz!(8SMnlC=vR~+9WXQ}bf2t#7+9d=^Khh(u!381BB<}+PX6&|}rO#Lt=4n1qQ|@W1 zmi@)7&n0q5HFl{SU9{l_oeec7#1A5KRFYs4xQQl8xG={aoFK)h~|zkq-9 z!Lfc9pqY`W_3Cr9fy|8v1q_8uDo4S@9K21QFJ+b_oYYO#Yn|0SwdZ7s~^74 z&e-kJ$kQ*=C{!Iw>@LwDCO1DsR+#a36tqddostJ9TlED){jNd4KXZ;<2f#gzJY}xQCa4>OKAhBs!kCsf(!v@ynDuPuZ+Mvv z^#X@IScDE10V|8eO6cNK##gDygG1^*S;EsG0`112(>MjBpq0wAUWNkf&k!`s`yAUh z;~@25xFA`3(>=2d?LnppA56R_JTTa{s`V9VBDI(B8YAJJeVQ~r?5iz=EbIGazQ-8u zR1Sh#8nYng)AjfjPzc?)HNPBijR=LZVh_{Rry5>gZCSVkFcDH#8r$wtA0rR^JKTVO z-Lg*aKcJ9R3yrD9crihsQ*-v*afu>?T9snpeyMmSs?khP<7F$!G+Ee{aqfya-O6I` zEWPQBZqJ4B$(JqL<)fq;eeFHB_Ow71llCv6`yCw!ES5Gt(xqDuXD|w|tY{aWZpLK<%Q%__pbHA@ ztLj@IE2DSddk@~M>qR8EB9Tj?akhwa9RBKTqgP9ewav6b4y?V^)4D_GE8esVk874m zsa*&;a;06|gs~7K@-hpXu@&!BxF`7eJ*I;H{^{p9&+=HaDs7K5;x}lOusd0;-p-xmb zHgEt6Ymt}*byVqe%9`w+N4)(z(!e|snSP+cZBEiu@<;3rwz9g7(UI^_!Bu1k13o4D ziTa@=z3!jVpJtjp8jRKl?g-TfoV`+fnj1$FKi!-?wD&E#+IOy>AR&EGn%M*T=dsq| zf26vE?&R9+3-~|=Df-R2?~&r7GcKWH8DZi+bykDc&OfO_5&=EGf%XuE&gIM62fjOO zY&_!q@M%46MJ=K#1l}?4c3Qpuh2s5P*Zg+u)@GFZ>D{1p=Thg#kJzw60=Qve^xGp> zd6(X>#0lP&%tz9bPIub)?B8|3IPJ%Z4JN{nK9J+x$9E9KN2A4@z7~NNkPhro7fsQd zC%Go$#BH4oqgJh;{ZIv9(+lTZN2NW84%F>keNm~e)rS?Fk6;3Sm2R?CV!8%lu(W+I zH6~G@8o6E?4a6B8Q|TaJyMzPURAO8Q_ca?aSBW_1qYezYS?v~6e`Ep=J5_LVaNit^ z>qtyQdM|^rr;Q&iu^4Ec#;J5!jtioVeQXOZ+IM2x?Z+qcsu>A)Z-K^) zsO|0(75Y9?5cGfaM_-|BMTB^>Y3?k=ww@T~O_XV!?j%BYkzbT>J%S`zC7j%mkhxuU z4Gg4og{Ueh`YVKH7}xpwXDtWSJL0cwZ3Q8ow?vVtob>W?*6v_JkHH;Zla8$6Xkm7a ziUX+^Q2E=7qhp;_>xsTegEj0%zQO&1$%d=$^>kTOCoz>E>jQmB5d|}nmCQtDCw{1a zMlm8C;~DF|wHg`lyy7|WSkJ5J*L*+Q@Xn80ej&=x1s6!FA_~Ty&^Lc&$~1*`WE7>~ zxKuKd&a<1f)j~37m3ap~uCVabk;Kb~Eh0o*(yfhV*Sr#0vWT8wRw)cGaz^$PpB%qBfvXxsIG@oys?l zaTCiTg~!XjO`)-R*w12kPGCues);_)j)M-j)!u>y`I3nMt1a=z#$3mPMSg51Avla# zq02Smcdvx?+$K@~^B#ci)(5+_>661XsYDyO%jJp5x?dEU)@4=qq0KRW&+`QZCG%L~ zuqR4NQkpWhSZm&^ctFryWyj^ojNXRXVkPhs zUiR3Vj;LsKYRfe;S8+#IA7S;R+!}Rg9XfPhcD(?{rQqMASupy#*mg>2^qi742Y=&9 zUHZkz->)u%ZtmkWkYD*l9$Ayv{!Rv}&{QnIl-0r&d?8PBlItxfV3#ZuZVgwqS3!ep{&c`=dsSDW$@TY_6Xh7`T4u`EEWT z6&y(IXzNwv`Z#Rtk~;28PpqCvDlg2K9S^WIHt|<`nly7nw2E@|WdWUlnR*Hy;~|m6 z>jgoe{`WK^WZSk3rN1#@P)AznsGsMHEEzA*XFB}%q#BzpcEyxdvTa~4gJg0@U=m+& zcL80Rr?B+1^tOpRr*W4X5ZEL=cPe|z4y%wx%RGR7owELAdO67lZNmxg<&T(nr%;{m zb~qgIHbnB?9OdnSJnwWQ=*o8zPYvxxYg% zvpW#4rJ_Q5_7-j)KKz#~Woernd{$~_1yX*#WT8nUJ7_J?Ajr`tlow4GoO2DObslMG zS2>$qBl#>$NJtc&EIyeeG&%yjv4iZf-<~T&5eWl|ju+QWA zP6%u3=_Kp#O@%c&(BEr~?UnABKuX$SAC02TQsvtPe2ih1!pOIu(FA4AJmlALMlgsHBVZl3=61M7%9 zonsph^JNQOJ%}!pwXl&?i z7}r2|l-=1trjX?lsNfcq_w9`I-<&-e<;GpFzt^3YVeC9$|UNEY?P>QH8? z%!EsiftCqg+|SGY~=@So0>fh`%y^?g?Up8Vxyi=-!#bc#R7u?ImCtmng%cgzcfBZG|VY`o8 zI@8mxr%;sveP+@^tX2XHNEoG!&{Nen%~f7gTP2obACRwN=Tgqzogv;6F0HAy9 zwk6@|pq+z_Kxhff$mjSQ?dBi^$!S`7U-8K{*gI2WKy^Ud&QeZCdjSmdz=^+xxn|47 zVX%mHaiw_&@zYM}60UW8JIW3_-Q2z``~29Fgfla`@C~>U*?is*O}X+3MlP3l3V|mk zJVbR6_`nxec8RX!7-#nJU?uC1V^*VOCm7Edbti;Y&RYm@-|E_^Cu(0?_T=new(HmS z&L?^(fX+fJ%jXv1PSR}ad9(yCY&*q540+6&HrZPzNLmE?)}8$uC)ut_Z*sBzH{#t0oAhW~%G==HK zHMEkvrj3H=TG@r+5f+pBM$d}w-4DfrCNPE06gV!byMvCqy>s`a(UrT$X|5vMklf2U z(Y{oK@VbsC8&=a!3EhLSZZ>1Gb73Au#?o~3bvY^-KoSUF*pd)H)AjilnMWC3Bih9u zswmaViVY&Q{_%=`8FPNVe5%oQ%B)_R@W&e4tb+~fr|Cn@_DJc2dqoAx*<&k{0;F7r znl5cDkQ47TM_ZDS=IArA8YjydqPFhCvNYk#r#CrXYL6c6#$-Jz#}>q`1sv*Fea`Sp z%~1^s&fnIWwX2II58TehYMRqRRe8I|7YLv5pH=#ITDfjeB57wp1kgZOlPDSWMJ!5yP9|CUxF zE4AvkY^*@wDtOz~GG+aWV$!zZNrekRIx;yeS8BifkdC=jcI{>BL(1#EV4lRb{%BH5 ziy5iT;OU7LxhBcT-uiJghcg~kd|sL$NKm`clP@pao`v~W*oW5Y!;Uo@1aW z*@X}&yeLNmS*eTQ|1!*ba(Cqi*9;A&YaLE@V)xbMA3#7m=yQ~iA!!}Z+jBjERAX7g zMb#VskoEIS)!dq&1?52W=BdjI{x!^Z%1=$P!0F0_OY_T#efztk_>}*NnA_*5ivDIzA6%s*{|{nbdh!oq zzSY`q7PuKP&o1g!wRt*cd<2lqssFi<0Ep%`&FuGA_+aUcA3?{+n_n?X5#_qUAh+}>3C2T1qkzpk#BM*xNrG2Cbe|9G;6iq)hzz$BdlXlP+{&#i zn>5u*OO_rN8o^uFbc8_tk2pseJ-nG$45NrPMfeDZ{9UT=k!8|+#XKK2o%?R&dDge` zq+7JJu0b^ZlY19g;Eh&a3s;H1dJU9hk8vM!lB}GDC#fV8HD$bUx&Eb?i<^rd!YexqoLgjbV}6 z!JaD8vqbfImn_Ji1N!2D`%?0kys~_Nn3^b7Q4XMykEa$jZH!*z`~ZCLX6gwS##wiW6`6Ci|>l99|9U{f1{ZWz{6v(G~Zop3ba?%w|0dIk) zM4fp(1RZd!=P`5vA)W;jVujlr4D)5|2X`W?Mm69<8vD^Y z1^H2^PV{qVEU*77V%`gv*jqjAS7Z7}DKM*81~x%{i?S|Z8zmx8nC?yUOne-Lvp z-jLd3x4xw_j3$d|c+{1;F$kXpXWhwVq#nl-vLj~=#(4}tU^QZ;H@zKAm-Y2 z&`iC7v40VBjEW-Dpnd`;dI65{ZZWl2ATZtmv?BQ4MW$bR6oHfNd9Ay$l`BbHd!@Vy zcuMWw{eZ)9n$vs4fWt1@b_|1ne<|jHJ;|#a)UGIM0LA2N*aL*}0X zcSu}DNmY0x@RN`q-;f|f%pwCHnW*t<^XkC=l*mTw*_Wq+kV^3Tf(qO8&-_yRM={4o zv|~N>a6cjFqoSrd{EuP|{>Yfaa7m>nhkj~}_m5(Zw)IyruWI|>in$bqYouA9r+}_H z^&hGGWUEFCSa0z`{@#<{&UZ((91Tz5d54BLCY-drm5G8MT3y_Z3OId8FqvL3z^Hm! zClTUXY~mH2l>o!s3xJtxgF!jL&(Q3nJz(c*4pN`8@-&94&$6#wfSK`TY!yK2qzFjl zEMvJw`A55fWHaTna9m1dEW8XivS3;zdvfZb*UrNE$W;~&Bnz3ZR*B~0#7z6772&aH z6%R6tP+_2#-BZcnY*8h5U<Ho(|((qsY`G&@KiUm`Gv zf!Jb`p61y>8Zx@@;qvWB<~K_w%h5hX5ZYMpUKs>U8@q#Ae2cQ1m0D^J`*wobL;YsG z#yO1MXUkF!BL0;t|5mM6@ht`bYHHk%G$VXYlk4nY5A?VPV9YfGvoR9{^_@K$MV@yc z15xhL2eC~x_HeU?mrwi3u7KLOT?)vK54^?b6n(uLd&Wxa(5^|-;BHERXE^Ad*gicw z(jjE8rDoj+0V|N$3l*RjVX3*2CW^kJgb!&8K4O1K_>;B`Ih$i?+&a9BM^k4c(*n9}OOyVRA^+QVBHrn=YNoy;18W2ZLAXqq@bE`~hx z^GTKBXM|&N7oWPC0ky)RoLEqUNj`m;YHTUIPY7eBy?(w3ZM2C*twAT^PFQLpWP=BQ ztZOMh&baSak3b+j-yk!{%Q#6_;D6V*09%_n6nAtB<3AyXP&@WQyIqjRH5$AuNKkXJsfW*-%YubAS z`@94&gV>K;fEsrDy3-F5wB`$(M64~bkROftqeqDWxTQ&9`m>4y!VRlkP_@2wH!udWyd|p4`49;N8pY- ztq*MFIUj-kv_bmy77qA{5G1aW;4G>EHDb3jV@oW;jv*JuEZ98j8oU-*%8`>FO+ z7@GGz+;{xvq|KHXXNFQMObvr~-lKmU^Gdw`a?Dv>QM&%^m}5}iK6}0e<%+$QlG{{pZ3tIV5@ELu^<`GbAV-7&(_!#ac6z$_5V8N zhXBX?T~4Ho?G)jy6L{C?=M#uG6i2TvOmFmniO)vR0JC@Z$Zn^?-r%2vkZ06s`@0@V zs3!l5jD@qR zzL^nN@0Fz&-B?>E?fF(1`d8VD7xxw9UiG$8byL$f81p2Jb8hkoNSJ5LfWZv2)DIN; z2iEmiJvyBd@Mei}NPuG=2U>0_Fr8q1V1=q*g7z5EFpZyj{amz;n--=YVa9PRGog9i zRr8lI*E4EOUd4?*rnpk1u^0 z9f;~OR5rXz`LUel{vpQwF{gGF?C#MYrkDxq|BD|>DZ8B^aBmP*BVx%#k#sS&TkiCC zTS%%%V^P=+ty5do#Iwr{)jx=NMFiPmW`za9j`;gYseJFBb;*A+ygyt1hH9tz`970F zuO=S93h$o|Y&$)?KSB~_M*JAqU&sqzS|nu^x$_c(JwAn0KeDkyVT^OoX$x(Rhdn{G z-9|GX-~DA@wI_=`H5LeIfi62-aj$SYA+3gK{e1!2h)FOCnLt5(uhlLv<*r6~R% z!#v@?4fE#5i~>*;+4Pp0JXeFft+9eXQp>cbPBgK19IP|=99+PtAo|~x=Gg+Rs(Z4P z_t5JKTzgxEJB0&|JpS7-S3OhVojdPCfLOS&L4e~5@cW;JIXRN*+fWRAo^(>dzYKHh z#6YI_p70$fWL;hsibI@Hk9jxnd@7~00g3WLswPgg;clEL7BF^0X!adQC%_blv^1*523Yv zB6kIZ$`%*iRozWYpVr9~uBnt|yN|}soZL;?#)EYS74u)i9FK&o=3j=n&6s`okSFS; zG5Yo_+u8**O)GwYqYKYqi{=b5?Ivth!6#{O>U0A%PG5Pf`s$!mA+GLvO1cl%T)-oV zncqK#`O?1(bIt328RmsU2qFF)w~Dp26=jHo*U&w zg~hwDb&D3)xXv!PQj;(# zba0!T&lT#6)!}!61D?p%-Cx%fE&!HW`3b=?zfUU*4#9?;(Mx@OE;zSOiHkqcv_$ZtoYvOux+1HNAuV5^)% zRd$jTJpzZ{%0Vych`?PZI#*1jC7_Z|CYs<8FURd`%1OLSPFD-=s){fX-1Gl1>5>0o zm|I@_r(r(tUiP1c`O4})4Rf8k#sD@>Y*gB+sycW}t~bj2qos%HFK_gp_P>Dm=@qLoY$jU&($h+=M>?;_l zPAP23>93TLmwV>ZC|2@fvxX-}kpH2Fi@dUM*azjtQf7^?9Ynd))%E|M4D$+$e;Vd0 z3{C$u%%A^X!#w1F8|G)_k7-dvt&oSPfnq8|rZj;9Kmw$#m5=0G+FKGOY+ zPY!xv_R@e?q4~S(4gjh_5Vm{ADeLGHi+jd6^*9Z>3&Ku874wZI6$=~4Y2*un85$)TkK%0Zwnl!97QgIb%%MMiZ~ zJ>}r?$pBt6Q-R}57N;(qmf0sxD1k_IX$4X4P#SpB4jJ+#817a0Q3!%zh~?STX$p0i zVW~|!AV>-*P$3B3z2gVoi02YSoTHmmIM?$-N-A*%MS=6MR-yFQ{5m?u;|Q&6GroVQqn?kPmgkkwW4rI` z1-U*u>DlA`i7)5-FMF>mZoF--i*Ih8&Yo-6obSs8IRb#0k?D<*C(q-Xo7QXkwvN!1 z&!^9qw?LvU)Vn*6&8zLL7kKZN-QCwLl&{-zw}!W8U(8ZvZV~=hC4@@eLI> zb>0$N@_FxheCscA_`F|t@8u~v-I$t;mCzBqtk~nJoQzPhY6twbGhREk8SRqFzLCo# z?``*WK8Yq!ZMz(SH9I@)=Z??&{{v+H{QcPHA@~8SwrW;DrZe;&%cg*PU9CvGHh69*F&@_m-(j1DQ{BYy)be*S@a>n`s zs@&IcWpV#eFfe(G@pf2se?x5pR?8dE7Yj__ec%6fe)#B5_5NQZ^X~6=9j7iuIrBwe z*1k+zS=Nr6*qKRo{#px3I&+rb zb4<-SV4S}_xZnCVp6+h`NFKS_X2sPj|C=(;`v+x?o9%zmB4G-G7yHNaFLxyCBNz?Q zR-I;mhRqi@??n*DV~8fsOh$?KM2&}(OepT~(uT4k;q14){x5x3X$IDxYGmI#e z11{{GqR@y{SR=ueh~I>FwZ+$LJBkDRs`@SN+l?p;L0~<6^ey^R-U3$EtNvR-2nKT%E-+bLPw}6SsFKnDI-0rVoE>-jMZR{^Bj4<8%-tfP~ zue{oP!wA*{qRrRroEMIx50*obX0KJ=)L# zdo$eY-=>uic2->bb_%uMpg|{S%hhDiNUiM19r~S3ZmFk_z^7pSy(bQ$_*Q9x=2Uz| z!t0I7i>lVF``owrru+k<^E5o1@aZ{Hm{0G){Z0La!_Ht|ySGXXA9kk41&=8dTE@_a z+dOPD@Er+yYp3t8pIV&xdv&i@_QIU;D(my>>9&8Kzbx?gwk7;1pBR73Wn%{{jFt&D zs~qkO4|I|-x7i*2aRUWf4U@~hmZraY>`8{Nv znT}gw3ca=2U<#E`_Sx_VJ?eLK{rpeQ{BvZt_y4bFe$@NlJ@dZ}_j8Xj;%-vm3YALLZo!XD7WVls@}^?>=9iw$7w^rFJOy5IxD>gXFY%Gmt|=Em7z3o->ZYcUJ*(hDOsz zDW@7x3M;uzH{c~F)fQI33pB7 zz5ic8^Jm|B$j}dGYTr+*0pN4rfJX;5!(B}o_n&*cPD&fkqyin_-BC=Lp@-%%TEiHo zKUGx2<*a4WGS{vh4e;R25J;UUFXVi?A*>nq9&_jLWq<2GVg@Jw~(D zv7T%1yiA6E$D*ZGHVreU#oYKBL?ExV@g(naV6$WIr2JQ(ipf30|$p7}zEnS28T z5aF+Ysy07mW-oH9L z-T8ViQ{VsqR9FB2%>UNmadNjean!T3H?jSnGCWHfQjUZiNW2+(dHYeWX0Xf?Zt$M9 zw-v+s5WRnK&QD4aR48X#-+5>_F8b@ zzAT-xX5f)(t)lvJH=ZR*%t60zl#ZizeG7{J{DxZG<`a1SoX?Mx5o!~8N1cLrwgN}R zVKero7RZk%n9Je9DXZgV!#kXe08hKwk~dg|N?k4K?zg1UG#v0BU=}h`y+g7?+{go> zmwg5W|31y60WopqWe_;o-VVe8SI=3!@#-|_Hk*&}`D8*PEc6gfin9-r-r+Kt)FWUj zESLx~W#H*6EO+N0*d}@l@9NWO&8a*qc5{Ak!dv*&Y+49HAQLG>4qpRVnO*=7>Ir?o zX8=sxTy~3k-^*IS1L|3F-|=a)a{Syn*(Mm=;H^x1cVS!4Jg4m3p#y8;ss#Ip&Fqnu z@!~WqW18z9SUnPpiOFg1<7pSLB(P7`0L5v}fWt#sT06VP(eWFL#lbG#Uxb&ghqDTq z(N}je>kR63FHQ>9%egoAe9yg)U`8lVc5ndvYexO*0t^RekvBVv8DFC^Q_bkkgL)q$ z_0$q_yJg^>k#jy*jqnb5kykA5nPT_^*@%Eq+{mZ(anv!D^w0kaXUreCFQta@saJQD?CWKTH9#~x5m@jo zRQpbdgh0URKfMe2(L830cL5o{4{N%gVv3Vo8OkbZr8 zAS{uA18K31T(??=AhvU=2hpqgQ&<8Iqfx$Oe@%FS}AF9TWrrP*dC)ZNT;&x6(%VkzXt1crfLZs$+FNzq96!0V4~NJaPmU_ zSahUC(iQ=zG4)s@P{id`zFvLY}Hmb_njx4$uD?U2;}cpC~*cSvvUXLPzK!_5jHIpz80(d z!BdO|<<$_I!pPmrp<)*zK63?C6|Wl$sqPRVlw=`V&r~J~XJbJR9Q>8no2j61BK5`c zY?bCmLru7?SL^QUj}V$lSK0M^n@qCE9qOKk_Me{ga5SmP+f>C?A4XTz+)ESJs zl!>>@r`T*IeKRqY9Q_$_NU#FpJ$M33u>oS=`WVZyE+8`O&=RTUOTlTMuluYb6a&4; z0bZF*xv!YBss75^EJx7^jVYFs>bO=5O@cL_KN9((y z5)@8U#cz!&v)4eCBiS-Ocbo;YsKM3!4VeL8N{N>_$@V#J<^*M(rl5Jqle&L|+Wp(?wf z8Y4{5H}AZgn>eN}7g}zCm1YAy>gM5rmG-GHZ<^{SHxEq`# z^qYE`f>r)N4#6jj@=RwTjpO=o#V$m47>jB!6y$>s$`MOa!dd#h_xp@ek2NmPuQ@s% zOF}1OT+Y&=P_letE<>t`qrQ@jW+)ncK?jXzZ3(6kovo?5pe3#g>|t{HE<|@V!Rkay z@{vE{vV^h{&+omvaVZPXevFklUZQ79v_Y+SJk=Aq<(i8D6qrwOV}_KrWi@DDR#;_M zSbQgM4aFf2UKKeMXREDQZ8IW?q4y<(u=!StT~2oQ1HeLyQ_9ogp8ON%+TvbxGqo8L zFV1m$V1xDMiadXqz**a@#x*&b>|SJh_iiF(k@_qbgtuVoPruDP5|pSYy2Zwg{98)# zanCZi82B8VuU)BRJPsw3FBY8Y%)d;$cg(w70@42Jyt#FCf1?y7DV2dirZYi zK>xaQpzl_+)&v9qC;$Qgp!s)82LneNJ!1n0R|{J`CU#a@M-^pA0N{lZO3i;9&Th~E zfFLKp0094SijJF*1!6!BS(#M&&_!Y)L{KJ_0ySig815UiIn7Kjb6J<5+v866%$`Jz z78T5&$oARxrTt4Q+HM;~E*a`m!!}q+tZkX;sb*=!#h!{(VFxXgGD&5URk$%!Kyrdz zjf|@5IRL3`7IZ`XK!qWKaRiG_JAWJR99?KG(I)}AkUZ(n6wE=eqHBUci44i6Rxrk# zg^!lNDWME^tUC&$^|N0qn}Czo`j9u*T)>tprRp?(2_edAQ&~U>5}H?4V`ZZq#>UQz z)yQCKN}xyuUPp&e zchc=pSfo@v5UmJJ-|R4-F&q}zGC0eKF{A2-(9_!8D0SYI)DVCeD;rU z004?v006B2ZUFz0X7e8gqp5?5$^Ufqcd7H&v49=P7xx=wlUIAKZBd$$jRoE{x#Dhh z^>&Drx3__-rRk6me?yzT7HDru_ww5(;f226FL+m{)oU0 zN_yb;)_Y76HtiMg`RDkAY$}4^ofNc@k@r`SkGb~?zD#@9#+-6W$eprkNBd@Kw^!nW zmc|)HqJ-;uYP()i&E0lUH=zuQPQp7;S8&ezgtswQim9qfIdIv|C^<+dh` z=e{R>(t4FEA2IQV9~==IeacR#>Q9gjb8e&fm?xdkiO0d=+ogCSSV0|iUe8j}>4CDE zDd=5Fyp<#sLUk_MtH6fNT8eSUZcz|CEvnFlW)M!<W&?tfUA2VZ z_*lME>~G*R_mlHaKBFE49EUa^gWcBrLtxY^{fEGq@lSyfQkc(0?5zX`*9V6ak|Apo z2a;oHW{?<3-bfoV{G(}-US=os5_ztlu7C*SCILe? zz_w*2(d-Q_lQS2nK;DU{eHd&|EH>mH2BYTOKMcm1|1cQKx#0;2 zTw_j0v+_eKa1^9bj%69$Sj!<@FVZako53h~WE;l;Bvj6xXyUw{_0tEF%EAEV$u_!@ zuZPQ4X=?|;W`h%)(&DTXspGj(D5ZZ6*R;{LrRI~Fl7Z)eWtJ-Z#(6_mD5&Xp zdq1K#d#lICcs6*fEysQyvl!B4P^3#;rENS7$pJArLh`_x&hk1x)3eDJ3_x&*ULmY= zgY(WBQiEz!>C`JdeDkG}$A!;bP_phL_9oWP`m+UXulGLlHKW#}|3$I`l6%xWbPeDE zDW7aat8(RyQ#xMQUq6>o76Y1?+QI*?2&4ISlOUZl)bm`u^vkFNX6O<)af~J>v7?ie zW7!G_!a{d-l4p%~xY3=ZvFsZ2_YPjh4XJvOqHyT^5V3j{P1-M_1#Q)>eIurHbD`on zCQAoAI)CMlhZB8o59kx_++K|Mn;Wait~OR}Mi!}zjtuQs#D2MpZ6v)IoRBU+U1Ui# zPEH6feO71|oXFlCHYzc(G|y zJRIbX!7B`$glskg@ckYcU!hRvz)Ik13>NoMmI5u=lRs$C5597ED;&ns%1t*2=#M?5 zMn@4?2)a0uD$W0*FkWKqYC;K`cT}vl-ppcx*LiqpQyAtW&`@Wr-q{w?o%B-&0V9W+ z9|Rv9LWZ8e4dz>M1&sw|K&>IpO+C&DFH`yttuAF?lk#G4=+{nUAA@}{3h=>3Y53Iu zS;`BS+tODfXeHaM}JR!`O(} zL9c;SzK5Z!CQUji%EWpU=T{ znmyLh+QV^!gQ+$_Jph6o-q@rkYt~<3)v&f$j;osw9|O`fBC9()msQr^e8TF2GRG3B zzLhNvnrF=QiWL7M7 zpKl`aJh^6Z2|W7*t@Bi*9v3N9DhxnVEX89I@rU*0g=YxtzP-`OL?js@^sQz7bEdQOy& z<|hDiWo`>d&jYDNf~+;)w2TI{)#S=5065Y3m|1%R8=27pM14~@YVehzY_&qk$g-94 zpkAJFs-*hH2+6Fpkb0S`e$Q^K|}rsp($^``D=Z=9^sjwZ3HUtT)@#T$Fug3d%B3 zFd5hDE1Ew(LSgRZ&V@qze${RAa=_PhJ*K!a6gg}ShgT4X6=6A=FO1DuE}Q| zf(rgzBz#bEpNVQJN)_`PC5g1C4lrJXQZG>2+;bK#XMLl|raBSF@tk=V^?RMXc0{|B zNCf9}+ofGr_wQIviA3wcryx16(?vASkpe$jA#}2~t$MgPPAusw_ZH!Iuq*~kAII6y zM`C;8rSJnu5hE5L{Ytw~8~F{?lOqaU8zF+cEHC@`h*dHzFT&73VmqYNgqvk(taS(a z^V%R5MzTQ9dzE78F44E3MA+Ie;4IY$UjaUUjkI9yZ11YZeAh8YQ{A=r0zy$RJGu8; z2zTrWiC+)MoGWWS5mhGEDizzh@nJTL)4IOe#b0x7T1{yW)SmPjz1DXYAViF0=1l{~ z=bAR|5-?K1i%N_PpzC$4o<18-V}XPKt`^SMJ#jXTKc*Tjl}Xxx!Q*$tAx4SFt>G*X z0;(CeTl9F?b}E+KOK}$M+6q|=?s$4DY@|wCNoUK`o;`n3bC2h+D71V+G}zS`+{u$v z5sU`j4r21A`#G%DbGWH5i^vFj1LyeNf1-_8NYH3Wpt&7j=}BD|hMUmpxiN3Zjr|x1 zq^6(8EXDTgv%%3=WEI(HMRRnwXf--^xFPv-2NzjqSP43v?~T%_`-14CT5}n`4*I>D zu|sMWHS-|K8I@47-qM7En~jOY29f26qBidt240ojgra`_*lEzxpG2+equMfMW6`Fw z2e^^2=+)6s>4fWn=@J7dQ>?JYmhDgy!J4?M^jL=N`Uji2aYU^%1a2!4$1keL>zAR! zt;&1saAuz804J6{Hrap}{7*KM0q2L!Y$yMXEqmd?f_QNpz7$E2%B~9Ag-&6@1QDh4 zbX*f2PL4CD8ExXyuyFWS4~i6%U={! zB{S28)&SngGxXhdf!(wg%Yklws9|1CzVfIXb69Hr(^cjDJ8}@%Z0heIti$6Fru_}G z?)}6s>1-Sl_8|>==~v z-dSIJq?T9gW#FIu5h#xOc!I^{sN7~LHPnXpn>KrWRN_2H^2dW9%--&!5xIB9Og`97 zYj{T1vz9IfGvwMer&AJAFFY%5$`Ru)9F57ov|Twlxc43MyD62JhzSq%I)N^uf9G5gySEJ)-f&8y4zn%&nLOewqWpF4T- zG_5BfH~$;jUJDfhOb*bJ@?1PAb9qC@{=Z3+rnM;$hVbR&B;s?d9D=ki5O1CcWY(6O zeNR9bt*3Va2n07}Xhpae6Hq0Ek*z9`k`O8< zOs{B`vC=iZ1xagwBm^VW-}7|l=XW1;2yBAk+R6zB`6*CWV_6gXLBE?Jj~2rLb^9>a zBHjRS8pKi*O;^2)$FNKcO4s&BH%BAiyGr8c;;^2)90&9;o6*zn>khgmpwr_NRL-qW z#={BeR*9#{(BaRo^|L(2Y921}jpJuD3@7ctlSH@;1ZwzBp{3q+hZK_YLjdH|qmd|} zS#4{d*p0lFviLThHh1!9jhvfdusv{g`g`+g0d?<%n$#?xy6=L<|KLq?F7C*f$n#?P^Q=J7pGE4lrmOgYy=Lw;~ZvIvkzfl39uhO@Z^62>}gi2 ztLIZmmql&IXNqF-9aNdyyb<O0i(_U7$D(S1U#U^P!LPrUxp?q^#tUUL{D#zXG&A@Mb)gL@IvbOb(tJKCyd_tV^bMi8kXj>oX^1R_z(r`UgCx;422j;gU~azUFSlpxyziZDxe8nMU{OqT}H_c4&j%Eb)Mv3E2Eoi3@_Am5y zH1~=35ME#pyn5t#S&9a1$T_?E8#zsi?dC78nNs7g=d-$zBK8}qc~U2Myl~a znqiSr_XF+o2WQ+*em?BXpNy^pHhVL^Q+US>9TOE98yYk1$eM4WVzana{aKDHWg9J- zSBLMC-F)|&jZL{q-`-jiY{u+eLY+5pCGsN zXMD{0d^&E-h5S1avPM}8@8ZYcW#fwYGYUv*F|9x<3!aaG^dxN%(>MxLPhY@)En|im zpUpbq0st7<{SWHU|LdXrpUkhD+@Fpc%?W%`zMyC6j^tt~e19Yy-JOpp>MzbLCvYWf z*C&j*5g^CBiurLRB%ZpCe0%;5flI_E95zaDrCR(#?Da9MQ>W&IgHtDq!Zq^sNUh%= z82C0W;Od(eTFx$UHOOpK=Yl|2A)`hO4@2v>T7rjLl_6ATH#p78sU^-Fsn)kWfdtE0 zuqQC2;AZtP&g{a=z9Ks{!bhOI(IEh2?AoVrY%@0MBi+^Zm`s%?UlplYxPT0U8whd6C&*$?EsYfTR?7Or)5G>7-sjY#o(nB-q#tH;}vT* z6K94m<_Js_={v@yHQ;MUtR997P`ygytL9_hhoL9IIF0oe86zp9F!`c_8j>21EAb`e z#)ox0dqJ@meaqJfIir_MmaVun;&a_N(*EK_GXnb#{T=w(p&Kc}8B4;o4>F=u!qd*fb?L=! z!#J4dmvK?6@Lfsabd`JZ3Zf0N0mo-v7Up|ZfKw#Hs=~*L0JsW8=;!Ab8Dt13!v?`P zr%Yv`BO>^F%~-7^OQ414?epwuV5i*o7V85Y*7gl2I2IzoWU=?)+TR%6EgKK(;zngh zAi|^?wHvA_(N8Wh0j^OvY`d&C^+mkz|Z^n8q+5Wuyl|vKQNmaB({r9FclNBWemxe zbAOCy1M6);xUgll%ON^#1@(DE4(v5GUs&K161o=wz#uRyvsQ?jX`YIs5YO*bixSnf zK=)mnj`c4nGafu23(Ytsc}21Rj&APoPP;DF3>p6M3j+$4vf&N;48YXm@0e&6DlqId zKMaV>!|vG?@*SEknV2K%p(SSIGwdU*wh;FhTqn93pVRCoFpesCJTw2tF)hzs%9RQR z?>tdSFKgwXgga=K-)X;&J@I1sc3-q^awRp`RQ#Z8<)Mv+ z{0Sgg=+O-h=In)y?c~tsQd9sVG4tv15mB{#UHjWVD|YRK0@$DeFkjv>VQ(^-gM?u% zE|KO%fN!ync?4TlzKgsCs!+L25yY*^=FS(bC}MnE`rpFs#quaz8^a0^CIIP}EtyLn z=UA&^OCJ*@?VlVvnXysWo2!LRBoVnf2DJ+E9+b<9J5v~ERA=K8uMZg^Ni?R{8Ese6 zwdUNC?zhly$c4@vF{;s(@}t8C=`@w@*lLT73s}7Gw}OKu?F6BTq!Ld}z^SVaB9m@G zpMiNpRMHb!H2TYCAJ;+Jr^URnzkt6!<8cP~==2iM^^JUf&jJJ)Asd0o07YX) z^YulkNmqCE#oa%t)$TqPrybK^k$`d$bI;TjPO-PJ5XmgV9fZ&84e@UcAQ(+Z>{!#J zkQIYi|0;U{t=!|0@08tdV9$hwoK{FQnZ8kDwyx}EZaR5GxkXl*Yd8)ftL0g^Xl%9) z(p{XAR0a&Z>4Na8LrC)ks2W2Mpl{f#02x&$rZAb0 zmJyyeH|Y!BGdaeO5PHT(>^sok!@1~uScn4-ML#VcO2(4RU0`a9InXYYf(Nt4oC&TY zC3j5CZcuTOx`AT`pdOZt$S(jUP+rMBlKSFDKWDMHB>5p%Z!Sw@TN}}}n7H5@#vNMDAsPY{o zI0Q+#>7qy zHy$rrVTWSef9`*MIeprEwq@|MQ>VBW6r7_SiEpk-D-?>e~rx| zJdC9p%g^K;1@hke>6CWolznmmbm&!wJed-a*Wjyfghwi1&$Lf3Gk|fj78;KfXdL5q zqXbwD(g%m&&SE@RA`^SeW?-AL=Dl z9uX!D|Ks7PAq;;VB5Qb4pHxH z%=gda{jbu@>CXc=4iMH}E}~TsQt@JyQB+gA=m)ncc_bw?M73Q_Hc>p8Ka6;(z>vi>qv~yth%gnrLf$(Ki z%S3+u)@kd1r%-tPRs5ClML>zvz)mqia27aBkeQ9kGM0fy_K-aaU^d3XrS{}QXPN83 z(8|?5!4S~>*ZsX(tTl#?J4e10e4Gk$G`l^;vLGJ9&fkW80IWUwayh0(583skY9XMJ zUDBswtImr{AUC=<|6HXo#v0-}&#oXVSCDHq=Q@UT-OuHEcU9$YcLmNF7F>`ZcpVCx zo*R{oylvSWt6pLWw>lR7D!b+Gn=0r6{EP%l0Hp?1z+1+jCjLM=Abpu%MNWOhWM#Rp zPKGdzEEFF_Q2146K*5G_onD{#vny3z=^)zGne&o(1MNaOnH@O20dMDN*40qaUmTif z-^>Q{*His-n1^CsO+WbU7g3cV^R{uzDk|x?>2F3kcII%UUw_kPT!*D9!3aWw@e%%v zc&%~nGvT2wlT~`VY@EA_)$;bYWu~AZ%cL%&Vj@@=fFP7Hqcl5HL+ghtJ2z@Bk<*Pb z0Qs%6LTryNAN_$!DQ6dC^N;PHZ%p7w+YkNvj<8phcVK9yaqd6wkt6H;dh5#F4YfrN z*V8DefUze!KYvbpw6a_a{Ubuak>`FhQ09@a7|? zN7ba1I42VeShQlpFfWUQjAG>R~2!q+?%vm1^ACaiu@u#)e zfM>C1a%lq0b1Y_3k!l8VeG1a^b_R_EcPt;DU8q`CNP2(H5L$J66P}(EL>7H~Vq}M) zEyIwN4pm~F@a_HG67n_)gV_Jl8R}CebU($R7Y}qA@^-Vx;*Jw;VK#VH^t4d-T*m7( z9DLZk`6c`pm}y1LwUSBzs9h}}c_71k^if34#XeToJa~4gAM8v0phT0&`Wc-wzG&EF zXd03e5ufy8&hby~K*v3khtoots5>+EWNH;F^B8Rpp9>=^qiY_DG{oXHOowWdU^TCU zeW@!f7~eN0nh{s|`pz5S&}U_4n}vy{)gJByR;nGJfwv}C324>lVn`AbQFPCGnA73C zOlkhM0a)9~qwjQkh}F+jSueQ%up3IV$SB|T_Nk3y#Zk`kp;VH(a8;&W+sVu2sx28G zZNr4@NC^V6bQT!FC*pifXWL#-Q86dijM_%*-3zZ}u3iN7d8;i0I5Bh@GclrIZkdHX zG!ed)5{sYmN*Px7p!6IwYYyx(RDym!v99gfEVhF<@mIpc-g|A4Rr2@es zSoM`J{;hgAevunDSzRnGllsy=h>4Ai8Q4%kRsE1SmWREL$-v0g*@cf0WlHZDKU(A* z-;^n*>dsy|-Dxz{E(B_>ZA9Z3j9G9S$+8a#3&1f%(`86=9{{!4KKOxZsNs#CSE+z2 zqPB4!{ii}k=1dPutaJyMC?u;n2FeA!*;JQ(zq^ouaz4eD86oW+HSO?DTDb4mlN=P4 z;%(ftfymXX1W1;#ex`yg5s<3={C*vHUbr@dL?{7Py8)l{8u3%`Loeq--0rQC2;2)m zRJHk8iW^MQokndM+VB2hLWtB}h9PclRAEj!@?oh$8x)+TL}R$$q%^4h*hR!DX{t}$|i>-@9zL_;$=O?xFQCG+@L{N;7%aO z9dtlk2)G$9@ckQdy^pnZoB&*K{R}$*c_>K$UEG2PvBwI(nx+yLNE`FgUga}N7EQ~R z1YU^?Fw-|YO2<;^ngq)K!Zu}da0c;NEisW~U*l4(%ju~>{oT`0+1YBJb|#l-Ck6v`Z`I{dp7=Se0Z@x)$6cqj_z}xFl z0_Rm7g^8cw4l+jVZS^OsXpx9yV3S&8OBlo(9-_pawGvsm#Kn{ z>Tf=XqH{7*DVzdqJ(Jr^aJ!g#p|qMj=5$Q3M4F_oG`@g-Yi36|F* z#%Nm)2P9i0sisx@bjzD0`|>5WX9>+uH#~S8FDMZt{&d8O(77L0p!;};!Nk<1E zgomNf%YlbwR`937uo+{ahmDL>L_*y z0C8sN+#@&N^y5#6VKN^MY9TaFZX&cq=Eooeec3d6E=cDcXTcb*7HJOI*`KR{p{< zM4)yt&{lDhk#@lvQNTJ96}}yCD|WLev$XS4sO$<7YnbcGbbnjFCA-GVmKQMV{-%6G z2b>8VIIFcyyEd^lp4%0~kIsM^he!>nqR!K1@3pf>4|QFgguC&j?Ehh2tpDDC{C#G<`(Lw!2*RiAs4zaFeJ#y7Z>FnCG#| zrGyGQn0EvNP_!6Bn%t9f|0;_vcswQ~jZ&6DT1t?6qxyPl#n})=8D$~f4L8<%hu&v% zMeC7Vt|B|0;OP<+eI`emzC`*K94FK_{)Ck#KtLd|zwO2ZePICHGptR*-Kg5~&Pt8g zBDR7ISwp*|Zhe?^5RJ2pwzJHf!R7De7x&p0Cuc8S$)$o8S*rpOZ#FUPN7-N-c*BfS zRu0GNgXtt@rlMd9MK_eG*dES@k5z{0+POuZF&y^m#k z;z3A%dlK4~MLRk$-#6|g@tr&qo0lUq;F^FC{^G8{u0PEj!H#gI+c$yg;+Pw794fV? zb2?_i1fXP|^F$5Uat^~&F{2xbL}!5?72LM6Q9YI_;9YwuC{J=%2|#7=^XMp-bH*F6 zTrbgym(D96HE%lbUy8Or_YmD9aQ=#0VQ6V%vUB0VY~=c@#f0EkPM8@D#VXqe>?OiF z3tMR>G!XRMAHGxL?>y{hauZ}mO4gHXWxG(V79-$*p;+qapU$Pg3+Y;Fzco$6<;wG)fk)aywxHqa&FzHoqNkZY~Lk z@QPzPJKckAo^HI*!#7b{d*@RLmjTqQFr(h0vB=5ok`>jp~20ZP^EnUNa|FJ;ExMYaUSUI$lv)>HjUkEO0lH9LYt zREQxlCwmmpQtGv$PbO58+> z&`dX~NPH0n+WBUj^QpVdstU*De3bWvwMkqeRo&g0>o+Y1CEma5cm!^a{LzaE#~($q z;VMWM&U5sfLJO{(MNez{B3d^rprDt`c5PxsFQ?_O?6V`x_PH-rcagq$PWIJ(TbcHU_fA7x?ZKd8ZM&)~n42PXzmHZne%fJ{mQJ4Py|>P>Sv1;i(n{IZ zre&8cXmKK1;1<6n*TvKGK94{;Wc^1#|#oQmOKMS&CPLY z%wNy0&02=j;c3aak@4ClChWzAF6#OJizev` zME%Tw{`?4txXhz+z5DU~X`|yrIcZd{AQ1-ZPGOOFB6(lI#vH?b$z;_PWu-A!D%p4WZ60} zA{E(Y;JP8@z^r0=p{jrEcU5E!z&ut#f8NJ~sia645qO;)bOKmR*o9~Q+;@|UQB=g~{tl|a1Esh9o z8Ie2Q2fM_*H3c(+r&&_s#Myl1W%m+129_bp`V?S`XhR>N-8H?r1%g?6+X9*o%fMA&(#{owl_{ zjzQ+8O9Pd)r~ZWkB{a$VtmkfI2<=9AG^S1L`%;#T)wDqU&a}NaWY;HcwG-c17_{0M z>Fi6|`3EcO-jN$Ix-|h?Mtx~mwsc&2Cgpf+ZxaG;a>oInX}G6fNV4P7k+xb-$!%}W z6B)WA`9XfUQPSTTGZxig%L3^NzdSQM`qcjSvcSir9u zd(_Bs8YlXlTwSU=*sjiWlE;%fLzxS2ZV7gjOd?J2P{>O?Rsw%9^UBof^(@xii) zMMyMok%4WCob=|yG*I>?6<3Yg4R#Qh-d}#ZI^TO&KOCR-2zz$qR-D$;ntL3DU4}ap zX1z%4^-)5(#@fxR?<8h*>tJhJGR93uf9PI(`V_S{*R&jFU<|P1>si(93Ve{2krB@ERi3U|m6lE3N6zK@gue(H2 zO@J-%ybO3|d5pwECy`1wvqM|O;T9Vy_x8}0rS9ZF?E@7PCx3v0buIUy!w9p;D<{*d zNXUuvs~9MIa~sbHe5}f2ynt5deTk-AMtD7ce&lOJYaO+0qFtQus3rcRXNaQsy~nI! zxeq>w*nAhWYGBjYkXen7oU}Ef-wtio31~ffirbAna7nUW-pwod6GECFLdwq$?lnha zpwF3})7@ooZxh$*!;O5>ubYv?qDX1jEBq)at#rTO`ys}s8yqgN@St@CGtq1V{LvbR ztF_S?z$C4Pjo)H(eS2!G6D)xu0Z)1%W`N4Qq*+HVY6CtX4P|j`s!~Gdzj%gPniId- zl6uSSdIn*f$%R0Yv|iS}0AOlY9S@`Q(TcJnHnGJAAEfpxk)Ph#Akldj)hcSO9c0_j1PG}w0q{UZG(j>#Id6skweS$X2GL#RX$5AOS;-_g6Cl;&4U^LPALq);0}q55p= zo6#>X7lTLOV0q?j8Dee^JC^pMSO)vDka>$bM2@OavZsQiJOpz_0mZIomthFuKWZ&B z(N5jFo1i|y=w}=HOQoe^Yw(}aKNaSpk3Wz>`xr(>yAlkckRan8Q00>BV3t&|@C-0p z<>3ez+A^B<%&~blsHkX+$TWs$$`e;9?I@lfL=g^`m1uIa|rY!tQ{JF6$S322AEXM zwL4KYS{W;D|J7QP;*2|9ni-+gtU&LyA!a|K+<{8EUyz5==4A+VWJipb!t@Io(ce=$ zL@h%kMRquZJzU;gq7-1@E`Fv{r==%`oC%z+ggXZfF!>FlvJ5ttrB%&yRWxKth%e_Y zGqwodyDS7-6*P(h(z>CVxIwDT|FE|qFiZX%H2Bl_7L#|F?MwoiS=ybOgCBS)_r8#DRy=M^vwV1QJ$<2CnJNt5`4PuaW>;|T>;2%oI zw8-C`An#@qLpSX+oIW#gMqjLWFC0;CxfXf{3-BT!`2U&OCMRMF)%g|=m3)hb=>I3Z z$$v_${+rg;H~cU8_kXOh8e;q*x;m|{Lx4*31_MK_k=iOG3Q4U*+FHvZi4dpz$4$C7 zhF3pK_lHuERQ_CI*-`9B^}Z-3)ptC8K*=g~S3YQA>`$ zkN<37xP$3J0_STFAZnF^{7<|@Qwq_eaS%Ah%Z+X5s5F!uly;gSoAzW31;?6|sY33A z2VI!)_(_dTgp@eoCe8<8GmIEcf3GUK5TU2dFl@9v*s+Y?*)>2`!HYcK;xoPsK3>*EkaI+9fYjZ<(n>{LLK=pX|Rnzv0fx@*NcCo;OIq>D7E ztWxFQ^)-cZ7fbc_&PsXR%UiqbuU-LS&>&Ri@8G|=nYKPzz?29v=)v9nY>$0ko}ON= zzMj9==hfmY|MQAto}0Ol-4u!1^He3*$;TzO1ucQA`hr4HbLlSwN3Ht4>~?^ivkI!5Vd{VCcj zMU7Z8&i#~t29l<)rYXk>6=V+5#41bi$p~Y?s8Tt#LPntsmQ5MO9slQcYZ{u@^zR&Q7hR^>3BjxeRMt&Jkp^OOKt zZD`vspUOstCQ|CCpL=61;;ADQ$I(%7loUZ!ZHLnmy}II)N;@9G-B!V>i;_+9$}Cb* zp{SDGF2+!oE_uw1WsoYpYx7dw@*4XgJ=-CNbi^Bw_4`m}J<}&?)ikp{U+Il~+FW$` z#yJIVlN5ym-P1Vfm-x=+Q2LR+P7FC9BH>Vw7~KqcfwxBD92|1Q{$=Y&-}OLxSZ7OofGAIu~Yu z3Hq&);lE4~BG;Edx9xzXap+3!Yk5+yLrct7DYgDG5H{arr6IvQ`!qYuh{tk}O~|w1 zMP{3H6KKK;+aCm^+^+!`B8bIn7E7lW`BfnQ#1Ve|CDP1uO_>prj1vd`%>^qD3|~qz zv24B-$J2R&8dv(&Z)SSHgdfjmz+3@F^+b;F0(X%LdTEWzF59S?IJM})9*br+AgRI{ zHFyi^$rN2^=H*pO0VKkcMej?mRq`rDd;@tcLb+?ImP#V0$@X8mGajn@4X;S)zk63z zO%8)r-eY zmRGZSP8%I53OboL|D_Ij{GO=}{4MrHRb`a3ywtsU=l_sbX#pg|i>Uh&Tq3+s_I{r% zSk$+&_aAtQW4pOv7&HE==>f)njQ?wXx7OQm-@4;!p)|ftn){avWK;aSFnG}>ME?BT z`A6U_o7@9-)bok*$Re_{Ntj4zv9n63nD^8Fd$8_*(Dq+S9}tJ*>==j+Jlb`OyCr@T zuW`ChN<}(^<5c$r{nf-^Tv?tHh_#KPy`{~8RS|Go9;8-`<SJjb#X{wwzB4ueHN#$<|JV0x0UdL{d}TI8g~7f4WF32OiXs%T-?|gESGY zSwGT3pM%55$9D?Ge+98UCl1?jwSDYbzD6yYVtw>iG6hVX6~6NTWOBosL`hd~8AMx( zh=WzzC0s%-R@VF42a4^BcT7EV&;&unwM3Njoa40aTFcF16t1K$XrGtZY{rq<^W^Y; z;E|lEe(I(581^E&T4j_y)GxC62qKMUF8S${RI%1p(3f>?ett>}^%9f`+Fy)n@TH8j znUo9aKmR0Z-#=)*B1C*2pZ=RUo%8%&`(5Qgn>N%_#|5=DeQ1qeuBBISLClaz{LSjj zK(HEDUtuk;+Ova{DLSe0_~qq%73C#m6^*&fZMRi#N+xK++~ig@vEmEQZRMjli`k>5 zO0mVMNb*%EN#CNZgl|QGo-)d{?89@=oIhz$`MFwNG*MZKurZ;|W;;(zF?tjy>1^pu zoT*8E%-8NF@D$xHX=}t(}QoL?J(P*iq%ZqV;Zg*IJSWrFa?AM zhms<1>9#2<5UQ{TVdqw$WHRfVBd`5<_X87U$K8bxynaV98Sv{;)p;=uwUpl z7P{G6G+8%hQV6m-`oe&b{c5j>io)wFNbNj!KMG&Ujda1;@}042lQIm2R%MMXIKJ>& z<=lX<-1{Nf<80q1)40vtNq%#)eRR!^_SK~`L#@o+DUNz-n0HA)bZ;`It4o@t&=T`V~<~{H0RObPv??{*0mKxF8n^L(`A?TKfdaRYJn#$-9V2j6Ghp2cj`keqx zDvC5x*L{7X4Y-fDHWZQ7xjv|9q6p-B#&uIVTnH*4pFWq(26L8y~3lym6J z&zTe4O|Vm7u9r$b-knbINaopT(?#sel!zX@i52}jj$tfuY!#rZq&MEpuTWe=XOYOR z$Th2WM4&upUMxxOMxAk(S_~kxNu@OiZY1qR89M>YcbBt7%&yRfCaDa5agxTOj)ICi1Kk?n0wJN zc_nyq7NpamKm?s;qNz73M#Lb^a97=-)gIFBGXKOZ?Pls#;X}l5c}%`pN_RqsE0W~gQ#7WnWFCLP zl&X$g1u29yKQ2HM2^3Ws3gw5Tg6N;I1l)qWD_U1yG;k-QBuzHwnP&sa>rGNs?Kvfb zq`|-W0h9KR2G5DIE8kEs6cJInraeqf1E0}EYf(b7Mdk*=nnN*yEbVrAKz{^dC#f!Z zy}9Cb#N0d}Rnvjy)qv#E@q$@5Vk>J+5bTllXo7`>r;wp0Ya!`b9*J%}hfzPVM#d_- zf}E*9&;EMQF>fOq_7g@LtH?Whw2I-&iTvl>6A+`rx{|YQvfZjL2t2YkIl3ZdtSo~p z>0TkJDrmReVNfrdVQjibi~MQYN4UM~SA(D_;A(-#E^YAVvZhxR7lBnHP-s@>%BGjL z!&v%9sta$9aF{Gk;<269Y`SW6K8B*h2L3A25=R6B$Sn7Y$|UG zd&PtaH4e6N!d@J+5!^`1Z~8?kJZQvm886ngUYl)O+mGf};5CGg8j@<9T-8^7*e!{c zSgdw#>ocEWNGq^w1N>8yC+t19%h7TJfBCtS@GvZqI12C7rZ;MuF;hEsD41j^3e9lV zADnumdrjUbp+uP=9!(kw_Pv&!mcZ_85|1<>J{#>5k8F^~`iaMv?TCg_i=oxaPwUCf zf1!;jN-rcS5slJGGE9JTSxS1n!5zs;FXT-JY_*YoE+dS+rxx?yfJ6d4v*ch|iO-x6;B^hz#9)kD`)HT|j7XgBwL~r|))^WcApk15i*3wxoN(Wm2EhE& zaoNVy&e=$t6Oj1JzAA>h6uH=?qsCmn?zZ@fUbBP=jZ^C@LElX2Bnaf{8f@yXN2if{ zr3|aa1QjE+(K<#Kir}laeuL#qik(*$2>dk~HfCL@8b({1yeOo}F*zM~j$jHg4dBj8 z)1%cNl*$auQtb}An>dtYlG4t5Sby@CuYnwYg zCompoGCKZeiVE``zT`a{jpq*aG^HjksAyTf$ja(S!POwBJ`7Y574^f;sjtQh6 zCM;wzQy|Q+!6oB^B&g)3Aa_M>Re6O^(%H>Kyp|)Pv9Gn6f28ervXH(#COwtEP2cdC zxC%IXa-`LtHyD@lIh2LwtcQX@GuR-<@(?LAo9VZ}QA>S6yn2jC2V}2TjV%OF<~e_8 z`D(wC!C~p!O@vGzS2vKM?Fap4Fj*5QxNvH|_Z3PBB$B4)%V-XXI-AJ#v;a3`kH6Q| zQC(kYLdNLV)QYNDD?NDHGjsNAwP@L?#xa6LfmVxUKL)TSl_(F$RT1ZsEz#Ss_CSOJ zabG{@d|9FT4V(xzT@q)v!UVsTE_2b-6dDB z!4veiVwUUuwADQ?F#8(OTr~V_DK6_j;KZ$2UXMqd*R%q!XEV}-6sbM1E@07yP9WVK z^X2r&B(o+fgM=oDC$qqS41rLYCh@a4Nxv?6t#B=xQD5&fAE1gDWRtF!7ow_<5k0Bg zxxEWRSFG)5nsNakR7w(t41-AIt4j4>#H=tZg|Eb`_W?wW>yT)7g9W)5T*JfMFsr7T zyJj=zNGd8xw-Y2v*ZiUjZL;hFPHOLfDKvo5Nx~!@_spYkf~UVA_XWri=s5Kgtp+kh z=7X(CDwbobNr#g?HYBqU;GMNZYPI;8o8NPl1kl9e)>OWQ8Fu88q)eIMEo}Dim?E%) z>!eD{d|(05Ty8HhYQ~zCJozTEg6nBURdZrQeL{4+f=1dVnR>!@dE*h2 z;6KkLbHIYKE5ff%muESO=nUP#V+Y#6cZ$a4)3}dd@)dvh%RBTf}XR(e-y8#i*^Ze#5H#nJw(sCTHF&c|t z%u6PWd5MVxZ;5u^)0Y(rz(|t8DO?PSpQq-VmOAD%gD(nR;YW5xYlMiJWRZ&k5<3Vs z3zkH(VeIFu3FPyqpPN^+nI@;E`SN%u3r?z@Gqy2_)o5bW9*wDzc2;wwP+^|gi9DYT zf(7Kh?-3)TsSlTxoVp3l>NqfngY`$d7xACdJta-boFjIedLWzJhRJA^(>2DV0@n=V zEyitd8fW?A>k}-PP?--otT6BFTwOT9bPLIR$YK|s$4E$X(NJNum7DEObr%7nMUj|? zKq5OKBXPEL3xlMhFveD1MAoCoOjn2xMtzUHwg zvU#ydK~9Zf**7j(X?KWqaXP9}6?eN}u*gT9nbavf(A5C+vFvaKSwhQ3Gcy=S1&xlKQyFCGlOPwuORec*9MqKD@h7O+|#}&ZoI9 zUAdV$@4bk-*1jkAw6mqdIlMp4U3g3Es~6UKc0l7|ZYTXYUNqA5-VRoW6PP)Q&76o> zn#V)V+!)OWc#bA|wh<+ix!HzRO-#mkN?(7VHQ?T^UId3{Yb%|oUUPzRNh|?O$x5?Q zs`x>jifrqW;#Q?T8Cb?eRT_ z<+OsUHI|ioZtVmH)c~f3+>2_1xL#r2`IMt$(}!+^La@Kix^E|phXP5xw!n8qX?9#I zCNQr=a%(#eNIJs@Eqh-=v>Ue95+ee|z}iT@ylCw3GEqtvbNxz?t|GQ*rCQFq2rlTD zkYJ<=IYjg{nhgP?-}K%09IT4tJHHW$QLRLeV{frR`Eju8lomRu?+0xudkv#(|pxqb5# zH|efae=oL0;~hdB%0zX~{S?t$vAq%NAm*~mP~uk6?EMX>;CW~6jxsLjM!DXs)tfbf z#d$ATQ%Kj6Spb2ObGT{pRD-Bqt+@NxJ8m?svC$`@6f&LDB%%X2o{`nlIrl#@-C3_G zlV1W>zU+>79aMXLTSsR$V^K3y1y?u^H6Zv6nTSn}sMB#$Rv+->7BWnPy55+?^|`Xk z6oe#$P>*a>(5_bVP*SVR%G>-pv^e=;QvPrz> zIf?#jvGyxN#DMjChqw;bd2$qFlUB|!o&~>veU}jX$98_7PylNFPzcEx z0h*T8t*H`fjS1hnh3nK~bmNA-`?K+gBQL!3_|hEh%)aqKl&_{6+7Ju`?FlCC@1-x1 zwB4d_6^Z90LmR(Fi};npxH=&vftR;lBM(~5t4A+dhMDeYeY$j_`AfX4avkGO$e#cl zvy`pg9m}P=N2T<*^4nsvvK^dFTJ_z0?a+#{iOL21+^R-V@?7f8;yR>8O#Ix6;F6Yg z=u4kg$5w(*>HBF9UA%xL+;^Dyxn)&+5n|r6a8P$bdNs|NU&nqOrE7>|$3IwBMVWII z&9kR;gp!UZRFkT(0n>c(n3_uOLQ`PjMo)(f`{BhXZY+UZ!Cl-G#Q{;A2EjkOxSF>d_{1;6+NEa9_=3`|~ zhGlTaB&BCw+C0NCJNCv3RA)8G??4(^1|C2 z7&cRF=yySnM}*<<@VQBERp24k8)QpGUh|8SWStIMw(kHFG$75}!QD{*q)1)ii6|Fw z^oC>7FMg)R@u}-ilseR`r(5y>Xxx4fXz}`{j0}e|DZI(16?1SysP!G?IVziDXt5SO zL$2*~$W_z{5-l~(XUd+D8)qFYvDRN?II0UH)(~~kmu7fF!82bij5D|?$V)#Sl^000 z>4bby{?Jg2^vi+C9*1+`sw1PBT9C&BvFy;DiCYaUnf1{&yFNDT5s5Tt$V3@Oog%Al zS6DjU!cP{=Nj*5XH?)c~Nrbnnu(Ela2H+tZz>Yz!FEdOgO+=A^TZd4MBSHh3@hV*O zeIg7@&U1PtCZ>GYGDv5rAn3ici1_O_L(A^G##~zA!-K8wd|Uu=+WWT8&$3&jF}p@?I&ntlbNnk ze{k6F5NwiV1*`Q`7@AtV145&;a&`R8%&*kKgS`>5Jqxwk>U}$E+mj6~ICh^~gF)L= zvY``O(s4&xZ-7w>oMe(AIWqHY$(~7=&;Z9JFI_vRJUr4MhCsKf?=F8 zkDE9t*h$+GF~_gU$JCGPr0G~ROUF+$JNWg<#)Gm;?mfWWa}Od-x#DYW0T4C3c368( zqGSj;Pg7CdiPE^F6>2-AlJuyS%pw5Zj0HD0Nw^D>*KUW}_sS4Z%>G$S{~Y z0X&cS#;{Is1h8w7q_!zu>8rOgV)M)Kp1m!=!@b58tyUtu8{jM_nZ-8Wxe-!L z$8B9-6rskzn`{WKxmw8ymZN@hs!*YGe5KCL3q;LLUUUr()e{eqNjGFjcKrz#_nx%1 zR7&ue^85@!=(PM=k_vqAzYg8w;|2kN!ojYULRgkg_?%-9Q_b2u(C_r#JlnRCZ;7fc zy(CQ#H0|8u!JrpL%48Ku_DL>$@68mHUFUF6APG_lf8j~$N60;uPqSK`q#bcoa!?!A`a_AXq!0zVAwkz~6{?VPw zeQqRo{-={w>K*4rgG;5Jx$EQ(sv%62_iqE1_q!2{llMrBVU?ulmiUW#b*G_WF(ac$ z&Mvv!g1DKf^K+7C?33)An`vH-n2ajeOc<{k#Ho5*OpiwJtPfvH8}QWmuT*+L59_+? zXwVbcjHkKvh}yYEt3?u(pQ<6Pz|H9Agwq?~cT&YaG#D38GQjjyR|i*KhP#t9AIr_r ziLF`h4r_(>-{M`eoIm-@u*A!JB^SkH6Mq;#w`N0ztB7rx7kY0*N|; z`O~WnMLRkI*?9I&p;j&faQ18*{6Xz>O|wM&)Td5|{n)^vHpGvP`<3t5xve`;<1#TG z1h?G;%*t?KkUER4dkx6~K758WTffhqjk85{X4$kHYy?i6U@5toNqZ0qN^791m7JF0 z7Wl#09|~Ci?X}vJf`eicjnk$Xs;lSsz00{gr{tvj2@Z{0VDBJIaH22XA$ z4GVq6liqBY)KUx!G`3M*L^WTgxei>`+pQNUe$q6g! zX+heyyf#WCTPl}ty5g2DB6fd;inosotTyS5VA#?w!cXEm!ZmGr1(H|kHdaud>K(?( zfX;9%scx2DfmLI5K>(4T0Rd_~M^UcWO}H53bToa{O()2S$xK?;rG`3{koLw0!7A3| zf_Jli&1PUr?(rugfv?Hl2Qz=?0CedbmfX5U-B7+FEx^-ql2$u~c$oXu0(8A7kQ}J+q0nL@#}f6e`L=_O3x## zVf@Zxu?#vwR`*e^NoTQB?|u-!$>0<|eFzoryr4{o3`P2c-QuxZ|Lw^SH~|;NZ2RCW z(k(VYFJqmr5uyr`ow`dsSc4FXH;}M9ci(m~foQBqAK0IHZ|y1r>gwxZXP*8#YC#FszeecFACtx)Md`9e`(b5p6*pz zV_w+)yIXT%V2FBy1E=-siC5JW8_gn-_C4K>ji z^O?J&G(`Q92QUKZcFC(!3I&)l-}>w(KbQoElU(%ZhgDOFsrWO|v9jJ6D7K7~-1cEL z;xlrckxnNMon zEy3+V=ZJM_7J|QZms%$)tH;`#JjLizTaljTM>m_dm?xcQQLAOui9sp!xtp9!AhBcx zce+;0BErZRJZ;pG5T&n|8=XvG)z2AZ^z6OrLGDXf$IaWAJC$9>t2kDF*DPA3`kXvd zx{3Iog|fr$s9Ne)ms31WU6xv{{LcgP6N+KSJjc!PGmvf|=_@_~iKcvdk6N#pj`))z7#Paw&)30=&Hzy~I=Tej)X!uYc)!b>bdyR0)1ps$r+y$zg5x>7XzI_ z{!SgQJHtv=wvOL`ZDsNYUnyNj#UUj9U-cR2Kv^;j%`zIhcg5WRrL5s@6m4Y+>yGE1 z@wGpz5`mFtmLJ)U`TbHjqiw!&L5(_0AgFm^3jB{wB;@^s9@_YVW(6auW3{Je+-9L$ zLdTwDng|G=^V9jqyt6fOZ^1y$%bP?j5-36=icg6#WUXB8s?`+=ob54h)c}1*NDx8@ zv|nEYo=n>L>JE&7kt2n$QE5e2;SXpyK;yT8w<*4SLMnZ|*x--RhsC?&JNPz5x$$_` zFGXJhjJ|Z$&CVmaK!UdcLl>5jrwQ5p=#Xe&Q2a;%Lgtu#6W1d&9fSNou)e9^`aW~L zXS48iK;-UNseIaBCTa@RZ^(%H3rI_MirW4t{_QnO z8idk(Jx!~C-B$G(rVKjw@ByM9cdj3|BW=M^_Ti~z;1-kOV!b!fEF*+9{x?E=cO04O zT`PE_v^;OvPYfP+sAxwG{89f%_@SATO#j3`>*n@WBEANnh_+i*2I+aJ9nQaq-NSdJ z13L2r|9DW2Vm-8N@DRvyA1YqqGmuMtmCwEfAG&@Sc+7eP9=`Yg%e@7AP1@(Z)xX`B zoxHy#yx5(19`^r(98dR6JFWJwl9&G&{iv+@iqcbTcv1VxeTjL)ZtLdYlYV8N9Wl4L zDL#IEiFu4ixLM~3dbB_GKHyq0H}SCdqrAT_A9B9MyV$*3PVI4nKAi2@x7<2m0xs>m zRNpO+{p)>+`NY4^+rZ6BOnXZ+M_=o~+E$g>GmrlJrfZpnjG{B@-k3sTgjDlH0ych) z-2W)o1^1BR)#G*mzZc`Vqb*;uFCzX%ziZRpT$;#Zom-|dseQn4NCHv&~m03?*!BOin>+Ic;df78g1!Iua3Sz6x znqlN*WP)l`XwKS$7NHoJNJiBs;y>9{YewK#<2M7j)paf{lr1$$9kSVp^{!rete+&JC(4~B+JBof6}=K0ctu#T|+ zX=hs6H5d|uXF3|9nWQK z@WxvZ_O|Ps^zYG*GPKdFI|Nw=-=-?l*H70c(&FJHcKq*@Z$FDpeDgRO_$THBsg9N(cIq z$ql`HEZzxhEc%)pl81-~Hsvm88*@K(a(u6ctAGz7PFByE`Nmbf`>imPs-Da`-#b;` zuufo$Jl_i8rzf4h``yxLf}S)s0O+_;ncZZs*piaAdOl z__c%Vt|+xk{f*Yo!eh6Cm5spKw^4n^z`MlH!RK>t!-{p~k)mf3z;NZt+)Z&pRJSQ@ zdtZNn7V#F6Sr$L!c69ONbsro#fjsB`@gA=W9OZ zAq|3tRLVQ6kqQ&I)2ldXLw$I`4j@+CcB;CyU0(>a^NkBMUaZ*?&N#*eiUfdFsrVt8 zl1)@!sOfR_Z;dTx-nx-V^#W|fhw?!_ zUcj!iqOTvxA5qHAODN?T-GVMfpL>}&4{YR0%O1Exn-NH~AU5=XGT92O)VhX$2y2B+ z%zOP%0W~I2FQEfr0k+&}uX@J97K5zUTkSrv+e9t3SlNuR>+b?bDXkbq%qMYT2}~2wDl#+_O7eOPFA-m5ch{ z8;ZPRQ&n1OU*=82Dhb1!;Xy?XQQJcdamdQ4>oiF5<$y{a{bBrE9>q1(+hOk<(1m=9d$E?w8fXx9IHzrid7+x@n;d~SK@JQJ2W;qwOp3a#npyOWC&TX zd25dxnBpucO&BeoMESy&8Wx|SvYv%WgPBx3a5;&n;I-ZLIaULT#%dsr>7P(cJOP|q zKYpdwN;kw=3wM#kYHE+*r`uKZ_#IgUS)J=r{NonN zFOE`5(YiC8AfMT^Ho`-MY>AvpRAXt$B!CXb$pf~HJ z;ga7VTYGPfGEct9(MQ_IV~o?Z1nGl`{M&BN$$ zORbBwQdnCA`$MkE$WFc)pB&OS(qvmHOB!cMHkZs;x%?Y<>Q))13UhXKP+eSPw|D58 z^6wtY;YT9seXuITr z53Os}W>;#mRvYfC*hIRaaL|g%hj05Ai@^Cz+|_mBT%kVOFB!p~9;Ed_lzSj@aOrmR z$wmP^U;r|idOQ#jM@e)pMcAJ^kcqXpg$WH{Cll^?{UV^!7)`pSlpt8UcpxjN?z`=z zcx-~p%p&<`iYY&>gHQvX`bCAH9f|@}p~ziT!L&O&OH@Dw+qWmqi0Vs-y{03>wrIex z(D5NMo8_>yIRa1}T4q(D*dgw*pdA$il9Xn=#SAn(Req&aYz_Yi>@28^RI|s?=yOET z5>vK;0h{ivz)U_h5an>i_%S^G%A<`?~T9Co&i~2|7*9b5AwSZz|RBd=e6F) z`vB!1qX>~Wda`N^)qtGZ(ySaJZ@w4*!$Fpd!_vgE1!Z#luceeJC zJ&Ao=H}RGDql*{&$NTSDZ**s0Xj+ahSNpf+S&l(r5JKYo-PwA1yZT6XvrnU=r$aYA zpM;;Kag7U$tZK*<%==Ihsbf1bzQoZf;ku!2HDfvUPXrSZ|lMQ~t&0_u{5|L@-X zouGmb4oWc9e@<_8&(JnLL@q_D&R@XFBly@45L@m~Z3|(^Z$xO%@4jAO#KYmx;?2Kk zg`vX*pg`2`OTxk-}~!R|^&AQk$%Tko@JX>e$f@O>0|o~Rl5gJ_dM_QCe+ zL0umG69UuYiuZScG6+To)r&1m;qz{&;rEnEJo5b}+#x85yn>TH?#=;zmeN)~qTzf7 z@v4bNWOflpAr4q>0Sqo-w~eJWhGxKM%H zP!-?4Bm!0^z~fi<`O+KYUBNd2>SM{Xvtz*rn4-GeGx(lU=bM)g+pm8R2E|)9pSLyI zUjyGdMn!PLq0hS;12_7+ z=TYk?Dc@%~5WgPRVSbgvkdaJ|%Y8JSq+-t}^KIa-&5+h1!Hy3#}zK36bnE!bP z_~r+u+!iWQ5F41ZAsYvk#*a%Fo>$aLM)Z;SbD;;qk8m9_`+2u`r;e&ZecK0%lxHgx z{iQ4N(LI%IM_={APNn;muyC2U*vA)a87?-DJJAH@^ZDWF^nUV&cV0h!);~xbG5ET# zk3SL&sn2p7QTXDt=*(d^R0Aa_PeffjI2tt>I}BXm==Ey$b5b(IO>qFJs}E}$Lcwb5 z4U|;iLY@Mqf2iPZ?DNg({W&C$>1gSYqIGk)8Xctyl@I4NBd3Q(pM1=Tp1iz}_Gw#^ zTh-2m{f)htIES0OA6F!IPVR8}zgYs{ut5|-TYTqEJ0BqlD_=A{q_tqKLd0=9}z7O#SON7h(_kCy&b* z)Nw@qEffI<&gSxYjDJz&XHxlB^qcwF336Tdj(-n--_@TrXU-f40X*rP?%pfW9A~EE z;EAtRe{O2wIB@qx{ox2IlCB8u_qN@DWGR4tuSoBmUw~TFJgOh|9)o|xUx{U*;sAZ( z57DsNyp1`KK19{J&$q^}lb1=9xRJS!qA?DlGa}?+jS986nL6DYJZZX|-8>|6z283X zKo0;DzN?cnTUZ5?hU*9J=Pz?czXpWQ#ZQ0XQ-X8V?7HY5PqwPM} z!Mb9WUu8cju(Ca_-6@2tXTkvC7@YW#9O}m1Iz4&EnE{GZF@Px4FwWc1@*ZpZCl&X| z{zJrZY<0sukYRpB9lIb`B`rfh!v~G)tj9&MqWb>+J?U*y(z?)|SiD8cFZg6YOh5{H zDB>p$p`SN!2aUKyxQcp9LUde?^tXKbv}8#p=}grz{@{h|F3^9|DHg; zck~ew$l=g3W_H9fQ8Jmdk4C_wx}CPuqRI`0M^KymGuOeN3>&(3OE13wv8V3)AO3tf zCR&KD@AlR;15$hX%LlX3nNr`K{=OXRoDfd;@(DqcWRRc82`+hrd7%_ANxuG=7y$wQbSJ~M-rY6-%@=PH^INka zYd&3^S6wnrJz@K8IUzU&;`6Zp8!bYZu^}!=!Jx=-2 z9}zkF%(;g8ygh!Z7UvV^J_2i5zmSvEvhrlO>3}+{ANXZ5jkZ<^a!o8tg!~FIz zHv4}t7yl2A&CbYJGjo?K`rJGlw{#IhM!qt9&WpV+XTqDt zk!$0B51Rcvy=RBPLS)#^w&-TiN3{nY)O?Jv!}a>VGRGIu+T;1Y#-F!UTzu^0v7LPZ zs~n-eAgjM@FAofEvFe{!^?}bs{BVWciPzo#2)}GT@}SOQ$)CXlnjiuw9_}YOeYu3% zKbz3XwlQ*f8SfHoW{dN}FaXqqM<`bcE>Ux?TvprtliVMadOOrTs65WCYhIn4Jiu#Q@lah- zrgZ>JV84$dHlcDs*)q2;Q2vy7C2d_Vme1WN9wye=n4U8# zim#$>4yO`n`4U;nK5WM=7BCf#074CcDna@t1%We1d4;NG4Pl6$bXdu`CY}2hkaKD_ z@Hg#vPKQpJ-w28ES+;r8%RA#I%NLC%t=wyl4e2CEm6W41cT|y_+EpY?j2E3|;82~| zFKx1<*M%P>g=-%np^kLD6Q@DwU6uG#EODF^6!t@+f=zS|gW`aY5M2`DmzStFWWg}_ zWt5I#hiBbZUP24mPf9KZ^FKYW+X~Jsoj%q{?YH#SL_dRUbhrsESZoEk0F|uLU(}YK zRbZ%Wvl){fSmw$=m2#4~J`!=%Op2n3`NiQ&T)B5vrqOXr8D_-IfZXn%1%A9{1@!h# zE6Ly)w;?WVrM-SAwvPvSkjrg>VQnB(E-?PqxCGb8gCgJ32; z7TE~&5kuJhGJ2C~Xo&T=ONfr0Yk_!NRvbHKQaxLYW6!Zq<`}0NBT5&k#Ft?9zN4IW zX+-UfRnL*yThrx>rA!zIN_r_g#*hZbg3NX)5sI75n!SAM%!4Czf^Yt+F8uJBoU3we zf9NU27&qUte{?P%Ln$2qX+w9jEy8UY%){l7(Yw$s%+4Ays?ee*21i-U?mx^VQ0Aj$$wP_3!fT2;(0}%JN+zPfS$MG@PkJwu0nK2dBv? z1cSHdcJ_*r;#wKzH1pjShO<9BHsdrr2IF7e4i5ohiYQ~cG5s#-Q+~ls3W=1r`MfW} z_h!^?Jc*1@D{<+)1XzWBhyA}Km)2w@$cf-}S)8)#m$(FgjtYwcc!?RRm!W%{akH`t6$ z(Y==8{3boM2)MdJzWmd`n&o(D6OLl@wfu2id)fWZwmWk2!hxrBLuNyP4(PzH=m6&i z$uPLJcnN>O#BXY|TxxtxH`qF`Caj>Mn1Rosi{PELDPA!HtAEsptAR>k;4<{0Jxe~cwzvCgZp4Gfz#0qTNKfRo0lI8=43!Kwnrv_%8X%7UI*ruI}#u`^+(lVQerh8BTDb4 zR4Bu<|6o|Ku>W4vuTm-#aW)q_t7X497a#AToHgx4Y%`rMEaS-EbkXk#f?Z#0iX{Hv zQv0WFA1A64%oq_qbU2H`4`X%(8<9-H30Q0yz_1|*f9&S_g6+V{HnN%OVy3c)h=rTf z332Ii@?A9OEazIBxn2{t0=_wlpBg^8LbWQL2VT18WjV*j%-_6-84m)LpF z%9BbOS!cFvG#Cro>sz~ygUO+cgV9eLWcg#Mjd$l~LRNT7-Eio59J(X85?JE)J2DF$1GNaPA{6ZurfirvL}^C++2Z zoH1`K?2%iZl~uhv9SP?|b(WJ+8M4?sh!TyxLUna%X1@u62aOcXaTPs<(!?j=CBSE~ z(?r3b$;x-C$F)yjaUyDwJOf>=yWE$e3 zvvKaXOhqZC-6yk6{=q=2yL7i{`L#|K?i0RSAl`BrN4NtVK3GPTfX!^u2!2Ci!Y%Ag zV`=(2?_@gF5dDJYi&1-9|CD(&>SUC9{=DF`Wr6$TJgQnXr5Fh0Q1xSSBbfNRvuz1j zCKo@0)YtG5x%!bf7u=0oMRE85X)FEQemRbzX0ruGmUAFR+&SJEm90%qXX zTP`Dql670^Sb@JKRkCz3d<+7M&GorS2>+hLxHRff$(a%`RIv}E-KZI7H;o7EWV8HT zkCz9ShVdDzBP4aUZwz$N@ap~ zT*KoUkkfL9*w+-wsBI$SZJ79j02+qerCe#aEe}`)XS=?XHEaEju0en&l0V^1HsxnF z+ug_eVVHUM@VjuPiXQZu)tzbEdmFv;;Vl{wZJ^$Zd=sR6CapSKnHm9){hAbLV-!U@ z<8F2X)Uv8x{C*o1^mF)1DAFbaI9#S2%9GLMg5a z4pBJ&!N!}#!W<6D{E`z+6>Aiw0S$l8=Iu-b-T2wu7gD%?|N zHL@t|e<~tXZK@sD#}rqIlQPGRMYCbwOA7`s(rq?X{G%tcS6C65_!QhU+gW{5KaGKB zkjPZxzOY;-9DVX9ILj<@)85*8$ta)lo5&sa*5cKTTXMPh=YK3B5tv)Z@lY7MeRu7Mg_9SFTFvH$+RX>sPIQ>y?pOF5|C@ z53+FXJ}l{RB`ZnDi#1^oDi-s_5N76AD{R^b;MaX+sMpP7-G*%#s2=YDacc*h z&fyP*9=2!P)%rYxy4Y@epDYpDV?Gb6Jo@1)3xe0FbKCi zq7C`k?edx{kpEytD~132%OQElu@KM;`_ z1L;d_TOt|G3Sn5OHt6cx?{|<%@TQx&U9(|eMbS?>-<#NrA=YOug7%qJ%1g1b!cwR$ z2@(^=SSc6Q4pcJSpS5k!2)mdcDZ)QS=!3#*VRThkoiSJ9JWhw4wI3x*7^?&GtH*VT zcKfiwNJK-}sm5v%2BcH&deuZS#(B-tQR=--KCsBg9PDo+`!X+ePBnay`DSIT5hxnn ztQQI4p0Ii6MzJv3zDUqNPG{~(;%~n2t(1*ZSL$16$I}JGSQzzS?7PRd&m5^lYF`?) z+W=aLc(@iAHooOG_u4gO9*A{YOIC1*cxjKijfO`G6&q#8!mU0u@iU4P8_68pn2aZL zO!3>8()d@FJI_TtX*BNl|6V!P94Iw@F5(zl9+l(ukk`=aCi8MnGT?QdX>c?E=kh z7u|W_(uMuoPiI`Q^>)><(9{7MWXYzm?+c-4v{qjbpr=zbRBoi;tfg!wci(0UY@+62 zr=F=N9fF7#Bh_2`f@0Aet{{E~KQ?}&U?jB(Re%2`s%`sM=Nm2daWT+Paz1Z{vdwSEgW9H>)X31&I^FmFLy)fDShrBVyZ6sPWk->H(cTxgO>uAb9>2hj zs{y8F>vpCaZk71yU-Dlfq){~jpd<44t&!Qx4+^eWAg%Ka&W)zC}16KCCSAw09l#1w&yzBL{(x{{Z7f_5@EEcn$uYC|Yq~Ti;S3*0oGD4)PH;SOS z0K)W-)<~OGYcJ|If=id4@hJ+7#iFG_t`6Sntt(@$K(6e|=IZ1_5-Ap#`$MGVhI@Hp>@nc9osxDZ=k+^{3AJy@bru zG}SqOtu#!{Uhs_!;d)Xt*>S!jdL}QEqyKVsdG0Roy&aCc2YnU59b$$*k~c zDXk(OWm6+DjjCuor7nr4(1*hk{Lt}5gIq>QLV&ly$cHNnmB2z)J<|OVs&G8!7u~~W zXm#4C++U%PVFw4<;3{xr^Ex{oej>@5shW&fPMEb_1rJ9|a9GoANstO2y#U)7x=cuBPB6HVum@!q|@fPo~U3@@5*PclX~%cHV4au26vUub`P z<$%A=-F`7r2Yp)3Meijw2D>)YL9;x_e&L2+S6&yvg?F70B3LGMMnMsrs;!of zZjcBA)Rx#>J#(5>i#U;$cBsa|s2L&bb~nZ~=m_yQ#ev=*AL5mk**d?^t@=b?L>Cn) zqar$VBk4Ugp$3ezb;xa)R)Zy+9zqrs+qqF5;1ZUeYDKLaX@hE8CL{ayBVWIWZ2CC76d)M479iC&<^qS#x z=u^=<&ORpXT8Ye{=(+1c0S_r4BHL#dq2JphxKs#zTaj)pymT)rhRnfffNFmVaYM&H z5wK+mA63757oukT$RSILIPXW0ufhf^*}fTL=RErp7btR`md%PP<+0p#bS%q*&6=if z8I8lHlJ;?mBxj~Tp#l9iMfWt-dN!C0xR9U! zZYKS!L5$7Bk^%p7mQT2N_nK6(B+BE{A1xu=@H$Ug=?zqlfzV)&P#Q-(GIoHidjV4r%Cu1&GuI!_$EAe#)48F z$o|HI2|}#ji83e-DRBj$`X80AbmI7~WPvoiAITO=(@eB_ycgt+13toHXw*|mf+>D2 zKoAq;n^n}Jl7I>DzKDpRL`pk~MTC{OFX^^vZnoSSz$V77QM8i0)I;^q=HB}J6%u+) zlV7AhMI0|W6O%sUHa?8N}3PdZc zMm7igTTzyb+8!kDB(;b_*9EC`~p(@=jz3w5eYnAGGCu+k|X zR%H7hjKKpHr#1w^5G6?B--TxI$nTpti>sF|;8-ID|AH!S5N53PF5c*$UIsVJCwS0m zbV?zrL-g2Ic^#wH9wL56gm3HmQT2mN+wIECYh+)Bz~y572Az)m@sjv&1Lqc`l*0VW zer%ruCIZih93J!OriS=`;EIvl8pDzW9=Qm_JYL>aS^S=dlHs4p0a{FAVbQXngRvg> zgg`0ynKobnf1EdI=2M;ms`;V9aal3!O>6vzpX(<-64>-IhjwSV+wVb0(*z20rP zev8dB5ape#`@?b-a3f%anfj7omo8<6;qdEgy3usp1;sp<^DXxOP4v8{W?~#+hJd)e zg@EAv{}DaC&77SboLvk|osBFU?9FYx{+sM+;h?692m!rRPNV&wi3Zr`Jp-u@A*{;vD+2@vvZIYbEGdluo?g&1R;w7mbzW$YzCz^yC5M^AWF zhP60JlH_}gn(~Pke|vHtyeVd>n_PM))*jz9E#4&(6Zxbl^*^xQ4{I}2@VU%PJa3S}EVv+-!ET_~MEPFMT z2(g70ZdeRfqKdgiGO=)xV5qwkQk8a)#|ZcSz0~cz>O)FVNXy zVGoo-eB1M?^skp`m*GH)cKa{9;rIfJEsljxJLuxoCqCZ30V+8V8-Ke4-Uin zhMSw9gM!POBq(HfZ|TGx=jX5H?LqFXe&Kb)v57$x^*x%sk$AmdMJ+jU_m*9nYHbBH zL)Pv1FCj^L7Rlnq#4AFk;jI3FzCDgW-Ejwe|0MOae#nSxZ`r(koYxZh^7uPHhQFw< zUb+&tfh-#H>s&%Ny8e+7IsYbf(za41>V3-=Y7wn&p`!l7 zlY)o>dJI|sV(oB>$e1GE2lzD9uTi20Xre6|O2<vZ2e+znP%Ku*K{88clgg=t} zTLa$wjXECkCnDP8We)T*r+@3gK=gs}S?m0UKe;RU^UPuV8F+oiX?qRnRo-v(T9NPe z17^|=u=J691V|2^*{o@j$@^z5&EZNGlNxOdN!cUIHIvb~aFiw+NG%?Q7@SsfBfiM{ zs@uKq#Dby`Wd%NetEsRm{^@KDUa@`+UNpn+A&r4gj4W>YPA(ODlaWi_ zi5xIB6<0fFliEB{FcOeGnTo;6HAA!2gFJ>1X1|V;LLs5)u*~Ard0RkweaAvsl`h{d z%PLv@5#FPu^fcI5e4GKn6W5aJRv-E5Ei*~ih(=*&cT54<#@8nckkZ`XDL>8V-Vypy z*GDaEaS@@}PtR@(G6=4VUlw%~AFAuY+Y9+XwT41tXh)R# zaIa&S_BtO4`f_I^ad)Z$$BDqEfZz>0NsSehuqI5wDr`PVi+%9DFLWfVX0F7jWt*p(MK z3VqvGp0+t6ctS}$`Kxwc4M%IC9Fy&1Qc5>lwpWV%@gRHWR_4Tv-sB&TL38CQcQ$WK zbN{vTdqql)+@JG<+X{iV!TJP*1;paEmUEnyrJD2a5ECeBmesN(;vokQi*bc#@WP|E z4C!Db$l_#@WGW9Y<}Ch+p5I{A^6!IrxydH65K)(sEd*Q1DZ@Q_Ej{()a>iSi7z`fP z<3Ft39TVzE%AI6w;e;{~7{Ko=z9a+C9Db856tq-XeM?e{r>7&$R0j4{C9-j%ERkOG ztt zGPQ1;_i~B3kj;gp039={K@bNHJ{_8pyRSIj2jaLr7!DF zB%#~VCrKiktW%XbaSUluk@LLSL;QGcgDr)dEl~sBD3G94ii5Id>2y({;3~a@IXEPa zVZ4?3AFM@jR$Noob_kH>r3_?dg+YhMT@AV_I2{Qh(|FEqiH+-I41KMW-!u&bc=2e_ zPqXSrB7>(Zy>Md@aImnS4&<9;9~4~bEhnOSO)^z3ND3$(y3F*}M>&C#@8P!Pn;M7m zNoCwo^2T`JTDmG#U{-};roXep5)~C<3|(1F&QDU@Ckie8^?L=7h0?9KFd;1DbBZ%w zcc*+jR!62PGc)f^78$*h4!BoewCQj2127UPB)sJ~sz|nx?bs4 zRI1CIU_ES#DOWq*XJQf_T%tbd_zh|RXzsE&mu-!k=7w%yOCE_u0%S~XzIZasRKw(c zdqa>6p{b2Z75s{kt*?a*shWvm`3%%8gLV`rEDwG%{98+uW~Bao!8|K%LeFzSoYcK= zY~^nmAo@^*^1DW=4VGKGS_!`#2GIS{N6^Xhws1G`nL9f}Yb+Sr1K8IlWWO<_XHstTyC6|I+U+{T7y#0KWZ6;o(1#+Nwk1j;USqW3)`ZkNX|2w z5;dkX7P8s%L@j?-UU308iL$?oOB$|1|I(#Ug8>cGL|58UPvMD z=$b_>^9@4?=lMi5wUqkUE&N4pm~jO$O^Y}@)`tK5q1Y#L#)pq4iNe(zr4c6RCd<~2Vu`IOj~ZAaof0jQs0fKUk=>t3(b^1x z?F#QA3O3b;o*)h$uAmQlywuW_Cw@>_k_uE$a++ypo9^Kdp9lk7)ayBRYTD4?F=2mihelm`>!}pN2(+lxk&mG0`wEp&`ANRm z;`yeAV89W{QUKx1(6q0Z+{68XQ>1H-ta?1gFx27h<$8iWCwZ>vSyc0`@s*5_9pQ}{ zy?|d^GdW~dx*{Xei1MIziMeF-%w0o^0{2lY#yFWlLz|Xs^{7J0JyX>ZyIVAAhY+Vy zA6=bbhjpR&EZio+AA@RSFfepQ(g%eSIB#@^-1Y#A$UA4_gHErZB_TsVLcNHvg-DS~ z3ei;(KR(`rJIbZtEpV;0A7!YlX)@7XAT&>zdg< z4rasY0LS-ALU17Ei|!(KDV~1Thxh2%>)PtUM2J`{Zap&&%<)<>mG`wKq2HLD;}(@i z!1)Js!Gn@D$o0)mCJ%U|dV8MO`~$P`ZVl~lh!CAaR~S14RG zMU(Msb$cDClS@`mNs`&(RM6;|BDH)_?DwHGk5`6_ZYaOa-e;=I-AIv(L(WehV4Wy7JqR}`aU##<|=(1)Fg`&OLqEkV^ag$?Yh+&( z6$IPWN6v8X=W~$_&sK2#;3BU7Zj{PEHyW|21AG)-d@2}ciH?O6ao%2%Dh>jkU6d>c zfyMGY@@09Yz&W--0#0I}Xz?>HQ!cTl=t$+kWV6iGTwy6=!;J9CM@0gT@$?d#drwbG z(AetXZE#N3qLAg+aEfOo-b;riS7pl80fbbO%e=IGmY{n&rb*@%b1BvK@hgf>Hrv+$O{_e`ei#75pNbP+YpRT-=n@foCoSKF4`p05V3lvcTWfn?zZ^IM) zSml5ie=Y&cu@y<;sWj`a1F6nlbnV`biTBNkhn;A2=_uuJ zv9-D*`Rx#304(%!g4xC>2EQ+Y3+b92#Y>aOyhbgu^My0}M?7+F8X+NU7umaK;upEj^@-_5^1Bj;?!5ziwZwD^OYKDfGx&D6U zq@~a%UZ;ej76!jns0cq!yTB|C`lACy;;5xV-xONq&5otcPEzJQgku67dCF+Rs9s!K zKsY3xTG$%)i#I-?^JWc6bbWFB8;#3?3=%KWVFl@REmdNLyuWdBnhHZer-CgUyf{yt zF3u$2)&a4$oOJM@4eXj*_t0?V*gL`^i`_G2083@b`xJZBB5ko6(>Rbpb;2?e#aJpN z?^QA-WT-$x0hyZsO zpmb5b`Hq^y#{-NqalM!U>x8wL*uHL_Mw!Gy{y%M!+;Gj+k__quprdZNJZ4+x#bCXT zurQ=h(9&HDX$Tuv{!__#paDK0=)H6kH^yUJIgMn^dmpuRxCLgW?e zanM)r97rnRnd-^d4hwVWnSji3Sx!_kzW_1e#p3^aUAJBOvGi1B%?J|8^kd!7PlRA$ zO1^?cB!NfiY#|66hA2vUV%H#H=Qf)ObNCWva^~h{Bxpcw3$!udO_ynK_^|){Edz%9 z$9JpGM87(;uLnuKoSQ%xX~!R{<9JiTnZCETf(fQrX!|ASCVdsar6!&z4bzj{-yis- zx+s~UZI#R%xWGCOUT<&06?&6rd}Wt~aaCrz8y@mPGTq^_;sREk(CvCaQiaKv(})0csFUkRilT_*?-Od;a8X34zY(EN-E(ij5;XzM60Ht)Pxm=-gG|4h! zmQEKrW$OOKgfN=~99gAkHk(qh&QH*>TvJ1HFOQ$`H@=3zD9)zRl645?cRjC~ZIyWhJ#HXk$ITK1&D3;h|U>&(1aaV=cA5Xgiq9jqcouq4; zQ+o7uLZd`YNnK;g#a741Nt@)mO!t&qJVoH-Y;IB91ZYVb5A8lKkrtZ4--l2jV&6pEblCWEkz zkh&87#Kd-*Mqoysgth}eECwNaQ_Z@k*`_R<+i(0ue}F{XDmW*L;a@wqgDx&v7kS~e6|*uE%BLn<6S))sNG`!&QZGs#jg@cEYM;FH zzy2;f%gz7z9&H<9b07v)vTY6Ai0BcH0Sa*5`0z-L01aYt&tk0;>qAW8e_sIAybLZx zsJWdU+*oup`SfdTsKCflUGx*7-LQAbz8sDX4oPV-VWiHeZY+(!g!XnVGC__S}MC-2aS+Tn}3sYu^n(XJvsswPFA#k(ZTQQR`q=diAQ+y^>~Vj4TrX zgr&09Hriu{RYk}xmZN7CF9^ff$%dq(P{A=`St~JMGJg8et=-@ICC5ZzuU+IY&~n*N z)u3emhIlzv)^T+xK^Qw{oj|gS>`X#67;pE@`>Jlr46CCJ zmWN82bAb@Q@yggbx}JQ?9wLQ%SxQ<;JEhugBB4TeD!Il;$MZw@`*oC5UVV&K9i4%= zNM?G8ldBq%Cb(n_d*(#lm3WnJ!rvnrr-9w3PGw5%rRXhBUOjCD_S7*esiqD%xeU{r zt?AuObzhR4_LBibzrL+C#|TyF7VmTMlXzGQ1!xCD9MkyVh*5X$+cka-C^VvP#|^{f zmTLCoA8!tO)XW1Gd!hT)sXqe}(T0WFk<3i6`E$vwA^8$9sE<}%J;;K-+D-#X zn1E2~F219%R7(@XRMtQKC>L+hKi!`-8RIaPkKyPY<@LG*$kFb52E7ewycLJv)y!mJ zQgNiTV16W$h>D$PRwkY*hJWjp-+9Lm?mx0>YqVu#kHUf8$7zZ?EO4daNG{C%>uNnt z7Avro-sr?kxNatwpL<1HucJQP`bCcFprmr_;*j0)rAp*zl78M%Uis(`@-+C}+n!fy zLv{{l0!>U4f0wS>>CR=whgFyeADrJi756g<6BnQ+IExHRJ&tRnQYTEhojg*#)hc)~O6ZcOeH>h zCC(*2+ex2IcrXh5SFqUS@9foeP(?UxLR~3K6{0w6vdc3+Q7PHc=d}|0AjB<*uC}3x z1Z;ACS9Ob4ipa^dGrljT|Lb$iM+yDBB1%~gn>UQv21F{^#AQ@Z|5I!~HQ?K^_cm4A zCowr*U9FKN@lK^ywp>!eVH2m7zh1UVsbm$!;k#xT*KDPfo&JuR7;}qW3>1as$rBJy zI4JRxCb=_)O^b4as|3V|r5Sq2-pHUy8H+?C1wgra#3Wq;e63Qt5eB_^r1A=R*-4hl zOEsw$`$=l2ij5mBRg!nL*`&fc*II<_rOwT?V1INn<>7GmKZZtK`DG;SUP+I*EY~^7 z$%{?AAE~CiKR^f6dz$omOBW)T*WGtP2G5=#@WW`#zAFlRHXt9c*9d3{jt%M~l1x#a zvl!T-FL7XwP6I4`-B3*^gI8IRXmp{+*P@z$jn`k{5aeavM_5>hATrEXv;S_gm~)es z){W6IrmvDQH;{pRKSK)%4buJw6k2uxz7raTy)8duO0#bm^yolg&s^im z7I!}+ztwl?4N77(Jt(?cvOpzq&pyh_DwfK?K8X0CL_i#C2=eRZmpT2#kzo_ z0%Y00xdRyMVj(F-bi1i7MnS7b(ECt}?_c$?NvD3iXk#i(8$@pyTD+>9RV5am%{cquD=q-_Nf6~20@Let zM$2wgC_b71|MkD%tKbvu;d4fKx+-Hm+YL}>|mTV57L@?lRvQB2lJYY3}h)$aN zE|7QfLbc5-DXwXh4a{KPfg@gAJ9K05qYiL`RU!`V(mH@vHH6?Q$tepS;}=j-GAlnx zs+ZcP&tK@b22ElI6=B%F&V@nwSM*vQ)Kz(+Y5&w6^`~X$K@$58f$C9Pn>Zpc5U#>igA8Yj&-JU5+ zsLSsq{e4r05=2x-fn4=E#wC0yd&e#%QLw_yI0EVe4Y}H)CY)nh?g{QIQvx0lSKi2S zYq<5lf-GK#ase55#V134N1JW zHyQ%i42}4ggX4q~J*_M050?LUqqX4)ukPAa%bq$Spih0{nsiB=$ttr-(=LjOJiYqc z&|f{|)Az>n-JlwWgsV|kYh5+a@Uly^J%*&;{b3dWDs6+1WqD7eNF5k-J@25YsuvpD zq5t>0h&qrD9w}=2X-Y~@BYcs|O+a8%@c0Y*?1o_arHH1Kh*)TInP%_+Xk~-d#Vv)W z!%Ajnt0%p&%-^>;c$BQYIXRhZV(PUYX)WwS#^>(4oR#|A@Yb$pF2?l{}j%A0ch&NNdY# z@(>NHLeX(PJ+}bYF-Y=LHD@_UJQYc99m~#*AQ-O1Ida{lh!hsze%*!36!F*O2>PZS z*;)(rP*6%~{1x~z&+maN)zBn4K$)azpZ4#G639$k2C#NbFuFlIUwEGkaW5|Wk|+&? z0LqtCiWyH3BYaOYRAm?!{xOwZ6B*>zJ2_rEt+EGyDtg#CS@y=BU5iQGdxC}Fn1|iw z;l!I&T+ex?hY3(K)|y$9K!|TjNfh&oVyMI)dI)m06Ug6`fYk)FC9DIvL>k_yXtWe1lQomnS`KaEnfcW& z5gTMJT;5<(zYG1bXTjH{dlxwct@w@{_j2|`Mw2ui7Nvvgra`zWY3;*}2Un5+kM0ns z`hCLdnYb=tk5iBK@#a8TNv2t}(Y!@Na|AGL4X2>yWdi>iV?%S{izQ8Xog4xmPJo6&z^fZi>t_&M{@F?B2cO%ePhs!;uDQJ5Z(%|Ip=K+pQiVgG=ytuurC+@&LnpXc z@=tmR>BLk&8^46!A>-u<*hTl$dya*(OzxgW$fYJP=G<`jI&9s1{Ik^y+~+F|m227Z z3RO((s_|`eDctfi%z+MUVqUy`B2XNNDO#U6{s_sIvA@1YGhV{kyc8tu-Uc#E7N_Pj z0@5hP!cWk`Kz%gi?R;_mFCP&dnRdGuUb1<)ziiS*wSLmtPZCSL^Bk<`4_EsQZ9y9k z!7CG;2=I(zSQ(snbKjXv#6Vky*QaVdsu(vESN7{?X+gOINb-t<1R%06rwV)z}j#bo-3({t}Gu z=l{=jC;6|kPA=WVzr-GKUbzihOe>5=8?1l7!P`9@!~GYPw&ufiQ2L`Zv~&wNLd3l0 z(j@cjr{4XRuap<`EB6&^PA~+ZFk+EnaB%hyI(AXuDfuBrbRRc~izeQOZTru}6S3aU z6i|_K`_-#1z+Xr(FLez~_`D~9B>Tp>az-vp>H|^g9abpU{1>dDY)^d@t0zSDp~oBk zV;@Z1wYD`0+R{gM;P#)LOxrk1G#icp#w1J(I7zPfWX#r7^+~b$H@_ZTKiD+=R*hs! ziO~sDao>R=?Q5>hYV(^|*-0=@WK1w>(2)Xs(*{xNC8EIC-0}HO4cJsyuepl`6|tQeOZG$dvl-0eE$k9 zYcXGsEhWP6AZ|HhkO}|aaCARZzzq@IHM6_pG8VAB2IECS23^iBfr8UdsBl$W3s()V zsg2L4lpwMA1MfvmDy&K<$Ym=d>TR2Lk*CY}idGv0x4o6XROOQ8WHNUKMt!qMBEV4irO908!{*KYWccp>sUACTM$#IN)RvRg0CLyn1RFuJ~r@=(D{Ru~7 zW}uvR>%;x_A?G}S^v#={kVC!dH>v=Q8~YKYpQ8S7C=Gtg#gr?M{a4+9nDBTEPT{rP z<~yHgkKSCWL*e(IToY(7ywL+1ZP(v7KMKk{x14IjiJ6J6cn@}-ciZo+)NZKbk2ruc z#Bad{@|W*x^zXkh1F{9Llkyu;O+L+Kny=OGmPhN#6edm@$-iOwwwJ$TAD%=3Zc=6Z z2cJv*E1Ji<{2K!3Uv(f*U$M>}*u*zEGqWJE$2**Rn%38e0nSPW8+l%eULSFj7w)k@7Ura?< z!r&x&O_OXUPwY8J#RTwmvjGGvm60X9a(+Op=x|GF#TtuF>}DK+UUQ4@K(Uj;LrY7N zhwvy42B!-zeZTbbNurbt&XarMMe*4c#&_Euu#ihXW|abf5>Ax?)tqfdxCB_&kxJt- zpX=_8ZeDzp{fu5~`16{5%L%MDR_$wk+mOxr5A9glr93|s0iQ7!yLix>M=_#qHXRaa z8SRndgCdta^0XZ8ydRgtgVtufApM|ejI{@i3qq_=Tu?wbl_)Lzm1H=@sY?U$zm<9G zU>-~*3-|bRmpR5O{!f3Cy_4lPb`NNlF+D~WZw|8W6BiVp)Up_#YyI_+^#K$UIre&# z;$EMppRnUSc5)tiFwameSGm?AZ$gWIkPd@FPz9kADP|iyPhnpB{=Ur~;c%Vr+|oKO z+KLk+0Sq&5{OFs+^5%BvHNBo2N>9c7Lwme-vp++e(%s65P#*Z z)4dh^d^r10v<%$dp5Fef@ScA1>~cb!?+^NrveA9jIQj3a7ZQ2C!JonNmnbFQsJ@~K zXhr6JEC&iZC%MNibdxB{4%GcZ0_bB%4ztRIs>JHvwTu8L+f{8nCPV%K0AIfkNrQml zmBK?^V-S_yN*DPp-i4^lccTlM2^-tk<)$p9Fe%vp>ODLpiNM+__$GNYv6vrp(tt@D zn-t-zr$KkktXW+iTj-1NV?hA>s+Y3pnJE%7VohTFClFa>cs%%OHWW zs~PAJ%lYaT51`Zic_8G4v~B7j?K$8dAZ)Z2TNBy(9#Thj;`*QdN1?fB+Tt9`D5MrD zs1?p5#5UMkkK0@^yP~-_!sIJTMOEvL)y;O&z^@kIMd%{n%1&N~uB(H7Ns;FrR3%N2hxZL9Fdo(1rn&tm9wdJ(1~W!JAvTwl~G zZ@_hpJ@uHpOdJ;jKvMQkngmU2D*q^wGvVxijeH~-DW|SNGyCv0CYfEUGLhavFWZa> zp!|kCx3&yYjEQ_m*bB_~EgA0q8)h`&q5_^7d0p68rfQL2d6UVS2DufISbHLlID{iq z;aE-B9EwO?n?EsA$q`eNpA^0tL)jaGIm0hDgGdOu2sV;pN`(Fgj+kioTIv%@qA)RZ zRPC1{Wn#G%?I-4O$}Gp-=!)?5(aN5$tpL~Dn>KG3xzNFzf&{Yv#ojvw*%mG7!e!gG zZCkr++qSEA*;Tu2+qP|Umu=hrtNZptpA&!gIS=>ot{H2^j94o&X5`Aukz?eSUphnz zA@D+(twDlyafBN5>iZomBbmd?VOY;5tWYIj)ZXQdUaP!C+u~?THx!gUNc-aaouHf%G!jb-~#%P-6T!oJwDlF7mhjSU_Sr zJ@wymw=0tf_S>T4gJBv4o7PG~@#_Bga_I41C^K5&j3zriktd;#fyP_hDUqzE#5V*3%G4E24}}S7+}(~v zm!1xiuX+yy(X8doYejWPfZ5TxV$C|97J(@_tP8WIRmG1LTPL90$Vfmz4?U+;!NA>D zx+n%5Xj&e>x)!2OX~{XOjEp6CCKmX^>{dSHX*ERloP1eHxLfwEQFHbk_^KnYcb>_+G z;Q9K**UQ)RH}B5(*Nc}as&8lgd~5CTehVCW>h~6UPmfQgulFlQ!#5JqT@Khs$-wQ* z$R{F+p~Cya%i+FE7|TJA?RK}97dKxHw_FTOZjPQVmmK|!-pdT}*ZuAFez%jS$9wZ) z1n#|_>w2L1$nHzG?{6>OKii#G{CTMFH8FBO)3u0M293DhZZBWH?rxipeVciCx-Py? ztiQcHcp$=gii_}{e>gO$tu`loe)G9@xl0rC31Y+jHeEv~ifk3Pqrbl9C;ohR`2hdu z|7&k>`y8{poWgEfu<2HbVomSdzxKDebq4kB#piKG8~TT<$~Fg2BXE}Q2H1|DeXiy5 z{u!>~4U^_(%fm~o1b~V`=|&4bVyl~JptGCT@sY3lVn%Lbu)SBC^LT&T%)p=wU+)zB zBPg8gB#zG;zfhJHqFTa;G@+cSF$ ztl9ygXN0xk_wU!hrqjn;RLN_HA|7VkF5Y^)yoW^t@4S1*GaTJ+8~hwVn4ouWo~-q| z=eKq}CdgFS7P}bf@|fexob?g%t!F?SZS@cOYLDV^`uSte0kk^rJ=zZ+QHS6z<`JH3 zZde#nzHgczelW(?llL@CX%zCzj>8ea<$d<2nsxdS)o0jND2=M)l+OvJ;~Ms-nXLQg zW#ZKKGLjn?m`r6m$Jve#jaQBj92Q#t{+jUau9V(u;I4p$C+y{S)}cqL47&jL&<+aF zFWbV;EYqkMx4HJZF!t}jru5)M`k7qK;@h8*lMi{{cr(6Tou6|CpN}_p=JdIB+qtkZ7YQb3ulAj!g8BT6n_dDHI9hUs+Y>U`>q(;-^}{pQ%-f^=cF~u9v3)Q zOusM3G|bPbUys@SB3rmki-P>V*wO3ZGf2g7*2;GD`50F2^Pk-1%%Vr7^QTgYNd& z=D_#I3eRjju(KK7jZWuJKYgHzSCe#OkK852@HWOrCI6h^`o1QF52!%L0r^1QpyRds zSO@`sETMNjO{_mX=V|hB^|W+3jW#*Ixo=gt-~PbQPe+Zo z&WycSL&6!uNAOjnMt``$cGuQ@GJEQKOag&XO5;=GPC7eF*g?KPfN%W2*H7cxSeK7; z^6wPnAn1tc@C~A`c`$@O{p`Ey`rd`H$=aSTRscq*^huZ}4JK%+zVdO2HAYtOb85T& z*<7!>8=AZCAs%VkCn5Ux(hhUEuky7uN>XCXZc_?|MYh$W%bUC+|BD(70vijzr@PZt zJ#Hf}7{aKUVk|f9YkeFicV|bR@4)uYLVU?v!j*xW}&!*e%7cZbqa5&eS=_f>$${!18}~bo(6Nm zHQby-BLnP>RM226KJvQ{fhT1(I9D^GkQ`o*(0BSmK6BfoVV7EGzK;zB0ngw3p@BiV zp}ltrxs|O#x?z@E*7(Xd*~G6DX5d`VbK)z;!7Hka_382LY=}$>?wRHfI`UQ2Xnm6~ z*}j<37~r=L8CoYR#-;I2S)eoD(unN(=E!+H`QZlQFXQQW%t+<`Ec{{5+M|~G#Ajp^ zwCpm2z|L4{?KgF+GKXDdJy?tR9(m!m`^<^4JBGh9sDxq5_;^<_b&S<%$R32+`5^+! zI^U@oF=OL#$qnFr=9@ehl}5>vgNcnDDV5HMVWUyZ!pnIDQG97FVX|4M>6UDr(entH zEql__pz%f005jgaz<=^Z**I19+5AwtV|V}hX>#!W$F31SMb$T$pZ<;!Pyhh@|D|h0 zT0&SkcVW6trDuK3@ zoVj8F{V@AS#-Xi&xgnurBxQ{60$AIP{pRrLiTb3=zX;e9<~RE*=Ij9AJTiR3t*Ix| zXC#7!=lOu~bxdD7;#ys30lWUMn=1|%vdxY4x-4D&d?=XB(ax17hmbW{uUF^5P&+0%^-)zi*fBv|i1w^+`AMF!xHJ zlXWr*xO^gNbR`g6lkE74$0pQnxs3Eh=6SDAnKf=2m;~g(n$}BKyoo9Plh;RvUBEKb8d=kK%XdrWIfP14H;YY$xzm=s z7mZ%&_louqAxL*tbuf_>l0*SbhB{l`yDllkXV(}Tp{)>{rB)_TL0g;CWGv|)+q>*C zh6po9TE${U1+05$qI6@K1_&fT%0l^?Zsk=hnjG@A3T6msMRt$sGtWuiwpHu_U0uOp zMM#n-uTWdnm!Ib6$G9 zcu8BCy>$z=JphNY8Es5kL9{Ftk?epiKnyXo@lGUgyU8d10}s^8Ekz5|^*gd5W+7vu04 zkz*K7GoeP_VRrDJtyxe2|M61SRG0qGoB#U2{vVvo$kD^z*^d4{9n35?PSfw_{ZH*z z|KYj+N2t?32_^X7g*urVF#jLPX+Ki4{{JPT{5&88z=>>_ltOvQQ0z}UaD@Q?Ap18Y z8`~Mt{qK!q-l{TA8*DIL?`rza;k-$%HmkSB=?Mv3;p8^yW9`gcj-uv6jH2ZvCN&@D z(6MhTE*o1U@c{mzq2SfaH*>CmN*!bZ9zG7B&#?Vw(CpskmG{)Gb69)L;GuY%#N&%& zp0K_iAX>uaiQsm>)d-bUiDs{-`SO`547mOL;4`+N@WG<2i&TO`XoQJ@l>2+p@|wHi za$#tRK75{UpVp7iEQ=gm`pLFM9|>F`x)D=y*JO?UgyiooWYDt@k!Ecc&{*TQ^Pyl( z(Xq@zYzu5=P*GU%KoGAko8Ld8;RP!hR@{D1kt|tCA1rJ>%P3^0Wb$;p>7Tk|a6P~b z#Nj?L3I|QPEnP4W8%M%d%XOegZG1+kkm9YVg;rk%?rfrZ)kn)GV1Nh`^tq{*X{tD& z^ANERI`>pB!_Rq{(C`tgYP4vT%&zPo>q;0<;rL!#VpzlX=XoIaKEv&XQ#1UU>;O|Z zVtj&7czwdkMj@3rW`V-rd5iG235|7>{ejdPA(ckdA87GzgRrjV?ki?MzDyjBzL()? zg77Vc{Q{Z_m|at>hoEgy>+i)O0>bHZ4F(KDi}Uc=!079wd9rT@|0qFU6V}i@6hJ?;e~s=ABe0_%Zvf5~yD{va zvx@X}hA||^aGsWHV*ErXEi#0Bu2u0*_bMnQ$vgm9I`N;@TwRcCo-rIdomITegs1w| zYEi|rsTa#os;p}JeL}ciGeP6QKYej-!zie#op|jdYZwZaReofgEKLzGm-t!d0Ano~ zo63ARyx15cnJ+ELyj-*~Gge5VD0vY>M1D1a+6y0m>n(2zE+Qxm)7@>j0e{9-Ah@a& z1NIo^IVz}mpczo-k0FeMRDjV5r50gior4(xoX=n>AsQ`WywR2R)Z8^6pX)bmL~pYT zL9$Nwsl)wNu<0WO<>hq}3~;E>)FBI>$q(*Ui;0~G)&D7xXBN%xLr8cnB3d+V>P|is>1PRYm&~VBXkC~wvV~NNeS3Wd7WG*wlC@N7$S!qrA zccW7w`RnT*{H_(VgG;05_MY{AO&n?oYV=I^+&cM6So{QHpeWVKnY|g8ygZ*_9uG0@ z@ALxW(+HOEviOOFuXEuA5^mA2`&c_#btRgtSVx@xPRhmT(eaKn@~u7Q zv?5RXQ<;UuKgo%D2r>?O2Iz`zG`z9hD{3a((_vP9Q$u@V;>7~ZqrGw*U&>;#njG!n zgBrXgr(?W7oSj(<42miPAqqFcOl(5SbN2Z&@2`J2(9760q>;Sk(aTQ~;`72erry}# zHsywf9)G$xnTDGv;7dq-8GWZ$ppQcvN|_}tKDD6;Y@5nhhm}j!`s1Z9 zs#wY-ayzn+6_kkjC^zbJ6dI_#4U0qH2{bQ#(lp1WVmFBbX%e>Id$;$O5TG zzPSsW#oBOL2_1V`iDrt9U;OTJ7(%zgnlmQ*1^SOUU`9T_+1*d{&jJJhp#C@Fy`zbl zg_E<1{QIRsT0}LoZ%ibjzE{hQ2qk2Qli4jD3bmkhw%O2shLO83k3PG*hwiAH$ zSW}bi2_)(nK8@`Pc&px;JGmG$U=@ATMmmuy>wAja>aNyu+CzyX?rtzj1Jsv0llr8> z=@E$5MzYr2)%G}qH?6+yPCnMJot8}pbTnN^c#6&(OqR^fsLtp@!{-y84eNID=gCG~ za<r@m0xf{SwxqZ4L@Xsylr5B; zBMbWx3Wxhp2%noKdb#*SUfh3HXx28rjpP-%`0+w^(+~t`r$mUprh^2jQHB<{f_$>z zw!UXFG-+WB$AmpT4AZIry%m@Of%~;0<1V94_*gI&<4qW{>lr?62D*3$O0i*4bt1K? zZ`Rd$#d`!DdpbZlY$QlL=~PW9G8S;sc1+YAt8&Xdq>Iiw|J)4cr^;<9Pt9Sm8&}Nd zyXbdxEh%E6Y8uDWnYFMGZs6*~2jzFFl&d`U1=tplEd?b?>k`|=; z`8px156v-ZScD3hY$Hhrse<@QXV+`$E9$DGUM?UxL*O(MYk`)%rBVsrYf3=1lh^?c z#6|zCqq0E+FLO}nbvVHnK1Eo&4+uM ziU#Y>24fiyxxz48`Zg&fO!yPi8=-5@8-h@lu0?1Kej7W`(eN7kGJ}CRi4GVFQcmq= zY{C&}#iFBcZgDwGbY*hO)S>}am>iGrW`H`}zXi`eePJ{w?PoWZ*<#`yIVoh9}!-l^Mt z)xZTQ``_n&Brj3G{e3eA=e;j4b~yS+B^>rFJ{y3bcVyya^)sal-#Zp#7cd%F)N4Gb z!KyWe&Fbxro!cSapJb4~nF2sFySFZ}a+>S})eIk%*ko?cA$9H}yuYhuD?J0aTpr}k zd;tE@y%4A_1Q8$s0J?sNt;zpA_hSAR-j$?oW4A7b^hNU(!Rswvq?%9K!U*-O-D{D# zBt8$O0uM@egG%j4idZbZbv0j)^wRU3mPRVtH5j@Nofu`KLsd~Vl}ueT zO}=pb7oWPohi=j3Qmx3Pu6^2Rs3xm^81r3!o`Z{9>Dy5(3HneiO{u!l#!y+YSZw#W z-ix7`p)B1lNwvnbW@OsVNx0*Vh7r{DE$NABE;t>#iQ=3{MZ-T-tgGYm^rt&CO4GP4 zyr6V`tVp6lH96Y?`qrauEP`}vy+{RD0@tsDDL$ z%BRieH#48FM;}uBnx@i=R|S-jB4UD72g@v?t4NpFR8qRGmmHgTEHAIq)>61yj>g(d zF$0?vR!qEO6n2;!LOyDB%rX77WvcUSmf<}hA|i67jzvp^r+j3QTcZ7%h*Skq2abo5 z;V%pS+)}gE=l%+N16)YTv&Ri}B+A&nD2l$VwX`r98Qed=Sa>TDM&2zb$?r z-vBcK%@MD~^cO{($rXDmSD|vNqpi;8>{;q{c41O($h@S>9(4v?J52o&Awvz`={s0Y zRWC8$gl1H1o<QkIg(ow;X=B+G-|X zq^42$udm>06X5Ro(Htu(^tzrU=~DIjvi=0smPr*PbG zuUInxCxIcj`7Z*r)dGpYVh@d@awmg(QxgPN>aOseeD{IY$~uG048v1MV2XPpe@sRF zYXE`8!%#YjLeo6|GWkD3X&UBC2cd8q1<|A4GnotCK;}-gX8aB*zmrnNJ|i2|_pPuo zM!>G1g=Sf!rdsCL3F1y_ivl?Exmm>*m#w$#$(>{BJ04eJms~+?Bs1CW{7h7_|I(w)R@w8O2u)lH*-WYtyrZF? zAccVA2u&DS08@+snc9mHN}vHcHRS3F;@M)yx_0$bLA23=or+7WV33wLZl7;TSyQkC zqWjI;&pf#{ayNDz#_+DM7JC1V(67FbV|Ys#+qfVZy|o~g#oQ?F{^ckzq643U1#t2= zIF2OpBvdH@M#de5%P26ZxV9}VrY=mwk}I4M*qI!p>dfou&_!f2l5jHhLA2g@DBij$7n&nw}S1O!j@qb463gG zCj)2hWbjDpflI%Pn00D~h!GAhWor1Uq0x!4(s3IMl1!S-IG3D)Fnp|0Z*BOrQ(u6F z8s1@0IO$83liC$*BaJv2MspxpD!|wDEL9+!=_Bh=|IzFc?$thSoy1x&wU{7%uAuc5 zgTDF^15q9r%Zz_z(fZ~S{>@H~zrX$W6njUe3nhl_ryynkGF_y_U!Crg18PW@g-bTi z2}&bDrk(Yp6~C2crLB%tY85qX7#Z8Y3c^(V;pe=n&e1@eMVW^4L6wB+lkVUCw=vst z?w5}am?@w(782L3Qx|alGhmOc_C=Q8jcIlmbCA4+Yv;J%a}cvnLVK6v$rf3&;yM&Y zKR<@4U0Xf>3ued*`$lBkJpU|KJO--C*F%;7f1X^0sk|G@t{f-^H;Ea?HrHBV7(T== z%RV59uEBJ&fF3NRI;JFuK|P3I<-BHw^vet^DaE$Y>X!;MX#R^XXh#J= zztrAiLRKy_8Ou@|P9xcpM9fv=B-Y4CW;>GirG_zs2m4S|dV^!1cQTbI&4Y=iVpXVk zuN$6L*A9-<)inDY$O{F-jZ#*GE987@3?7cK##?WF0k{8emHp2JdRm^sLI zP97JkE9iZ4obBsQhjr-D_hN1RV|iKMo@8tU#neVDvOjK3BGl`aR1g#*#t$zCVWNLE z8FDF6)L2e$>@Wjl=cyIY_ipvquB~(^3SF^ts`qE+6!PT`-BoMW<66^9xF*}VH^m(q z%?aKQdCu(n4;p6Rkf#zqf(O*Q@N#w71t9PzNnWq}1_)4~3>O|HGicj(0nPQg=m^P{eM5=P%VP&gBm8y4(5;wbjfQRr5Yp}%y`0r6&;W7p6POS3{Un>(MBLgebe__CvX`8b9 zVkjduw@Q;LpgIuDM%)~<1a;0@Rhp0a>s>;EOiw}T9InRP)(R7WkECzXSuqI*82vAS zB6~n2NK>3#N(%$CYSnbhRxnbfOhmK@i z?Xx-sJk%8o3Cx)Xpc+`k{_HNTBQ<)Q## zTiL)|_C=>KdcTXW@U4ac^h&pQ^|9$he$5OQPE_zSg3Zu9RB}gp*AXHeh1bZkW11Y8 zFYs*23?H8)dH|EYWs+|id-=~NFw(}B6+VQ*hy60s~>5RF33$TGRLVfEe|MyB~kS(8ufV_&R61aB#5HzPF#i_ zyi;EZR6j;zmJuwtJgpzx1b1DAS?-*Ug*I`o_8TH znQc%BH7?y7W}tjv0y$StbfWMzJHWge%TA7eeiIQr_QS3@g&s&2$W~&6JK;>jJWMz! zkRX`Bj6C5&!#<20=Ku56G1<~$T{R;Z01N;q-4n!*0I#8ShbRpZ1Q*2(P5S)w~e%Nwrax%0GrWC>0XJS5R${ht{|g zt6a%e`E@NqbViuzzza^ZN+U31Zp#rX{?=%7Dojg^0}fFI;k(5>>HHz)nRFb14pF%d z{Yi^3w|7|Ni~74h%i3zz2w2i!$ly%bF%)lMFl2DXAz^z63eJf3P`$t)JnEs*2zKgD zvI-QSB=i96ve*{3#Fv@^G3gvmlOAc*Cv2GQG9d!Mh=Xu>+=7YzBM5?G#D=4_<2Y5g zzpO?WOw`R-<^aSsFtreJRvcGDQdyav5Dj~GiSX#a0x*FQLKMRlQ2sFf-0U!BzF@G> zG{hY36magG)k%LKHYIh0t#}GCuj{| zfr!-vwLl=SrUp6y#%Axq{Jo5%6>sOxx<(2?M=FC<*acK((S0e7@P1xr$5?0CHN0$8 zWzH^+kh!i3si@?swLrj8qnAjq6tJmvsKF}E&be7A=t?YT&%{oFu%#HV0_vg%dDk8_ zA&UZWP9SK{#V&!M%}Rq**aB2{h43D6mIR`KKI{g0*GvK-djSU7&y5q{%mG|hi0xi}Q|#T(NZCC~U_CVnHwHnkV2+4QVK9okZY` zDt`Yb&MlT8^%jj(JX9EANijejwCVBYFPWfji$hs>SCs|AWSd|>E!+r!jhvu$W);?; zXRR6ajE$_|((5gq;8rroX|BK;bS#`1!4LJS!$?%kP&ZP?g6wcPFV_b^;2-h8hn270 zU)$au+f#-Oo#%J^Qs;VlE3!f0R&Gyo?_OhHMtjtHVLCqkt8q{IxYPWW8R+Y;zwENi zRPdKt4DXABuSI-r;C>Nw4q!sqQ3_NF&3rLSUwcpd$@jdT^KkwG|HlP{GVt;8>F11` z>W2cB;on$5-0d9oTx<=jEzE39jQ_+b{+a11o4U>oJ$BV3UP_l!PSRrodfJS`_w-;QoEHYg6z{ z>QY`WE{;_+9V|vfVklIsnU)_5hQznIz2)uGDy*8wVw!azvw>y;RVOn5&_MAK*oCAb z>Zl}cScx3N4)uu?180 z+`VROfSxTZ$G&Uu#IOl`_^jcpOaQ zaiYM%4pKB9cBk0r;M0K^(mnEf2cium+i<&ZyRpgmG*bVc%Sq}eIq2u2q0vxB(m=wz zo3EKH@n3%(f6{Kt%7Wc`KZ)WX-_Y3oTK&*CIdU?K;r89YJeVeQLu&-b8qS zYh|8BH`6ir>(-XjN6fyRc0Ap6z45*<(3qmsj&vW}-T20TN4nQ@?=q_TVAmKOcbdOA zb!F%RiC9y;tm}3v`xm3GkMJ)*ve_+P#H7&Cffwr$V=~3+Nua4#QX{E_Dy?!2JJY?F z>`?6IKPA|P$SA#!KXsU>9~=93>h3@G^)IZ-B}VY41cM;D{7C830R#vsU%FCDQB+Pv zsGf+|TSp!q%p7e^PSipU873w)Y5Ud5J};+at-a}?l!(}}%>L|756KNkmZs`Kj5O%#$FtB)E5aH(IFxZ7Dg_%b} zOngvn06X9ebDUmXrTKq5lB7)k??mncQ3 zdFnuBnlpWkncy*qaTzv-O=?KP-!WJ z>X10ckuCXW4_hyc{vVyT!KURp<42*TKRXw?f75BrOl(aYE&dg#!6r`2YJ&kGI7h8# zFSf**&NW?EecqNZg%m_cOZ;bCrC{?&a~O}NGbAhNcNcL9AvOiZV5G}*nw@fTtMmF? zMs*Aaug5bY|L^{$0gs5T`@G(^rc@trcc=sWGD>BQJw62OKPwr2JMlG;O;!+!u2*q9 zN`aO^!$X^k4q*jFmG#ABXeJjfB2}2Ec`o7D7|CS2Pe+cAm$t!6>QsqqXK#XTL9^%2 zl4%C#UW0gbBA8d>>kOSU!|D)){s)2^q-uPG>Pd=d!~-xB1iq`wK$=nuTRp)Pt2AMR)&p@d&A~*SD+^g zp<|-etiie&us*bTMdNW3IGwtgHh(W9cxAN851V>QUh2syqk74?ImgB`JJqw9skQFD zYq!c>`&{c>5y{#)yXorOL0|C)Vo>xLqHiK&4a#{w&QE*+|Iq}j*5FvYfBt^-pX8tD ze>VYnL1j@{Wu^ZO=H~KKf?H>R={lzl%hn_~<-b5dS;@n2JynRa$fzJ{Py9RS+e6MN zp=RC15l0z+&CB<;&LEB`!#BUc{26OOmj-vFl=p6?$C320v#~j&!8B$O?$uAd&2)7# z$Y(;utTb!Vlzbi&cUt+BZV{_39o=*zFtUiNOg`vUJfua4`+HB&g7I@GkEi`SDJ?37 zS_T$moVv@LR1SK*zv!*i3U<#v+21XZ6I(Paa`EOCDI5+ny8yg+u>=;Iq@KbD@xL-lBeH=3;`0H!$wnFjeKuNwWF34@d($rM2u)6YrO7CEqpc1F&x6V53{WeXoe;gZR zv>clrEt}4jHG_3JNGwY8@W11C?`cPqxay@~*ZD*?VFbVh*R?GzncQ5r>5K6fyNl27 zU<@GAvq+ji?_b|`G1qSE`C2@3Cn?nZe?9+GLh|3ioBzVF{~vzy|KT_PAAa-y0)7+Y ze^@|%#wGt>25x~)NO)SqFSnZJ&z6Cp(GBx>~tFFkG{8}w4P83)SB z;DQr}ogVi`4ukhjt<9HxWirS+>whMe?Y9X&%y-M7qg=X!sH+IOpLS*o)_({S@10(z zh*z+L3V7Vt+o1C5k^J%4T|=jHgB}4vI=y>54+jK^e_5#H<&DmU0VFZhij~@!kx&T# zf#BcN-R}JD3*0oXZi;g^)vlz8bYk+VliZa5M!=Ri0pbOrQQTbR0+_tISE5cX$H;eXI@s^ z?Ze$=tGL$P=$mFL6sv`Rr@hWerc0sz37ARs`wsT8{<_5V78dQN844r=v^ddNo?uA7L0q1k0#IbC8p%6I*U*;(q&X#yR51uTNKrf( zmADEq%NfS9DK6DKUyQ=zYl^Z_%3fx|+_Fd0b&t*TWHdV|shN zYh3X)3H98h$sQLrLl?~D3`IU{t$s4m*A!}ppd=iBU&3{suF@J3cQ(Iw5W1^+;Lz;n zEOOZTh;CaDp?{~T`+`aGo`mDF8iJ|y9u5snP^`^JS{=r*jq?bKSB{NB8l?em17*)i zEXqN~h zV4jzr!=N)C+W4HN$?sh-g*l|-?J&7GtBw%p#wF0kOlwKZoQ%5pFV?ZgJY3++44A-y zeZEVfY>y5t)yIRnJ?MR~m-7S3!-j*?-!L>p^{t+N0?;UZ(2J1#;K>K^|7Y0We~%RQ zjwX8lMzmPe(6ZZTMfJh^gffjNEKpXB&ldn>_p#5sAnLWPSLfagC4g@nye(Y{(~PfY zW7JT0fxd=1mF1$7)zN5N-yLdIiBpJDDAv)Z~&eiOQ8fqO9 z0Zp__g!(MNhNDu#bzoiaB)|b-igqzz*=8X;zV10BS~3u%NkQ1;>IrlKR^Gor5_}<5 zhknI%7OZpwLX~~3mu$dYCy=vg)D*JsXv&*GZjZ@2m6T?zPx7Qam zVfjLFoXyN_RS1%~lx}?{E>2|cQK1QN{deC!;S%fRMW35wA7}kFu#H2WZ&ireUw6!wt&j-}c5fKm(0}Q4_qmiBwKxh{kQb{gU&>J9SuJ9QA<_?~+SiJ* z1S8yzY$Jg>S>ZPr&{*JY+^=dGOM8Nf(sE>okx(3$#p<@M>B&?VlyLZ)28v@&8Jmg~ zd+S*qIIo}5rZ#cdzL%h+eD|`T*9@Ua*|Tgo0Jkw&WdL?O3e6nmFRq1E&DLmM6IWoP zE_5^~R^ramNIiN)fvSMZ3D|Cggy7ERGRr%K3lh@Rl|CoCE zSGH|%6!6<6%EEp9gZl-IjpNdk+-~6MCT#eRcX+QTl6Ob$MEVH>QXPPBiM14sx4u70kW<#3gX8wlh;z#k=OXp9Oo3$u_PbciV z+Bsq!t|p-Hbr0M6*IH_MNEJB`5FQ)RsuO>lZ;J zA-3oEaSc0Mi)}IW zK=>@7<+|s}58cqHQG~dFr!i!c-w%22e^{{-jw&wjn)G`%X6P4eUy|_of67``!WvG6 zE)^aSu;h*Awb&?od{fqel6Z@qTIJYaH;Q^z9X!oij-`d71Y8#}9KIr_48y7ChZRKP z9c#ufHucigN6=@%coZT!j+A?04Gz>JCy_>G!olW|EJXzjTDqa6u^6$ebT$)oojc}A zXpSJxf!A<7;HG(oSpt$B=CPi_>tE?r3No%h4KkxG__5u$dgdcD<%q)zeK$);YWs(S z`x9(JvDM(-F9{nO2j&_ecol*()idRy@jWnEN?AvKAX2F#fT+VeCCi7~9fT3-Lugrp zhnhHKQ~Bcg={7^a@t0KU~eFSb5`m)jrxG}<6Xaf1O{d29{jYt$sm*^P&_C5u+#^T~9+op4>E zPzp`HU}*#5MWul|!0$Fi2a|@I2YrK-d8L&VACeNPOqV~+8avzoqsLco+*gsb{oD9^NINyM zjJFY62PZmGLKROoYN)_;m*2IlaUgm%W5C$mC6Yk@Tp>fxiDP7L|)GmFqgW(m7{Ogkrs$yPAJwfi+iO{Qu0!i#Ry)yUA&wU%EWErzece#<381a+sm1Kls)t9@0L4RT!IF3 zX2d*fHdjt$t?)Ff03MF9F^8NWWV=PFxk2ntN~4H%!0mc)WCEe9A-J@<*-NaP0MiGr z->!1puJg1M0?yQS{BHx{N6xrs{FH+k5qiNPaXn!U0YPY}TX-COx%KZx$c~`DAMc8$ zwsSI?Z5sWe!e{Y8 zga?D^15h~0=t=s7_Dscr>AIu$!L}f``|k=UZBc2=x$#+p{x$dUfPbk=2!YUV8LCa- zT?0G9MM$>mW0f?TdX`rtj~(~X&RFxjtE&=#9oF0S5+Q$H`D#9!*1{~E9a};DOfIDE zFDAC?$z~6&nra73B9_Y4mvvd5iG?UE1mUL`msL#S<2O(nsuBIFNU(7b3>lD$3Qplz zbWtAp+#O*m2EZKuTeNGVa`;6vIj2RVD?y})}yOtfUM1riDBiN|)&=L2HV^<$b9 zJNo{o^I7cc_IctTBsU+%{|wCd?}_MtZHoWJt~E(r#}2y<)w|gjG$Tblm}d*kyPh3h zms|^kwjM0gHm3|zl8A?>gydH}+l}vaTMGU_T+=2BMCKffhx>Kgc4r$RyekJ+*DBcU zGXB>c`>jjG;C59j{=gE~cG!D2`o}7CNvGrQMb;E{_B}ma$PP4vimn@1=PIPC%f#N9 zs7-1!WpdSDghO(2_%+@fPZ6$P3ENv+jikK45gmCNh`oLi?e@Utmq1$RM=_)eQlJYa z5&)-<4NeW<hS-7paJA-{8=YLoTK|=WcZwFGGrpXeN{08a?ieBRhnhOYv zN27AH-&*Y@_0fim-x=HCnhiQHGqA7wb_x2!B0c0%xZ`H>TJN}%L?-Hrd`9uNdyekD zi-Lo^ZHe&wb=;FNW%m!W3VQ#*TLCWNAEbg?;;)3T-dLf|pe|DXdU6G^af!WUjNT=` zuqJQh?JO83B;3rPTLLLaqdU|9;lIS9v8o^f>2W2;9BCY8+hgTPBm%1U>hi{$W5lab z_5=c5pnNtkp&5u_^-Yckec0!@42Lz`{nXuJiSBKxG)c=Hb@1~9e|gryFjKZp0HgT` zjq|b-k=7AH)-y6x?AWJV-E44&igNv(|qsBBG>6cTU!7BtXD zG#z6>VXHIG%Ci@9@wKL-9RAZv3Qwp_q3lQ(v>iN`rd}y7$H9=ltH0TBLes5P?x(d{ zBSky)8mj;QQFabNq6JZ!F59+k+qP}nwryLlY}+Q{mXjkPwUpMUo(l`gHFyyDp+`Dra$6KyeM^V)7+Uc!$*?a4cSr2l;I0b3?* zPf;(~vA_I&d&z9{6bG3~-`S@1H0*qV6zpi0bs$oJ~FEz@9iu%KQF za7X5}yqmFy-HA{|Agy5zQIo5T3DxB&%J8MwwVz+xVGP5SnB1lN+v^F8@{6fPm)B|# zC+vr5t``hH1=_sL>6A=ab^dg*SWsSze2E52I0-HzZPxfwIvjr+Y;s<{v;y`X-3f~V zUX_Ci5(PKBM-v%oQxlBqH;IWf@)Qzf%))l{o{X$4vN$y&%1kgD%Q&7S5gUHEC3jCi z>2bYqV;U(_6{%;o56*#vU4^ZGzQ$X zO4vg^XLss#@|x%$ffYK#J>qM=nY_&U3Jg_q6Z7aP{l(;`pGTiM4W_89FtW|NnaCN)XR{!eS1V8dq;>Yw>ZQC2ut8B8kuKuA=N2{iE{;^zw4_g63@o(4DNr zhOFC~ZEnU-_6vM{&adcG$_3h#LqLMka_&vq=}yj4Z3T2>@f!2t9^si+LgM)?67{*V zt?lx>G|y;vpckD9QwvBP9$kV|wR<=o#Z#17soCtGTvbG(;1$9Zi9G6KJ0=m{?UJNjm95hUPc)2|CyBdzXK)k{+lj`i<6Hh~#A`;ld zcn%Q&Ae`a9?@0XDcTL?)?Ogt+)Od}St@EZ>(vQqf6r?e?iBMol<4&g$i7jWVt7Pi6 ztLDxWxTq^MkT4<}1VP3hO5CAeKY8~#0AM9274@=4QUg6NuaD=;aZ&yE$#{%IE@8+20}A{U~0)HiIED`KnqE?Cdx$j|gesvQb$nV6=NuDKSeDHUoS zJ(PWCo%0o0yA>MWKJORfYh5~v)jZNJfthZY+Nr~#S=KEStD=>SK(Sgq@6X4V?&)>Q zL{qLyx9W}$oV^2YTyidb`8Ab|tyXKduqWlWJ=DKU2Wy!%SK`EzU`ZgY+V=oHuC#c`E{>n zenG?5pXgrA-Mz|cKacDe&v}XWpqJup2c!7Uh?ZL-5cLG0tN zn4wG$eGXwt=meHVa3O-4Z=_8rjueMD~)%*t7ZY2t%Y2rPj z*ALE$g=1%a31&m375f`M;y(`G>cT&AfGvhj*t~$EsiwV0&{R;cTe*=b`KsH675UM} z+RE6@X?b7j4p-645hPYwGtz*rpe=cnMR}CKj(%O)R5LO*_lUs!A#2vvH4iPZq%mi@ z58+Y;)r2UC%ntL!aD$BArEv{ZIKJ}7#Et-@6+7i>K)J&)cMlx#7AuFOKKO3Yo@bFp z?y9q=wgCETZusQgW!n{=>5id+Clf7-#LC1GEW~&D2Yp0iAl^wA2Hg%Ir!)Mt?ec6W zo9SJKiS&_xGg0TVJ%I3IfM&<{!%voH}1)DxFnx=!&RZFhYD<%`UT$>GC>q+cp^+g;t&dv?@&^XA5dy7K33 zPW=}LD`xT8qEt;nIjQfVv3e;>CYRHFYavha5xUT;h_*_7+TctCg~>Zrx9!WV!*zqq zEOS%dn04298JpFyQ~db?8BtGS2q7+HT@g7m@h>$R`?W=XgpP55a(Ev=GM``AiX`N$ zuv+~W_0&2x$5$IxtSH~(OLH7d`8Cf^Ohmiq>b<<)XHRQ5%3*;BB4G)VY0H5a%9$D* z2%tA|X9)M&Xq+HC@UM*SaKAj|TERJr7;k4rMVUTWxBiPm{aD}+-nM)2hlJvqA|KKW zs&;!5ZQR|N7`G9ywwt=m8FtL*XU$`vO*VvZMsVQAqx>HN`{q8aO;_E$*rHvcuo*{_ zEc~;pP}(NK89USSBN3J5imb_@cTDb5=H3N$b;s+*7Dk0LEpCXrLWP|S71eb8MifIb zvFUb8BD|eg%48TN`DHTUytvc~m!yC2-PC`oSK7qA+AyS$%1cld2^~Y!1)7lwRTwYK zg=+g1>e5+~K)<3Xsjz`Jm7G!-Q4cNvZbJ}lCk^A$2w@Obb0(qo1*_^p3M-Gb8yy*c z*@b_e7rr?@>oJs$I#BTlk7sjYM-?@J7m)hXgt%0b2V(Wk@u+DUK)WO!utz5u2#I8m z`=k^GGh0e+1r_+$(&Q%Yhg0ZcHFd!S1SA>%7Z5xWw{?myjh)PuhwH2^2EOd{{a z%R=^AxD9KPd2;C*1OOBwAx{R((%=|wwE^Wvb|LyV?gtnx!++dzlU30Nau8X?TJ+k< z@dxkU5+`yh;56}EERAzgIwPQGW|^`@KokG{i+#t!`rO$PFh>tyR^&897mJ2oMoqQgS)#e-)N0Yz6QLadYXyrn zaU^ChL!1b{WJSAgA1GLu;r*uli>to~vyc*w4R6;O7>|U+caZM!#S89Z@)?w*NS*5YG-#{a@x?xI zOh1gYZ}TijZgJX8z)^1~l;l|Vwh!Ki-PcifB{hF^$ObyTv2j?$F5Z;W1`c)#ZyYG} z(+9dB_MK-usL7|7GlCyc@vN$MchSk{DCYnY%ZZ9L5}05GOjEWJ1=mi<9uExhL2D#mFB9MA|a*1qi7mSybi3>9e5>f zQdIf9-kCEKHSm_W!OOCqLHPBSjKOKR=EgL7utW;U;w88iSbB&;CJT?$vo)+Lu;fUx zG%6+GfK(jbaH#+%N0lD|xjSsrE|FRVbwH?6R8nPNvV6dy=EmFQASiBDOZ;dER zx$f3W%T?hq^pDU7MA7CwdJn7nj)P<|;!;}rQ*Ziq42X$ib}J5uAjyJ5zriRF zwa8%Qkot!_2R8_Lb*&JY9hycY{qo(xzl+#)qxP6cywVw)UGSN}NlMHB1wd*xd&?c1 z&nOvh^r!fe8SrXdh4JiNV^Z)Hc3C^))cbfm2L`weOyY9fW(zHYfMw!RZlFkb!V^-W z5RRHN#lOAv#9ZIi5>VQC>Dt|Lfo1*=KVlGf^$&JNJkJY0Q=B-O`cXZ;svS!Mms<&5 z%;?^NFf>nN>0jM|>5Igt?U)#6ritCT&*&D3em*K&$*iV=F9x-oL-VMKI8?#_O^rS* zHxKKp-R!oH9o@OZ*21B)I1Az5i-x_$voyjl zRIO7D3J#QivsH%^;JL+!B1CU(WS(FdPvnJly5j66DVAoJpR~;KTy0Dle6l{6tcQLr z7;YrIk6Ig-XbWE2>r*GBHs2&b{&_B(X_0HP*KndX95OV^Z~}GL#&~sz2SO3cAQ_bq zAh^tY@b2o!m7pxJU#8I;qRyOjjE^Yy)-j*`8W-&rM*qNF5`Vt?60Ymk@`%v?eNqpC z9x|t6j9b1BPWE+`J$N2MiHi%q>*DtkyR7BP*gqRsriUDLSpm&)Y1t#xcaQWl^N9ql z@sWK^SD?U~e0?K45#Tp|#{c^4+P!u+X2n$m0@3aU34n%M5$-xqvAibh6!6gmO8_b+ z@?UctH_VS>kx(h*y|=sq_a~&7Lns15kw>BUI|9OJhw+5$gxq&ZEQ_VCf~c`{Jei(K zuBw_2{XR1w$ft2_Z(h{M^x%#Z18d-?QTZ?4q#_vH`tw;^XSjHboiYEJK1AiH&(Dpj z(oW~eO~?|L;v#QJgI)4q?GpIP?%}-nEq*TgM5i~wE@|_a4l^d-cOY9~k0|?g26Y`}APAZ|=}m294q7HQ zke9$*aeh0yAa$z?(L$RRI&$2cHv!z(`|tj=%H?fB%%szZ-qQl^epDkzR&w>ag$KQN zqFde1%t9u-JGk~`t(O;wnc2QshINM_S?5ueg89Ynw{mBu`_64H9ii6Ob*>ZTo=#Y< z+!5?IGW%YNJ@j8#DqphnYb0YZ7H7RuCH+8d^cRWVvgwq8io@|UF72-)8=OGK)!mhk zcw!L@>2k_gw3*cuy}BSC!W81(H4bHRujiJ`+8n3d>BG9YrK-stPx@);fL;4T4!(^2 zTHopeEIL1vsSCeB0!{JgYBneJ%C>ExPx&ls@Ge|w)1uH8PJs*gO(w;g05~5i~hi!@PStb?OZMxUYr}2lYH__k8K6A$x*Hdtt4< zF2btcWbtG3tv^@j<{^uOW2Ao_5VUm5uRUN}r@5@7GAdeb1qp2%%&AjAG?Wo&E=cWY za|M6(ShCagKj-e(W>3X*x0*Z1pS-?T-`%&g428-e)@)h9X#LvMIv@)#or~d5N(?^= z9Nqnm*nmg&Cq=;b=~3xKiu8DND%`r(TXX=%BQATBxYug1HDiV0cIWo6;Hf<4%$2YS z?PFkhbN~H6$2C&W)h0py13gOe-?sz*>%Pe1ABxW2+{w`Pe`p8RU|BmOi$65Is87EG zB?@RwAly(Gc0pl}D~1L}%_f>kL*NpmahD%*`; zj~TlXsi~vx(6D;3X#5Syr3d}gY&eb8tE`k;e=Ia;)@_nnD(pn?%=-7@sulyQxfi9i zT2<*J$dn2l1`pj*Xt`8k(>m+n)!Wrb`O0eOzi~seLJ*mrqb$>I6Xt=FN=j!kX$_RC znakvK`#HVF4jPdx66-wQ6X<|C4>F`;hdA&9y5uTXLbXDWSp(TB(GhiOO}YSs5kF7= zL8}>7oAGL}l_((-txBW_pu$R)OY)wc^%k^eyswNp7C+kON(^hjln%6Zg>q28ns&V# z(mUfnP+TC;SAreSSgq1-h)Jksm8kk3gOp zkb3N?oFVf&Gjl%{0gm+=e>jMMv}C0rc8T^_RI{D=d|1c( zDu|u7@1-7<$azhn(7xTxKUn1jTN(^$jUnLHgXe}0ub;SPMpLu#nn3@FwghL7>nk12!yB*Os%su1r$#`OuK}nE;fue^>6`aPZz4!@G zs}c8&fbb{UN{+SH<9Tr|T>=e1;7c~q-@W}897zTHx zD#WfjA?5E<-^JfYKS8-SK@pt?N1F`HCZtp#*yIOrGRBOv6cTs8DIVT%p_Op|Q9hCf z+v_|jWL8lc0Cj%}%nsG%<({EP2h{Z{s|F3Y@@%id;AjER1=fP~vx`s!XR9o@jgUwT zs-nP-8{ELMhIYlNqFf!=V6jz;ng7lQNlQ0=mc&$Fm^fl;RYGoQ3qhQ}0#DYU+>Ro+ zZqh&M2dJ~d@S`s!pqc#$-S*}y!`+Ol11?7M>fWT^=1B9nF||A!XZ+OqA!sYgwb(uF znc9bd{+Hxdqjlq^am(I6KgBiOM_Xr#kd63!9Y3{n>Eh|2`A1KHUd`$(A+Dj}V3`$p z9t1GS0ZkzPPaY6H`h!pa>z{!OCK+F`VdfTs(DDjGN_Xk{9j+eyv>X~>ZPSGy6hPYD zA}zPVg5c@`(dxiUJ~Q>O5_s?V()l%0A%7xfT^;Z^8K}D#cEgS#aGC80!53o$H&f;|LhEqj7f5CC>RWCblQ+Z!Z`2*z293Mkj^yIXL`$rc0clgx68$90$#^ z!(t*7wLGoppfW=v=W@^5#IO(uGhSb=28|XX?=pUW?re(UGx*t+eD+2v`bbxS$9xN9 z$ZZddHuozRVLF!lshlXlYLbq8Si;YP*=$p?x^K)YweEm))Em}cyu84}Ym>K@V!<>>k2rDWM?-~+afhW5 z1t*cS{&kU@3Dsvo-(^B|Z8`Z|vyf4=lUX;SKe@d@LR(BuQ>sc+JYmx7GEp*}X0yDc0YA_Iq%9mXstr83@TFa3)$Bi( z0z0k$+T#^AFd1y1b#m2O6JsmP-J?a<+Pvu`k^NRco??9ldKrUWcnRHPy_j1kN_L85 zqi4w9rR^W5ly4w3)M*R=6V<^Dr)9V&*254GB722u|Ynz?+*mz!KP`!J6ricIDa%Ms|u&i$qve9asj9Ibw29U24U3YTUUE@tj-Hmi%lMMohxwuhY| zD_C|;{gQ~)eE~7o0rMNozB~MCmDPpdKGo%~_f#vN+o>;D8n>kytVn7xZAd(x$t=SpmNDMuPob>)(}qAZk(I; z2nQt0**{IcbMNQb#(J3R#rH58Y1HEo>CG12f*>Z$<;4^eq1D)W^4= z?_^1?KaT`H6AH7i&X4u~t}AVc5VUX9mTCi9hY1St5pbP*zNPl1$)L!T!>(LI{iO>F zK!LNI{A|hln9x%YzN+B8_xqX>GS@SpA|f&3=+$JNGG2{apxVelL0G^zD`i(gwpHh} z^aOvzEG0J?J^@5BOl3mk!G7}UyK9032-4=Gz^<^lAJ)Ys@_Lgu9P|GQOBz)6{|)2T zOs2~W)n!u9s&nMuZmwiw z?VQ>9XBEJu6|sL8nrK)JFVBd)!8ew>`>+JL*Jbo)yw^>R5`WjgW?I)=hob#PUybsi)+%CW2X8URX z3)s201Ng!(FX#LkC*FX&Yf6DEoXhN)KO@JM_9IWYaar=y0&>F!cjHN4hvfOHnKQ%6 zyLv;+w!NLq<@n1@N%A|MwBtKAWsYU@4;+>@+~W)lraq|Tw0t^@&Q|gk~q!}>wo)G`^9y*>^I2Pu&x#wGbvNCP$6NFZnC}#=RJB?6lL_dpZ#f;e- zx`e{Rh7Fj1;P9q)^SA8UPSURoei0?%oGshy51&^J%tnciOTrYixZh~g95fb@SSA&U z$rI+&$K0CIo}qFpz1p12svsQl!mffo`#f!;afbb^e4jADFaG~N z7OqD%9!~VH#+bDHf8!SZBX;;-b;f@_|A!jmNc+-hQ!MRAmQOTXRZ<{3s92_vn>xEf z$%a}jmYzydb2UvW6(|ra5<-BvUBU>5x1Vpkca3KvN1Gjs;CM~-(VkZs5z-}}&-X*8 zZ*gl^oqpO&*>p;^sF$1LOHjAA`D4BOuvIg&67C<9pV~{eN@}&Ub6JvOXIH&%Nh?!@ zwW?aJ#j;AHYK=r|V6~)US+xSWWvyJ|+vVP=&W^2PRMQjf63L9Ms$9`gr7~2l!g5N) zl$2-bV&*(r{gzIzf@R8;1Mij}Ghg&xwmF1S6~x+PgljdFE)drzAyxXQ@NZvRXP7yn z!lZ1+))cdWO6G_?m)(Vf&jy8W9~&x+r?00cSQTrhRG>kPOvMXwk45??FV%z0?txbS z1S2zo9uoHDb!AmEu%`lIPs!VC2{Bd-`rkk zvJo@iCK&mc%=w(V^hfr6&86y6295>F`X!ZpNj0-)s(y1r45Z9E*{89SYM}Fyfnv5$ zH4^;i=iB=9XRV<>z$2X%osycBE~1x*9&7R)JhXQtg^iGw*O9<%l2bIf1sg)7=Cip}u3RinCO8x-PQRIXPH1zrUSz`BMIc&m{1~}lsqG^MrE59eK z#qwspjPmYRG=MA~I|`mT@H;s81|Bh<@4JNbrPD%sgUr7okn+QZnsGwwyOq-L-G$Fu zI(|ky7XYtKGdL`^i=0{Gj?y{_@fLiJ5W{@r!!^HUIG#=wXV#{;QyAk&C8C!DohD@XbM)Qe^?p&N@Avcmv^{t6-NpWkJUAhk z&^L7l;RHNpcEjNo3@r?g5ocdyMb7W65Z}ErOizY!x*~6dp=?re!vV_Qvf`L#*6>(b ze})y#ih*lL-VrH5p0F`L5#0F7>H+(qco^rv;$g4mIlsqUga&5v6w{huhFYsarU_Ga z3kla2PNgP-4YO2U*Do4kNRUq`TUF2kRzc1!v6S#;0{iAfN|Oi@h*k{iUSc|f9$l?! zsW7rus!U{pBCxemE}tN0n$fHp3gZ;2vztTY`Qxuz_r?{Kf2jbCzn)$gZ8r~pa9~909mVVX%<^kVLCXjp^4oU)~brU~Q z&rN05bgvi{HXzXv2a$JJfvFfpg%HEr64Yy~VjP`PXkzzjkX zolaco)aC&s-iWE5KqD#cYzk>+U_WraTUp#u^5_c+%xRhgE2njPfKFN%&Gd#Mu{a&) z)Q?iM?{_{DosZOJC$!ErMc{;SgoYubTL52+%{x6|v*2$2&rOlBf9Zj$%5rCBn{4On zD`XN^cz>y-r@_22{tmAUemaWw{VzACqMjN*Sq=EZH4hTl9{wzno_??I5FX0I3{7cL zM3tmVA@DKuh$K0f540UCBNS<%Ht?v65Agmu=JcvBzuB6iHvTHCxEI31c<2Fywuh=0 zq-R$xLm!=H487+A=)*se3Ax%G$_Qq#Zn%xKnyrf2pm@A@8MSmF*&y@p=v1pbgZ-e$ z*iTodTjr}{%p;{rUw{@S@X$xpuAZ`=1Sse-hDCqI@Z*H?UFDLVn>)Y)jSBhSz9@DaZA^Q4*k6MUOJCAnJx z&k-&ho}PeC_n9QTGBxhs#iT{V3k+5_Z?<+@_usLRcMSl=4|BmYgP(WL z`neJ^xiTtr(gy@gOBoR55w?JtbOcNOgjmUNen?bDmm@fcZx zFhX%wema-M==jW2RR#dR$#0xM+2G6o%`i|CWHn?e@OGRWBoqcjjk|W+nu`ptWFf)} zJSNF-2>vQaN@Ar#Ilh6V86mnq<@$^fPdCiOa?Hh%O0b+kbDv?tWflnsO;!gb@979TDQ1WH zncBsz73^m6Hl>x}VJ@xo3>ERsS<$_pl@H6_?8J_(J+H00ELE4-bwl=M*^m%A9iZW= z&8ePm!gR>ildxsbw&qLESIrfWk#>s9xCi2#j&3zu<6-fT2{NpT!atwe8zK_r-P~tD zV4ahm*Xu=H4!C&+{umv#8)P=O!QkE&s{K=f^y(Xcq0&0doGoHQIGT3fKiiqaue1{* zDqh(}9$>;0mPpuukDptFNC(lkG!M0*pk}hz`(ntPe!rbV;N6hDVI5qYCKSD0M)2k(@ zCOGX*)}Pk2im<85pVfND)Yl;e(^z5gR7`dX7K?`2ajus0dgeTO&+t zN_>z7eUC2MZ3dv$&ZhLd)K3b7c^Arkd2 zvK3dtG;S@x*QD!#OuaM`g#oMLredjF45_ZVf}}xCXGeZ}bORu2nvgb^B6d%8f8ix1 zxiTDtIfZn1CalI~kt^d($p?C*ptF~azWFI$#_Tq)n73=K#B8cewINVoDkX|nnC^Bv z&d+w+EbqS~@`a*odF6@+8C=S~?*-ZHup6ls9O1w;osHyN?TIT@gyo7WKH)ouYyRAi zUmj@*opS9Aa}JzQaM~c=yF-7}Cl~BjED{Z826S5YHP+S)z&k(>SegKnNNz>MA|Q@N zOAGUA1Vy#SWN?BU*ntYx(F>M`8XB@iI;x*)lZGS86)=ZXfJQn3b`>2#?`--dFm0Vd zcOfHXZd+zzr6rAF@of@TNCy%ev2a#AUt0H$lO5Z6MMVf{9{^-oC%4emGZK3N9k{i1L#p|Po2sBC(( zdZZp#beT)aZYJB3AJ)lO`$5!h!Y(O-4VkUBz%(gE2km`i!8RUM1D}#%6*V?4xI!tB zVqA2HvMIaom;{pHSx=_Ej`TaGaH(~Ii{%H#E$|B z$gE?ao{U(T@z0ITvz5i#JASePLF^YiIDg>{Bqop1bm`awk zo(c{mUePKN&}KtS)fVz9AX7+51>3c(#A)H^SsG?m1QL5wS{bw2(%=jz?P;^1ai&_V zRV1PQubAm6YJXv@`SdBwW4e9Pz*e^;H8tD zM6F|Ys(3ZlgP7dGQ2(&;2C}j1JIk};aOkwls75Xx=|-i!{y$%L22oHyJs)H8E2>6H z>RE0bjR1*T+5M^kjs#1~#N!y|#7{_$scb!5RCOIR8*DoV(Xnj>epfYU$rvi)yyi<* zf_Hwoj0(eVxzz3w2oOYuE4d+iI)|u9rqp^IL&yvP46h^u)NqJ+1S4Xcpkm~N4knJK zZ&ZS|Lzq>YZG0dscs0X+z;FQo;e{iD?Oj#ce1HkgW;uP(Q_~pE`g^&S{D-zZ5h8|Y zaI1r`HDJX&KfsnYle#(bIBoTfjj{@91yuxCLqM%N?U_Y#8Tx0I{bS!x(D`1qB%NJ7 z0K`$ZKkEy+-){iay}MG)Bm{}R(JhffMN06&aC|c^0dT#GouAwK4rj1vRDsbyy_<*R z8rsoYDG%?yhP3a9Uk~&0cL4GD9p!M{3G+;D#R+N8BS*Fj)q(4DUU{eEp2H=6;Ltpl zw_#*RZ$F)1j05*s|7&HA`teGZ)2ac#^;8rU~FZ&7z$j_d34Re7g zaS1;vN3924(mK=&Bjjt#w+8M(c9U7}zGVv2&%CGaV91?a7)z#tJ&~EUKk5b|WRgZi zFebHJSdl<8LFLZZY&Bzz`kr8l!mi-xgN)9AN9`M1CI!(0Gc8hESU+HqKxItpZw4aIb?MQ#D1RbFjDEQwMOGqmX*c z|FS$03H}oT7Ucm=Mi&a=qG=lx@?7DRiJ*&w-fcfI{=ItES#x~q(TITmiV5#?kGil# z5$C}H$ot-C!OAE$zCl#WDf7?C7Ab0&kHg4c7tEppQ&PjP+%GO^zSut}7j4UhVazNr zDV}Xv<^M#G@GALe;08_7uQ=K1Na(NJ3N>$oF&!zX2_%vlMewf&wX{5<6L8CB#ij}- z3@)rpNXwlAzf`hQbxlm1UD!EEd-4AeY)Y zihL2-p*JN|mR_Wp?OzO0$g;{_MAL)gaTi-ew)Pg~C)?i72X@>>0A2 zpe|WInlnli^vWzCa{}f74%d*>w3DLc7pec8drJo$Pl%%$?~>|BNNuoPXi1E(R4%K! z^6F19Jq<*b-&bVHVsvWXLAYIC94flRMCR;lEn=Uim0ARBj5s08jhnB&B2v z=C8xphFv&pv3KGP&at{^+H{5B3W2Xe2!X&5NLvcT8tuBsaZwK(>gM0cal(zT?>%23 zehq@UNfo@Q3=Cz*c??$Erblpl{PftYHoijEzV~eP5u&2IY`UOVA#BW3kQA<5q{gG3D1eMD%}=_hv)OZa@S{g38%;Kwh-6zNm`i0 zex5K4`Fl7P5C4?&LwxFWv?~wriHm0=(CgXxi6(qn_6bVsagym0Ujrr`yT+b&1>b{i zj3RxtEmn_9q-@$?!MD3CF0+dU*gg;g!0_XXf{ksc&LUH3Uy9+Sns_&#i9Q)J-k_Uf ze5TV(`GNL2#0TCYnjpV*X#(G&MqWmKi(33n8`fr|&Kb@DEi@2JrI~^)1iCDgGBNab zZrNbV1EixL>BSm+x=pNo%X7gR_g3l%{d*ddz5R@I$~bN+I$_-lD&ND`DGSprHT;;* zkiyD7o8BcAq;?$cr0aCBlq}~|zC3mK;08*-+Ye%#AS30SP!GfRV+n|J`juEZcFWs! zPXJe1H3=~Pux8QVNJj6l5FQU#M1azBg(z9cmX@LUSq}1fubYjH&SU zLkNjkM>-5WRsUV@LB7`N*7k$e$dh3XuB2-%#nia1rqKi64;#8Znq8|HbC49weHE#b zfC@G&2;JxR!8c(k8wjxSJh5}ZOLlsvT_D4S|8)c(Q)pc;@bNro)sEJ0Kr;s!o}8%% z#HOL>K??@DZj74By8sByjM+7w_#F0pih2I))DFYP`(x?Tla6}+o3(0B9k0s&Co;3S zd8ZdBN?%QTTf3!KJk(7~lI6ymtDD$+JL#~>Xxo70WcZ^g#O(Zo%!j~Bjz8_9<9-%D z`)}vr{5GlNM;jD~wd-u8JwF_mVeL5?V4U!#^yi_@x`m;>{4!mo9^yX3BmSwc65wd1 zt<%sb&bRZ?*U8pV{_m&1KK;EosqnwB&ZR+=^qrdyK^n%t=vmh5O`W^5mUH@#;p&n6 zBj0|$xIB(@F0bzT{P3y{OINs7;^Iiraaeb|rK2rGF6S_a%0^-~RWAy;tdht9cAZuo z2>*qS7riz?*bz962K7T|Fce@1)|-}UDa+pRojGOe!_I_oc$({P4vkL3_ubl2CtN?} z*UNgSrQdUQRVqHAmm_)&Z{Z-K@}bl-dz{3Zpwz1MNFgU(mo=o%Ct$Zq;5za+P~t|E zpY|%dVBW$p4~YGE9gTu1{XYL;A}hk@5>=yhUIe*I#wVbDKsI+(WOWAfQHfOJQ}nvcJ;8Na0ma&qkJK)_ zrKLuqyr`7{Vl^i#90btg-`FU~y&XU%2n-NmFkVXw57ECys$da?d(~whOWPG|l zIph8Ytb8FLFo%FtppNa%zo<@#XY=9bNoA&lloGGlg!5MYoSjr8y@*U6DN>sA>&gRI zxi`$&dAH5tW57MvdFDNO<;Pipp4PW(3|*180-lDN6FAiZlf0{$doY}kh6br>R~H0pfnt?N(p1~$16(h+PTytRgZpXs zBAuyaH~`asnqP`|02(?{C~!{NA>=ctz#2mgd^5n5P$aec;y;BT_Vi;wV?TtLFTnl7 zTyhYd7ksOe{MjB1vP@&R&ivqPLwgU@4Wn2}A@B`f78i?KqXq3oe<7osNsfhIcmen( zt4I6l^tdq`Mf>tn`|5r)KlF3`Y$1JzUM!5J&T_!Mk5}F6lHB{O&J)#tJ)-C5vpLC= zfPP1$jMAWwV({#Abzu(LfP$!g5XBtKAX3|gj}z$9tZO-fFjYFd#7OjW4AC&rj)U~H zG{LS1)^Y?TDhuA2-QQZvd$19YGqmpV?i@A>x@XkSTQ#QM)2y!Y$EG7U3O~+pvsI5O_RRn} zWSA-H5rg7SCZ?Q``$Ad7n6X3$QBaxnG7;fgYI1?2xx7pI7_@G4;UfmNKLA2+!8NkM z5mxYE!+h4FswTi+ zvRsd?k-8dr0H)0Vw|02Y3r`n1?`C)211Q{X1e;nID5w^U7BW1xVhW5ZSJ;h+qP}&wr$(CZQHhO_nv;v znLqEW_02Qq`;l3-YTcC?6&V>B8FxlpiN#D#?xV*Ix1#w4X{meZXu3Ia-4gp*pUczf z&qxq~znl@d1qjY`%^F_-uWo_EEWu=}se7$w3}A~65Yo<$+iZq+Ulnh|-WVXopG-}3 zwO9F*;taQVe=`>G44MPv?O-tQY`qj9a!eJxQ=_=FfgEF!W?`G(n~{c0)6yRtj|6{P zI0Qc*Z3jOaSB=&EK37Mw5dT~2#+St6GF9S54AA5ahL=-2qE^fB#h0x%^r)^DEGo@v z@LZY7i{8YndWb6uYS74ffJLP`=lL z;F5&(E4mU+xrWlW>kf;y;p7SOU=HY^yNM?6$%nJM>%y?p4e(#P7x z7a*3$j9<90v7MELSMATJ#ZusZc33@4vSE5M29ja0AEp$M0ngV&%G6l&KAWfHkwl%G z;4&gOgE=#|)+w=DT#fF=QU`a1ezUw^%rPNf8L#x(7TWZjROFBxfY1s(DBw4g8<<_p z=KVHmpy@!5Kq$?vz#-_X9K%mHR%)#*(@T?dgwT4?abweOGzih`bQ2$3JvMbZuU^6A zR~iBRWMZsB%zuDuV~#ZCjo-V6oRjwaeA#@Z;&uF{coy5RfdlY!*}XsfPo>t(@O)RsW+&y&&9w#Qi~Q z|NFDrgD;G{tQy7Z5)m5(yR7@S!Y3Y-@*~Fn4z6T=ld-x$+vD*q4E+YLfqTOr2NtdX zhdlsFQCSi*2^g==M&<;z4|RuP)Tj?^9G?s=2_o#@4LY;1{O&dq)^yWKe}%JzpB*ek z7;Z~2l0U%r$UX$OGL$r=K~E8=Sf3ue)t$HKsyio_P&@>c;;Fut+Y*yJLx2x%k1C}1Fz2AUl|Q;q_dtf|i?5asqZ=W<>m^+^0-9w-?o+oN zi|iIdCu|Ebx2)A&if?Ty8EJx8b!*D~@Ow^=Q>w=SV}%|pkAff-zlzskC9>TWj0NGa zEt^<`B-h&jSD5g~RNwC7g3kqQE!^JB1cwG;gsAhMBfP$sj@kV$gJZNSTMiC0n4}MW z32||+rJOw*)?q4LNDKCSVt8t8O1W?%1|q2rTlAQQ^BmUKVqlQ2bl_-PzkCE|*9S}I z9vDw$Zx`n^5OB(Y*7I?4h@lOMwqG#f%;i4WsVcqsa-t_dx~~>z97j)5V9Yy8nZ6I* z7Eymt0M8yt;i9TLi-L6AA{XGc*eSiD0A&eFH5(aCIA^WWX)lb0VxVDjF{prz$ZQY; zrG$LS%&bcs7`0$!6|^$YCjP*iypf}p%7GIoOC=YMiit#8;}dserFxNREKHyj^~=bV z(;S)!aEd+as&6|PeQ+#n!NNRyA_}IvVL?08Bd&ndo6EpP=#RbF+mcdoM#s&vR(xf@ zsjZADRCbEikeUmy2ER$4c%EMj7u#`kU})jqo|u2TJ35}d-%YN0#FQbz7~jI(ffq2n zGHGpcX=!!2H#@Bt|b8ju7xiU_Jea8GaHtZ)qSdMrxZy zpPmP$Wz0;%CtJ1&62sXeU!KGYw#!VCioxphk0xHKN<4PuyfgmdGWS8yw?Edh!Q=BE z@%M{}%G71SVpvyYpBy@XSSm)5k$?|r2}-LJsPo&rV(yv1VT1%x4xVk`V)8TH~d zLzLG;a|>sY>~bggh3cc?_41!2tqU9yoqvrjr22{>h8vw;3j@MD;@i`P8@b~+Ec6zq zoZ{(9$g9FOMvX)y0#N)9j>gPbg79ytR$_B3T$YW5xTQog%J4|odhC9{f~0H~U}!01 zsNScNdYWNNs->};Y}6q7p0aiuGn8BvUvb6!Z(c*%fn`)192~c3Jn#DlwVS%M^nlHU zb+1PsJ*KJnS6RKn%%pt#WHPTtdj$G<@w%>7xNo(SL7pVJyL9S8Q{5fXmQY)##UaNp!rgnZRA;MxG5EFm_X@ zU>QyS1pO7=!JQdeLq_hHryTaghA{?Oes&r6Agu8@_x=AfE|<1mT4K$f#dS`-&8AF4QGX!E164Mt>dHz?$2eDHfV4U z8CD!Mf7MLTPV(GXDeE`RD!I&Hnd-z zeQCE%s=zIjC+`)bep-AMWtz5346QJ4VD2vM?X}qMz!o38z3SC{da+fz^Um}nKUg@c zO{q+M+&O$URgN2fUhqG4Sul}CxNqIoM4@doSJ%*rtlaSEXlecZ_&k4lE_w37_~Mc} zQSQk3Vzl(OUBc`4W*>h^-GTK~|IFL84)A>BaBby`?0B6Cc}Y>#jGdV6x^8|B%H0%o z*syGNG3^a1+0@R+fRJtTj6Te|u)};VEZOvKyL!-%vwhtkrg*7ad#*+QK_x1XyY}03 znIdJuvCkRZ6t#RdP@@MQ&qBJ^-#Rxl`gvcL#759<97oAU-EEvZvJIz6@mk;~1d~^> z4RCCuDzw8cQKoH!u!WZ6==yXs|1|L<)P6(ar}H?hq|OpY;P{sV1gse}$AM<~Yr{Cr z7VAXM-DYd^D*xeY9$%6jN?(VZ-gwDPcH%dgyTlBRHMjy+3aoaSOCu;SKZk{i1BNLfr^K6F^nPxl8lFhmVn#^H}mOUfDYpvzC1<10tC=?GT$f|f8 z@FUn+H_J^cq$=qLQGoF(+kAv;H}4Bes|lIbj&TC^L)(amh=)uXq;Z^@8|?)KfTQS@ zmKCm};|#M7`*CZld_bG#Zr2Cw-D}N_zH9piPZNYkjj8QkVm9;V{@~pMFD#cm;sKKx ztHK?NXG6xqjGd=JLhZ|jtZtJ47RUJedhhNwObS~oU#Ei+(>LhfB-;03~lX~zU;0jowv_T2zhg@nun%T;EE z_ub^djj+fC=!IBY?pjx6TIuOuZ z0>^(o>k^J009CDFfC+nd5(AWgNelpJ11}X!wR*6Z(5f3Axpx)M?1$~$l`;T&AHW}% zlYkyBu|$s^kp^LI^6N!>cuF1kLm zd~=S_&`R9h26{cdoW~JBA9#^-vzRaN1Ts670yV6kd??h#2&VPJ`C|if;Y%2X@WuW} zg)*iaz#o!Q4Tec0hPpB%?SB?Ci}{%)`#)O4?-JwfTao<&$~+d#d>rKSMe+`H%n^b= zQNr6tE}c4kRd@V7S_Wt^I8H7`≪20g8c%FESbFj|>}%$XbAJ+J6d=PJ(Z3BMT|i zfE>7iMCU06u=hOJv4XaI z<{CofE9c43{#jcr6RsMk1Z`y@D^;!5Nzu&CsRhN*~ME z!O2I>JLs-!;Hs5^P~;P~b;nQaneWMWHi*7&L_Y&8Q8EmF63Cu`{W~3Xf05oafkiY#rbR$AltOPZofm5Wbt2A0&+L^;;;DOeB(OP~7O8>-WAE!8FOj zaTtm-jJ-q}i)`hnWhmoBqI-Wq4)Wk;&MAT%kOOh1Yb+H6B;n7+^5?RKwEKhFD)tQ0 z+E9eQnGNug^aD4#4R~!s5o#ps`}))GB?Npy5&pdU$jnhBU*Q8R{ACe-JU1XvH?mMi zU`L{$7elBEf~z<%l}PXJR0^wPdgMURO>%JfKsc^E7$qpcGfXtcT4L(1s@_Ba{z@ng z!5=JWkUcx`$V^r(#EW{^HVGDy(h2W0O;dH53Wf7QXyTv&gdQMlL72#B$ELjR1U7$&5F@etNe zGcIQ_WkLS6y*$OJko`La_E;C^gJST5&IX5-`yBdV{;~K7p-Cce7e5dCo%gd`k3C1{ zw(7C;&HY&AX(5Yc`bV7pA%YlTHy%9b?pw2{R(C;yS# zAG(Ap3-&64{7>lsrJLm75BTvb6a2Kah@{DYZ{2gt5&%6(z#$O*&}01UvvR|vie)lC zk)$yp_YZT-ewf*p4d5??@6QeRBXxyt)U{sZp~x|y$#9@`_p*^c{HXjyGR&8QC&Azt z8-`5`JSE1mG8> zU?|Kl8~FfB8)m=VNAml|wU>J%%)JNrdaYAbg`jh)5DxUt0*Md5*N_S#)E@w@+6$fr zwz^9w8C|md^eH%%do-TbLmU1? z9+hQqdVm@_@aJE7ZHY`Wu0H~NweCQNIbuXY{GD!<3y;Bii<0*Q7ahsx0HT$s~bHCH<@T|E(4hyxT`D+=}sKEC3{o&7#+Qg zZMl87Rra*G2d>dar(`e;@?`fQ^ed@D#rd5?2vwx@4BsW>0CeX>!sPbM< z=wi0OJ&bib_;`Q1a6`0{c zpO{UR^pmi$#k&N%O5jF9PbnS6Y{3a%HNI)|Q=T4jkaBRE&;hDPqxN|9T$YwlqmHja z0yyAIg}=JuTw*Ax1WnwzsNU?kB3nYp!(K5a9hLE^tOK8fMkyU1RH$mwE*Y1SnkGiX zOR^f{jGTFezJ!(}vTOyf5jt$6`#o{&{6oiS_^d-5!tng)xU)Oss)DYzvr9@EQU)f( zp+;K9e5GTsnjE05cOzkt(Xvh zWqt%i1!S6fs&U`w!fX~0?Cc~^6$~F;SLB>nW>oBR?jT_UCoH%r&t#pM_s%a!3G8-n zdLhsziDS1yU)Qx7I#a1X8PI}?=jZAPn>H%d@h9wKTS56J#I7yDzB`KgS0R?ZA5F1Q z_g10eO}SO=KcES!_ED4uqn)fHup=zl9e%&Ydlz3U=OgMt8i+ZSwFIt=u?2ob$DBFY ziw`-*0b59x+f-jFgE|to?4iv{Y^iWWpd0>fLCdY)r6C>POKFqXBF}4QP@f!E`dy{) zI7YD00{^?HA;Jz49boZY$6wnMBWpo|%Ds^9rBVU`ylspB#l{bj9XMoIYYG#Jwu;qA zEah-qfQ5ib4Wi3`fJ#0L%d&8=ori^hLB-5S5`VeF7$-z{G6 z5aJ!!G)}dHbnY2EdVo$m!KC|$G+t9IjB4#d;fx>Ci?Uta6?8Gi!|1j=mG3^|R4#O& zjK@HcC>b>puhm#EzE?Xa6&8|>;uM8@5gov%!Z@CTjILodQ1nWl4E&0#omH?Cpj8`g z02)H@)SQF0LcR5{_p=d7kdNBj1jd56E2_}`)>3S>8U8{LsQXE3UAsXoat71|SA*yo z0P2BY)g%beY)gqUQB>&hSB23@I3rsZE51CpFv@K9k>DP(BmE%CJ5t>;&xmC*;WEnndj;&ag!e^HFy%E z&{&VIUiDS3zP?Zm=MKVgC*11O&9gSH`_+UlQhV3!ldnyOc^sGaAyPM?^tN5?3y~G~)mJK`Sm^ zjHk{>%@3c!@p5~6e|vxaiVh^tm2|0Jy?c51h%@L2nF9h%$&6O?s2_Wxhbu{5R(KR& z{O9Bqy*S=~ly52xgrb}wFE%t0=#MwNq=rL!{}&SctF^^`~7OW<6zS8U!wp$~$d`?JCeb7Be zS9CF+9ry%8sWZO!5Q*ok!gh97n<=DJB8miYA(P>|KKIKBTQ@rou=?!aO=*dLvk}U{ zIn8tqIPKKqQ$U>WRSxMPwhXSU#;!C)qL|P(&}}0qY+L_kT#BzL%`F331)rUAwYc`~ z1}a;g#P4r>!{*$4g^gZU%Untdb&$5$)OhXToE60sBYv_=+jiZ94^;HIN&yDRPN>f! z&|iUMi`oyQw=2wY)R2vNM*cUzf9!lS7lgV7#WeIrPdx598}0b+hgfd6*D&JeZBgV? z=L#v)Jk|k7Y2-FeADINGsV=12dzCz$#U-wU4+x}4dDLR}C1E}!%Mo2K*Xq=LMohQO zxS$Hmu-!#DX&vXbrJ15f`d%%-w$!YFxv_`znJ_Q&aeA5nw~v-yT~H%M?HfaUCfrEJ zGXm|ou)WhK_xGIHvWIE6?{pc1Si=hJ?6{$-hZAo5lNQ`&ASnb`p1meaIZp3rPp=}abiUD;ct9f zBFz`jqIoP)8anQn(m?|%E~36RSa>M)tf6;O4rl?Y8LomMjZT7bH@X>q7g0x5lyw> zV(BO4%hNd&6%yCT1oK3!_&!?s$)d2!(5=WZ_%ifUP;&!A3dR9tWkM^ni<8^jrVCiH z5&IF8C^#-5w?Wb_a{g?mn{FJF@zY2mW&iy$qXV~QN)hu%+?M)^R8`^0GWztXBT)?; zH8&8>5-awOwj&2%$AF5{sX-0`Om7scY&pkN8HVTCN@(;|+ zr&F{eNfBK1t~!afY~%9DL5~3kyjmNN2LOIzM!j}MFyq$PrfLx&bA|&p`f!Ze&#__- zR9k~Nm|^;gv6Kxes->VJvARjBJC;-)&+q4|rzmiptIVi`yR0%KUjm!^ zKBiB)9}G19@?276O#E@wOD`}rWgZzKry;IVxJ%m~Qfm%x%2k<$-EXQ#*Nw-XNF#A$ zWQDeSg?U=-JoQJdhN5P}*7kFunr*TG3kKV2}pV z!g@f7|HgNJGL*Jl{EOJM$n>Ff7L2p=G3&8%Ik%ODek8%xQk?i5THU_w&wYNNZlEiC z=PjSZbSVUxx8rq{yx1U7W6DOehd)q`ITu1XGNu>dNK~yN=>(vV0bY3S{QZAmZ*;9H zQRw_E9;UDW03`pqc-WcS8UITRY?rFE?WPDcw`7n16TvcObLKB@6mh@}`v?FTxkVT+ za*xy`a!b9dNDjt(5%JF*NeAL8mz6SabN@j(HbL08*VnxT#nxKun@4M$-K7aUAAerU zz#ZyL=e*|W6T4+5{1IGi52qKkqFIZI^03a;q@Dzgsik3O+3#<+#+r{3JR9f~!2~{(%{8`-gm4z8H{`!>*xk~7=%78h| zQeHW@p}}&yyOQb5@7-7d@uIB$dY&L4e>bJR?b8e31tV&*xSqoc$QL{1z{<;=W$t2W zsl6-@r>zqW1|kWPKuHy3;Ta^G(s;^l+&891Ge12OGq~$>7WSnxuRq8C-gA3+(e9Ns zSLoGp(;tIy$Q`Z8mCtcrSjgZoTRNRdOw`*G&Zuc;QjfOy9B$*vAPuxchU`6nX+9x8 z=eK|qiQzF5H@dQ5bq^oQOnZF4wea zd@U()#UXqs{z@Bf%|oSM*Qa40h=JhZw;-avI@gS=c3j}v%P|Z+qZkDS2+4z@FPP)KV#e_UjgP955 zT@FsQh)6ZwTV9iAe3sr)dQ<*FJ}gFFL!buZs_WQ{BBW~xS0A)s8}ZIA_D)qUq{bTuunyLilx&? zUeG~(vINOyBB>51HyZs-rv#5PQC;zrjl>b(x)4xNM%ytlw!9VzslLuW+t z`_ioTE6TL+^3_VGdi<2|V97eA5N!VA`-awT@Xt&-z@E=Cy}1Vk#V!d^PWr&^+~Ph} zd?={-pcipzCrJ_2-Xl{H&i8`(y3U|`bp5a>=0Wx|fJVlM@yV1;3u4IdufZU}=lyo! zC0XdjdUkf@$6aPyGfV7c3HgI-Y;KJerh!B6eH75ky1rH&)Ntw^9t^El^;jisq*JQ6 zmij%jOl6~#5f`UfTQ-RfYvG3i-C5Ebt{X=`ADmTltVh=lgJ(WM3P2=j9v>;LW*IBY z_eP1y4XzTV;Q@*?AccB6Oe^%p{9^&UU)6)60}UcbK2VrG7ojKfS>%-^K!+>j{VQY} z5myg}TSODY{wOfdRuk9zamJ??E4DOx4ezDSsmp-0aiVKBD0qI>Xo2Dnn12NV77o1DiKM_8C6G_`R&-|(WCbvCH}|HD02ex9@*Ih}$*_oU;<$lu zskSMV*#v+8%*WAIO$g`Wx?CK@QHQ;!jCFx4>4b)|&0_lO;HpmXgT{1QdF_R&+GSJK z=C}XRnNKDa?m8fR{>^x3iPfN!=i$0d2O%Bz7A-DXCAUIvHZ2!FMzKBb96{{ScTg*v z^0pjSokQJ^*+jo`!fPX*M>5mpsi1jmM}k$O)>w;F>WmE$uL2S%;!aCQrX+H8IXD|F zrAvxYEVvKLXP*+XZ~~{$;hOXYdJPIwk#_w#mLY_;IOJQRBUZ$n!UU$0*3CzKTh zMH9E;tv9(fLXtBfc7KoTEuc-jj*aa#p}<)brGYU%(gkYJHT0C}&VqIJKKhqlHhg9# zgiqgo0NCJBEFLdl?UWtMJv^(W_NFw_Lhx<(S#4FTZ=dQxmnyEZs=j@427L^w0(#W* zq{bcJh6v88qn;hB#Df|IY565uXUqw4(=b~Y)w8Nx;tyAte%}2uD9%$fT}(((Q~b-F zJ?Qq@j?B6tenppEZ_M!_PbH{Z}^ME%uQeaEA6$@t%>9pnI$meAGfn4pcTk@E)D0q@Blh`

      Dq=U=gLr+)ot%Zu=tS#eHs*fC(W{c{U6x9s31ff&_8_4{3#UwYPQ+f zI{ky(`>*_zk(LGe4bQ!xdv^#@+QFCa3SuA?i8kxm!r8H*wm#(~K|K7|CWZWN*Lr)U zQ#DyFl%S3vRSt>4 zY9MY^G3p#7DrD=JWqfQd)?qnzM*OU?*DNM{Ht^6=El0fnVZr00ej~pw8j@M4y2401 zs)B_&+_T8TdfQp@ROr1(;dvGeRcg`fQheMG=S1_;Z`h(-DWP+0z{_xBu+jAD06ujT zsG(0wtCWJY0jd@7H(2(*VpJ+|T}aFIqz;$u;M}j8?mrrbs;hqoN&+8! z4(J0O8#N>zd@=OsqFkXSm6Iee}`M* zL5@wBb--c85&$ETO+=!q%acLXrtlX}v&g4Cicvj`IhE#frQE%1UTz7DW z4-iOAnpiG59PNFXeIjjE!P`Jw=q0YeKAOW#2 zC#8kAqV=ncXZZ0Qr@@xH`>9EgO+5z~fi9RsMr2z>OT`T_iTt+Mdl;C9B8eumizy!H za(Y*8stj_%7^HX6!8=M;qn7y9lo_7JOey?PFa0qcIMoLYYEmymPVL|Y(4sP25sY{^Glo|?-9xVO0j&2pWO-g?&v6zPWjd**f7lA3gG!psS&|L3@2b7U-PKW& z7w$ny>a+F1|fj;D3S zYH;PHwsg&;(}$*%^RhN2jx)*jmc67Ie^(rzW$SJ(r+#$N8a^{mNq3bgb#y_dgIRKY zN4xti7sajdn*!IHZ2A{xvr4dwTyeOD+{tAGU%oFe;6}B!NG!-d>ejt%!OeN@!QJ6G zJoO-+zTuVifY}j)nv`zG5xti9F5lw01GI{(ek@D6k_Iw&jANZc_I!Tz9YPq=l80AOL_DN+>n{Db8+C0DvH;KWgQ_D(l!O zn@xJ?z#EV7GZH|J!Cwwca>!qR@!LQ~x_nfQ*39*%3X2?nKIXS=>OwGs3C6MSGuR{R zdUaxgj;;ufL)6{iDM4pK1|&a1*`~rs$IqD^hQmN*H`!hk>jo3~Og~h;C8!j*kPL#O zjkw9r9dC+SJ__8_^^2;;UVeNB%#iFks)2JSevpZE4k#ek=2RAWzgnx`lq2@VZk62` z67|4qhLt2wHbt?mj0xBiau?lA=BAdY3)>C!uCcs^!cYw(-06D+QVl3n*ml*Nd)VWb zJP{WI93Ncm#OAoJU(mhVYEwDoEjJpCnVwJ$3_x>Spjei{fn+zta#p()VTdN(+=zaE z;$hR`>-;XCF0$P4^Mr+&&?_-&yBv98NodxbC@3>CAh!lV>tQ|bDr%GGc#$$6&XR{k zeNUF`6Bw&K4RG9HuMl$7i`;@4;O**b+*=o#DphpYIhW(m%J~~gy(|&j=`~jx#0_%LDy*jyrfn4& zYt#Pinwh+gUyN{kn-#P}NMUSXe3+zibRgVTdRjky>koTaXuunE${VChYPH(TXJA1{ z5hi$TLJ?6n&Q?l>mXR6ksYFz!-4xK&uNW?rC{!*6!97_@U?>_Nw4y0|eY?J@bG{Hj zP|Z_R_FteWL@J{mk_zjz7?(Ol43YReIG^f>alH|$hDw6|)g*;?q!kwA`1Gcio8oMo z>6S&ebpbf`(K08qRRop99K_(n4l!4xNSY!C0Ue}4$<@H(lOtm*Gd&dE8W?4j4D+6= zXKxb3B#{V-%GZ+*psSH&ZU`NSd||Y^+_c`-+;#J?3y@!Jsl3fzaHyd43XvAuinxpi zD%p}KmijOr2ZQ-CZA_pw#NkF()2Io8plVAeBW(N`X9d@#+GH$V->ctj0y=p2TX(EK z*@4DF{T!LqB^*|h0H*To;SD`fMs>EUpzWEg08sa~xU>>drTB59xxCXTzm$oN~MzI@BgPH4~P>i~rwZFv$3Ym4eii|WE(p__jG)(t|FGZmi_5;bD@S{aU{ zP|hM!>d5#B85tQZWfYdV@gs5LV=|}~Y8k2Qd2XM2N|M_cAF1hIVBRg4zho{lGHwq< z1j=^jGKOino{?!Qts|3lGPRNn)YZ%3!7J<|eR@T=(k}OHjN?0UhwUCA$L11) z>X$v)hYL}xF&heys-2b3hRRNq?7fiouC^XmI?k>-CgA$=4C^#boe=n=qLG=_KayfUeXwt<{q?YySnO6=+S~433&qa6HDFC21s<9aU0^v0XY` zJ>g_rZb5gnUP<`0otYg&mGN&{Z&GqGVteE}sxmOcs9pCjCI>|tU>!knoO@;Q0DL9^ z48=4AXjLABt~KkWn@dt_b*vdgf2w1rR)#@A)D3y8ZaQ{kfQMN}iFa0|j%UtgmR?Ya zt2>&Y{_lQz#IE=QNB@2_Tv2AodpcTl8SDjihPd#tLw|BFbeOJ4*UOTgdChzhG}st7 zXlC2;dTbJ=#9>(JI$c~s<3y;&z2-CtV?mO|CZ-|@2;qXbS*W){AmGlZX|=cUAn^c> z*cYM_)1(n2y>obQ2<~6ERTfaRGCk1iXeGcNkZ@H*h*_XwI}&6!kG2-T^Y!Y}@HDL~ zqB$kz7RO=pa-}ohLH#&a1FFPGx`QaYxGfe(T%s`EaR+U3wI**dVTiM}S ze&OVfkq83IO)vU+DeH646BVG~U6=%nqjlmLEP^$X6n_xo(wRbgFT;i5rjqNbDE*yL_&IGh}=)gdJrrIdZ$lutT0Xw3oIaR+l9fqSNl>v;!m=j zG-A#Ye`kc=XkMm1<5x@J&&0p>LW4aC1^yLV`4E@e@9P2ezcDL^YoKkeXrrAgLS+!_ zHqC>{|C0YEWF|ra&6vs8DGthBeUWUf>YB`tBfnE4OyjuYpeEjYf?aY17hr}QrD5Nw)Kf1{-uZrlNtsg~#3>%UWF`;3m9Q8IpUq^-OEcJP z)@B<1%c`RbJV}JA#Rd`jv>C8+r8pz0V}IJ`cy>HltLV5Pl-dUG~9PF(}=)9$3r4F4oXy?N^oKdOkpcoU!~-C-5TyHs%mF0!a+ z?dq(N7)Rh$5ze`~if!Rbw?WI>RlJOQV)P&{PC_iiGgi_>vE8e4Z!t70_GaRh$TF=! zWAf6xMvs$%-kn)DMA`^74`dByCqgmhy89r!fZ6B*ED|sb5tI6>4f+zXj|iXIJnvb8 zbO+Pa@)nxO*^9xXo2D+yr@_v_HH!z;HJ-}}sMg8dD{(YObDS(~A&9plLXNO){&(Uk zJwWH6X3r~s_#*(XRv-evaXh`l;i)k9rN9ZS$K|iTC(R2knBF#V-c^#&!>bBde{I1& z-!7bm!spSoUP|D)d$oJIvcbQ@Q&gVb-2ktavq6)>qC4{k9a!Aa>kwY<&JP;E>S`W+ z!kQ893Pran3;?g4JTc5I#=Gi!{N23G&#!6j{@6SpuqIDb2U~uF1j0r#Y(~}g6~kcY z`;-;gs|m0MKHeb2l)HQ*3Hxl5UN>(nXm6zm3E_H+O?D^)!E8HKj{O;2uuY48Q{0Up zfZyx@i?74OW`l0V!bK(f*LU6Hn5Uy5@sIo)1_(rm?Ti!FChG}u16ldmp_}hgiEl+ncbgD4-le4_T!A^;2%m8K(cgZG@A#$Djswbb0 zO`gGHq)<&hz8aZYv`Lr5t{#V>NCU>xq`rG*QZ?Lg-I`|(SiIFI_6Yf6^>lZU3SofbDR}>fk0K@;lu-0|Zw=uH)H;j>}Bx&0XHu&I~`I^+{*(6BO z>tb%>xBx6qP2i3&EYCSXdE`i@dNs+y!5Fut-oIUf67@(cpbiP6Z*C`P1njs2NtK#I zD?xq_tUlcV%6_-}{e$TOlv%xn)P1&=a;5THhRJ~kzduV5j9`m*F&i5xg~g16`Fbqf zV*T zG7IQSdE*9mmKQPH)*BSNVYK_Mw00R2CM=l_!O$)MF>2-$(g{RkaceMk_rfA&ZP5It)=VP`>@rXV-caA1%ZAhd9Bgo1hA;_{doI@lA5VY#CnPfut{7`3%|7po&3W0>(-tnV*1GoUxWSY;hjja|BY&0A0Ob_JOeq-% zH%-y770Bji9s$v=jApgb(E|Lh`;x;Fcc*m=@vRb~0A=fS9SE47{AzXS0o>Q3pazcC zc3rTA7rJ!|H}7yWXjbO%B2^sc{S(F0z(~I3;01d(BgciRL2sx)u7oFH)eCx`YNBcs zCjPTvlUoeTYV3jqLa*ZBLaW_<#Ac4Usg%A$OY~U?cYaNyg&A%1%l_N}Z1)QU=wo~I z+3{>;1x+O8JI6=q`Wuyu9r^PZAE=0L!#*?o73!GTQaUA4Km()a~!&Q@%H+JX3A+q-P+o#&3oQLovYs!8F>pnTye8=x6loQOFK9 za&s_%*L8p*HHoqNmt)|X`fNpqga-yN3S8bUn^5{xFX^Dy@PDxQ4{qg?9=F{nbs)tz z%l)hq9(Ce8{o;Mr{yOq*`S8cM*J!~QWUX&~b9{j=4A_9MQ!yi69DU2(CR(LvzfP_vcMSFzNpbJjuPg_LW+YT z_!-kv>PGFCzbS^}Rm(M38_WTucb)&fVs zUNM@OGvy4phUhum2083XS(ErPVF1Cf9%EDuLtkUT+tsyyo_Z+~R!ES@C(NVu2Owi! zBRD8tKqnT92ioeUsIpd2jVgzk560_WTPmB}>Kjha)5$AAyy3He2fZwnkSoL_)#2`+ z8WCD6x--5MWz32d-1Hnv9qs6F?-NVpkFuhuR&aN}8ovm?aj$F5GUyZ}NEZB-*Et15jJfSYDkcc7yEQ9@*AH67_clXD$a-Q1Rmh~^FKn{RoO^ifwCV~ynX z2&!VN_uOctkAzPL3{V%>Xs^P`u%TLSMdcmjv7Sv+sZ%cgv0gg{uCY>8h!_G>mJ!@a z)y z$(~cR>7JDx6&xWRSug`cSpQC5mmUsgex8AKyO>|-9VnNEliiF?)-zjTLyd*7mKC{IZABYK(Wy#9u!bg{ z8Z@ddli0P(LC^8GlCD2@e(Wm8$!jTZNgQF7G}X9DPpleAtPwbO=$3*N<$N9GORFj% z=#I8D$4uANSJ^VfH~Lv5(-Z|O5fflslqQsHN<5t=MURDV(EptK$W&q) z%ZLB~%gg`(O#hPw-p;|?_Q#Lr{x2@HrGJp;+2Vg(XpoWBE-I6=jalOLEz@r0nX8WW z)}&)Y+36h;Ma}pK@pgoO!T2-*h{ z70x8McsX21td=C-1K|(t8XNN@`&<(sKLO}UGD$6z(xjrI`>Z8_+Tj*eS$55|XcE*` zG3b)@%XX)Bn&oo~H3!bsW1K6G`$d$_$F zup=y+N*kH?&F>BG9}`K%mK2uNNt(l#q4%@7BuSwxwMfDhHWXA}(4-zX6EedRN`O}V z9ZoOc_5+K5c3nOpe;1z&s^&Qqk0dRVJwV%gd6`S0mE&iT#aocf+Sd#%^5`_CXTYEFSJrQaw-t78gc=^*5N={ugEM6eLR2 zW$Tu0+qP}nwryjVZQHfWwq3hy+qSJ+-5qgnob&Sc&4^r&nGcyUW34gg_=c25z&A}o zo_P`Mlsq$uWT1>=e=&=kIwWt0=7LNLQ%b1oRut%@QooQcZ>wmrVSTQqU#JEL>_y>| z*BDyMw35q7N{?!ZvCFgT70+K4`m~B*$f1TN&QW=KK_&#EkZw}Ds`ys5($USmc^V5s z_j>;=Ad-+Jy$2zkUayahizowGdI^0c4=Ct+DUc+KEU5OXKF%&_4>jIuvS6SLR_a1w zu=O`f6|98@=FX5bliOw!-BAMdTQ*H9!v1J#5MYILTIsqr0L=k9n`9U2My+;`miw}_ zgUms^HYw((-c>-X(I5V|pXO;-vWZJRyJ9hNK~t}Q(zcTF)@bp${F9#E?Y|A(w*B9U zIPk%ZeI<^7z3>KxZWp7fyVWPc*g&Sif=X3V+URB2!V300g=nW8X8lmnj`DQNyOl^d z?62q+5M2z)?oFjjx`3mn{dg(z&v|Pes8IA z)jeBntvdy22NY(b6bE-VfL=9*ewFy_HA9?Ru-$WBdI+E}sQL*{+3FVPKtGBk=5h2V z$v0P|v~l!uf;%K|UXnXDgKTTtdbsZ%0+0+yAZWEA*a(P$(1RwRea5!c6BQwQ!nPDG zA?bDZnFD4SGm0xZq;y1OoH{mu-ExuZooXAw)~lq1#YB2YM!e!qZ76bR0|}T_1|oEw zg`?W@JZ98L)II88ud?T1CTdr3mN`@^X97LXLT}RQ-9Q}{-JR^Rc;gz|*|NP!-F?Tb z$BtMDt^tEt>74H3PGPfL#lvTTCH*ZPq7AF`b#;EYK6MP*f?z$>wo^Rk{6H%hj+2k| z&JVck8;ClBO0jW4W9J5u4cLIzEfJH+qp@yW?G49d@_ei|A;F@9Z9tkz%FEe1dCIS*)3t?zZR)`kRpkSD2xEo;=3b>Rc)=Uas3_VtNI|#1BC8se9tDE`Bx_;nVHg z$mNLr_A!*?r>8RC(F2gDPT)prmWC^T(-Ou~7#N-wL1} zAK&i}3P!#R;{A*`Iv|zAaO#P8bk%qqMwg)1b|Q(R#tr4djka&Jbtox$QyKgS{v6J2 zV^a&1T%$WfJ0gO8Cvs2dmTdX!-2r)@4#n&>JLH{#z=dFQ0tdq51=4=R;FnCfyL#G6 z_OU_H?jQgTQ^(B?5KkNo2lBdFgZ#ME4Zm>n`+?*Oqp@*#3BuTiz^*b9jw>Z#m@LMA zwys4w|I;4g!<;HI*U%DZ%vzr9WlgX1;_ITTfYPnQ_Fuq$0sf<56HNqZ%vxPB^Oy1V{zA84+hpJK={8oErQURRLyVALssg6^87O zBaM=5^}f&-mh^hJV2)1?o-O@0QxlIQJal3c{6AH1#aT?Y(k-u6~RPH z1>xlL&o46DLb=xsciNgjo_9pGH=pqDAKjc82OA+9VyRgI!hGD3a?BAErQ8``gh0Y^ zJBo=3@kD(Gt!c!&g~80Rez8)+;%;^l8PeY^kVv|v`W~7>Ydynx%{p$xQNej!i3 zLXkLFx`w~_99eNVEAv+YVsPv^t|aHf0Nl2-4iiQS4c#tai%iJ*Yoo2;EbKoNv;nEc!q4&YNGWKW! z+I8Gp3aT%miRNrT}flYus7OwgBj`aa0pMiL2jOA zpTAkT`a2fE<9eP=cXtP9}`YI2B#~gxRsk z&%)b1U@+QH+c^H8rqxEnIEz5T8Q0WYO3vtC)2BH8 zyQFS(3qWXNzcLP@>-P)8OO7NTsY#wDNzae3x-f0P!*ypU>M_~w7HK8{y`E+3Wa|}kPacv28DKA$f2`!{w2JwbXYU_CVG^7v#9?quokg0<;wfhY143MqMwUuelnw?IV*=8r zs-x=K`v4NY6oc8$W2X$UxFCg4=zqxcNo^-R14s~N8QZ%P?dfT5&>Uw(`+>qv7gVu9 zQmJ1amj*SoBSN4o}aZfh)nK{#{>d-45EJLz-s?SAsJZU8stX}BD;gV!rQcJEo5E>{s{d)7%@ z(wyW#qe_I)teR5DQy5mpHAVT#Y3B?eEOcp12!=>wc(5oIyqg1M!KS)~0pVt13Ze_V z18L?)p?-hiOGoh6WPC4N3!}-CL5~+i@VqO+>+)#UOL!TglhCqh1+^z{H#+Us&lf0i zx%VSjv8a?o@gs#D?{RX!V7#He@$eEU^fbQex%EXj^^!R2jW!t;vGFx}uRRX(xb}m( z3vW>LJHff1!yQ^SN)Z_SHxQcnZ*UPKR`MGljM>e5{a$CqDn4-{YT*qWyHkc_M(Vs| z^J(~kB8^}Dg3OISkr)1gGkRBNUob$=`Fkl@of)p5K;v92W9XEh<=5HFl#7=$^<8O0 zC3QIYcmyTH!biu-MaNP4Divc1LYn0zanmwW6P9Ka+)8p-i#q;zvbzK7Z`v6=mhgKu znm?MEvv|PB_=Nt(`QhGjLJJaR-;R~GX8CInlfZffgFE|xnDF;A_<#_Hp#};bRj#D| zeJ$RaE^iJyWL)_Z0RW6SniMRI8CTdf4r`>Z{mw4X;C#t0i;IdDDD$2h^ZCY;J~0r2 z5w!}8b`xv&lqR*&6D6Rcl#TLIQtZ4 z9o@HjB_SMv>1V4FFp7+jIYg#15rrhci|f+!CsL}L%2aJ>9n!Vcf0ZItn)}g^%L%5{Xdq)(D3Jxq{827)bqPx%)iGtWDn7SZ0X}w1< zXPWn2-lILiKy0JIMgofT1J;?B7cv~Vc{3qEd-n_*81y8#KW zN4WBJtOag;J9C)L4z}X!n?4BxHg{P*cHPXOBD{f-6or-~$S8USr6p>-(ds3(Q zr?C?COb@g_5(sSm2!}@MJhVj&_mH_)+Agz1f)$|AizQ3ZS!TA(W zWf~a!Grh|n>Qq~!yRv?KD+dqqk!?vC#WgU?PV zG^7uQ_xKkI{{io`{ebe3@-ZNpL>Xd((~>#)vsg*W2y2Y6iNH}}3%Osx%+Wlq7+ZQx zAY4ez24UrKWMGZ?h>-?A5Sus6;Ti=*ywHuafHHIp zHPfz=IOxC&o5ojS%;RULaqZfy5Owo!z-)~_ry1h$Ncxp;)Dvrn4KTWJi$V+6;K&6$ z@dqYJT<~p1(Gw+A(QD`B3eY(m2Qi8-a%yKCQC1H#u5#=qG=jgU8Sv{6MW+Nm<7oCc zxY8ENgv*w_gYKx#a%RR-{ca7YZ!TP3Cr(rD@YBeGEN|ua_%pi7rlkAVs4DlY)Jnnm>A5x~JyDaG$ zoQ&^^ZDOB``yo@en^tLT3d`DDejTR~mzGb~IvsO6l1t^7YpqWUy3$#}l*Y)`)v(%= zQK%lfQ(+=!N<`3(9Gyo=)aPb6XvnJ645Lfr>Oq z4@&15DzGr?Gk~0Js$;^u@m1$s)I`^XP)&AHGt#DRE)MJ6!WF3 zb=QlefU=iKdq=wH%$*^!tPFq7O%t>zc)rW~+zXg@wN_7`f3*z0NYxG?&Bd>)-h*X_0Q+tX4gHq74oaSXpks@|P|9VBMWT z(c^5pf0NCoz0gyMp4+Dl=2edA*<}a=EgnS0( zNxl~=a-U?xLcrv7ywTO(O3tAxbgh(yAp#&mFezO>4yzY2Q;W(foTh1nda$EZDHk#; z0CocmtVa~q+mXgA!A?rB$6a=kGHyxbI<%sJX49UB&7IqwWs(k7hJ7K>C*eNtOoNY0 zhi&mao+evsF!a-}G$O9CjaZdj-}QUau$y1jN3Y?Xzw2?5=yosJ{u0iK9Q;ih7S4th z&lg}WYY6+x=$akx6O0nDs*mQg<928R=CAz*t+*KMY~5XD@QH*R*ncE*yP&4VD@F*1#a%iD$9f+?>KCW>bV zP(r1gk{P0asvLy_`u%^|N;sl`G2VXl^LL2qblJb8_$Q~B*;nG#%3#3q{(gBoxui?*TFtl>Ee32fQt&CpS1wduxHE%l60Bf zEMW#vg>oE@g>@K0W=2fC++Rf*%iv5k_2RYJ*`wz8W$|@wGmh>TjbOsNEMl(fmGRtk%Idzve#^d&4g00 zA1ccveJzV3%3^~kAR^Vwvy12!E1KJy%H51`=TYcHC^1D4gV6_x!J3v=A@l+fwJ*4h zsoJ`LVzL-2QLHjw<|#1dWca>#FdC;Ue%_Fp-pb~!zQ<2ZZ=BH^>162(J_;y%-NWJ` z`%!0UFv^9H5*g6c#}U_OCXTlDr?Hqa%G+PE-sKF&Y-x8%75n_eD=6Ld#6HRa0Z>3Evu?C!YV zfOKFEoY-Q05soDih)Z-*rw7Bt;R+tlMQPmcGB)ET6G`6q%Nb?J7EIoEkUn4Ze9UYc z8!Th_uuFWgQEdw4lwmtnzd+Pw+^C?pUFP@F!yqg3^Pen6<(@ zyTq3PxZH>sdr(@#IgblCj^JiEf|O}u)W8}{^f1E;JhpRlw&`|m7tl*c=-V~{~kuu1(5%H$q}zBiAG zEsu&eM^9Up!5vn-@t3qfNUB(yNGd>DrqXsEn6w9_IdPAFpkqW0m9s2qFVSz>9wBp` zJ#S{i#?3kFzpgWG=)%3VI&%z*1cboP7s6dmxLoTbc7cV8F6FYt;{xIF(z%?wmDjkX zO_^#72Gnp&)7bHuE5jE#N-&0z;#(tp(kQ{Xm~(O`&|3UaUFxLF65cN%{AMn&4C(Xr0Z24?k2T zYYy6>F^q4phCi3^$7h;~O9jEn?JN7bljkV?+5UNW<>xj3{s#s4jKPe;^N0eg2A3W* zZhv{wM;GWR>Eg(^Zr-Rm^CI#(l$E#713w1*{{Jd7UllBAX1@c}Ouqxv|7#Bm$A73T zx{4EW#Eb|$Bl?PmEWn-2B;fx-fK3o1g9}j&+qn;N>zjvpUjtZ#-d>u8<45(Xd{tD{ zTQ|_C@yPALaO=BtboMln@i1B`t)2_|tD8BRfO$agZ;G(yew9dwO=2r#1dg}Z*?OWw zmtFV!SQIy8lIxaU-%t)sDjI7prwq*I=+mOX*jZ;MsNo}`J;&~j9h;juZ0Q(^N z(AmG@y5<{T_rEuDouDrBIC#d1M)v6DhDRH{2xSqIU`p!PZ4-&<`+|mYu}PkxL)`3o zBR?E$7V=6w&sW-hqlD7Nb}D{%18 zJqlYz2$w11E5uAWR*JMV;Y{lXnV#6ceo&$|xolnuya&FVLW%3s*nT$jK7s$wp3C0# zY^&I>hg<{Ze}fw}xBsswW$XX&9jn!Be+R=6zJCcM<;6(Yfsz~|H%dy7P)9_Bkyso# zbV4atRY|DRHJzPsMae(D%$+Tg^Xz9{d0q6(4?GVY+Z#cx4H{H@Ihd}LoCYBY!O}EylrzZCSYd6tQMLT$%0hmFb>=)&?O*Q0u8|!a$=>O z>om?{TAcD308<7EYQ9@RSmLx)`7G$|h z>6prw-gtTFN|+E`sd+T83w(6xN*Ksmrq06nmh2E_ui0}-*eO!=brZ!BKJ<@WqE)ky zMZS6qvkU;`f1Sk8k@PMokeezyCb3L9iF$ccabh4v|6g*io8Ek>+1C=XQBDmf#c>Te*am3SxN4 zquMd(qQesAFhc(*3qXevWex8Q<=@k$YcW?7q4B^{j0Q$orl_{5D^=xx5Mq8p)=FD$ zN9hx>zp^^1Ku(=OK*t&qM%$P70R6N}C~m*qq4ofi9~Sw418j_?XXhkiE-4|1^|v&J z`Xk$5HxoIiW)e`|5)lqv73D7hBs%s|?O2%90S6WVYi3)cZF|w$`xtTiLR(wFk zL%V)KX?pWKQ(G@m&Nc5pP!BPE3oI|=iUDOqaEukC*M%WF;e&3>!r88J;t0BvcCFgX zl_{KhqrIjfHO1&Kv+4QXbH@j>jW)~UtVO{Y3?gX=%5CQJ30e-EyK*~t?CwfHRLb3c zdZ*tQWs9+pWf!M-GVxRk-`^|a>(PZrgjAoZz>=O{vcCyrvJezfQ#y-uo4ojN_b`lw zkEw*x@$qR2K}!8aet3-qrRzq0S${{9BG3vGU@*Pdo)?&Y!c&nxn%1O|(#P)a zae}mm8?{qV#)I;<53GD!6KJO$*Ki~%)dLO zVnj3(UZ`$)Jvi6b-qL*3)An-}KWV^&?l?{U{K^Uu0gpEfO)FzkZO1wqBDE(p&P^i^ z%Eaop9f0ZWKkzIZ3^Y@f(}L%2FWI?ei~Q$k2>W!7ZuTIz)5l^kjegeV$1W^**=co_ zy9lQ8u~i7N6;Si)?McyJYr(A>aNfIADQLRbU;Td^MDZi zAG%y)D85UU=uoj?z#OHIDn_C#ps9Qxb@?_oXq;iSL2FgeP@34-vhl!*Org~fymMu# z%iFV_7Utm)@D*-uHa?XqXzq+rPHhuoEE4_VXr&NTrUDpQi>2>DP;)?+4r!nmn=Z-^ zPhm7rH=W(=fxD6cer%|bm;o!WiqlVqF>B5el!c}t0ouCV3OJ9?xRz{2LAMGJP3cuQ zqYbQ*yaAfDmkzK#nmui?@;9{EFb$bCc24M3yIjLGPp(VF9uTmS4$WZHzj$U^3OBpw zvb@1qcHB`vNf=D0?ON5~eqr0FGmS=HO9$2Kho+pZt#LOF_s{+I$ILyX9xLQFIGh33 zp}2t;%GA87jo(3y;y2F2DQpDeo`E+#eRSONGjRTb%2KK;bN>| zu^emGX)0!=h<@4XTwHv-ZVa4q$Heopjj4k@QJy&~t<*QW)~w0W4fhOc#ITODZjG)WQ^9aTCMt?k9fEeq*qZhyVP?cW)_Gh~YV?hMbBF8+ZgKJed$WsW#m~ z@hL#Hvq^~DOKV#=NQmyPW?znpnHz!{X76l>NzhrZRz0(Bg&j4}>gyGp%~p#glLCWq z07IomTEj@*B#PG%5+Ys$*@kwk97i0jDF33JyEr`iI=Fec+;+|UsV`;d3dUG#v5)|{ z1$dG+mG&ijjUejs(#hEC(C8nK*F~B(;p&u-iqEL*_Gu0WVsepq31e(qH;NB)#Jq9k z#@*AHB7UtR(B*WisK)5?y{nT{^3n^#RYj3AU*MQ&RvgnXB9l{oj)*K02f|PmlNrxa zGniq`34zC&=Yyk%ypy%ys+3al(>vu9#oZ--Qn|?H)%Q14l{F7#jNq&3D+iSw ze9aEpf$or?pmw`oB^k_by{4EXhQK1avTj9p7 zX(~HXgVzRz$suaCJE$fAregQJ#0yHT%HejB+cAXBf7S9%!uf9@*V1_+Xj7^gQsBw{ zL&6rnv-%VJ&zEmX2Ml`m9U^E9m;hU3VO?io*~nTykscQ`vXBF5kMn0;LS$0Shr3Gt zaJ0*W$F-3(gKnC=jsl1MJ*`C`&ppOjB@Yqa`{9s-4oLo{0{>+tuF%TepGcUXcj2Xg zv8(cso(Oyk0WuT@3R6t=ZcJBI0x*a3!$QGG44ChRzbz;~zOkPX$6(9&A+f>gB%iN< zIckKJ=day*GMmmc78e^4NZID3+F51wih9@(bn>JiR5guS3+Rx3(Dde^P~xNP;fmAL z)$#?Pv0!EMB{-e`gb)Jaw|f}_RbTCe&3}e@E}s$#ZH?LQpGA|yTv|EN^@b+cJ9rvT zlwU07<36PZRz?BS#NBB1ac7ij_AH5$Ly^bF%FR}Cr8;^sJ4z!^7C${-`= zbmp_9boq}D_1s@BMzu>d;x@!qEqmaeraHjj)SF5@7l+Fy;6@fb3l2l{kN4i|>nol* z<+duOaw}3>Z$DpO~xe5m>m`QK(M@UmBB6OtRD6!3dT6J0AfyBv;}@o7J_m2Ki!3G zy`j!WG=SC?f=;?(Nrlce8hhqxGXpIptMnhDZMScu8`hfc%Y3TBb@xnPB&4TT6_rd z>+y5(y8S%;+I`g*hna~CJyxkOQn_6d@OKMVag2{n!rK!m} z8P02I5Ff_GFtCek>(W0MYNJ$gr&Ia6vzm_8@8aU%_I(?uM;c!S^`hIHwZPPSW>ctB zGeemRSOPzd)%gJ0UwZ5<9BQoJF&7UBdE zgg-ll!VN^K^Kpx6_5MC^_lUHsI_O-1dTxc??{@#4zRoum_9d@5{!`UE_QJP5d0Pt; z6q_VQc|3CQ9o%zjursBs7X*Remu!Eca1Lt(vJfV<(Xe$gbUrrMKlpb65Zm%(*%Ylx z_;GA)4KmDFjC*!noWd=NL-H)sJEl#qppEI$UWUh)?t*cHF3ByGzv z$NBjRk97)Kqd^E{2>;O=|CGnRt!W6s4JKli)p|=Ae&P_DP0{PzRd+P`5r`{>P-{|kd=0O{_2@6)B zCHypYaidYf8`|t0X}Yo(%)<#}T`9wZaUoXHxB^{@^0A_mrnto-SS=tVmdMpQse}1y zAWA}pGB!=tjQe+lH?Ad@xL2m4sq{$XAY#XpKDX&w5RPW`mVKNE|0Oo1{s#}pihm+3 zwqE{DO`>F)&E>P=2=0;*ZU8biBsOtznxEuZTW9|F>oqc8m zU`_cG1>09P2(IKdOD;ziD!_^Ej)m1J{&Crl=#0-J1>2;%Ql_rnBIw>Y;Lu9Cnky$UzB5u9=;J(DX zH2J?{s&l0)rYKYI#(R3)uwVH3c_Qx8q&;{yuOtO;TfiTa+kFnbws|d)PQMj(HJ))) zI?Wy8E?Aj)YfSUa^CUN<7Aj7nbdrpal!s70sJUanFn>cX9b2d|QhQ=!U zlU~S6>GSa6V|!-xUcUn3o)f_YJAlg6;qfOn=i+b>`JMW=DyHs z3e`(zGLavVqL0(N)Ag~*kC0YWXuDzutjQ0*jtEbG-`j_|7ZFmLa8T~ss#qW^pm)^q zp)r5oKJ2OMzIUw}>Am)=GrzLBJ;;Hdo*fCKk}H92cFxY-37Z(Iq}f1-$z^6S9R^b& z*gkEo&R;b-$m%!r^pyvVHxAxVuTNDDv(fy8ech?RrC$7r->+99`X|W2JZ{?NCh!>q zAAbS!dh%W{?4Ic?&mdKuM^tMCmn}8f#l;IZaC?3}*m+tjv*f3yw#~Aamy*gW2Xyn^ zk+Ftbi%(z37U@gv{FA5boF#g5dC8%1h5oma`Fwc(3JS(gf<=a)!tG{$}i!PZt{Oz+g0_;z_$Mc-VNVQhWOCkS>;L#AuV7A;0)R zy5v7t!W4yO+xpc&*v>zTC;9Y;7p!945W87==5~#Nso~+`?OXwvg(E0_igl!|LT?1S zsD3`o^N*rvunRs~&v2#$c3MbcGaGo{Kq0*+MkI5}Ui+E#|044rIEGZT2uThX$T+DC zrdII1MDm0nbmK;nDqys}MQHNWc0=*+S6>vsA~gP)6^4i>`b^`y#M43m_j%T#K7pba zRGs-6knI@AyrAJU?esxv4k%jak#PEiq8P)4N>=C`NpO%!?@Q#=iF9Gw@()N?RX;xG zbaK1jG-@koa~A_{;KnF>Y=^TehkT1hGSdbxv1BN?Pwa{3>E6bMGev3xkUd|97j+O2 zzr1c>Q(U`sFP+WBDzGrwvjU0Mk&x7UP%wDO8hH~vkddczXKV~lgDTsQ^n5#pB(o}X zqo25;gEqS4#Z^HJBsP(FS$wiYv8hiLGAJ#~%(52^hr2J6q=@QG>b1fIA=RsrM$^#rCuX zeZu|4=j4NL!xPTgDpgM1)&Hz>47{xtaT+3aLm}w_69*eucP&Ub?iw;m=8*Hx1B8lD zSu?nNwK7B`6bKx(mymhA{}2*M_NI^L#o)Yw31;;y6Z0aIeQI}@ZI?AR?A}-{d#FMldge%093dGlJJal~cT#wTPnF3z)&WVJw4s9q8 z(TgaR$eI@Dc>K`EL?`E(l6piSBXR?uR2X1actYmD31*oMo}?re@)~An`<%rfj_z!+ z8WVxYEI%}lpQzY66|wr!`Ul#>Sn1iwi_sxN({x~FWD0`(eE*D`ird0F7H+G|u#JbX z%?f-ea0g5MdQlEJB5>8#E-?OS*uSck44y%{Zevox4k+N)-KJ`|0IZTY_RkA4i;^P$ z>4YdeiwPa-DOZpN>?yRThJB~C*3~RPd34BHj5YN`ca=J2FbPRmf9@a9JtC^^33%=}BYMz;3s%fEDnh*=-H_ zK=D}R{C3{FMOtH!$tcw9t@IE5d#WqktZ@J3p;%gNIqMLqD*L=u3X9_xoorM$e6h-F zgOs7*Vtem3gMYRC@vZ^+nx^yl=3SuQYdZ&1aw?#6LZ9MU*=&ycG0&?e1Q`P9FZ7708jzx;Lh)+XLApYpq$M$ zc-Nz~cINtu&eO4A8}+D1>V`cgb0)C3V+-R+xM2G_Q&w?F`H5`;1$U)_skt0amIwD2 z*wwoth8khTW?6l1q%JBZDr$rBr;8p>HYH1=`bDbp#_pS`Jj=%{o?4nX3D~@GE+*2Y zW?77Mh%QbwbFf5_|LgVoi=O>PHPOtB3nQ7!YxYIV)`1bDXrrMFixnq3hkWDs4+B>I zY|LDJd5^p-+RnKv7@N(+q>U^bo3(-_yTuu}ylN77s|DBRl@&uXB@a5L5_^XvadCf> zN8SZ(6*dZ7*HjNnnAAndx@gQh4+rqt4th#bpN=tTVCAB}Xo_MxU~sah%wMoQkl579 z%Bl%7OcfuLQEjuT)^6d)?;ZN`8Ifx-T`JZlJ52Imxm?{J!e{yyb z@~OY$KxzK8U?A}%XhJdo7?xQ~zIr6bfSA=TDyXhg%O#?4ayBv33!k|r#kRYU9!ym< z^Id=-9awa zyTZGUKc(eRMPpH5kNoE_tJ;FOGIc9iMrlL;{Ks-lhLEw!A9yztZRgT$YR9F5eiEit za@e?I6l9j-I3pU&&8l*vy`=VHZ6E&@aJV1|r1+1AZEVD$JGbe1+7VHc0g8#`*SKp3 znPEdHYVriIaw|lzH}A*W5;Vn2Q@v__T^+ziJT_2V+vZaP%MJPjAgowHtR*+DJV}5y zYGy?z`=?u*9AX&1i})|XzR#b6v)O$&u4C)2+1%d>X5-ob&>vy{e7KO;P-c6i;+jab z;l!^#eWSzj*}F!J5p$@-emvv7s^oKpv|dB{9GLh@VY_9}aW@d&sBB>XIKwU{Olb{~ zNj@aU12LXd&pI<~ZrnlI@sqr66{P&ku3ZbLSclTEj5X(kw!m80(RW)haQ&s{64GZFOVRiM8UESW zV0SRB2?JaLF0En3D z1AJqz3RkOME1?{?amm>Px4NtF=--;)iQ$MadpIaSP(kuQ!V(rh>}OPF3>p`$Bac3V4y3|;X2_EhA=c| z9t5mrlN&+jj`)rlr?9v#GK5A4ucEfBbI2fixM>*QEf&B+wX{j=fa46LD5P#i%`m5F zJFAuJ6|>K@oEb!%lU2AF7H7Znl>%QP4z5I2_SA!?@M04Kv8mF;27cvMwcI)U+j=`O zKr}Vx7jtw|XiAn)+bfF>B?WJhA^dU5EO3z9n_EnXx8=!ZsUBhDpp+?Nh&RQAvxby- zNn(y^w<(?&eVi72NfpChlyN4P*JE+3jaj*rm~=K751kZSd(o_4#w5k@q2Hy4b-Q)N zs`K1gZMWgm?en8Ym7m`9eZVMT8yW$BQ$We6tkox7z z|1X2Ek0UcDAg!NMTdg+*=) z+>LVG;GS4fZepRSgJ_x*0rd1cPZuBtXwUgf1@y?rI}PQVOyAp6;5dir^-WEr1!>&X zVx%WsWsQ0@67ICjyno*>4B)9LEw@axRNT_H$+UI*9SyN0YhxFzaMhCMutP2jFf~2L z65`IN{_guL`_A)bcUx8o2V!4mvh^CXS0;bIJvSbF9{)m!N=eE9m-T%s>GZw7zI z&5s|m5mX%zgyHVz;phFidr-@slcdCsz1hprF?JSpJ#m1=HMC3s2;}%)bd3`b$DN%# zebTsA9&}V5bo<)Bk1}$f9D76=I{_CKTh}C42>Yj*MHb%N8zQG5obcxM@w>GN=YYLH zhW$96W#R1$&Mf&Lkcy+2@c#C4)J#`+Krj_$4FpT(jwL{)P5y!JsDO#&`o@v$ON<}) zahm9L*e<)`8}o8NH}9XNE}E-X^oEi|d@N2LKnX9~8*k};{U8ySRVy!^!@4&V9uat=VR#y^M5K3jV`>aW~ey~E=K zlta4`F%x{2esMef-{ViHBCvQL2d~ zjP%H#=Ep|e2p7c~`jM^_%hdJHOfe-#fzL@2vt4KxaEdf=%SN;rq%nvW|7w#mG{B8` z)5bxZiFo9KMxbH~ZsgfIbb5#2j<%$#f}o zEX3XUs9)RlqPSWM`sUB>)?=~L9-^iTBBRiaHNC*=0kjQ`0m6{|@merzMB45i>(!Op zDJWipsJ(jr397V5NP_KZaQm>j^})l~K<|AjeMdTUKC*p!WAuuxJVFm7`JdSESi=N3 z5xaVZIhEiXTwzfjlF^)4EQmY4sS`YTO6^w*Ty4mabTJRY&d&H#X3bsl8^=;r@_K|e z1na#rcZuiAmd?yo>&GDxk{VX7Q!_WB0s4DmS_EbzS~9@7iQ=%HX%gxBZnW57BYiRL zKmtUx<;)c$T9vT`GDJ*6qWaW((wN>jrkjXkhsTexL#Nlyz%_b}=p~%IO7z?#4O+AB zMh*CBIY!A)^xS?;4z>PCK4*_UjMcyef?M+E1JsGU9Hhr7eoqfGC3$ky^WN-HKV7QcKVM2-LG+*6tUz5#0KfkpMRL#epN zrF~wKgM&wwu*VO z3SF^!pF&x=+RQVFblk+FY-!^m&HRRLdU3Ld3uiVNUhxm=RI?V!YyM<|#FLUa!O2wE z3H^_EFz)^zP5+khLrgU4G!3j?i<;ai85;(!ZqO$dh&)*~b$dE`{<4r*BwZuw9I_N* zg6T%BoyC9Huv|FEtxd}zV6d*b*?4%%p1EoTb5Asr6K{LJq^U4T%&Bu=FE@d|B_&+( zPw+hVaIxQP6n}idfEkk0nz7)XpG#YtYo6}}(@0I^^UNl^{1EDJax2xbkieeIAGPW? z)3Bfb_(eQbPc=xr%$Rh`A%1Q}$td&~a28ub^t6jBCdg`*PWthBCffS93>d5%G+>jO z=K}Wi2mMRtI?~n7J17ZXOmX#4JTzuPKfZkAm%5j}A^ruYO-9A#wCT zYbC{WXQ!$$!d=6?$oD`rWUAjF&WEs4##T*>)-_pme;Nj~N50%Df&Debau+c9pK>+M zK)+t=D9X3V8ec7+N{6IVBJyV;5jQ|s;lTDjNn$jwQx#MO@eO7!T?CP`V8zq0k_QO$ z-fwU!34r87bZO24Ny^c!AC{M`zv=@S6|p}MiRKB2MgmgGvm0uK7>#=!uYT~d8yd5I zo8SZ?P1x)6CD{_DSQyEpfDgN(`1!YwDgGax_aZXnr`<=vliUkx{kl*uwD!o|eOQIt z;WPW0NsB4DSBz%!Fqy?3EVXM{0Dz7SyG35n%@1JYn=i-OKv-?7H{h(PQM;ST_kmAo zZSvZGhG&3P3A#Di?R^8iUB2bMpL=tRFl=V*o+x-XiR9G~x!4MBOk{R-QA3t&u?}#g z>YB0FZqBxi_6khEy z3*UdR5Yw0D1n8Qod4A77olvDeK=I3{YxGC$wGC)o4((EbGaPWXB|L!hy%@oQBK*?8#;b}30RCp zD&tsjP*%SNF5i2c28|GGkR%P{V2dEtk(UabpmhRR@a6upk8;=T3x@>hHmyEQ;`Vlil97$1-(LISzlb4u8q8K4Ecg z^O7ihlB)*H29NP7K<=dDOCs^7g{CT zMPOA!c|;gxoTF$lR=`x4X=;X?r|<=Jre~Q*zzk?ag0*l?uwpw2Y4#d;WK(^c)8mGA zpnw?>+Jk2OPZ=(OL<_>$6e%8(HH(yC0t-c)XIMB8A%LqPW+ixe1?*^0rE$rCO0y}p zFDpF!0DKA^8iSKo?QrR#3nUQWn!?YrIu?}02{SKz0?7_oWMmE@x#zwr*Ep{2tc=(( z3L50xn;hjH-<3=8?o{ACsKih-64rh$+J6{D#v-+ZZWnLiVg1Y1pQA zXr|x}Cy++X7Q>db1*ho5LWiT`MgeRrOZNqK#)dAbKO@6!go!JYsfgibO#tm;S-b@C zT4M?2+Hl|Bc8p1U?Zf`(_~bVQkj<8G9)1TIg}Y`Mf)*>3z}w_ zThYA8VU#LFV+5uX6BGIMRjQX~XMay$+0173a=srvHy@*>cIjq*U#rSbN1_f@P+y*1V}EECiEGGJ({BQEJVql@VuM zN~g+ovBaYO7CB1hKnkAw+JOL8rVhtlJwszQ58~Cb+xd4Un@>@g6sk@ZCcZlN@LSFQ zP^pNDVz8M|#NcMdUCnKhp7U zc9KlErEl5>xzTqf>aGpfl1=^2UYkn)^#tXBlN-F(mrJ+xL&Hg4XU;yJ|6U_Z-6T$| zkx;#kxd>H{QgiLsw~Lv#E!GM=;+ZAzyQi^@GiI3NSN_yptyA6o41`R!qvSzc-Csze z^bymEHYs<&NDe1fQ(Eq}wF0rH(B^ki3PlBfKBwjqa@j(_IOhr?e8smK_5 zKI@t6$N(jSazipgckDre%M0RhWN&+BI&Sdz2$FbB-B`kFlB3!8 zS|18aL~JE8|9rJ5tny5MSA4X_^u?Y znXg{6w(S=j{RMwCpu$FER;m!|=xPRI-<~*Zr;sm_dS#h(ui;+grc$oUO1$$vaxooQ zM%&8G&A^iUs3L(`E!EQD=t*Uc%E$Yt8gII0jJhZ=kn;H=SGU86QT9C^Ou9C8twD6$ zN{a6?4#l(;tJW@vP#L4kmAyI`g7pNl6O7Yj1#`0hvKUS%*SgBkieh5bTORm0F}_?c zZ4^ze68LQ02Dz_AsC4o)ZXCuR4>#jO#?I}#9{nI}tgIk65Z+(cNIG~9+8N?#F| z)bv*zZo%c0&YUdnUEws@_`b^uai%XeZG(hk9XTB)%B6v7k&rXNQrgPjkK8daz)q0r z34WJ)uq9#wRkg%d0KIinEXSnyCHOI7uM<&bNxqFgytH7-Q~H|T6W5BC;_Vj2;ib05 z0uX(TM6U^+PMl+<9&EdMo~=fAoh6xv>h$p%Q_lPLY_vj@c&d2`;>zpHN!CDgfjU{k zXS_;=cAT({$_Iw#Y$9fxu#{LZ2)GaY_(R9{1*Ko9V4?!0ae!L3mkdkVA>B1IRmI9_ zrE&!FT#jybG_v&ksFiti#3*Ctywg9Os}D@Kqa;Q-6R-e-wPeePLJLY9Z&L9p5|i)$ zL3HA)uB;F?9=Mg?+FksTSIGVVatsIhIu7pldwI!O#!VZy2aIQZ^Umn{tUO2&eO(n0hGHx^~x)e9M_+C=ir zD99suLFB9H5V(@x^Y_X7K)#3kFb z`?f2OWvYY6kXcRILj^93@Vd}H;?;mI;f$vd>Ew~iQm+rrfXt@dE&0u&3<%()3LBlh zSZA%fs?K{i;qHT5*CuNpkHZ#u-}k$80L_3-Rc9GBZ?s_zBDZILd7+B2;)K$h^QEe+ zTMceUP*62~b0XPWRdRoP#`F=0#!Jx)+G~}RFr+?XNpzVF@L$%B4w=QUBAR^@E^-$K zd&+w>DtsxSPJfjIuR{@Rg~Q*U`!~q0y^3M~$C_1WL67%Qek3K%mz8I}qj|k*JG@0m zi?m86roW>dO(C&!eK8VIad;Y%ctz~Is&@P1B;Jz5`Na}biCnJ_%(^o8Ni&J1V`6My zPEce()jCQoVPDA~d}Cs};SKk+E7TK1V??{fT%u#-t)w}k<|X&GycDT*O>V(?u{|0) z$vA#bH(3tsKa62+B6gnNScT{fm#^WR!2Zh40>x~Zp)!Yz$h)h}4)vrClm}xNI7NS?S#2rpH zlHs7LVcvJ5w^GOo`(g%Gl?fD>osug52!#6R?a%l9Lack0L#)GTN2bK!X|1FAYj0R) zP(yg{GW2UmGc;+nOZk|D8$+{CkE2WR^5pRcS+c2Zk=2467$ z62x3yXs+`7zV@B>2A>0gth6;ZQ*>!475msFxs*-Usgz~;m^BGj5luQ@jp=eMRMw-y zC%2j?nq~9`TUV~@gnUf8{4Q;HjZU-?a5iiVPCoY{TLOW^#@?)~29tV3 ztg;f7MQBMG*$MZ3&ea{PT87LLHtc|AnDrRc$N%_b{8;JrXSEFGT&g_P$PO3a@MWd^ zvbjy`+;vakQSnl5>__u?vw$p=P@Jo^T@TlQ;}6*KKNStnIAzt2Zre3DK8jE5gcf=T z)Z@t3eA$>hVx>*oZll&upo=%5vMif8)t$;5!B`v6EF8vZ53$fcap<_~qaur4!*XVt)zpNoTvQhJ ze6*H88x(YHpyvN^H+H9edR|UFKtq+ucBC~L-%H?$`XdsjWyIi^a-2a>}-dqnf^i>Vi z;>F4Ft*e5BjCV6X!XGV-=-1`L{pm>??`ZCFhOI8N(slS&v%fx_1&)E&!YzmTV!(Gy z3#?H@Yi+!nc<3UM(mWK)XjGn+&(6s|vBf$U$w1H5t8gzkf62b~b6~2V7!;^;8?ugN z#qsFbU%=Y9D0R{Xbm`lt^LsV0JG(1MAN25-Vv%-p$+xV_o)(H2g)95<)EC&TRtPWoCyrd8N-Y;r(3Ufc^%t_o&lGrOPD ze+@&*&+JSojv!|9#fL#Ma2p_`kHV(;7BO zo2`gH-e0I$m(f(Mjk0b%|8h%57@H1Oa@b`|r^I;NH!vcBNZu&rK>50cr+sd2fQk4b z6s=`=7j$GuQQITDv%UVk?f$37o^{8D7W%jGQmXogk)GZw)K;RZBLN6eiK@c@L+?UH-T0uN z?e$35&ZF7rSv4e>nDoDcQv(wZfBI>fMU3QUFRN}3WD`xq>h`2kSzy^E>g-~PO0^%} z^D5O)6ox-)X>Ldgd(}u$-E9>QO$pXYDJ!SS6MOD&5riB`n{(WauYfz-67^Ss? z$rg4iTIicM+w?^3%e4>?r}<}LaNp70b&S52-uLXkq^kz`H;vO*NHn82V~r;b-c7!g zVzI9sZ0^pbMHGDmx5lf&s^ozPcc!)A#XpevLcO^f}6p@^ISo8pV*F^EGtiqjx? zp%v6e@L~2F;yX8tp}y)mbr^Umiq}x1Dq>Md8Au*jsv4XVSUdD!8>&o`D-t;cbD)kA zd-4USdDP%z1xaOBE0@dUlg{tKc8ECfMz>bN_#tiuXldzv3AJMV}6tw1H$9_2ilp+LmZQ6ABhKAPC?h))|+Xq40K*f zFKwI}`iJ~pHz8hD=ok(irhsfV*tyg@uMb0ynib*;Y-$xB-BU7M?QE<;ew9b^qTBsW{I(j)&%Vj|aZvoHJUHSa!&CeO zR`9|MJK^om`<@pqXdC`zztM7&ZHet%I5+n*evnLy(1dWxHn%mUG+0Eyv(O?5(c&Nc zYvJq?L`z|yIKasOw!8k&ZehD4#10=7$J)!!#q6}!k6d}We=AIfL^=@)E{C&qnIHz(`97OfN*CGpD~_PS?@Ac zins}yRr=PDx9!b|B`FyiMMqV*!wunnG^UBdSdr><8jJPQ9mYO*0HBzLB~Dcn()heD zKHxx_P^UVzWZ0l?p3vTbXH<{jHiiagMc>ihfn6ubo%5EJh{S~jr)CkzsH|&0kIIUE zoAiU<8(I4Bck#;!W8%)$V*QY)De^RRr}_b8!rgku!I^86jkvXOXFHUNhwLF^UMrXQJg*yY z;mlE_<<;(-Mu&kCVA(v@&TH@L!H}wWVD;@wnb9I_9e*R zyrNA0qi+O+Dh8fey~Xyp<7F|zGV%D#Fy}a+1&1AIC{<({Wb3A}!o$)SU4L5IGnP_& zh?*&|=-GFy27yanXK*xyT1MLgd>S6qE!VXOQy?4EK1I!HafSWn!wZ19m=J_oR+jS#M{}RnyWBV2dxZt`A|0ZRt^(^<3kB}eAd+u;h4@q(0 zk44kaY}Vq7H1U-)4^JP1K6<)bwR(P$pa}dfu#MnggTG$QpMHl6o~k5JbfskxD=^68 z6fN_0^&#$k2k|uEX!W5qp30qqir7}UU9qc}EX!xS(H#0B69&LJX2+%lN_gKb_Wk5* zHUsE{%dQ*sRO)^?Ys1cDxaHgGVpna-O0M<3-R&3dLZmes@~x?!p)|zGAHf?rW&r;r zYv1%T*WG}WeJpG|Pmh3pcVto*>!?0PP;Wm9WscL{?FbvNF(=bpSH1 z?<<-iV`}gINcG#F9jpEw_r2)O6MYzPer1pAsZgp71^~~P&$otCzXkO+`9`YE16X5b zveCaFiLAEAb=8BMI=KW~4DVZPL2k|iW`UiDNiksKdS9CQ0<%2~5lT;+d9f-$ORa0% z!C+(PTqQc>zn$D!xysjOZs;0>BR;E$s4Qwo@wtfIM;k&i?fyFeftI|6e9{T`>hnlS znj{e>YvXaIx{v1gF^e2YrWg0uK+PJY{d|6GW7j50w(a-d?lwjx!!$9P!uSYmUC;bV zutm|bfLs0!Y$>m%jss|EozWE=D!Q)ZiMXt0fi`g;&##nrOI!S)-94|K{&;2{wu}`2 zUzsz1Hw1CkKP?5-ztLyf|7&~I#njZs!1g~HtkdfMWTT=mzO6q{wD37goRLYbRSD~$ z8?>8HC^`+UYeEPxjXsg^DRQ~ak_RO}yRQjuWK(>KFq=~k@#36`V!p(EhsQ_3JIPZj zC3UB%Ghk)2XN%hNawI*LSKZYY$-1bZ6OJ+|l`1YprWVeQf_=-8li63=tIBCIEGo=2 zW|4QEIy>c)nHZVmlT)LA#j(7VpKh+RqF(Xn z$X7!oi_9}*_{>%#PreXDJR7K~q#TyGGOMdAe+p<*ABXy4s>7#EAkBMP&s3nh~L z$fp8Fhx3$td*eKBm#;aFV=_h|Us@_Bn<_f>7I_4lWlYA)H`Q6i_1HXWD}z_Q&2bz+ z_zs5%nfS;fTuJ>b9eP?*SXZ&fVNJr%S{GL6D!NE|%Q3J3B4rFFQk^$nKN~QkGE5m1 zP=_e9qCl&n$0H>m8X|Vr8TY6n?JoBoWK@}<&KsM_t)xm6a2RGL39|qdVm-M+-%_13 zBCVIhF4NSyJp>uz&y(`A5cq+Uoq6HHOZh0U$Sl6xp-B@Y{X}x~87`(#cv~^?FtH9X zc3oy%*EhVUkgH!T0LT(=MfS27Fm&!tc<_$-xg$L<$-O&VYMX37GJPVFj^rzOQ}A?r zamCjO%mZb&1V$>pZv8npH-tjno_@%DQeW$}m6x@G9Os$vsMW$21!hl7jt#4PjG%Ps z7X+TvF?lNrM#L6|P64!xU#zDYvv5cb_P_Mww(ark<*6T7#RPVH zln%aJN*I;tnj(|MLu)mt2h_LN7eJyK6?Jur*Me7HYf3XtvF#y-_d}1ZxL#8l(hxT! z9r~WbHcgf20|Cq??KP_!n|beE>HqaJ$C@kHA!^4WTCWUm3>%ndEg4CADgMl$HW3HX zS1blO<1n)=DI~Wkt1{KnX|Od0q)!0^`rpDVg~5)i6}U2wTQUIp&{Cybayb*MxkU(abKjE`GCno2|A$}qwtwXPdeu~<0QMsJeLkTTbfFqKtbZ&uk< z_fnaTy3Aj|+*nz*aVb;+e>zK8qS6>oj3CLX*u2SS`ts;sSSt%kBwY*YoohqRZvu zD$$gwp@rpvNyQz?bs(KAMunKllo zm}LSpKRQT@``xH|p?)k&)1etq_9ovuvM5dM(I- z)T9947w*^Y5Wf7~DaAEL0S*^B*TxG#OPk!tKF#2zjC=p-b9aj!@m_6+rz7u& zj)^zJl`@IbZM9=p6*C$=*oFTBL~{h+%NA`g_#S2;!Dp(;6BCCSbdSby?7{zAVjl{= zG3Vn(Wz8#<$0WV0x>0tR?`^I&0LB)V`w?1#8tg(AL(c$5FqPw9jq3%tO z%^4YTrdjGhCh7j#TrT7VW3&!(8kHuF4L#s`YTdC>*w@nnOkvNwlpCt!A<&Y0xz&g) z^kgz6(lSk%yUb8y5Ygp!cxX<{`7hCIbG_pesxGk9H}*Kr!y7=*&Fg^_dxF!ZvkrLc zM7xf5@OW4Mq9JI~r%7w@cjyZIPP%u0C0wAUl>Wy+7SgCF+RMi_SHorLIv#^vxgGk#7#I=>2W9N~YCtQ- z$G)2m>?K~#!-}OF29F_cGLMY}*KK6aw*0lcYj@mk><}wcHfSqdpU0&=5O$uMCkot6 z&gpfi_aEdg4~~5;cbo2F&HdtabMg%2l@Cs$!))v`IDa(lr&Ef#0q^wZo6jW6WK>0P8{n28^TZxT3^%va)H)7CAUi23jX zeD^DmZJPsoxhGBC{R{@_&8&duK31L0N&4H6qUl_3<#z{8`6Ycf<5=8-s%uwUrhvik z|Iv&~O#X2A{);*l|AQ$}{`VEY#K73Z(Z<03KaT$p<$t(6dKjLuzQAz`z)E8(*Nr(q z9X02nNS%$GKz(@=PBg=)P-3p>$gfw0)~n$O{~Tdn-|*tMX6->76|X9`j<8F&TfTm$ z*gJlEtbV++uyTgUgORIQN$I+86#{)QXUQg~HLO@{GA9xX;#gOalZk(cuIGG(G73Ym$W2-)y(1BP>$ zjhhoerL=S2U_`=EB3pRXE+6}}$Liyc2%X63t6~mpTk@v&X)=tB_g_(&@9x2>nYS)0 zXVaxgl`2qFeLY>0LncdH*hlB??l??A(6Vb!&SUyt;Lr<{vYZ4H?o*)%pl^f___|o< z3GfxH*@S)*bd{PZD;%$ih=!ps=@hRi9Y2QIFh@~e&)SawMVjv4F+?SGO>Mfcgnad2 zA#7ZdmClQTbw>&BS_F^5H8y=^GfEnh93AHc%nFlrkHum(CzwkIEsE^@-{0^5HnILb z&=fxkB|=y<#VnL>D)vI{WaTtlRM$5?b)xTEw43O*^>z^Xz8I4QHKrGcaFK7h?ojPG zI-hu1P5la-sBmYPt80!Np8Tb)S7ujkS@zw{z%Y~C6kv$8Ijtr`-vF+cfKBKW zWpq~^5L@x+9?Izqb^}#jbNtY0`c1JW*u%ZGfoV_hp6`seevq+|FaJdF4*mZlXaH5l zEV#@80MeBK0m%Nd!ktVUT}>SSqr8i?ewDDs5`QtiQITs6rDz-eAeA|?6NdmAUBH|m z`1UGOiq*J^E%3fX?aa^$&W`;0exK*A=cIthUX;HYN^os2ZZGbZxw)y~pg)>qNSmc> z`1QONb!J$&sFoLXW}=orE-7SE`dTYj#L(WlU_ZIKEt?goFeofjGfbkmU|67{HmE+i zXl`9Ht~OxOsg&=;$hu0mNVDWG5HD~Ds5aFrDx_C6s3sN87^NIN6{+IQ#>vr%m02bh zbDjYnoh(k20jn&V$bQPWBPI!KCX48hbf`vU%%~uhd5RYUkS5m&E6B=wbSgK^(VJHc zz4>66Zn)nWD3iQ$%72egN0@@Blra=Z$N)k`d88Om^hFeTXhaV&>{mgtkR>YFL{B>Z z`x~=INSX3bxl*mb03n_j2ABdmJ3IGDKwAEXn{t!jMJ;4=5JEx;ROYLWq>k_>o~Xim z$@thlEK(2}vjaY0Q7wg8*Q&2#oNb5gs7yUL=xd z1q#E9GTgxf2t#FhQ}$?3`m4f7fYiUGnBtO)>@%nadhnxisma8HFGw?4Y^YO+JRQXd zz388!I-I^ht9k$fV`|T+VUTYhO1x0E?WmdrAA3Ag>Y=bdhdzQckiAr5iTExC{i zl>i){jM-_SX`=E?tsVQk#~N3axK2t+Bty5!BO$*SC`VYAo~e;8>sr`M&$%N3 zjYNnj1GY?uF2F|-Xv9qcUb#?OXoRQN&p~1#KaTOiG>py(xAA1Mj1L1o{ded%geiR7`sN&MLf~e zKZNw+M3@B*e|7n$y7B~gt(?>Ee0?Esjxqs|nDi?-zXf8+OE3#Ps=ysHoTs=)rk(jf zSokZR=nN1pJ0Ydfa2hzqQgBiufp*a$xIjG7(7%8a@M?uAzZe;}{ai{S%J~r00s^ zV!|yO0tX%uiuja_iH_KvkL%%`C(SL0UoBF->oj~6Pt4S1^a3;bG=Sxdm?k>J7Ln>U zNf?xhOFrqO3_n^Wj_ zu(*gyqgc>wI;P&Tberk=Ke{Mm`^UBi&M~BE<-7U4h5zL8ieU(>7cB}`2$w`i z9j}&nS4Dw`x{U?G6t~WR%AC!7i{|G%X={{?e$ob;S2lKOljef1FFEdfuAkDPH-k%PUeT{%-rHn|P}7{HB>SKGrLt)Vkjmmb_kc zjQg9^c24aj1@FtFtdY2wv~u6)F3|Vu2vL0h4Ew80yn_6-FF5{%*vp$S$E9l?6Pu=n{$b?P)KfC77MZgc}X57s3;jy*g9-J3G?O zmkt--z$w3HnTDGwjy}3 zPdi^I;mXnjN)`$oD52;;iG$OZEOrP`#T%iCjLtsUF~?nD>We~=s0Y{8qP(g)u_ z{f9bbVPCqQJ_OfA6j!c&>{Dsw4~)_azhAsMKkq*<9R=z5PKVrZ-`bMUY=iQFPoNR_ zVb8HO@L5j@mxb-)da5z2>1iLl6qb!))9N{K>58toLAG{Y&g=0*X&-qgf$S=GfwwR6 zvd(+Nalc8_eV5p9QBSv0%?jpZVr5_#bmyerkY^sv9-<28z_KyX&Am$^iN8UVEbfvh zLB)?RR0X@6c#@MAbJC~|8@3fSH}ho2)!LX11Guz*NRx;S+X>y4Mcx-s<(=I%&$IvH zFX#(ggMLDdkgwa}N`$uXdraVj%O(m{be?$rqXU*wg_%|)OR;!{9~IzM;@FBTMg z1uj#IUwuHgf*!+|1H;s-iXXiBYovtVILO%coq7%IRW1#8+O)onnaEU*xq5iGoNMsH z{H9LUPP_U^FzW>vH+U}Oa#;7iV=y;?aSYeo$4*4;bST+A!C9$hxAjdBRQp4n{hXW* z&CCSZ2Akv7fI{9vW-NZeTU`85)RfBxdz%PB;6(2_{_#eoefy_B17ZXTUDr&%&Oaw~ zG}N}p@klT)sak1E9TZS)-ODQ~@SOMlWUhl5+OUC}1IvQFpX!=3PdE(7#Q1t5pYNc` z;PW2%k#Ky_uvs7~oF^5|sp;rX84aVHRq(fr>tN zSnXp(X+8EF1Cbe-f3oM#yH;>t`&L5cJBn?!0Tcfme-4renoH`}CC(GyjGuYc*^+)? zwPUlyRI61AWVtrFmpDcSh>n8fL9|WZiTW70>}o&mEp1tMGEm|ry9SJscP(66PYav| zgD#6p9z_ozYk20K_PZim5Fg_n4murgSRm2lwCP3FtlmeNcG@+?w8V^YnYTs$rn2UV zbMVnQT)N7XDQmJMMKaCI9H@wj5|OE0A4PRLWtELOn{j8WQ7CKqS9S?SSpLylw&Edh6l7^1b2pQ|%H|6lso^mj zqL{kbNoU}V1(9_hY}(CGvp1QPx*~hKLz4YQSrOK@+bdh%uLeBOCMRy~na|mEA`P88 znsDU=+tQ>9g2L2EOHz*fy_RCtwOij6T}Y#n4{+Rl`5UDVm1|kPaZ}HxpNJnR#2h)Y zKrYF2?_{rQE1ukIdmqo5ru@zs4r=mG!FI+Re8V#LGwMplDKJHbqu-TH{(d=O2v#Jx zBOJ>td=}qjr!=dRc62|?U9cu`DpjOZhI~pqFbs=G=gCtKCz7KZs5fSafBlX6)e_Da z?>(V>P)Z4VA1wFTE7M-VFDm%p9GM=UfOe?va`xm8tbT~4gHcm+rlYXyt}vM<&EgLJ z(4;RfE7)&y-@peVmJtdLxZlG}AIX0W|K00dOza-#G za2?O8HG1Mpudn>Qx5h~aWB{0#Mbfbnq8!N|pUyauxuYTHJ9b%_3B52Y$ndGmu-#Y> zdZm5AJ_<}skLhwHAlsSA_bh)Ye+s&7LGqg_Nu6g*Xfb!^7{nowtqo5*)A0!sY>Rd$ z_`0cE2PcKe3-Ba`rb@4pwFfVH!}Nm&9TCUmoy7?tR?@>0sap4H{jNq`S7WlpesEwK zBf`?~h1vm8{;|o63LBHjjLut&4}uo$C@sQUv$J0O=W72QR(&!HoSx>2Uq6qC6`!$@ zd(!VAgNEp9YA1z--ftsbR~3Kh>=q!_1aG3p>$JlB=JFb3ouHlF@;MTVTpFD1W^G!; z7C&%d?>)1$)MGy{wOW&YXt!3=yi(R5r6}FY?1vDi>w{AF+J;S_Vb_rl0;XqLfUjU> z035w@k_5OqE=*IpV<&jfuE@V{Uf*dM4d*_;_B)R!D+t0pK%0#bAnrJQ0!B*1ZtTw^ zCZ%TTxN6xqPBAgp!B^2m`752KG`UusAvN0%93iAV9RYg#XoHdJ=ks(q@;n7b_db-Y z`-t#}aXIyA6Xt*nQqxCTfxZq_ezFFc%EYuq=j3_+<36T>>!8%#u7%&wBR`#Z{&$C; z%|^v-Y)Ypa8(mpQ;v%yv&*LxpCHHE3eXTUDQ(v}TuJ?!I=ljLc*$K*ZRAZr|l%|e4 zm<(pl&ep$gF+jtI0B=F`v7c6<9DApN15Q-#!WYbA=G2;*U#N_&e9wCNuvmmsaX@&A z0g$U(&CxNPSBr%V44ANYt^OWfmMIpp+ND`^TgP+p%&2rg$^T| z<(ivZaDr1Au{#7r8<-M$*sEHnA5&JWs%4Z(jk4Y*!-H&^bMBl|`)lUL0VPIhL(SJr zx#7r!s(|R}$~D_q#)*lg!0|eA(Tb4*bJ@v!^3YLWGX&ZcN{uuN=l6%S1#lf5_KXiY zWYe<&SStKVU6$DmH;Ja((XSpU_<5Ub%ln6D-C({Gx@^89y{S^ zxY#NcnhK8)V9k@{=lz@Xre2{I+Pp@a2y0-D zz(*{C6Z8e}FZ@mydX6FT97P3_*BE8QdgTAfQEp*^fEsJEx9zl!hKfb!7R5HQj(&<; zI}smR+zxR2_g=TRUXY1S$C<|Y!~y|uo$eDx%Y03Tbp}04WfO+zpV3pJNh>}^E)L9B|65*@eb){RPZ9KJd|*A zo2<~kx^m4v{Pv+TP`WU)1-Q_~>Vdw8XXz-hoRwDHQW0CYRX}pauKD9fVuOc?K ztpFHmY13G8TzycJx@9p73r!m=3b2tWU=l$QTgFJ+C3jxwh6%cL%}HLm@FE`4UNlLn z!E*EKtdZU*KPWyygi_<061<_6Hj%myskm-lC6`@OkE^|HhiT>F;CuAneJyw!Nu@<= z8v2n9vpV{J>;U)53b2=DKAUzJ8GJbL2i#5ELML!wEr|w+d4)M#J6mGbvZ?eh>;e*0Wv*DZ}?wT2jK@$mOgkI%PhJ=FK0e5gDYuFT*2 zVN7DFc?I&ya*2mM%@ua`uz%!j9?GR9E9m6u?rg={*2=}viW&yHcK7Kmm2`e^f7pAu ze4ih9J5xUYk!W2+)K0MOLht{#ItB~L%=ZqgP6)%&HoMH8sTnUaK)!$jJ!SZ0$1w?B z>UH8|;&;D#)vU=vL!RcEAH%tM*1}R%$tUR2%zX_PQyj72LQCs)9)`J2F1!~EsV5;? zXE*2`QucxvC>`9}>+_q5zHLe~6gy4;E#pamg&)FFKVP-#@OZYYxlLa+yHroPR-YRT zN3wZts3kg$3oG0CM#lS^X_wnMv46Vx5+UL=r?e7WeA5m~_Ihn55;VmObdLh9iHckY zg?|)U)w=qGaOKjt-1pHGF00o#z;cP9ls=4`-4z1$W7X~(v(CQ;Y>EQHod-`i3tU)z zPItQ1%Aw6sYJoa*j_gPbKIm+ZTl>GAMtV0lftNpiQD1AeWr){P^J?@G%GFqqNXXI) z&oKd)qkt--HvKVR+Du`GmSm(TsIYn@DKy$GeqSSea1qHK2sU+mR+qwTtN%tvM~_83 zu9@Lc!~VIn)m^cLX9o=RszDk^tSjylAL;%Ove3bd0aWGHJ@8~I>QSLqFRGaq(~9c) zdhxjFvurxLcgPAu=9nX_P5jaGWA%yt#9Mj^=-osE- zDxR0zh$s%g%T@@gXT2~YFb&_VUc3gIxUr8_Q@h8xW!1BKzyU_E&+be}a8CX>u=8Gm zjJXcXC8pV1%Y9MNnWrl$u(fspBumE4c0^gyY34Onhda7X!P|&w1k9Pm-T?R`Sb{A`Or@2{aU?w~63=0AfO^l~@*KSV)dJ8(`pW?GbsfIUe9z zUcG53-gfZ5l3gS1?!!FL6?n1>ozPT)>rK%s8q%rfM5@y~rIPogCLbaxez1=u6y1h3 zVgQF1=$#l{CoPhZfYx*%L>#ck(wefB$)w} zO~P|(=XMI|9!{fRYe;2^UaftcAAzu}d!sV=X^%BUv;pEOUGENKX}Qal3xy#$nlSRt z?*5hi>a7FzJS@@I1Iy&A9jA(5;xHJ1D{8IV+b6t=0f78w$2=7>$btXSW}<>ZlJ--D z-Crup+SNd%Ld}lXpBgC;X8>auetS|i?v;mEg@&e z1sVg{71%w-eAo%AybM5OxRVw4WGMnuNeq=!5@y0-6#Ah~l-Lk??SRL-OPeQaN+wWg z5;g|eiS}mxoaZ&mbqG7!N0f5jN>yMqs#1s!%1SCw5iszL_AgV8=~})haZ*t&Gj9tI z8uUDBy1Txg`0RQ&9agX^yD%YEoQ@zCn(YA(eeSooxn0%R|G3MG_9&!tmQ;{+D7wQ_ z9eb6xu0hQqX3Qevwuwj2`h^rk(@=SNbG7qvD>Q{!Y>l3{mnGXJf=V+2+yCS8yHZVK zCM^jsGF{#L{uos@tJkg6jZNR??Iy7wm$=|9ajeL(Jy(}sSMOR%7W6^YIGwtNE3EY- z@N9+sxPY}akr>Sf)DSms&b2F<+xCPZ^p@pq`}|Xp7J%zJ#@335j)ZqpHp_~*Rapajw`#@Qo%dvTZ5qGT(24LKFZ8L( zfJyu;@A=t2PkEbSnbm0QY{wSmliyXb>-ZMA!qn~Mc8I2xf%a}Hh(fVA?d|HugYo?? z2Y>S|P?#O&CmHuAzF}UTJ@d%uy~y<_2|naf%yuD>D@Y%*N>gXgoO}k~;t;oVa!^;vKa?R2)i^ zLl2$wQIg*T!e3D&?$eg?>>ws2O^Dm)Bz-ptA-|Vg90&9}iploai)lYh`q!i%4W5Xz zsE{UMQQ+Nc$PRbwpzeF0{QQ>7YsVS|*~pyve>1VZPIv)3L?QN{pfBq4sHkP(p!!O5 z=}sp7jah{3fS!wM`d1I_qFy;?A5w-g(Ccurv_@g|E5XWt85jDJ>=Ob-vw;RI^r2;* z61pWuFA+4b8*|-9gkvbcqUk}FF0#DEG`}UzxO$AF@{RZ-{$LZ2bGFqNBu(!Xxw*~% zbA|bli4htx|Ik`nu|NoAv_^n20rBW!5SM+&`Aid&98$oD!&EhqAXdTNvJQ~OncoVshr2AjVNZUBtCAEoc~M7f{OfX4OPW(0hCXB;UdYd zfx6$%hG-jP&Z;I_(IM_6#5*IR5(J;0x9VT?$(($|XCFb}1)T-AyGJIb5syamYONr+ z)Va-+>FaS38?}@Y+Z60dNV!Jcth)#aPld9zq(>-o?= zC20c16z@||*0b^)2vR><^JFHXuupS%izZ-*!?|WMV!*wl$vN%aW^3Pxr9M#4q#YVM z7VOEl-J%)2otciDb81Z?mP$c6Gh}J^2IHgIW3>P1pKQf-k2;(*L5O+-b!9PH7cjvj z)EwMSS7ip@-);+Vf4Pf1 z_PYxhvmW1&d15N;)y}TaemC93qCdSgO3TqoW}7)6oBXrc(@B~s#LSdX+yi|(K0J*y z9kSWw{NNVzNz_O zy%OuPW$O8A@GN*lwQ!}S+D77^f4AZgucCj%bZso)wMUIG`Z#-wqJ^AX@p zEsIJlsQCusrEOvOh!5a;cjmO=*ddC)pP2256QNiqv3u0^qb5jCoA#e=8EI`xG-z`} z1180t=CL=?Eu4$}9U_>WXW;BSVXAgni~pM>ejZ*MOq@n8x|r5hrS+=uweB}Xx3#~- zQT{x+9j6-%M?qg2xdH)K8PNpJ(SJyqg3-Cw7AvMpCz3+c3txzXa+g({F-b!(t(`6) z4g#6nw>8)gn-PFwEs<(v5lDd$?=OmIVY67{>8jwAr#?&}U4)`*xEqyhK)HnBAaNgI z)gC-zAbHg!C>7~EIJjQw^a8rix?rGZJ6;pBiZDj;h^$n*=U5<*C>O@ISN;D0LqNR0 z$ikC!X|AAtyL&Tpl`0OIS-JR4w@U?g)Z$ld>Tmd{9_`07sJ25{OlPdU;{TrGrS5n9 zJAF0VDq=`=;>@@#=?;(uR~zt#;onJMu2nG!-EW>q?8$hD|5@cI)PtzYg*v@jwc+LPiF!lD48=s{d3Jn zlQ3Smu?mzI-s$Ae3^c)w_TZdqB(&Xsa)J%{#Ku@#dxV{&zAyX0qhw=k$4z>&A-3>+ zZ(X<{B}!9%+g&AB*+>M7TsKwNAu&FEChdX}z-<~n{D`cc)_GcO=c*S|&W1zYBIWef zZ}_m7$t{;n?N<{2b2b=9$U*6WH!4ckuRrca#!Z`Y3o)lvZn<#wO&tTnTBeJ?$6YXE zZGMe#vgYSKE7jcAuxfl(G~FDFF_D|~g&<$y6zsIQL>f`Y26j&}_?vSa zmEWuwVNG9WQT*zd zsFqtw4@U^J+A}d0V9=876+iZ}mXE4YZt3e@hCgl$|8vPwumbV>_FKV9#{8Q~;y@aW zds|FWDABVG*!cs!ttJZw0?FWkq$B_k%ae}hA9U*ks05Wp;bWdPQ7azSb8{c@^FM^V z%+lk!K2R27k2nY5vcaAGkd+zKBj`DA86?@OQ^fHq^fucdi5Kut&THkaSDpzAr2FO^ zX!_O_4Fx7P=17k2B&m{sLyGp4=A9CjBlJMwYgP(4E}D088Zrvb2!H2F-Qn^0JVT>4-_j-m=V+;UU6GO8snwAg@}B$HBA9U zcPpWVRK%Te^)kE!|K!K}`)+~Tyx&oS42#F|*4kX%03do&DV5QyKS{H+T<9PF zuETL@^$9Wps;WDzy@mDebHEMSfAN_YgLP71g;h)mqdhXW7$1GQdbpMw7Stz3z_2`7rJNBrcm5ABU z_t9NR)yO7IiU-2ZqFsasjq_2vkUWvN7t@NN^K;*I!(<`f3nk}A`L#Dsp$yN{h5v46 zHrCebuysqwi%HLM$60Ot`)23mneUU~|DcE65$Lub1rXeAX%EJqj37Nr?g)3j^y&74 z^PVg{+A0*Ab3&52IQap>GOS;-{mBpcmx#}k>~TAau0MRIcdJoh5C}T#Y))}lS8@PK z)u>udp1yT!h8KGo7rj)Jx0nu!Le_nM4+B9p&+g5#Z@$JVnN1A~u#{vAiHbF1z#v1x zPnwl><1Z2rwY*NaW))&huaW*=hWVkzf|#zTkwe|*{sMXDDvfj7Q6k~iyIeVE^qcpt z-{*Z}7IZXS+2e`f5GT-J3_*N?K$ho0A63?iMZ~fpCp1e)ZxAmlPob$PCdv?5l@V zx08|^nAZCSYOEPxjdxWSbK_n8w$ZMfZ!r84QCv@?-@R&Y+rc|VQ*kXZ`ls5O{i=N} z)%*wbepS94t+iUU<~a!1YB-}}>%LiTju)(8yg7bfTS$>)hWln-+Qn2|WS7Q2EV{k; zgP}#Ub47nYTjzN|3zC+dvxAECdJcH|i0zW)1}WZas&XeTY;9(rSJ#^vfe+jLW8|H? zw4Wp@bkrvWOlavPEb~tJ?8LP2$z2Dh+lg<6(`yIGEMN4ZZ|#dh`Kxyi7fbdFZ)dXr zk#KF*4I%ES8+l^OHgw6i7#{ZGw{14-xkr_OSl<~xZE1f`muJp~@#Fu^Z(V+OXg+#0 z0BESYvaN=m6UO4NXE79}tEFREW|B0Z)i$N2KIVaKwD`(jK@r*S+* z-M%y>1ONCCpEVSBQykZ8a-g)jP=>+GOv=nH#A!a8E%%*}O3xg#pI>s}DEJ=TD!fUt zC=KB^Ea8MJI-y|(bvje>Uuhch)i%_e;()DX-GLB-e4T1Og>BE4pBe1*ulc6ePtEu#5ccW%j4cr}etP$v zFesgaJN|Za_gDEO6x2c2OrI{j-#oHU?8oi%sU`ZlK=r5P$nXmUGU&)gQ}I5@I&Y=l zCp$WLDEA0=w;n0 zA0FdT9_@x5<@YD<4S~`4%gGM#IVLviWhEnK_>n2GQEM9b1fedWJmX|uL6R6^SirIt z>AtU*|JU|>UN|R$>RtY|Neuhyxf0tqpP69`RsQNZzc7#1mx#Mav9imf>;$u#r zZ?m;CtaIT)@}NUht3k>K@r23ON{tEgveAwoBc(8Hu;1g^Y@5zVI}cN6%j&6Od|exy?x?}ks6?u`k+I}?b68sSF$w$PhV5$s)(T#W6g0xFN|-jiq?k0 zX(zk25f-GXv`Un_Lfp$>g@R{NcA3ypVSdHYMwMkF<}VYMCPJM366&(H5`9Kz>GNw{ zn=CkZM`LxOYVXAG{ScJ`*JNh-b((9KcavKhU{BnMOl``@rQdo@i*P|;a*ilrNo;PH zO-X4|&4TV5L|PV)juy7iW1dUd5&*A2m|BKxSFCgCXIOmLE6c_@&;x>IHt*nTufz7B zbv@eWtCLZ6y4{*ZrB*{0&;Up8Q-Pd>>t%7~jtt^x$4N>wJ(2?)s?hzC`vP$$tBI#x z#t!v@G*OKF4=KnZ6Qoiko)7LW=-^Q60yI;@q+6x4!_Hx8udPy8fQpE{efRR12(zT2 zEPh|wO^&x3H3Si)$ z+0*E@4|8&^pBBduj6)@*!jM%(?+C3El0sljl)X?=?H3@O<$+@i#kxzk?CX zDK72|^l`Lb2X1EGA=1$v77=$QXG{I+6RZ%oi(2hJlJRghuSt<1N2b1n?O-FrykZwB z`8?<1Mno?Q#P8uq%dLB}4%bk8N`_er-bN0CsC(}t#EGA1PfNxEciofnAiiU(8Y9RxeTJpib z{v;K7NXS0Y@kQQ3vNa%OyNb(E8R4mSAQd811#c_Otu!!H${)*S6BY@tmQMe-fw+c^ zC{G$e)_atr=i!KUhz8Lc3wVOXwke$6I_e8wKmFu;j=Zz!_nwwB+jVNQ5H z==Hzv?UAk*ztUIl+O1ag06fcDlWZBn@Zz}i%&qSER2ZekFP{&@Wq@BXu{bT?`m4Qu z@WEO!SJ@uy?+7&vA?DY)Q+M7knJ}U!IG!5$XLX;c#FJ2-B_`5KEP466-RNJGDE3z@ zI0Kuh$kV6iSuuk%+nuLYO15?QDu`?aZqN#kZRDb_zEos714!y9-Z-!DXR}$6H7XEo zHqY5Fi*l!n3r;_9hakybChgAHyMVpap#TY^k^mwI>BRG_u=rr3zS zC`0B&qc6u&pfgasBY1O?J8VJlbFMVTqFWA@5FqEWO`@b#2*$ep ztgmb&S=)P8KH>2R&0D&=IA#&k1v;^f9 z2Oom|L($QGrn-{Q4Ul`|b`s_D)lWxebQiwq<@$oPeO6aMb*QULUFN9t#>qiG9*IS@MLc8sDc!L((|OX8>+;K~);3Ih$DIEh3Jel=yB#dJ+l4HC z%vsB1`=8QbvD$9bU~1$RIrp~jrx-a{{mk=N@v3OCO@rg5)S%(GF;GrA8lAS{Y@CTM z7k2~E7%`wf@s$ALQ!ee)RUODuQg^O2!0LR2%E}yv^eF9I`Fqpgqs{zgYj!&iLMZ|E zk_mm9)}oPPlS&Nmk*EwK+N>DM4X*6y_3$)AcSQ_|#ALP*7vO2G+$Bek zSyfSCy+LVS8i00c7t}5ovp{iz=JOhZ=st}8NBVzmNHWdmnnLpO`LL0+X2ADBX#0v^ z9)L-_|8xUqk}wclU1J@ePZ@oPrG&13roDR8Z*9uJaqWD)Z0px8i-+X-HWZ^y3G;`E z2g|@V@lw~iiU8(`MQ+_`A~4m^4_m*y!ASdh(@&@U5w5QF(;E#y8eF0-;{!N;$siP- zk*aMlmV}X@GL!;A-?tY$S%Lb>swhy;3MKelQX0be!?m8zLPj*}D$Gc$kZf>exYjmY zaB#QaNI(Q6hUf|0C!A!Bu&*Rod1pBySDb^o$01gSd5d)6Mf7qJ0Lp{p-X0!Mfish4 zB#*QSDnhQH5)bJzFBu}3KKCV~iH>PZuF`n%Mh`tn?*Hjta)%#&?GCV_%#nK(X*rE} zwt7oP+RlkK5s$%$ii6mPt{e$@DwGy!|Kj}u-EZzXhegz+&EdfkdhTY^bt3MxU*BF7 zN8Xi+nD*DKM4`FatI4!1x6r5Y^}fHXNS({a;S!;(OKKy zr-)vqWU2sb0@uZ7#N`kiZWA}{DK@prw4R!&VM4?)CpvW#PA(us-ON(6@0ZJ0+4?N^ zhf$n+;S*PlLy~5LD@V{~APrgaEv8Bn&b9}M@xKbY#J`1BhCjkItYIvbWf*e`&6Z0_ z7AzJTwiVLisHhg~dkXfmGn+p{ZeSgmI`IqpbV4L7zql<&h}wQ)9}7r9;-qvJ2l|2Z z2?j9yDFhdQIaK83Uy|hI;v5M+#K94L6VhEnFNl41eX-gs?`l;P*8H_2OMHGz=d@u* zK;d5VlKH0mM-q6?WEX`ZThavFPpDos=Y;wy16aj$p6CLcbeh4(E!bn-q0r1ZD`z{O zXKT0c#EGnK{R8&ESMt(&lYX?iy>~69T2enc+xPjor=*Hwu@%$4;*`kGLz1nH#PV+V zX|~+iCo9{@U46!7ZkihjMQ&^(SLC}J2Dqy-gwOj;-NH9j`cvKC>_PD9R~;KhB1Ztp zoNC;oIa6Qruvp0pAM&V@0?o@IN`Nk}lK^cY|81k!)(2@{Tk6yq?^;jLctLUmwH+I% zAg!MaL8%gvGW61&9HxS;*fX_?J|fnC)w6Yy_U`CK?!u$wmf9`yEtOTK%i!&Lxmk{Q zX(x_SrgUVg}w!fk&}ZZMD8cx?M~Q96Hk_^q1l zjSu0fxtT%xZ8zhpx%u76dlnk)PrNgd#dJyBEPJ{ocbJD*H*J4JO6Qrkgb1jA3a}@? zE3yTm#{gf#*4l!Zg4TP<$UO9VBf%oKa911lA=`>d+@eJH%YBt$t93D51MiQY9lv5P zvH_=Fy?BjiYLh{}^dNOjHvL5SyL(m`5&-w=UC+zJET+9XpDdL0CEOPwCF^1O=j5&1 z?Zc#7E9y%qNOqMod%U~P6ZuO~Z4jif%MQ_xS$0OXK;zHg7kkQLZy15{!L%8mon^Tk zF;}#>`7aW92G5J}mVyx8x0tdMFf<}{8d#tSue6VY0oxF`t*J7C(0v$q=e;lY2D-e8 z6)nk7;8+Las*1yvb;S=?7FYKstLw66eR8U;F$8PYd1Vr=X*n@W!A&W=Tody3n1-%e zk+HOEkdgaWs0eoz=aoe>OoCH+hKj?L5`G7s={y4Og;p%Y&!hK{f$9}{gQ9Ue;vKCd z0YWMYBrFvn1X1mJZK1&dHXFfdcwe2WB22;z4*qLODSfO#R&{TF)Yjv|*pYFOdtpT* z+#w1cvh_la{%IyT%Nm~J0XogIwT3cZym{`Uj*tzK<3S`X94zQ)u$A`gTFe0X)4eY4 zjRE3xVLHjv3JB(ki~TOHJ5#YAz6L_r zHh zfC){_)D?2$|&3qU5?;J&%s7mf|`*tU}qUCA{bk$PXY6dcprmUr~&C z5RqjcE(uqMrz6|LU8Mo0R_>~ZyecJG(7;$_4kKlf`dgl_p3ab7^1LXi(yZ`F#lfpa zMjQ{qT#?+^5KGS^_m>%cLKD!^#If$v{k99q^aJ>Lw_H0FZ#m(*!F5?H`EJeV`-cy{ zKhhCwB6M4&uiU8jA?6NN%sd5%q;)v*+8XVA0UgLEN|7qHB-HJaJ#=q4!Nna|p4^ag z$lWg5jDq6FLB(g$hNES0l^72ubH%{Ep}A4k2>h@@Wf@hg_deEDglvK7g~BRH{ir|) z7|S3C<;`Ezj|qSLDj#|3`#Be5vspil`e-Vj z*sJ*@>Z}!&6!Se%Z66x?-G{dCUZUN)YL+z(AGIlpaRUos{^X_^~D$&Y_;Tm9o>mpSFP-x#m8HSMBD;PqBQW(wC^J@RLN?JLy^FHgLBT^X*(1 z+WC76Y~lO=_q(Io3u4Al9kRxv!~V04cg4N)gCN~xNmLRzg+5&p6f^J7v~D5qS5VL# zN(3#WDh8n0!A}sZf1hoZZS>V-6Wk=^;C(>b_#48qjter}V8_;H*v*HpOtxsuqB^XKTW>JUH_Z z%YbzBI-(+V2ZP|@#Erv6!F+l2mv3IafBE#)uVO@=y!_uUi1h0WXJb~i2Z34{Q)r4p zxp*;Li!)z|A4HQ#Dy3eai->r&lOSXB6f4WB)Q zzXdzcUKm`r>p5-ov-NVfA?B9wYjQ~MmBh?b^zBTl(q2veT{V6A1$}>RKTQ8edOwkM znZU|S#I%*NF$sSKJ05E8M>dQynX-Uz-aEfE9~3by*=sYyO7iZ?Fm+hgNMB`+0x!d8 z-eHG@hpy}6qsYoD*O6z(Z{EMViD#y6^xsSZa0tKz3a&h}f0rwfAn~Nq(2FIg)Fm4^ zRC|qmu~TbOafXIvkm|2 zvscF_FP>8YzA=A}y5hZ2+vbN*>&ZPx1``>bZLWxa(W&?^_!R#&m*O6e;>~>t;!gAf za_dP*4iVeDRuG228)Uqbc2;EU{dfJVgW z&m#c;O}PwpBz(B|kNg3af%2bYB53=?mdF<*L`g@iq) z*r{L9*|BF{;x{-rP4+}x#!(WyGgd}?;zs?|Bx3j5z;>ITqJCEi4FFjwkksG|BFZWf zgp9Sn2MI3#Lh1w_8C_Z4MaSMksTU<9fTBCS%7^#&nfc&t4|l5jmgi5&Q@!&ILb$#M zC^RYxnP6ig3Fp@NWQK(9G@=t=8gpyC27mSbS+WdM)*nUnuT7|+C4)@xXVO)AD3Vp0 zV@*;K6&U@{&qcLfFobEGXvyrqXcyvA+iutnk7U$*;qGs#Hgyj^Eu2wq(0`~uDGoS1 zRQ0`BddHIcw^PjFmuFMIeIz#6sm z@$-L2i=Dkb?YlQB6aFy$Ua7J~7!w%-X@#`>4B?NShQ4ZsJTYdsJA-gKb&r<7(&D*< z)+IrUTH)B3Ac^Pt&{qWa2xTAt=_e-sq2S|C(YzRQnQX0G8+b~!N_mt??{v0Ru|g1U zV{*|cmyYcfkHscFFq4tW2UwY)kP??WqFwMp7bv2GR%@%v?m zVQ*cV0az16TC==g%E{lqygD-GL7{aJ=@kc+I2?kXp&_{lIj-b#Hc@?b!QAXnAhJW& zy2X9xg)gIeL~|rh0u`bjj}I5y`6&fP6+jo^=gKtsn5OBcWRL58k%S@=9gDDtz3W%O z>N+>VKaf|(oe#H=MrNE>*YaTy5;ZFHqzI^O$!36_q~;vea}i zF0h0|<{W##R>%mSA%A3}E6i`KxKlknf)as_usa@;Fn~*h92Mlj@2BdSiF2SPHU%oi zfbfabWQzVmo`VMNK_$8{`q8!;AJtVv#ri20hu zMaW<`Pfh^3t?#s#g0vHvHSacak1tRP7d4FCt!FgD;*JaM|1z*z$mSv639BEx{2{uQ zLRGV-$KI_Fq1J(wL-u#6C2QT zVQ%7>mAsiFYTO}rTZndaJd+IhZ?EOej^|Z<>F-|r^x@=%!Y@-_`n!S=`t}Gel1k}E z!y-_HWq5dyKrAlQW-kl!}T++`neWJp0{L;V;Mjn31EE}5JO=Vt>Pc~A z7T>$oI3mr@2U#Hh7#ZW_Q_0qW6S~Q436kg&R%;%7cf^7S%UECaL~`^3ZUec!OB{@$ z#ExAe1Q0-P?#sOBS&k2qk*Y0|@HRKG5ANMl?OvgBo+i7-2PQNVQV(>jP)whMt)~o+ z5?7g5Lu9=5ICkWsq7&uR&8jCP=Cguou$R?D?B!%a>_lZCxASio4N!DOxbBNGThF2O zk(>*xU23)q<1b~%;Msv-Bj$y(-te9&6G}9)dMvH>bs{)Up$V z9|gI%+cB&ckn0wzySA`cY6?5GGR{x8!U9NW6jkI9#iOk|+Lom#j~vLHK%*SZio--Qk8XviVc!gqSxL+modA5 zrdn0|C&@}y_#(J&kUUHeXQsN786$P@$@Q*}#4MjD9B?G-^)7S)zi20hp+5tYT>xwzC0+`OkIK}dC!9kDMbsU{ zp9LMF*ptz6i*X5$0sOZgipcMf*sysE|8kA@XwaJ9gd~#aZSV5Yxk0}6`$px6+{;1d zsOIN1l~=DkO#zG82i^BH+3Hy<#-GUQs&0T#6IbPb_~n??rSj`rS;s@aqCJn%HBy35 zFnoVX5Zz&X0kt~4M_1(j_|o=dd8u66yGNcFLgyC+IPD2*(i0eToM^wpaV$Tlgcs z)2=7H5)MVdXI;1>DCpUY6v(^xL+7bu0)s@orV)^f&{N36&kr)5Tnq6Gc|r!skO!AZ zR)?4qzJ0|#5UZcK5XzXj;l_&s3mMK0LVCJ&Ts2lY2eq{VcPgy{|D4P`E`;w_KixTM zfsG5IpZJ{}b^VyCdDY;mxwh%z+j060olI>8Or)w`>R2>w%=qUdya82HyFV|>jp`ZK z^L)Ko!f{0Yuk~u511yZC$<&Hw#{GSMu2E;-v5(ytOVBj|=$fAjrIm0xuH89*o;v9a zBE(Ja{QToRXU-hm8zc`Okc2UOO0`B3;3IsHXpbY!DH-^GYUOm8{1Ijx*P-~Tp_XCY zmqyI95eVOpwCJR?;q3{7FWRzPmi1lx&)q>0Bfleck^!dLO#O9Pm$m=Q3cb;J>*qh5 zy6%Luo&Vh@E*L~Nvywf|ca$QIWhMUzyV|Wbw}7BOi^Qi>K(~VY_9UDRm^I%jt#18` zmp{?ZYO$thMezLXUpa1BKIyiqWXg@ z?mkMo&KRTsPp+9fLY|5z%G#d6uh=W_#>hQz!W>ola)NJ>y9csL%Je^+!K_aW=;eKj zt=()_i9$?de#Ajzmyyaj12Zu_l;^vjtT#toHHt~$&YY}f&W>=Bp*!drm(CM@*|S(A z{w*h;13mbDUCd8bC@K#x4nqz(rxVXpLzF#;zAQ?&Z4W6w(>?2k!gtX9vm$|feWV{z zq&-b~1b}fTH9I*`OpkKyDj}8K zmO)}sU;96uYJ=;%;Cy4UhUh{4_MurVxI&{OFY23?# zpXR)x?nI^K8?L*>ak@K!7K!I~WqP{n9Na;Bjm>?%#M=KyzFravgv*+dQZip{wS5yE! zZ$ap_5d%lTm87N^pqmxtK;v_0uP2xGXcNpqG%m(e=>y-z0gf?Mfu}}9x!$E=q$<2L zPG0yHNLui$<|9BHdkS8^E-H`&wm<``g-gE1-6+Ofn7|8%=(4F_kHMWG4d%L7@U9BrC3*+d<{penbI*6~Ji&05vv9y1rQZYh1;Ok_vKvC@j<630~3{RUx0C!-il}t3@szoe8a zczW~$eFvSoc-P~*?x)AAADX_Y=M-4i9)Ho}yQ?3%T1rPi_Y`a)}rBALOOD-s%<+G_sw#1ykKq}0K`!1Ks1;UC7r7t18ySUembpi3B3$u<}+O_ z^K7NLrXEVN@^*WsL@o?EyM)ia`hl8qsqeSC-;NmAR7e7oHMZ$h;u zW7rZs{P@s)BzkqiqI4MF#!h$yi`gzFm!m$2NKEB^o3~c=MTC?6s!g?L57o;YM-Yjx zog1E>I%)fAD1RlL{jxTjmntNllC}c`$m{ZqYO|QK3Tq9q(Ym*$j1ogF&%?ZKZD#-($xNMP_^U#5Xp#Q=xBq9krw+lS=kbNP($4LH3> z0hH|Skg*(P4{ny9^F=9g0vuRvQ@?QC`B6U7PN|io$bs2hLBQ7_IN?z72$Jg7La$C=!+kqRGf=Mns`{twt7g)ew!NsPYDZjyw^{&|lC2frWOxVfMg`wV zy2sq6RU!keDI^$IykmBeb{cas$+^qrWV9TTIZV0oW%!I-> z(Qrx*xY3=|mz4rwdCC#E|s>fn`G_)QCM}F_FOHakK;&*}!K_D7BO=Y5u z-j5sx%D<(j7V3nS@!<~%vCvQfZ}L5Dy4I;LdArb( zFY>VN#;7p0Y{&-hM^d1cFt#&QZ9{td?UGWIDHP&;_N`c!V8oFbc=Cb zEQ&dNO=sEq)GcAEZCLLD$KUknVo|#1(JgpJfs$a=me7-vBr^hqz~aUq)F+7nAyKLl zUinzEqY3`rVSGDk{*Km}Gje+*Tp*F=MG10|zQ^G^3)R`#a;`V@UA1Rs`c)J?C3Gq) z-+VjU6mB#<=D^FXsDD9p!E4;)W0px|JeL#Cjq`?qoMa=|)H;PocgFeA>m2+lQ8UZ! z>y~2GrQL_N+V{7UE5L`1_ubB6Bk9W(xA!|u<8Y$jN*N5SxjEbfAdL{7NKc|L^m5({ zc({-uW3B5>A~Q)Oa)@A5Q%l`KlSQ^x$Ftj&fp4yaLzuF{S z^&tM> zo=;W(yzQQ7Aiey{YF3O2!b!29`yujyf)MC3l+rDhS_M&6}N74cM$Jf&8&)VYwB z#GC;BNVex}dgXY;pVj*;#|5c&pZ6d-KC?E}n4seUoj++-1nJ&CJxlICJbIWMJxCwi zqdW--t4fH z*hgVasb`&5X&F3=R_=3Fkt7n6N75b&WGP)h%#m}C8gidFpqwNK*D_g&IYnxV8!y)> z5>%w%!1}862`Mt5GnDBpa0vHAzv8V)Z|T#*v`mMBvwZRH2Ft_lud5A#Tf8NM@Ydls zah%@$d-pUmjY2limNY^SXx{4zUNp39t;%E9=`#0; zPAQRQ&j|%?+9A`BdWNMl7G>A38PB^^?c#HIu0EO4m!fm_PS@FZQf&UwAHq#C$;u5K z3v0I`Dg9RQ0e=A%Te(#*8si=*od0II>-EzQ@1MEB75HVm{t77G9E*#;XheU*O3 zz&<>H^NO#&V0#2$K0Fp52mT#_am~G?*RXPK@o)BQb-&6|fm5*0<(74=bhOB>KLesr zuK`#jf2_oJ=^KK_j*&E2SQrdx!wqz5%`3+Orn=mZgu6E|ObNKn&qC!cPoZ-uX(L{)8W#yq#=xckn)xx4 z7$!D$u*ic9Ky13x{kC#Pq!a%i7Rodh76d;Vt)y!$B->LFI`Kd#7($$F_b8qg5tC1Z z134UqJ`iY0E#kGv&HK~+wIG6?4pVC&Ik0f3X!OnS*2m~>V+ zopNl596SjJN36v3E4BUuLo>)TMUF3+mKCL56+fw<2wSWuDNac4zH!ceY!1Asa_bYF z(0i&k(jf+}V!76MoZ{F|b1KB{jSz`O=HwFa4FZ!=d~t>zlMHbQ69JMKTR50A%-g@f z2{l91&bQ=0K?V&Y=vGNS9^wb_P?W>FcTIV%)#tOjdQ{&1L%bZW`&9lVgU{{P_~~D@ zUmXtL#mn)DM`jPZ9Uj3Jsg|trHDS)I*QR98|HgkjY4(0?$e6(;pxkh$@JUX{qc?W; zgpd;9=D#jE{L<`Dq(&@%f&Y>cCc*5&>-~&Y=cR2)kH~}Oo@bv({$-^rv_9JYt#K=h zB{}k#FE83cdWRZ*wA7J~f3e&qCqEy5c=bH#!KaJWifZJ@anEIliMuweLvKkdb{>6P zPA0_&rA8{_vu2X_ESQj`Am#8Dve9z$s_{Vg+}`AzR>A&&f}+ znaVKpHrI)esx`zS0M!mpkj&OEdhZ9#y?j*wA0~coh96@?YQwa_cR8gpDzhs~LjSh+ zbjx!6SzHqtNPlPfK%6%_#ICn8$!sppfdfY)ZHw%|@SxI5V1mjiwPxw< z--K|+q#?C6BZ_RrFBaO-8=`)GY;%*D=agU9aPq{?Mok4PQIm{42lTHf&w+pH``gkJ z_kRrFjon}27LRB2&l+%54e{SkD73_LB*_=#YgPTVp)5q~jpsF{>r36<-H->%*%CiW zAOBJ?kk1DG2%QPlYQx0{)JdR5XlimF>FBXTY4h-+j#&#u!xn#BL1lYDHi-knX56 zW=)UY8ES6#BSfHays`g|S1R~o0j5kN`J{foRSD=o8eSw zkuDR&QJjyLz4ovAu$akrX%J(&cQ*X_WTSWgox3uYy{5&6i!F?YJ};^Az}^qFi3=1L zRP^CBzqBDFc;%AYRo-dXzprqIH+6Ks^E>?Joz%f0g{8P8x>0i~L}O>_ro^5qasj); zTY6M~u!^O%cTerIs;#l11t_-MyR0pZy_?~i7==pt)an=g*zYIbR(?C-I%aI?Ej&5CGv)l5Q3*=j5?^xVZ9g>K ztD0A!aI~fVIu$?a(%Bqu@|{m*RDcARF1fN&my)O;k(5?KJ$Xo!PTnXyB$1ZbaGR`m z9;>Ugt0-5pzQC%!VLdCn8jOE(`ZBrV+ft&T>bu)?8-X%R$4@b5ZiT$dM@|tf&Z&?! zgTfjHd98O5K^fVY8Lugfr)vgJQ{Lq}#FPkN+RzL=yd#jl(6R$b<;+-L+x7L+|AjiL z&py0+_u`E%fs-yl(%=U*9O|`Z4mO`Bzk5pSDVtl%w{%j z{K82UX19;CRx)@xQvA6xuX#C4x^F+6{QT?NcgL?^p1e?m9WhbSsEA#`Wl1r4p`Me* zQo1*`r!Cb(wm?ljqFaA+*CK^R8gHEP8;W_R+6N_pdL&t#%n6s4KhC&vpX8 za)b@u(i3K{87hYvwa3#z{Nb-otb8#~c)A<^E&nNnw=Dy-`=G7I4|paGSs(j2olO4Y zHa!UxJKa5=6mHcW@OPEWMH;gerDSQ&x$qG(QnS-?IorB^e|YyQ;o2wuC+5K;+>Y-v z`C~$-k}xRrJBTHcCuR)sLnMCfH{G(&w{}`KJV_t)k_=`c9{T1t#`7q6IlksPuJ0O{ zH|b|kSGdPDf;}t#@Y1; zgi}XDfLL96cSs0&QA`PLZr2wSwBy|KiCwWA&+xP#goD~7kxa4tZs>`r8k+JWH;^6Q zqx=V#OGVw8qNHOf!JKGiMdE+f(eN{Y#VgB{vg??B$a@BtuiWA0F>FjmBvJjt87mTl z@Jnvki8g_qXanY^E;EkdUo`E*-#KB?6xAtwTbcIFs=6v|+7s&|WRp)OIkA5Ni^j|f z)vl5Y%Slu^ApzE6nuYG$+I`BkID(QuxbctfxdA;ipt{$`C+|OTAV%*kvkBjZ>$vgL zjZYX_C6%M$mYf36Qmel+L7^EKJ5l0CcY;F~lIdG_U>g%%b6%ba(Qmfi-~cn(XsZkv zQ<~teY^A0R{Om+OMeDctV=4?l)`+*0TS=7Pldmr{q#tI?CI8lz3#myFRb2Hz+>4Znkom81%YQ5*!XE~lf?WYQ^ z2|DjQ$B}TbxuZG=mNrftflbxw(Cx4(SQz5*%pQ1^mGWgL<>NDuF{xz-q4LKuh~c9J zk|?YAM)dw(FVL*dnMMzj@q)<96IK~tpnv5|Zs_c))p?|UlXq4R_F=LQ75SsbStwbC zrTs9qfpX+=KTBJvMfjH7M3$*xjKb^8GV)HN66dP)>Xprch`qpf%| zC%gk5B`$cSyknh4Qw3DP|3Hu;8t`W7QNoSWWIYHBBf&$mgze{<>Cs0w=IinPzVPzz zPto_w_wl3@*D>LNfx*}XIKf{$Q*MaCu9rP zx$db=RhRZ$J8j}MVhWbA0GgN!3|)+2%E6Pk{?dP~9*>+`Fw?w-`L-KeuzKsw`*S0pr3A}A@!k|$b$@uu0+N>2pj)f<4>)W87ix8u*MsYhRq zaG@pY)6F@jp^56F9iU6p%2bQ_;@u-@idl;>=-p%bCin@hKF#x3qT=K5tL$KNce9_F z?t6hnIu&(Hrq9F&zJ4LG1UWw19r|&hEhG;!t>gR2jqJ&T<~OtEhu}wU2trRLt11h% zCEXt|&kC{Y?X?5Or014zV}H^9_pmK(#Ih3D%vrt5mpk|KV+$jim6b3bBKp>hiF#(@ zA>xMdQhYk+f(G4R7N_;L4vcXL6h%LM$&YBOk>nYCyG1pbQZ2Q)lEP~+q8{Vw@R1lR zCVP;WqrZ6m=a2cYtsuM78kp@R6C*Y8aD=t=O_>;}iEkr#MM${&zw*)v;rM$D;)kW| z@g1x&vp|Xr`;-XhEXM)ld)hQ)be;6r6hpMr3stU`<%eb`4u`})9*K#6E_FG`XS8uC zy5hGhpv4lU_2qi;@0bpAg!+vR64s_@B|(GZJxB2GCIk9f4o#6FTmdrK0^Sy0MYQ`w z2+4w4YMXOa3NAf=e1$1C>r;RIl0=UEMn zrEGJMmuojlm3|;z+JfqRgNf_<3E|J+N(<%g-hpGpuHik;g1cK$(E{}`{^48(+HB76 zH6OVQBfu*DsZTIi*_XjxG36TLB){(02-Wn#(=i@o-Z6JEOO(2m9fk-eOp z#~Yr#^)v(w3TVksNvl<4(!nB==>qWvaPl+uCW?x|%H@Wtm?u7WL1G^Mqy&}@Sc!|4 zzFMT~C0IWhdD%V&Qo*x!?mA3I)TAX1(Uvsln0^e#wLeif;xZn}q?<>cb~*&NL%<=X zT0ST2K128f&v{H}F7kz6l~jS{5pO%^2?T}B{i)OZwuBcw8D>@+_qY~WtUs@0ykz71 zg!Sq=?;$XAQunD_QY+8i_e_DzS(O1k(-r@Y=0yYVufl(M8=w zw?TK8N3u8juFQ#gvvg^Gw&WIFe&r;xX0_}2=>5s>p)3eB*j%1iXJS_KTfer{t5Wlb zl8b96ug*-oi<%fvK&+EE>2)LR0O#Kus+&zsIOdLL+%Q7mCsQnD)v{m9&kih@V!<<5 zmaxWW^9@^p*sfit0p~NtsyLIUMoqUil*{jI3;tBQMO=L|_SZd!<^-Q+NV{2MPJw|v zCz%P?jMkYy{%6>oB5?psACnJCrBefe{i$ zH?_w&*g;U@#8Z@y0jVu!lR$XbID8{#DP?v7yDcEA{7uTylXX(hMpM*r2cTzg)sBpR z7(BsIa9pa2yYI;p$Sm*}Fmfv;j^=pHsi4(qgrWPGM(PC-*QEin7V@EX8E=`psK^pZ zXK`z?TLm47Oubm1VfwOF;>bK-E|*pd6Ya6c#wc5A104MN6FCswia3lWQHR))H}0p# z!%{{PB5xq-9a=wm=Bg?4ATF5;a;wmPVR@nB+R1GeII;aC*o5suM;-#+fmWgH)U18+ zUF}zfTgaAqa?i+2(@nLSy`^RAdRTV-M49#V|J~-vYqa_Bna>0c}KpYTD0%roxd`<-a*8=Y@<2iMzGi9t`#-1@J zv?2m%#F^y0n#KZ>LZApmt)>|o+cngDoZ-3J*_aMIFBlL-s0HT^!n`^5WP)@*Y=GaD z^9?4KVYN!7APSP1bE%Ma%s-&isAVV0WJI(`f3af5Q@>tixUcEmT2wRiqPr+}&?kn$ z`D6vU6i8riyDBM(xXmzgp!gkmA#!${>}k@O6MqIukuEsL@=~7wuFqo{){kXz+6f2O`^-XzzyYikQfEKVB)J7H znoof-U1?lnjK+JTjtg^L#3-sXHdc|Vuu4?j;I2Nl~N--1v6=_&?nyqm0&H zIz>MLJBe!IH_JYp8e!>a>Olf^jSVQ-eWS3k{W61!t)^wDoC9hRqx?Hyef*}B`? z$N_L}c;tH$6v-yUguGU_Ef&BzER55m@dJQ@;ri`|wC^xz=9A1I54(ZvNu~NfM935_ zWM`uszh0YRU@3;bNQ1?hoi#z<-`hS9*Fe8>y9hK;gtQ1n6uBjsZ4F?+IRL0+#^K@A zrUKFjZ|D|PM=tw`fqZjM06&(z9DdO7^P?@bgHV}W(c)er#TuOmtd_i{$mS%#<4d0P&C*R zPw=T|R<1}%Q(rGCHuMc+@K;GmS@F|!iJ8cEDfe%TFz#3C01j74$>El~cidSPPO}M( zI?iLcErE-2Wks+Nu=_@SamrJS8&Xpp-Xo^`vY;P|KKGctV z(IHOmxitV4CyymREr5pLS9JFC{rV`kscn8V$WG<>1=4W1|BAuh>GTf&45vbG!dY{y z-OPW}V~&e=%i5N?D;VOKBBf#lo}%;)7-N*RGNR{~5^;0ogEe1L)r0DqAl$I{alZAn z=9Ng8!BGMhN{Onfl&suKb1Wu+Xw3m^I?%u$0^Q*uU%9!p;waM3_h>YCBGm+ttHn=I zO$~U9+#gR1jBKh&)ZWH1kxsI=4d^a%T9y7fk$&1T;>r3l+5Zx&HfC|jfQOv0L))d! z2RWJt)$cK|J4<(y$63~=y*`ly_)rOyGW0M41Ej=C_oogC?|>(z#jK6Z z4DR(6jV-6l_4Mc9sZ)ou?ShAuWV@NOX0fVFt|seoQ*JVw#(glmX#~>~!B?SN45S;W zU!`h$T&_lRcIAEJ4FW8CDa5l>x1u;|_T=77lVtZF<$&UIS+Luu{r&mmWpO$w%2sZd zV4vgiRXS#wwkD94qr(Q zEr@u|$fM>5#iZWFdH% zI4{95uGS`^ak*$YA^X$5CUQgD+`MFMBH2RjC77xBbjDkGspH^QO=6F)xm)>dF-5=< z1zh5l!x2aY2U@@F*-0cVo&^EYk(6xL$eyrr&3kVNoZZ2V>fy;Qh9fnSogxyM2k(>( zOL&aUhQywnOTqZsJRr2ZJ3ao)4~?4Qr1Mgf^i7knXJ>1?H#Xs*uo$Zx+Xw@^0_n9X=zaCYLq3P5s-^;izQusY{Tq4k-L^Y0p)`Y zt{p0zr|U&Vu@u7JBLp)V9L{D$A8CzHC~0_i-3^Cv7T-{cioysGL)=F5TpP<9pMdmL z?5xsyQaXZi&JZ{(K}(T$`g~ooRA%iQN(OmNlkn6;QfJ8_-;M_3pin0fBzD+$CZ_>0 zp$l-Ej_(riS)iS&2q)+AVj%|jzgi&3%DcP-r^RHvx@HP|oDO%60qUzFj0 zZQuC0O(f8q^D4%&BPfK@5rLqdFse-aSO3H#5ySJ^MoKG`jstlP+q7+XMG4w6q{JN7 z*k9PYHTmih?wsZdWKOLPFVSucgyqNut}UG}R|6!DgZxJ5Ys&5sgApN8cr~h(H4zP$ zBfwOfTgyBGmC>O?2hxA!5dcFOq?9JjAf}<`v{fnnA$#3s{Js8Y@LIbN0bw$69=-j#R(t`CUN|j1XQr&EK@eBHi)znxMmj2*0UyMa@k~NO~j%E{D`q^YPpoI5?*TvW)QVS!WSpyakB{7 zH{wDa;%VQ`8jQuNNh#ag0GaWM2-G`10-(3u0Ffp1<*ron_s&w@f?1T5a~YL2muv6L zqe--A6*qQ6H$0%JOU+)n2$`ibgQ52Y7jp`Smw!PVlw0SdVx5#WS1Cr^5QH{J(G%%W zfT^U6atyatWe0}R&TqJp@nGN2;E-3t;?}3bZP|8E4_?M!hj`%vHI-zp&(?o<86#Tk zC_N-PWJ#9|oVQ?<21MV+Y%m`$Cm$?#vgWXMSqk2!`Lp#f&KH}^ ztPWUCCux(HI0dwwE&_V0Dn3PnL#X8Fc8=R?=eE}Axqm6b6;I8)pM2}8z&024uS8t# z%UnR*;OETEFTP&oY^~o4Zdg|cIt3+Z2sD?Pxm>e}n&O6)(S|tgUWYD>1LN8)lO?% zGD-M1!wJkY0;@8!YIjXL7$PeQ540MZFWeFWF3{`9QSN>cG@=%@3j8&K204mq(^i2qG7%1o%hs8jl?joEjZsM-okIgg!Qk%_+ndWqJSB}4j{H_+lO!}^TsO!4YJN4c;AK`D z$ZUvb;+>ri-GQ2MN}An_OU}V({WzN@6O*9@=4HdPzz)3DoK^*0tL&{3eEbFZUn#Lz z7E(RfKkc^0KkYWve=h!Jb_{HKwsy`8?EkU-`y|RaZP3Gy%-)x+oy_%BSU8$vCt84Ft12SAzo-DZ@X=1Ai+s2Ej{W7PI)`-YfA*c<7q zI$2al8I&S7uLX#Ny&yEPXG-t23DI-dOTcDV)Ck9u3f=u3~GBA zo+7b=7g<`M03-}m@YWJ1(1LHcy<3*{ZrN&l(jYrzs$5m3@(G?NhF_OEQg5%A0?Cmk zGB}Bo3yMf{MYIWfT5H9cw0g(m$|Smfeax&X3qf69rr!(~SW1c50B?k&gQ2sm2zAOl zd(4BTl(`?>?E;M_-M$go*BoDe-`N!5s_M|D?M0XwR6!F3_WKz79u%F{0;t>=AZ#Nr zjgstwnJZ97^e6k+?FeXEDO=9XI2gOTZG0TM<}5F4Xb400RH%b1+tvXqEbn~~i}mO* z?+g{}0kd@m41(AQj;)tMaOO~FY$VrKM4a$WgdXAU$G>nn;w-a_*PP6@*y|d;$(LU# zoVDV7MDuJP&!;~1-O)4GPkCtMu9fIy{FHcvxjsD}kutd58hs&A_=$Yxk94!fk5z8+(ej&pXQRz6!Z?v#)`v~fgh zM}i29#QHPv`|W3rkYu4X84Z0Djk3v-o5?x;3TUdHsiF?sV z)o4viLxsCaYG7Io{eomuib$rmcKB{JvM0rsriOuwkt2npj(9*GRZmK3Vu<>c2&wP4 zqmS)&Z!)n;rM7Ck^W{_och#_9WQlF1U^ygSiTkVT%g0dKs$qp>1}QNkn}&&%4ff^l zcx1P7W1*f3iBp*~iDiwHN=<#=%)_QN$;d{>he={N3{-5={NmP?RT-VOMc#oL$u`J! zLEm-nL>?&;E345qQ~3{Yj$x9@oT&pOqrmC+tM||O!Epl|tISq!Y8a&Qaj}Le_>2yt zCy`DcH|v9(gD7ut-f><`vn^#~A^jj{P?PlVTlFqC$^yC#>G+wCscoH!>Tp%kQEtvG zSnDooNp=b*MNziAwU-%unxbv}I+?{8bHxR#u{V2zR+aZO#H0jCh0+`p5}Dy$J)Q$I zY;>$TgWU~E?7R8qlsx3GyZSv!A&Yi)G?j{MFOl-ORZ5DG*v*X)#T1{eUpF!gtW`ps zBCV8dVhL-ZKXPvbv`bWW!WlJ{)MuU2X<0C9M-dU1!-|SiVl-<^{)W^po2)NV&bUmg znA%#7BY4N+!Q*W=0fq~gzS3Ih$p)$46=zZAzOs7581+JA>ln#Ol{FE~WUNW2q(_|` zW>jtS=z62(I`b-)UtwoxSgbFRzpmMvUD7gJFK^$DcMN5Gc3+AYWphjGO(Gn-<&ZPE zrzjLMy>9-XO>{shB4p(wyx9g&UqMUL3@2gL-GG&}r~@i!X(34C(j^>}T^e37u=O#q z#7L`krFOKHgSyqq`3zP1!vLS^ZAy#wS9qTZ@MRwnq8gwGNm4@H z-rc(-H3E~w^XDE#>=dtKs>GN!kAAzA5V=>0 z*A!@dk^(!IPKyOM&OQ*-m~x|^bi*9$q9g{3i)5~&&?#S&?fTTybLy&-^_nkyHydoy z9Y(6J8p@yvqax$yT%nI6eB-dfdjegoM}gT!Z<>x;4G@%;IK;uP5tC7cmN^6C0f$WD zFit-XvV!Khl&i>;KK(bjZ#`sMKKo8y(Oo0vr|IQc>y1IfU}KD;e_=kyJ}!=hCWW=rp)%11@`1MyX};oO&?hb1A5~O#f_L_B zU;+52;JVUuQqnoxJ`CC<`za|PYMeMVV1i)k!n`LMNL(jUp0`~U9Mv_{5G5t9BV_Np zJt&Y4+9y2>nf3q&0VR}pWF~L{k!}{$+Ki#1jJg<8&)h;`s=84*)4NPT3`DO}PRhc` z9Mm}d=r=XW9-UQb4k~mo^L>kf>?_EZRdrcza{%aE6j1IhmexL)H0MiKVwbyMxSmO_ z0E`7s3CSA`q=znZOZqIYhpYg9un^tbih#TEi2J@uLXYZI>q3{Ri%s()ho;8_ZUNpu zOphtVLbW4Ild7RRpR9{O}Z zsUniPt3*;Mo{~O1;1vsb$H9A8TrO{5z}N&NYQoN>+%o3?PV^&#@?tP*bM#5u_N2~w z;r#~%(9*lLScvCeOUGBIcC)?mHumAbIPUT>fg0F}B>3Lba9SMvowZ|RyjnznQ-N_@ zr4iIGALHO+4hJ+c%KSz-(J|5fHv`7?W1|TcY_vEXfxt$Aw8D;qGXEl6@3mWBA8+KEQW(fd`}=He&PS+LCwy8>9;N$1z8$DSutM~G~`@^W~a2?^xe84}JH z*G;CW9iO~VvH&AQ8Nj*&E;Ioo&^s<@UqsDH#HTkSBt23IlDu5!d0*;sR8W`K5rA{Jm*apZs%X2nm}2A z+yH2LHT|QYE76paM#M1keqH~qr&htK{F0wO(&E7g!RpkwGLdso_5Y+yP8LCbU`#?evGSqURq>PRgeWoK$=@g%BF;d8Q3 ze9aNE*pK&tRLLDNNHMtZ4rSYQ*NkAw{Q~mD_l&#ouT%^-=xnq{_VV<0zQ&}XcO>1e zbk8+Iq@&z^9`yo}Q&+!)k?X5fI4N!T85KUL10#=~3nTl1el}w88wHLjJO2HP`+VTW zDOmjr_`iWl8`zjfP8_7nhs@;?KWv!j8nlf9jz^M53%YAqkTP0^&^%@1U)KQa_* zrPs|ckY%F-E!)GdM8S%luP2?V2?ld(v9vL8Zf8tzd=C)Rj$^e%ssbQGJdWYf8=9qBKDoWH$ymv z!?(}9Y?qbkO*`kxsi2tdU+iSg@Mmb-%hR-Ek-BAeiZ&@!-ZN7XGwE4HHc}B@O9w?- zm+5(XXT`p<7CBJIsoeEd;=_SvCG^rsC(|vJkT_+F%1k?@`P)U(BHAIroN|XGT&;lHV=!Dls+; zL1sGA+qC_Ba!n0^G!W+)JOC#Wc8mLnRb;1fLRvjWI*9D%?30 zI$Z#e(?BVAA5b4w4n2|^uvaz?%PFC;AT~&>*PB9>!a_EO_XqjFR2M4E z6VH_{Z2)|$745sMnWGILrl+l>NXaS}7pUDEQYh~PM{od2u?YCMBaC#GyiPg3@JMke zE+;!nENhE^S&cbX4@By&oEk$EAkU{`7G5omi@iWfJEIy!!)k(E#aj_)y(p8k?yHhD zPOJsYI!V_{_5l;sHP46cFYzd?pokU@t^!s`GrQZJUS&1?*v5s*b+bs!RUq$AsJBVz z7GFUG!;s}QlL3MpBr_yB0#K|if!eZ1i2=GH8SNk@sI^ZMGucrIXBeayEqPC!JMxD# zwNAt5m4%rE;hUG~l{B9k$M~;$G!*X3qypx0^Bg2UT80roYKp?^_({x0{G6!U>uh+dIlaN6w z2z;JFC5MrzM&%5!yog17vzZ|s53COl_4$3pKw36jvSRQxsEQ#)Q`L{!B|ZmTEOGIw zfG~FuULi0V1XgDbldL#NJ)=xgz8egVS*Ma%pa7R7Bp}*>+6HF69`gWD0v~p9l9Ci= zb16PL3@*Z7dZQ#Adu&hnXdL232-NnudZ5>ax%m{!R_rcx!%ZC@0u7b$aj~AfI(IvIp3|ub5$2}@pi4cg~&m_v1jTmCHk#xg{#4Sp!1v8Td?o+R*g9Wb=-?3{l z+`O7Aa3H!FCX68hT9DvKWGCQDNb03E+XT*X)fLj+Pu4#o0$mdDG@$$2=&(=9iwraOOA929XR;Q4W_<#AwRQt-xUqMUYT0`y$+&KDcw&dx|!YlzN<#hsV{mO62Hw-x> zkb(@pBGXH#W0=q*+!aR=233q;N33?8`y$JcB08J66k{6#0dugUD6b_~`;J{s8w?f* zBgs%sz2qwOrJAxnoZcD#!}^nZ7)j5QNI}lqrz(pPvm0N|K?%5yA?jD1bJt04y)>Dm<>Qzcu6cU$ef|&TL zciY9u8D}W$4S~Sl9)6bsF=v<MJ%9cHd3_3?ll|< zDz1fP>R^Z$=#|rtzoE{`Hf+dgzd7)0((m9>6i8MPZI+B|j{-%EDvuFxG+y@Atkl0- zLb0x;+20h%vhtRG9H!nprsd2%#HJofwhZo*x{j&-Ivzjgi^o^!4PQzvmsj|*Wyc@o zguWN(P{hog6ebK_@h{}{`5D$8K$U95^T}ceqY2iKG2n(^7QaJ`0R2mQaTJ&JNQIqw zlx_{uU~5<&*-*?sz!aohB`LKACpsHzpD9)l8Ige>;o{4aaoN$AOJmoQrHs4$xwW$H zGSb4(SgTytNXsvFzeP3ZBEV-du)_Ajded!${d!dLm~Z^l_aVgdDkw7Ao&-=O$@V25 z&H3b8Po&vINfr*>qobjBcSbBXGqTB#O1oGXqC2P7pBzXnI|bKHFE~t;)ox~Ec!Gil zFUo6Ne`O3v80o7KGA!A+nOIiq$;c2+mJvkfQxSJ)KTl6nymJ>h0b^((MkWeRxUulw*ggnixp{Xf!R_alN(-_p7lyF<4bV+c~6-`#!fU9#3LQPmP8I@$WY!svtGe%W;Of2V~uYEE%N`M26Tr_~IHhQ`p>wJHki?uxuoe8IvSIfCN zaWail=i1kVXc#!?y6^Xoyp@>rON*lq(dhI!O4cGy=az>J6@L#3<0nma0}g5&p7@`# z8q64AKxoitI{r8K>>uS!p>`Mb79CL*i_aW*Gbj?K3?KyQ+rfu?ok8lRP0cJ*HTJ{k z_QI;XNolL@B9r8m72sS^@o~ll8%Ob4>ChbYT-Z27v!A(a?_r>QDMyzF(GTPFc~K>=z`M`1oKke zzeu98NP5WWTxwNow41H_p|J)GKrV)d1YJqKZp~DyOjn6%gRj9ax&26*9X|TZW3r3R zozk?}jX+lZhN$U?*EIog5|(Vye}e0#QB^#oy;k8|S`!zA-`aQWqK|*i6+RvU5okf5 zXtweiTvn`rw{N^g1~PZEL*UHlXwN16^J;HF(+ffbr;UQh6=yxz9aH};^OnArfz0b| zbfC4dsv%x!2~hbx&a}P8kk-+&jQ1eD!gSr|gw(e_G(zAdv7Qk|-q*p7MTLEYOe;su zOqv_rSOibVOJVyW|Pjx;9smJD(aH+#Lztt8S+XR*gt4JEFNEsCXPm zMK!>=B|Cyr4OmCqOv=w*+O#jGgM$#K#a15>p$ju6wzA#rsl;yVnRq@Q+(QXP*dZTl z0f-jYih|?0M7Vyg_m&d(*L%zeYKoQTBn2kD7$Nt!@ z!|>}}G87tc9p=HYTmR5P>9+oGN7OM!XmvG}iHaBojEl-$F1KCEKA!D8Rlm)Rg!d(Q z1Vzs0-;EUBx?NlmE5Kf8d9yEjL6?)-_z7=%H&zIh=#2XECt8|y`PnBz+9bjy>X*&% z-j}008`aSdRqpTOEFS|(lJJ#Qt;>Ps7LPSxhlw-V2M*%{aPS@N*ZW)Ze)_A!h#h69 zE}DjB-{>02axYGH0uxP*E=3+8WNhH1$UM$?jIxH?8~k6(a3|<{BmnA6dbt*9!o_28akF(>-W2=BW!_KVsZm$6!IB*ALQCE_{ zqC)LN%cQ_(1UsXwmcdm87mW)GPdxCJ(7aG0NWSiSE8^1ax6}QxHumU&I7@ft;a|bz zn}vw-?_1JooCdDgX2jLSndU@M_*eVtv%$JpTbE_cm^%xY2EZM)LOa>^i0?WM)Lbs^X&LKF1eedQ@)!L+9LeuqY8cl4 z`iikjuWmvC)8TWVRmJra{mZFpqeJAeV$$uEU2Ty=xj0*ab;FA@w*q%e!0s;Z`X&VC zVyi6{W@R+mb8%u(n@Y^*jaY=DN|s(HWpY+|5Br_z;dZg`oI1qLDjUzn4mVT=#k-X) z*=6_IH0OwUo_30h%Iib?nm`tcSx7BGI!0g>$Q}Dz_>dAEjFo4qg+1HOK3H2~@~lTK zYOJ@N=SRA@pS)7P2ypx<3Ax-$CVI_WcxI>Gm%W2y1T1HjnsE{47v zJ0#Z7Cf@5VEl>*sxY2MPL$7PUn4k!9CyL-pVSp5VEsm4=d{_e?I+BhB`L!HE{HT0H zH3ibGnQShC>+e;sWO#BvPB2bwr{l=jJ*-gMQQp6NFWwcD{?}?)n_AWrWtKTWG!Wpc zDTx)h4n9a3@?|R8c#+u3ij5PP*c6EWif0=$x#U9{IKt-)PCVG&dpD$dg-AJ$)#&do zVTtg{0XPR!R2Q*h0dm7Eph@ybx`K{LmkH3-+COdj3ClnFm#8ABJniykO*xv+hPssS z)o>cOD*N5_(9Ex!snk=LL^H>%k#FiYsd+@Zo<1!rRyb3t9!1YOapY3@&dHVjgW{a? zTtabTt!=THCLw6`jE(7BA)20w!4l8Jwf(S~mw1uZQ6r&Uv?i}nlKx=V$oDgsWQJ5S z6(A1265nc47pc_cEmKcfa0sxC-@veURlv%rjA{bjoef08ri|uN{H~N;43Uf-aYw5} z%QFWO24M1)mp>J~HuiK{&ugju)<|7lznl3}^T|mXiY83|FltA|OEZ=aQeKQ~1BMgZ zP;R6$!4k9>W}b->_A^_#q-zJmY@aemmTU2;w}IR@0mrPH*|NNO<9qHk7xf!g$R@hX zOP3foZPf8IE=)c#N#!q-N)n;NYL{d>TxUf#+joL(!kt+`3iQ>7gCfc<;Yf;`^lew- zfp=}M_8A2F?tj~~x`N_b6Krg((%d{^Cbcy)XM%|*`!9Q2eK@LQW^os~n(xvtgz77{ zRjsT||}Y>;b^#!#+P6nOg+Pk9&cF&3*kqNfbfO-S5tuvQM)5juNuQ zdfpAtJGU)_y^p%aPJo2kLiqY2l4b#=-6dHw?j7Gxh8KQ(I&-#J_*$m#FA?`gKL`!l zTI|%mppLGpf1Or&Cd0|DUwQ(0xj~=WOg3i~jLz3Ci?h+`#+h2Uv(Ukzbf7a2njzk`~f3#xcL|xbn zsTueYJ;qR6?AvqL?K`_uV_HPC9&f4YIWn9lGOX(^`R}6J^fLh!KI)%%wy!5xF1s~kzUSwU{uP?E7wQ#j+waOd@>y)vIw7{6H z7415%RPwNDcCl$%K-dc8*#S%Aw{HBp@w6dykq%wUI!67CAjnd9X)arDU)*(@b%eXC z#yYBv=m)%k#z9gnCaw$?8mrE$2DZ-_qTOQ&KkpSQ%GW=A92NA^8Cj{l^ejRdkvG89+mM(= zb&(ITF938RT~8`p^itFIYIYm9XZhPzaW%;$|!itLx zZz-aRbSu_y4!-mI!0fKN~>}L2AgqI1oQQGt^fMn1_-g`5Em{l z55cUu+l&7hehg24R$kveTJY7T+16{?iB1R*_t|T`>hEa#z3{Dkt5AH2enw-df$JO;Vl~8h-42D89v7Y>_p) zf5-X>u>v$}worLD4LF{s=5AX#_|E=yKa@<3*f#&bf6`uT}sSpCc` z33jb42u-Yxt7-ibP?x0$^B2BwjTTC_!q(SzWh~gpkJ&sTQdC z^9Kz>0_!vLN3I->9h)zwo;WbX_jDtN|7F-+8|e-TH~ zst@UjHON~x%trjlqG;M=@APfmCaSjPfaKj0A4AH9p5;eaD+REM5XJi(MN;=Ff8HGv zRIwwm-@w{M_4DqhlfKwKCYfRHfl@xAM8j8)Amjbu>K6Zfl1}29YUAXo5%L?0MSBMV zW0>&WdhlPOU6cz%{kcO#<+BTBZksUqBz9-a?kma38Rr z^SY+9^C4yyI1y0h4OqrJhDiJ|XuVYfr)nR^Ae9}bhq2A?ain~I(L$BE#Jh1b8|lUp zt9sr3C;ig^sB7OUK6pO5w@mV#;XeuRxdI7FK7LC+qn!bt%`Gwz*^OA^Yi$DB#&?;b zeG@NPaZSIPjmoMD%#l18;Gq;1f=xQTEE=JB!tsHic*7ADwLHd_87O(GCdH4@7f1{H zQ=} z-0?nrkR1$$HB3TyQB1fpPeFDTgHG9vhU7z&TM*pV8@PX3;hy|+_l(JP5XLgTQq(77 zqM33^Ip&=@sCA3P!p+?3VK1wRx7EOc>iZ%C_ZpSfM&!%J%MFG$^>JJdKYHPnh%~Jr zb8jARWGp`D>hrs6lmXC+@5WqN47fX)h%+fpHrldeOM3N+FIb-y_-*m89bOm@D37P2 z_8le$m$+$eAcAn z)ycVn+49^heA~r^9tznuofUR5M};+=vp2cUzbZ7yg`Vus!aSn%ote%}-H*4Ux=Gz- zA3p>t+KTkd&^!9KTc~t>Z|mA~e7M^3ysS~^$-ryTbgh+UqpVkCc#`pNByLzI%yj^I zl2Py&Ehl%PjeID`$s<;8K%WlUB6Pl2z#xD7#IXBP6d6c1))iQBD4lMb(7Ej zkP8b9BUM{LEYT$Tg2SQG#6CZn|2z3(9PSlBE{+Dp+@01eWy~;W!=_u4#fxx%g5sRN zyO#erb8Z5=4>_ah&olrG<;a&|Oe&-;H<$=zJ-3H{r1X0Hl6b+}-3^;pwjba-`F!8j zR;Rj}7uvVPG{KC0%;pQebXTn2Ymi1aV-EC%iwYL+1Y*1mnq%6KRq*M`UQ^gn5L`f>3+{T zTfWAF|NGOojT$pUrwr$%sciOh?N~6-YZQHhOSK79D{=Pjo-7m35jP*s#iHpvV zs|~$tw7jE!{^P#zIlH!1UtM=SEAN9<+ukS7n~inBU@}}Fy3=}rx%M)VBn#gVUq7?C z%Xi4za+j@i1M;zQ`{3+EV3*(}U6SHrl9gleFMyM+9^r42A6KMDjjp5S6FS7fK^EuJ zG!x8H;K1e#>v9J~rzF`A#nQ7ukMKHMkw|1tTx_q38&LWOoPhsH5k&%tfsls_7Q zdA-wFIsF~+CU~jn{9fX^;ejn_M;J<$*f{uwDgW3iD>RXq95Kqc|MO?><@)jQ5%1RI zV7|lrR}ZnZxN%OvXi7IFa4C9)92^y?T)M6chROu0hDY& z>E=m+<;4{pA+9xDPp>si zR;K7f2b6KTR~nNYP*%Tj(47Zw0sA3TlHOg9Doo85I%KksAjFwt?<*J)opetFErv9R zKpFFSE^=j|6fUtpPeossD1QN<34*@igV<^0|4|T*dSEoF;i?~HG6V@`gWKk1N87V@8w8(vy~r0&$H zMPLB#u(C>@T)}fosoljoh!^IXWQ(3;_lJ(ol)1_WxeZ|O$UbMgU1EO$6l9S+>nlWb@w zGc^oJD1>*VZp%kYsTqsUyoM<2LN(j5vhAeMqtyRM>4g}ELvG-aPoA3|Ar&sNw?Jlg zJrUtGv5y!fV?mGO&*P&l@>3u=E%oSyT7^m|m4Oz(Yb z1~qY*KH^(tU@F5#0_YTqYH*qWUL!<+MuKPBoRAr%-Sb%(OiGqM(B${=6z+=q>r1cs zd^r5i8XiU98l~;Ef&o8o@izRTJIz)lZ-5?pojHE3&e0h6^QUbq=Z?RczHb2$@hYUX z&cC0Y&(~X6_sitoWJFQfAB>$Eg^RS;Am90#V>#-6(GU$Y2RY`9Y$zd5r!kQiY2Ky{x2ZM%mXsc4 zBj%rOtf5b1#nQ)$rf-*#DS{(>`Bo27i>7KK?1d(pJ4cc(2n}Bf1SpDXDFKgj^wHBQ z0FzrcpF@t70s9KzYl8P+T#c>BaKn~@<~?r*G(dY~4s;IaQLqQ}q861Coko>HR<~E% z|0Arfg2q}pxdAF5NF0WCLOLH^`m9`bCNub(>iV>sLp@i79Bg`G(w!gNY)~6EKRpzm z1$rY|{dZ>3Wln+Q9n4OAJ-zXp@a1;vxNWVT_d4)IJFzr$-wNiRb+}`Eqo3CX^4(=i z=e4z7lzy99gUmc&l4oRi*16K37ZER#KD6h^9|cJ@FwjjBy>)Wjlf3;;5VHOO48$UJ zg0+(FCysrZ>$AsXnb(#^%2=N2ehzH!W58P{?T?%5-oVpz7$vI&ZtGlzg4@Ou);*YN&l>3U(?CGg2jW^*X_8y08(!24QYlB@rdm5%poR~qq5OK{e zzsu$&@wY~)G`I($qodCwW;xi?Ff$z?MXGG~ zpU`*#|uh0K~1V*B&k>` z#^R1z@P0VoSw2)LCDvB%f2f`0gC2l6wP#GoWW%OJ*3Zms^%Tv4xc?3h6GC&A@=bA3 zY_xNw_I9$fL(aO??C7A;?x;OF{EI3Hdus_mL?#o9ir^r1u$5dV(E&ie<=P|+@3k#B zsKHz5*&FQbq7TK*Gw)TRu$rO=)&{%7a`0$#?5l2x8B^b@VNHdHPR=@5%;^iP457G` zUZ^hw^Et<-t8>ZKnUo|?KGFOO!Vw3Vmb+r0{B+M_N-i?Qf;@TTCJa0-;@LUM(FyMA zqzyi%C;0baE`Jrx^ zve+O?+tlLn@yKw_bdOK;?)(;VQ-#n}*8^=(u4hbJI35?0Bg~TS>&~$>IrEuIcDH?j zaGG$e|H$5f%lcWvo^< z7(;FB(v!KNGyr!gyd{yRq-i$eIFDaD(osbd`#IGaN1^&Bmq)6eWEPvN6dJxl)L0TB znqSgUXW+g?lNz?L*n?I+?Gm4!glikYR11p5d-2_{5h8BoQt+d$g4dkZ?W4ep0AeH<-Twn|>sgqXPV=tkdV!6stK zk}h#WBC$<>;vHQc@y^kL;CME}&x(9GuO_m={Orb?VQZ(-G&dj*u+HxuitW4R*>~-q zHfNOEBk)_;tuW+_c3U+S4>@QNw%t0{fGG)-_@_fUZ+Gn4e%N7cn6p4b1~n(kUT%m* z@rm#eElk>pyT2Z5!#^-A^XhjV{tjw}SR5p}+r;ZU+^oztcN)D{hJxrZ%v>rg!(0Ww z>ruX;o|rUQdC9xp1Uv5;{xLei9@1R@qO zh?|P1h(;`xvY}QKi*u2+`tjGZx!*wEkrr=V)Ken7Eq8HTeSpfJoFK^m33SIzlny0! zx*V-?UDw-Lm~J8+14yH5W)0Yk`YQVjx$_a7nsONiP-%BMw5+Bt|5lz<&*hvbmCayW zPu#nL{eWY+k zsOP4y_kH+kx2UJ23zCn}ndbC|;(c-FCxT`;n6@oVBc3LjkLl#4Ms3&z6Z@CW>dk|N!m%%d+a!MIYDCk7uQ4p;w(t<2kG`9!$1~`h^1~PDOOWLo4 z{VMpRZJD5PoOyNTDYLY%${#0}WJY2%3oh1~mmQ}1Tv^l-FH=3nwzlpG8ueV{Zt#6( zasXHqWGTe5#@Pd&tgC2(=+>XSfm0||d>MsHqDCcs8Cfl;#haZa_Li=&W;jgbqNYoj z1j{GUW4@8V_ySGQvVY@AT`c9267!E=LnV&`%f_8supGd$qIq=v4vpL%7v%6L{i_$q zIue2Caa5jC8e$pb@xmnDUE&1LTXv>yL9?Q9cKSSjj&>9Tf9?t>OC`!I+}t4ptliu4 zDh$h0kjLi_1aGau`MNd#!RuWN#_9_QotJ(0X-NC;*LthZkr{vsuY5-7|GAf2WWT@^ zN3TSnt*Ndi*g!vK!4~xjfRzb`g`9<2Yj=aRDI82BAm-vqXrkKTEz9`;dou*Kk&io# zpFR+vTbtnz3a0lSGPzj4)9Z5?z7WLVlv#y*sW1_C>d=Hoit_5*V+%YX^9?&CB-Cki zp_nlMP>iSKzN+>uK(5=g0L@J#6GS{^W)ne2|GGRu;WxE(OJ|Vjc&3GQjv0`taNSdB z8;;E31Q}5NHzL>a^LLCK_<{5V7}FwbnePmPZ8Q9%y_8o6PKn;ZO($P}bOIFpN+25% z5Y##s6+*w@q`8_gGm{hP@lNG2sy9>U_dlme7+mc}JfT(yY^we$&hPoLJMz3Jj=-P4 zm0E0PU;Ilq%DrQg3Y3*iIX01PJGI*0?5Z5S#YlAOB4U1KHY&Iu=%(tsGJJp^8bV+TKSNso5{!&|{ut7#TzUvBd#+D7gugkL7K>g_OJi96F{SN1q0+)q3^w;eCe zC;p6D)vQHEchq=-XW*^x&1uj={-O_T(9vxc)%dv1&wW-BcXboN|3PhjdR(){Ek~A5 z$BVvb$ywfl^%{i)l3-{MerVlAw`M52`a9rhl0VmYA{bA@VB$p__UrnBG+l@WOZOfE zBg6Q#vNRKdTD&TdYjCyoxoUtBL74s~F&%k!22V>yJeZ-m37SB);7e#HFN=b8uWc6` zc{tv+u6xjkDyy9Egy3Wk-|b#N*0Zo)pU!Sq`1POZ_@{cDHx;dBl|1bjDq;TK$31@g zxGIv?d#>~X@rp0nrPns^1l^Dj9|qjrRDz`9H4V0xlH!g&ih>#+NmlfVFgsZZisKUX zh^HD2qr=#MC*(CQMY9SYsd#Z?8y`K<8mnf(|4Erl$VH6v+m=UtNGSz)%qP?iIl&50 z+$n{sJ&rUsK=4N{aMfj0E{!KT0fDK=KK1#?(PGIcv7z;ZN#4{TgKW+Bz*$F~WjYM5 zgffKIrwJ_%*5ntiET}ALxkIXDO*)_V2)STxk$fZ9^Fzgn7@oB_$^7*vD40BnN$aKR zA4A3G%W@JGg+#@Dv+lvNa&iEmEXI5Q>s&K^Hv7*b;V#wTU>id1$$ynfK+*~wB>1vV z({lZ4y5$cL=Q%2UX$ursOs(opjD-xd!x$YEx<=QdFLlUH&ffNIY^46(^;&mTY5BNG z9kx;m~vNM${@Wa<5V=U@i(niSgZZ_7mP!Yqkc~er zbHPQ>r*PE4+#S1;p~93!U2dOt58bK*nN~yb6ID`My8FTIYb%5BaX0SlPSGdEq_14S^<7=g776F zE9``hR-W9(qi=8In>O|plz$y22L=LhU}cspZE5{E{TF;)ISyMn2Et4H!NKYCvpvoiQMuhFi=!Cz5mTHQOY6J+lh^!qsd!=~U&c zE=XwI$?=I(!PLBf$-Cp;$_Hox+ML2g5naui9dK>0PF%|(fl{zkwu*z3A<-WCCcC@o}_uDk!zdar_D zoR0o*j(6^MUyFCzb`tJoT|_ggR8X>ZH?-qVnV+qdpBP%P} zZ#a|sil`H1-nGX-acUn_2Ai{v>-;1>fTPa zBI?z)Hsx5kDqR9Gwzj1i#?1Ra{?&aQe%&_pBa-&oO8N}Jm=y4vYbmJWE^upSoX;gI zt!BY9n0E_)are(5=!CYvtn6k}v>7U$Y4*HMw2&bF_!`EJf{8-|F4lG$Z1?3*jc$L+p zbTF+VR27e$!W}05T^MRJatf^zk>?ISZ?j`S{~2p_QC@~sYiX)}LZiBKuK0)Qv?;In zE&`&yKL|ty7BmU%M%DlkjuBJi_=J~G%feEhBW{SURv|Y~+^@Qql&lJ+`c(IO{>yc4 z0f%+<;E^9Y!ZNzo0Rbfs=EF|vq5#~cqVSS21d@bld~hyk8EO{H5;Q5-NlQ!wm&Upw z59iT}{IYPsVSYp%RNVI*BuWmFVV^VMc;Fy>qYf=t8{jspzCBTwGRc5XHm2s~%_7Ch z!5w0tZ@PT|C}63ts82S*5;Bdcs-0#Cax=7MhLJ=#RjMs6P8(=Y<*36_gauo_Ac?Q^ z;7-+!W=z=|gTUS3PR|qabKCqd1rNgbE{phx8@9w4Q-rKSQ$_i%g!9qI)p@aEn#MZ3 zTvm1~Gv1>GrBeNGbx77CdpbxNsJ}c31`l+MDX*yOGtD~w?B2Jzc4M-I1U&s?)ycM$ za;2~hb!~C7C`Vne1Bfn`Y6nrRDVs9bosrPCJyJQ6Hx9x?xG)A?Lb~=A^y^~`=*|=U zSX+%LZDmj)<*QjNt+C*(*b6of0SXzDqnb??Sar?{UsepnQdb1$q8M+{>uC75wDq8S zkuQy}Jq04!iFyhC;lDSns!qF}57*5utc$(AfA7V7J^6i^uX3mp#_H&YZXyNUP0THT zZ)X+sNiosy)Xz#BjQC^HP`ZmVp9SNwaT-iU%YA$yevhJPBaykUV+=Po0*BXQJ6A|8 z{V9s<9;NyfRs_NBHA!|eXsiDIgQQ=`AWQ0V;z`o-%p*bZWXIw?Z>V2j4ZI2dard(Q zg`mUoK6^X#8n6Ej9O$SI362T5yniMZDUgNUFH|7hUH^en<#p1t<}vlz%E*1mP2!CJc#Sv0 zj(dFyAS8io?Fz3=#)MRBFOu5TBuoj(qbhIa(u9v)D1h+iVaL&CcrGVtdaD&fzPLZEzSPh9XS4wOgaTjxw-!@{~VS=D7A_el+b zDN@4K+VT0x8y54HH(W~4fd9(%R;gn1QM-LT8ryFzhhCQy1DwNUxXq&Zf_?U8W<7;? z69c;5qM$)6#70~APICJVqdBcPIR$>H%tA!|Pnv^qxs?|Ay=x4#{!f0x(laBerR2C( ziBS*qxvU0-FQ7@CSgRP+GP`3i*Se`~uw@dcYo7O`U&Tv!2vi5=JoC&>N8=`{Z^VYY z^B1;I8dCUqc$y|^9`*Kw)GVPyP2rae(92}G#?RG7I?;lb>6n@-Fp7~5CT5(-h(YFQ z1^pu31+&zP!i)4kagoSuoO5S)7$&rB>j%%Ve;7O+7?<62x z?5l?Ax}POsj%yHIZtC|>wTYR)cQ1@x#&?mcWEp)z$tq-%IW96f_JmeBUICDu%a?eU zP-p97m}S2J_`!Aa@HH~Se9}m=yITxbvpZeA?n_GlXGQXg6RQ{lLS86%O6nzI=lq8v z@{b>|j(bv*(#DdAD9k)*tg4I2iJ~^7BKHBMjB9}8ofU=%(wuAXwGv;R%0NL{ZbCc- z3ZL`okn#gCHe6qNRZ;J|3!Zv$V`dQ_m$hH(82k+bD5G-Pp`^`1Q8ftOG1vJAV3EpY z<9s9kYxlhC^WcXg6+#s=J9H7Qsg*oy6doYg}Zt`s*K z4u#*)&!l2f0AExf6=aZT28nbcXF3oL2gbjBnYQ!>e-@qbK{4j7(Lszp6y|N&hxI+P zDKU9L5UF$Z;Vl168!(svCFXF8(($nQJhAd}1;Z38s)HJ$a08996~ysk#sE34o8^zl z$5{_2h#T|Wwm(yV?S}_;gTP&|C6PWWsjb9{qi=gmFEc@7_4+V8Xu3LG<;!ooja*Q~ zIcCqcCYbNJs%}z|!l{f4(HouHmHk*)57ih6PWDgo660=#(u@i&)oerevf&t#@zj0tX6_fC;>633R=TK*oxk46SfXRN@fNKYaV1&u!{YRp)qe zK+K3K%FZ`4&%G@5i>sgSInn7;kit%^J)kDAhyd4V(}-ZcIA3-zLaPJ>%Gr)*@W(aZ zzLDhJe{?5E6pHjJ)y(Kp+DTa{a2|i)3z!Q|6WxZ_aTd3*psUsnzBLT^Ln@&9d@?pU}L&$WlbQEhpG z57V0k^H@zS|67*kludx}%b>C3=J!77Q*_Nk0Vw%OuPpc3;0F)a-E`mn3iK5yG0Hhh z32yC4Rm(_&Z88MsA zEn!q#O=CTgl>IxIW^+}5YJpGN;VfGE#ke4b+}^3#l&RjQr!r&^mWEfbF(u+mYpjxIE~&N#(VpWaE?5Z9(j&FOHG}x#P$cs_!+p4L?Bvg*hr9N0C=X}O#7OUWAD$Sg%+F!rNxhV1H6~E-*O@d(`mN!1-(c{$orKF+f`o0Gbx{M90SLZs-_N~ z&oY~~8VHta*rxzGmnY%h_qnLxu`_q2#AB77}=?iohk#=3Z zf4x)mE~AE0;-2!$Plg;f>%c~HrPpNyQGfb??kD1q`*wTCNs2KAc}8bBUg^TZbt}4- z392_8RW4)jqQ*iVYFA?u@&7KK4)Ld9)Oa>@hd;%pMW}N~`|sp;i$$7{+_6KS@>^ua`Il7#c0NNvVLVjNz#xv-s%^dx+g|XKVR#ydkD-{6pHhgiE@L ziRHE`OiC1ZRKFV0>hW<`h?VPqE_ zwJ$qugp&YTr8!&7x`cc+$hr`9v_gu2b%MBJgZOoN^^|;oTVP~uq z9+F5H%mpTWH5CcmKRrJ`Nmh&PNf>d6^qW(VN&Flk>-zkAdwqLt(bvZd#=$@Ixt6%I z*7(yt&V627tBh^7d;0qLooiIq{Pwu3|9y{aIKo-y_xW};lcnL{ylwZMlrHAzD*}7< z2x|#EQ1XqAlUg1Jw}UG~AXKLnkhis`>>XtWBw6_?H%E0y{qHURFLlajAa`+l7;Yzw zu$xF6Em=kUk#i=xS*RdGrC|*5PEJma&G6S18S>#5js>U#)G{=W?y;{uhNq(&XrUUD z-i7>{+8dP^l@HqQ@mO2j-}mc{u_4UgQ!TE7%?d5@jV}NDRqU$zi^lu)CU_FHV78#O z!ys3jGE`EWk>;F^Uu_W<@i9)ri{I81Fyq>_3QY!kO@eHkPLwsK8Nu<4@% zFCUQ79|zZ2@cdiTRJ<&Mer6~lMaGF+pPFZ{4HSbH&X-EE*+QHQr6%_Wq-NLdJ480) z4Kob||57~2k(;__7~+g^&H;OA59<9_yt(NyMZs+i)kZG{B1z~OZj9-~!^X9yXNuu0 z_h_3uj!LA<>8;i9FFJK?LmK-fxV=6;;?RgY(lWMFzG#_o^d?ug3)GeHw z^0V__2biI;n0gw8_D-b&*ZUTGK5fXcx5uk z$~ri?-@o}m2!i|u)q)qdsq4Sw%SdFVcv3W@ln-%vBfx?250Q5r7lb3-LN7K_<-8CQ zJ|4_Pv1+|bSKo2cYuDjXhXI&#<#F%dd!oD{^)7{_5?GcH0XZ(RLuEIE=h+{Q`1+i{ z_Cn%Bz3o1IUw8h)um&90bM|||E4BgLfjzud;hZrV?$Bdtc(35lYJu(77E>RPYjz0d z>dERC+?{=`h1vm~K3J;3023bWf0M?m?6fDOi)y`G^!BFR%TA1c7Pi*}4W+_5p&HQ8 zQ!0NaN2IW* zXwX3S5~nBk!4VjrTwb5Mh71II{T?q~F~jDLpza^g2}#p)Mfh)pV|-o`(E)tLsl@8b zvcD&sNrw6ir7oeU)SidRAyWhgnnL^QdC8!yS-j0vw~eYHhEfYN#UO3(f6xh_GBEW ze6Yp%5d*YT>}5mbyM=!I=vF-p{i6}RQL7Ne()|&_Y5nAEHse@5H;4ZuZRHUI%o z-Pt*u%+h9s85nrUQ7egA?nF|%DCSnX7k`HTpHXos+g^t#$C3mma$SDgHd$=NkD@w1jIp# zVOgk&GS8~Yo2L2F61B7OK7L>>9EQQ?uKJWiWQAC{G8_2oCIx2R4#o5`wg*;)r&;PL z_gp+Qb$qeM_&J5a=?yTo6nLBLPE(!Vzy`X5rbS!ezYE$+hj23cPoh5TQirchOdg89 zQpCaR#qdrr{)rQd#TSeBsS#xcSM20ar@uvi0++PrBvLY+0F~6I_qd4|tMmyCBRCqN z{_sU76)HrjCFcKEiXUZmkK8~V2hGm_}|P~1~Sc9FxcGaZCkcHl<_HW zu3e(@&9D6%eq>KCRYJwsYkbgrIHxQjOJ3f;HA3d2jH{iB|D}MkR{TUJ6F;3+WtP)E zr_8E;B&fxx;;_9YO^ zaO(j~-@wEAIwQ(EQVq#oDZ8jbO*Ol^q7oxx*a^0DiuUr1>i>2670eClcbZn~CVWb6 zH9ID7l5U(=?G=3%lfjJxIrtKh$zY|)S8!|Jo{|;w7iKHYUlcPcRR!+#1)n9WBMNhgw zIJ-uCB1QfiTxU$QpL%x>(rctRwvo?JWN=vY9IJaW6CT&ym8s@qb2d$6yJDanz1r-I zv^#@sai<0&W_1jIU@Y7%B1*xFzB1)dah1x8puki_)dt~bcRGU%4js5KZ-#?VFC>fL zzW-@L!39y>9O1sE8#K$0UQlj+D5y4Qxsn|dmo=i_-q}NtYqDH~qpvaiUy#!+}R+o>|s;kBXY?NrzfG!Q}i)V%)<{Tb20xp?}D^$Ut?i> z%^?v|MVY>Ws)$}u$dqVY%RC{@8RxIfb{WywY&MP21`thYC#aflV6({AOJu~j3Os{q zUs5yp$Wx%?ob7vM!C1{OvsZZ*I~~Pm-&lZa8#-Z58Rc zEqc9TAG9PB3*o5ai;;moC{|J+aiQRHUGw5Otp{kV`>(ou5OL zqo80kjFWnnqLxj^Ad!Q?G-s7kkd4&DbQ~+3J;4U6LVH&+{Jz3N)PmS)?D(_i3oB=} z)x{+hom?$*r!Q!_5byfm<=l;N4va#3%?^tPhY&8LN%Vn9I(2`aZ6Dgd9Z?qeUi43O zl2jE3l-4qb=f>fDv_S>A6i`ez!dz%jU%FCTk~R(Zy$Xe_zc50%u+Vin`sC8qx|EI~ z8~oL?8v#s0(cef6sJoAq!5x|RH~GY;4Td%cOxV5uUo;{_=s9)E2n3W<_kR(Mm^&NU znf))gqGMkh_a)8Nz0)_1><7C3!f1dhZ0?E8|#0oFzlu+S|oOGDp_r*{1XbV}*@& zQt^7mJW?R7GJLANJzUc0^xovTAX<$>eT9u$ErUMNs5*3mO8t&&g5iK9M)KlITKppI zP$O>g!WzS*MvEm{rCdv{NE*IKHD}B^n|?7tTG<1;iW8FYbr=7(%84avNS-n-G_Odi zx>PO2!JTJyA{uV3#b1Pe5U@yuDCE9N1*c;LtPVZz9|;?-a#b zSv3rmeBM;mpY`khI4O>(MX7Z3q_MQPrFJh_e1Tl!-|g1hrnkh&{#|>@vp=C)+UnN2 zVvlcaTsR{mSzKye7q>aH;;Q9*INz)cjVL?QMRQKKPjF$o8vhjXAYl3*96q>a%gN+R zgZejB>Kb~IsHg0d#(oBdOB896_@^PGIL)!IW9%p??|%~ zZ!I2IN-z~y)@woANF}+AQ;4l1i9MMiQ79gF(p77Zq_4R;i^Vv8Djz?A-qWcWSJ4B@ z)MPHQP(E6-b->nZ!FbO?drvPevVA8e6j#%web9~Uo>s=XArbLki~Pc0fJ_KZeZps; zHJ0+Tj?7^m^>a!!GL+c%ZE)fdDXw}6XeKazk2t6J^LQm{|rj{W!r_{ zs}RB@5X8^x-re=Kk+y7?fgSs#q=dZnbM>khA~ZxKjQ#uh=jrF}df>j79u%Gnl`9Zp zniHb!XY>2n@%AtmKM(di;KGm3u1+c+^s;5U*D_S@6yCyg6qGXoEI;iF3*)j{R91ezWh-@307fwlq-BR zf~02O*GETZ_pLaGl7;Pnj8muNgSS0iUq%1_-VQLLxFuv?BOdE>Q7Z4O$f@4YRllhC zd{S=u6=xh#{C**#eJgZwYB=z5KL-_H@k|SFpm1+c5?^GPuhA`2fBI*Jrydyyg;lBrqleQO|sc1$-JvS~&4LPeFX>h`k6a7}C5r z|7Z~YVR{>Zq3#BDxx#FS;}pB5jdFV9i!2geedK>FYi%0Ci9$N2-brH?R9UP--}Vk~ z8@M=XL?kC@qo=EZawNm(Td%YfRP_I5dJvH08_@gb(Gc}pQ24wCA8LvbISoJ&4a;u( zypQ9na2S}xc{jbEt$)$|dhO$7w{7up<6~Rcw)>&514Lc2EDNCPuqAM{;VzorJEeS| z4e_V_e_r)}Zc;3ytEOO#o0A`4+2Af#`>TPv;M{fIz+y+F595o2 zLzNJ54CE>IsU{tP3^Nju5qL%jO-~n9X<@|FgC`P+l2kQu<*2F@S3c;`qZ0Wqzs(%)n6?;?%8f%cdBj=3u7mz&2f<5gM=Nr7BM9xmV;bPGcHR%c#svpqUa;_>C`p>+hF`b50p6+*?@<h`e1oWSJM z^)V_iu?0iWa!TYLy$I7wp_^VO>Jq5$zqZ(c-_S}F4<$4+=J(8waDkg8K zLuF*6x9_G8;%9=I-|rWkcmHYmzR4D78axh)X1do@`AJ|dQ=*D!O6yMT&t;qK0fV6s zrbQC7CJ&{4_@9aJtXJCq%AbpDP=f%L910s_=`HdCN2ziWr*Id-UHJD{AS4tTiGH7z z{gY;f#{b)~l_;PwfU(ruf7Oh|U|KEXD=U>;#)N@uXao#jP)%oU=cmw%%FX^34DOvS zM^6bg+R8fNaJ((|`v+DIGM+?d6zae_Q}~`wVv(QvzypCOVAc#`{UpgQAtQViuX|7! z$w?wxR5*4T6)rv)?MksH8Wzo|#9d$M41;neCE9jV67J|E6d9Yo9)4KP))qC?_#c4u>s4R1sHsnV7@Ur z=Ak8)&HL6NYXBS!8=kv`UxILD1&fzbjeeAQFx|NiGX})RlrdlEy?uXHJV(^>S#Br4 zYtZZ{+psTsU*sHS(vB|`AyS9p^y+7^h1Lt(6&jC#Z`nCWfUpUczBefo+5At)FMx{0^0`S8;BCE>2KcM*i{D zTZd7ftQgLT5f@j~9G6)@_waB2HR0c6>-D)gA&hoQc;&xD#l^~zQ2x52N9QWJN7z&I zTbCJZ(q=}v+x9(r88jGsrD}Yj)u+nk>%ABw7}if}?vD>UQeY;lP8dcaMVcyH6nd)q=93=0aSVcxdNFbyHbk z8w%=7GB^b&Ip*i2`MY;Q;+<^eDLv%WEpUM#FQtDZ>&cJ@zi0; zqJeHaMOb0S8hczsd?A$HY;>Ok>t7Xz&u2%e2*w}+_ZJF9Oeg76sI7YhhUa|MG?y#W zgx0OocdVoH&VVJULkt+roAd*=9DR81(vG8{QBoaXeB?h3YAcj9K>qZJ;O`Jqy}YFJ z?)NKj&IMvJw&qp{CO@s>6x8*XhsliykE|$0 zE!SyX2^R#p@h3%sGX-KlX9ikI2Sbe%e&j;q-*0BH(s|$pS)7lfPzI;RbNS1f2#Wj# zFazcrP&R{5kX@tiKssLdB&dZluY%6f5VU;gF;B@YCxP5`Qh;@bVH0x?xWi=`N}keG zRB#gO5{M&S^gCVLS|SFi{LE3^ILwu_?rp`4!}K0#AR-(_c@u>LOR&U@??L;CMkFPp zr8RLzS-fzN5u&Ua7M&6)j?sjuR-?vhL%5HSJ?wC$(2vaUPM9O79-MXnC=k}|HfbaTX>RSdm>Ibzs@kX4eNiG?%i};=iFLkpkV(@*vrbZ1$j|1-k!(mZteevlwq%kq55`!9%${vYEC#s990RtY_~qnRdXKIKY|pJ_>00=*g+F_m-LkoI(BDGT*>|E7%-a7t;437j0@f zC`v4Yz?i^DGawv*=+xW-yfymOWzA>;VO0b8WwaUOuIcBgjA+^YnPus^txFPg_m7m+ zu_R#Gf3^{ju;Z2rtksc*u_Hd7mX*u*Om zpSeoB{y%?9!DGw$jAKtR1MR;o&J1Euj(#m2so1+r-IUet`RdZIbh@;l;?vDgMYeha z4SsS73pyFRqkj35DYp#Um&b=4y+u}_?IrBuOd9%agt>-9cd>-Q>wh`tLB;{nZ?F~Z zzUZL^Masy z41mjE_b`WUu-p;r379Zu{Eb1k;=e2|EO*|gi9oK&(B84m5-E#6ZjNT?=;#6EoG(S< zAAzIAz)#@f(Mr*(L}*yyNmz}QEh8~bfGt-Iaqf?L?=K&obv{vX!=|_;50XhrLlzyn zPb?xf6L0J<#0#ZIRpDRAsyju{Pk_GlV|m!edTAgqZv~3pllrMYJxjc z(1Bj7X>VUNx^~3I8;tZ~v}^?*_uN;_%&TmCMqU0EV)q-#1P1vPHhzvcE+sHZqq}?~ zkuds*GDlV*223B=Bruh3@3fR9h4|kc@Rn#tD@sS?|E32X*G*S)V$B z0z%JSr_UP3$+%&u&hg*le6QnJOB;X~V|cyLz$`xIBJtZs4By{gX{92!)7ThgWVB~P z<*_AMrmbzFa;jo}x0;t5-?tD){+KlWIaMu22(z7$tN*a~^NI#5I##OC z>=W$fln0Ppiv5r&^pPyNdilRa(Y5iFZfWA`BYH$z{qp(j4+#0&p=iv8C>r@tB=1oZ zSv;eoh5Jm{1;arfEGuEH9kqM3-NQ_1XzdUm+&dIy!Z_f<3Xy@iK^S`KY$q_YfLz$GSTFONitu5(>-a^> z-Jw1`HhYKLd?grCbuNxmerIR9L19}4n@SKJ-sa=L5IGxl3>|92#^!x5qz0_W{aB#7 z8nN|xZP5f1Vrv+TpLY5Y8WBl1t94xLz8;pYi(cOk5eO&TmwxeTU-M!UgyaYT$NH_P zC@4i=&Jsg^#F-$1%X#vOO=ml4-wrpcm+yNfybfQIrIn**`!M?vC`z5%!FPVNFjwAOLQwhTjG z&hu15w+)JVYy^r0cj0{WrT#K=5PrZCFk^q3x)wb|ZBmGSPW|HwG@U_`>GJVb3^}d< zMapM?{0-*TE1HdV*F?)JV&r8&z4HA(9X4*vIo#*A&jUzdU@Mzdg}>w6J5Qe|Rw5Nk zMV+w^5}@J3$v}3r|NDumYJf95#6!9FH@u zrpAw`5(U$a5CTOaXbB1FR1~C*gF86TMVh{rf!A8gwmRf}RhmbSs@k@~5{L0=F(#NA zbUazt+VBs4Aq^woh~B+m*J5C9G=Z{V#0Xf!`Dx{C?Os&G5*nV5+ab)w>*e!#wEF%2 z9D4P2FW1abM=&KtH;@oz!=kg|FH+887Iknop3a~vBmp^QD$QpZqcN{$QFKQ}WzHba z(*ma%SLAe?CURaZh>IahIe}Hy=$upv$FlB|sCukS^I&f6(hWvdO} z+Ya&Og71io-gX)twpZ#`L2CEb(kLv1UmHTX#^<7gd(Gd2+I>g4WSrF7FV+lX09aQjCr64btvo4hKBv&@r@J$i^>4D33QcmO%?8^;0IsYlOT0eytaDV!ZIMS%=B{)6C-o<2{Q2bwPYt zjKBN`&*;~cu>NHtzsQ0GRboy!$y_{!b+)sK=ZLyPO3~==dH|}As)31QpZJwt%c5!3 zOF85azIGMk-*SZKOkjjFf5xpytke;uMe4k0;=N}*?M2DQ^wlUXzQ9zBu|7b+>6~K2 zK|sA{QAZY@Sqa9~gmd7wT%?8=8T;kBvl{NH?^(xcxP(H?psKsEsQ95L4}SJ@gj4M! ze-c6^|11{?D#B+|<$a)6jkS-#9LofF6mK)d@ zLq}M-{rdcsZhR=Pgysw(q;dwN)`~i^>G~IKwv{y^$NE4-j_VI2``25OIoC&D831jR zgC<}T!8^B2uXAx^yBr8qixhIX)fq9w-`^N%OiD?8*u1hlyO1UB=tCP`7Uh@_*w^@hkVPL+EW^;;Pf=6R*~!|DjQG11FC z$`Sb=mdX75zmXpum(}%p?o7OinRxHsdGAE*9p~5D=f}>Sc~<7m^)!%Nabq__zCZi9r>n7s0-a9|V_>jxvY71s zQ))HISpi8&lQ!wu1agA=*K!ELpQ}#sQm3=A7w*6zXdJ8$%KW~2s;NR(9;Z5A<~<)vpgl^WOvZP7pIw5RP* z?{Y?);$6k~Dmd_h=)&Jc_Aza=V(Y@ld+ksH}&}a&lznHQwdoa_E$jv$o*lzqae0y19h zq9m{`i+f(i*;rECd8FfBUJZd3HgO-Gal_s7aygsP(8ycH!JPWpWi1oJ7KaG7#<#Zp#rvL6#WOtqp7~cHdRyGZfuhbVXr^U+!Z$YGs#kdRRg+SBur|4)+qmo0 zjfz2TGBK+(;W=q_L2iy1)QK;BaP5P7dNB4|5Y(^m91|M9APrZm*h!axr-Pi=J>p(OKp) z&ZQ;Ayr910+7E9ea!l-)v55r-!41Pk=QS_;X~hxoBtJe^shXA$t`#EXg=7Ncym@OhF50uW-&|%YG;7*$M7=`!EKKKQaYT>^2Ai zv@FyjN)_r(eKKathJf~}kpP?vy3Wql;=NU{hJ$jv$*@9v{ZlDl#xK(?IaWrQNJwL5P4cBJYlW*ZV=GB&7 zK@M+P)8(ooDVH(u6X*o4nO2ENVAepdnV`_mvnn_EbQKcK}h_d{M8;Z)>Ecp5FmhJFh^-b&4e00vc&e5(?)DQ{7(9N^ZF3f~vg@=#Yo z$+_nltc{@^HCR$GiRu|E*-%HDzWQGuOPkGGYu(rMo=@%$DFK>&{f9%nVM={RLUngf zSoaelwgm_YH@{}RPf%vuL*J2;>248I$yYE}4L>bA-t&7`E&Q3)A2}kY1 z61_Jkek_{70s~w#@U>>8v@62AG;nrKec**pD2F9*5!_O@E;w1n+ z87M}@dhU=|l2VH6w0Xu!m4PZzZbTxlIFp77*h!77vkE1S44}kUL0m+Jfai#9BF*W# z=Awy#FPnXVn*1CHcmPBlf<|@?u?ZPANF871$_1FL4A0qzZVHv&yOIWEUmX0~1DJiAmdL^gM&Aorp+2e8m_TZ&uAIz?(xtQ!^ zH|^zO(kD1NE0?#kV{><%&19r#;OsrH#McMhJ3A*CPB}Gfc-3a`$ zyAY&oQ0XXrQN?_*!;nwjwQqby@cC)!l3{&G3mwK!eJ~TtlGe3_|HSHfO0s-m%Kmn4 zSWcfB>nd=!P^Z^WqV5hcFIESr9^_(E$VZ&(k>$Mp8A|y>0x#}T-T1F|B8mU7_;v~D zb`^RGuh#hWbap^-2^m&VMH2+`(xH|@oHAo;5r#I|9Nc8c1|LP)_FF~)Pi&Qm3DXw9 zM&@DI(?D{SUrO-s$p^NWuxl|CvTfAZ^3QrR^BZ20j5zMKd?RGPVgEy4Ih8O<7g?)3%t0d}n!&44;zb2k?#zSLQyRSMiS@rOBofz&&Le^1dOF zb`m2`Nv76@zv5Jn|Eg2!ykp>$P6lu7V6rU#WKm>u=0&zn^$q+(Qs)6;c?a=}vn7tLJko z<9k1bJo!&Xx%J$5{$Y?=)HaqkGOy1jjdlaR+PLz_=T5Vo4+mn$6gCwIy?I+4UczcM z2)tdBk{nzuJw)qutNKFzBQV6|%PrRF*a^U6c6H5M(1Q)5YT0@dHrpwSJ@WY1x(De% zZ_7BXxBh?`?d94>b5Jq-$!yQo71&W>1JIMI^N4N_EN_fhsaY(%REx}H98A&yP|K-P zYfR9q9kSN;jl=b4ZU5iiUEkQB$C}+JNV0^mW1&3k`$~cW>yvWjXI_&SycDkZWWF?N z2wj|)a?>3-=FOg|tJib$kthRF8AJ%fABzD~c^}XhW2WGRs!}^GZgu+@$t*J_u>HkS zZ;NRcUW!m7l+g?t0~G|Z`{1gthlm98^VYagB33lMGT|+;zxIXAss6CIg`jIE!4f4o z;ni0$4j4vrRLJ;OkxipD@ycJvQI4-!rer*T4ObLY^OAH8jnA%vR&eZZkBdU}Ja1tG z?ZOs1WF}mRLGP|B^@j)t*qP!6$vMEB6H1&FUZ2&tDSG~no{SNfg+RkbLE(M-$umHF z_zhnEtZnYjlXmOoZ320$0k+I8lC$ReutMDZ1WU2%2I2;|>aRl8mEKVw*@%i+EI?niNsC^J}JfXh%LUi{#e|>lk_oxyIy;z@0WqASjyDghBf)I5$Mmj{ig-av{c?NA>i^isY{l69}ayb#CF>sLwsM?Ice^+L%=5i4FTT5nrr9cJ^by3JBjiN=LwHtx`om!EA=Ja?}8OOn6U)rQRMX>(#NoljntP4YB?bcriaoNOK8eH9j+)aB^VCS&oCC0EY!4W1^hzUk z<%EBWjCCxWa!rWY0bCBr#1#kN!BHp?d>cu>`}#bQ0hE_ANSDP94-1D%91sUfY|Z7M zkR=uz<0sx6-kEy|OHP3TQR0};7mZ<}C_G=QpeYI?<<~E}_RF@UO*=fKnXf-Tcc0b| z7H(ZjIfGHi6AvkM;wR)caU!Jl8%NwS`Eb=~7+=wlH_wHi6tew!k5%{HV;1kGpxD-H zvlZ5jb&VB94*_<1+>owTF*3MqQO8X&wpnNodjt)m(4vD%zL8xhsfCwOvfMa%c;Is~ z?w0aHMdQ-cN=uxD3ha^a5M>p`9ge?K$3zxvpT$Xy@rGE|y~D;5U49FTvOw5L7GD_4 z`n6+@TyhdlZrwY^Mg{DWn`XxU$)=9mNeA*i90Ch<+Q`FeW!tiC; zwgGKum!*yA-{D5Io{l@pPL!&nJ2JXfT+;5wgdD?=yq#Tbxi3uZsLsNP4tR-W(b0VT=NJd1FA*_Z7THjXnbnWp_%B9D@)_SO)1g?IH&iQ8 zmym4cT95aiMe3{9^J9Dsb&!&~&*47G&MA8cc5crpy9sHg$sD#WbhOX5*&O4$9kFG7 zCV1<)Vnt=}CaIbwFJ>mMPYDPiO|eMCbL(2*6|v{OmAbXB+vG324Faad3|1!Bu6)XC*~8twrXC$U9!|K%$JS07 z=2o&#uj_V-5y$)exV-~jpZ7e!#RD9sj54q$=USN$J`=^cFNLiH=xsvUvU0uok#sUA z((xhI#u|TcTU(?GY_#Vlx`o&zr*moNmsjrVpH$KM&g>p))`+sUf{5#q&gv2!G!uV^ zZ2ydV&TQ&}^9 z{*+*>{x}m8_1G>^+Fbc)UNtlI$N=nPsQTry`UwT`%0E|VrDdVXXrA)o>iMCw3>4hn z(9gMOINf8MtIr)!T!g|eeOqwGjM7)ES-P=0hi3QrA%~Y9tX|PL6f%hD9YX7RuX(z)U`89PW9ckKA^MZ zbDm8US76Ym2@I_Xz-oiWbt&g1jlpk7@`_(%cCB3MUh5hCb&@TrN5PI{`o?ZTq_BDd zUN_l7j>>gh^`BfHW;lF1lIEs_He4~Q!=8#pk$ke1uJ!Wq+kwfcK>ZAW40*j6CUT;RDr#cPYn3AI$SCx& z#w1?}I#*8S-0%wGfKxdyc}@q{q>M+0RSN%rR*E9qp=B*ty-l2=N_AWxT}F z)doqg*|ID+cbWV$%kspm2g^(w4lQBvpq$@3BRfgw_ zN`K`FLTaX1hVMiRg|B;_o{ObMP2@*kOlTRh0}rt7HWk`CwkM~t90^KP!%fR zZ~TDk&YP7}urAwNq$<1+ASS*{HPr%YHI!sVWVi49fe&Ngy3poHlh(!({&6_SSJ zB{VoJ@-oACs`Av(M-;@*f$K|#{@vq=N3|Qy&^6>{zFaA?O3*M$^t;1#{X%dRlV_7Q}YU0JbkR)>r!4OiO3T5g^XdO(J4eFp&3K}dmO zoD{eAwIQa`b!_`@RGaNeN|*RMK_?OZA$yV$u3~q_VRJp4Z*@~wOhfUzw}T7*c#Ntu zIYY>Jb^Ewujjy8qqB1gd-M95XqTgd3BX+&F4ufZ@hJHu zh$OiKxrb#G9|sB}&bFir+Hf}tpPq(wfQCeYr!oh&Ix!LVY_T_%XV+*M!ww84I2oAL z=-Z)4x6iK7OrhU$n614T7nK%@2N4~10X85@`cXfB!18?JfwL)`&s}qNv#kf0mFoXIX(oVs&=Q4b|Kc%!>ey|$F4co1IU>!nrKK20Cio4#pi+7(Ds;>>d?-j!pk`ii z|HNVv0?PEPI^y!PseM)zp=CLX&`jM;V#78Ynx62gs1z2!Qs>~f)vzO)&H6i(b};L$ zM^AOe0sDK-JGjQ8MP`huiyo&Pm6#SyNLC2s8-slyF#hwhqyo|4nm~8<5e7ZzaC=d2 zXz-=drlYoR%e2-WkE)6&u8AdUJy>QPXwj&{f{}TWR`IjO?lb6&Hu&yJF8i<>5v~un zuF;wxRwI}Q#4Je`(sr0pwOYua<*h}@U_&cxb)CFN=N$PH3R*pg>VW8O7!^ziK?w7* zV#ulBsKAzF5a@v}T&*dCj z7iFFPMECG=?^9yI2TJ@~>&)p~;EKl@z+L^iOpto9q!^6ShrXjQz0b^Oz(ag$y6uW^ z{8{ia{VfZ$whWoH6NO9)*S8@_efd4E|>e#x8?SzlF-Kwxyf% z_MBzUsSE(9ek>yBc}j>~K?S2@$4}PZhB5STyMqtVvS?3&KQuoW9VHxf%s$z#q%a|q z-dAm2q*n2G7(axkoTAnK19$)^Ly$@478uUWU(H<4cLgL*%#+>%`6ijR2o`9!*JE)U zhB#Q+LgR^1j|^t2_X4l~XF0`2MgoWF8?N7d6xljg=_CUX*SaPM(W#hOU)_UEOV7 zf7*`z@g}wf5hDY%p;~axIs=11=xZR?nzTHw54wT=Qo)2C{g*$kYY5x&&=qyJZ>+5) z%L7&GU&WQ9W))Hw)VQ^B20leCUnQ5{IQJvD^Nu+FYYQ!lv3GWc$KY*0veJg$&**PSsUANBbQyx|QdGRrK zzwTKO5xy(r?B;QppW$U?)L&3jvZra*L!Y*CGM=JQfi}D z>x%Pa&{NQFBR86}z4TKRQ!dp~I!YDQpCKx>u121EC!uJ1>+*2Zj%8LkQ>rDjM2AKq zvI)&53o}-3QWMYG`}^kNWcV6>R<5krzh8B-SKCsXTO;rJgMu-7YO!FKXGsnGJMNBc z9{*dz!PfaF;q%6f8EgJ!RFav=t&MUjMXH%t5nfJ~h8RNoRMEr)IuwoFo=@c71q33j zj6*${usDgvuI$cHi#pr%>K&v*A-9@5IBmr1V>V}grFEf=MC%)-rD;{2M2%%HU@|GK ziVm5_--_@eE~>PO+JVJlO4dUk6pgnUOLrY?K=60y;Lf22SSp3vj(tlKOA+T z>tuHpfD^~Xpj>PNA>Z)f`Q;>>zDY5ytM+0`w<53605yMl0I(RK92a)ctF}gc``rz4 zgB$o)o;>jp2BECPZjml+r?xfiH#3G8Fo~VF&K-+OeJML-4Y9_Hwi2D}!mp=NQgW5Xd+Eo2wJ6A+vO7j&03 zeK^H(l@Rms$NB3&KVq8B`wKm2G$l# zr76D%G(Pi9&vIDoAQjAfJ$c7MPUp3%!Vl2>PF3oEOGWaq;!a)a$AtBcj~AQrjWp)_ z^2Y60b6|-Rw;6pigQ>9Zf~$lfi3)t!i<@$#NNh@zx0{6yoQ4#SwOxxemNR2z{ORMy0hbYh2K#DPNZW1`d&IW;Xl0pT z86|pi*EWUF4elHwp^tBj!Uc!_(V0G>ISMZ&{ zW2sUrQ}tmxC~5%5jdto43%^w^M^n$B|uThjm+Zhp+m zYP$`_y~FviIzq2CTf}0p)8`QQRPKP&Vo*sK`ISXbPU$sV@($BH0rS*CG#cUHDanJf zx!Zd6wl;vSK8h4|cORP8QeU)h>^>GY?|cFQNaLyjfl}Y4Qk?vB4p=|A395 zyfc;gI#lV9^G)q<`TUUk>#8T=`e*htJ>wP&#!?e~7$FUMCSi*z)z1W&E658SpQWZUF6;HH$<&L|L0TYUJ~{S;o5exwG=xjF_F z{;QrzhP)-O{OXvtz5^^Dbj0;a!k5sSWxQlCIfRNLFVzp{9d4Tl0c~=5kGGMjw+%Y} zHg9Su{2Nv~y&f4}^ud=6lud$rxqFoPuJk)bFC*MI4O@k92A8?LiS_he&CfH)wi8^6 zuZaKE!?~7C*w=yp0WE<80a5)+4=3tiVq@lPZe?qxrV0%Nx?E19{cpp~6BY;<>ZCDd9_#!F=O#S$ZM# zyK?@P2g5EGmwcR&t_&n-vO*|*DGJlQGCBgMW+H5Cf={&}absBg;l1B#i0)*8N1s*9 zsLGxEMO0uHl-^2&T)midvPqL421o;j<8(QRIdyF4CLItwQN5rs499U7++G)vLmZJs z4~pPZ>e%H0KoDu2Z4@dzjs;ScWgLf6*`+&bLb}sab?j}+`)|cVk z0^=%YpFfs;Vs~IJ$9WME>BC+`BP13>Nf%A%7GWX>@aCh?*ByG5Ur5?0VCz4Ax9?{p zb3Rh7$baZze}vjmHa+?Jvws7U_?VajxG7NlU9NK$bE(XKMouCgJfN?(_{n|xiLWZj!&V2Ic(~UJGnQBnjceLz0yNkgn--E-4!cwzMbtQQx z@AcA$&H7xqGeSJQJ{B8f^fD!5Bx)Wr)I7HHC0crFjsdjhmxxM-;pNtsvcWa8EmLPE zA6@=BTi!GOIbziv{BzW( z{~AAh*tqiTuG6%|Ap6u?@|NY+R=j&?g%uw>lt#OQ%qxH=@K&OR|6QsjPGa}w);`Q+ z$+nP%J4+L>lPusL0Ur#|zdf4TnzH|R`Hup01pJDKn4WF@IOTVk5&Ff zoZ5rezgt zJf$yu%YwDo1(2l!_*+eeKhNsM3Ml$zYZrZ^7=>B6K0V7c>q_)|psCo7k@=G)d%|DQ z8Zc6tMuHE;s;Yekm?xnwYGDK~;5ZjGkGzWB(fwiE@1nV8P9T$mUM)$%v_ZTW&pcJ*798%momxxuN2|=FYOdx(cgi9SZ7GuH{qKAT71vW8hQYn_P=z6B4 zgcYr188ZV&Vuxl;J;7P?+_=tLW5o`Ks8}+=t^|%@r;!5?K!m&A6PdJQ=2>BxKSN2T zu^TNRvaU-!H8EvJPq|hU6=qD7Aljl#sX8HJk(tMeWY#<5@G zl(i2AbX%=os|i3)ms(eX$p$XFE_<+?hxKYk={c=f3v}L;T7A|pjh*Dq;uFiJP2&)G zaQ#M?xN$n-m+=1uRwGDomluv#=|Z+AnM_I_*TU5_nka$iHIrx;$GbnF632TuK_KzW zltIeK`8$b}67MaJbl2r5g;c=tD2BA2(|InDkjr^65kaC0uk&aEH?HSo zLILkBleFLQh$HTEE>VCJ#kpiWF@n@DPBIRT(|I_NSOQIA$N30f!Z~!J>sY=`oC(G#sWSsBOgaN@@vntM!6q$Stb;ks%*5p7iMH9^e8dL+g z^wm``HhXG~_U1&%WV0yMJ$%M$$&j3++ID}xsY>0?Cu7jkd1Vnj+RJY8Te?NX(M-!i zv-R|iOQyL}en*VFu%I;|87K@_szDSBLzB~?P2opu)T|&{x=)Zz8>Sl6703@e$Jng( zOT3(%z~RLv1d#!7>S79(Jjk?*)^3ff_k)W~d#z?zZjjFn2rCNz`bg*|CQubRe53XD zLI~qCj#pE^cH>lW4BjCb(8qa{Kew9@Mm42}X-oAxuIil2BK_d}Z1}|%pcYX4Q? zpHJC3fy$!=`kajz;P-6`Ni8_OWlpfUbB$xW8rhqvqnh1UQ)>u$wgl-^E{b-LY(sHE zvpBE^WhmmVbIdw~1)WL4LAx@DRd4vOB3MrO+uJ^hG^r^hd)kv0R0f9x13e3J5CKJ% z@9Pc+5$$ze5v=7e9XY}*g2N-$+!Z9vRvmO&YF`(L=(E+=>dp+<&DUx3tdSvIj&H4c z+gNSR6{SWm&qOY9PwFPtMOOS62tlSsAG0Htci2g7#G4%X83kqU@O`B@ktswD8gwCp zZ&pP~J*0!&PPt;XQkpxg1oL9HM*2F&V}FJG$3`|77t4zvo- zQ5eDqu}8rCycSNAPwLCL4$&_Faad)qHt1&da2M+pn_*PNe&O`a4|g(aJX=A4@2g`- zA#Aba>(v0f6YB;r=NXV~85+rM{~9}2HD7&1?~>#YrT-bZ9YVxjTpgUzd75!*;r$iP z*cllV7$N1`4C{?pv?c=8BOu_Sz>9`{cT*H6l3sDmwZywZ8*Hv!5?w~GC_xtYrUN?H zxm~rtt>Az@A{U$aGSshV?tovyYbP24Nw<&6Kwx3^&d- zO&c7OiBBrIiyXU#;BM)JgRC34`N3XcI|a&AS7PHrjlQvOqh)Y|;RB`(0u{!UD72na z@08Z~4lIE%fgZy&W>8F2DeEc7?KzE#bi)czwrs`ps|fCpS4Iw}w9(!)q@wrNCc~fL zEb(hYOYwWX;LQ%OuLO|i5WJ(kgU46x76Mh#Q(fO5U~;OkdyLi-%g_2e&-Rph6T%q~ObvmEQ%+E$8dOv!-YSQ~0u%DXKU$ng?XN(_ zr(omC%D*hZSuHw6L0E%Hw(MKL%Nn$`lTn{Pro8^h7FlaQD3}HM^16pv8vQh}YW4&G zNm;{?(>S}GNDQ>!XsT<|T!510F$5NHE0a(0m<1t6+7&IpIq@XMHgiaLTYuDq8@6wH z8{Wa_F$OPa_NidNEA`3j)}Q&r_r08VOYK5F`bq9``+>ePL<_xfT)gJ?1uVRf`h5@G z?oUQ1GkpHy;S1=rINod1(c$bsKjf%9$mLkm;e#?_#Tdd6zfDf~BFrR|F{+9!brvfL z(=7>On$t5KKwMkJXH%L6OI&oX)HmMasjJ+yFf1<7~i zNdN@{u4PeImLC}hE^sdcIJG&AUC3a`zo)mtf-TxQr9e9gbc<%C?c$X+R$cGu;6#WYqBJ4`ujk<)@s{G-Njrh>>EL<@DIx`dEFY&iZ2!w_CS)sQ zETjvfJTK?dUJO0&%Pb*h^t10rA0#5L=h+}BB7x6cD5OCXyn^q82f^n~NIAjhV2A~Q z@A05Z+g*I$+fWETqC21G`QRFX@8Mwn`jEiKi2-M{FE)l>+nkTv-Hdff`b7h+-b-57 zSYqWgn9CG@iM1h=v)$ob^221?YXXI`MtW5{?WNkPhuWG4pXTn9qo0PIpN3y0twNMX zc+!#aoh@VcD+ zdN;lHamy4se||~Y=7jPqQUgaa@>_&{z;C~n2wy^QyG9jJlV=W)oiL83o1($g*Gp^a z_bzi*FCK8M1oUpMSA_YD_{q$M<2A@%!Mc=c zaV>+Bd(fpM{`_YIUq44n5PB39$e%aPTxbhXTg@ai+9g@_il25*D-*xE;EnQl{(Nzq zkC&$lmi+ciZ9+1Jod_Tshgb&I`@nlEf)omuF5;w=0-h7F81AP_eK`E~@LJq87f(ZN zKY|EgG=xulcJ)gTzA%hb@NuBmPN1K|@eylUZ)@L3H&i5{lWEk;knFOfmg=Cv`fE~8T#z&cjtUNv}k@b!#PFQRB*L(W!3EOE1T;Map;cS$)}{fzqPw!7T)21 zy`g6=yp9pVOPWZz8tE(%tBPlS-=luyni6qNa@gFN#yF_Lt#M>)8UPXzg?_~=3@ST# zT*NY$ADFu}#8%;L?ZO{&4!jGUBK23X1g2Sb-=`9mm=+SVhHO3OshW+(J|ale!qZz9 zEg`G9!I}|~`i-dhXS1;C9D_o7nw9!!g#K9K$Ofl;s#E4^ABXp*3zDZb;F+$0BWdH1&XC9buvvNZ zW2UTf5J2<+Q>1~vNmP})?&mweQpmbd555NX-e&`_)eGAJ>5$V&H?O)nO6gHja%cd1 zr(Q33s(4%%BAj!^hL6gLv#L-k$3^2})mLlmgogkzxq)O)(ncIWvD+oK3|zNIQ=2CC zh!>cXtXVQX4z@rhsFWJK#cK3Bw!LJiy_6X>ZA@{+Ay`2>WvN3Lw%6;IQ)^{F0#LVc zEd9gP{{?a!bycb7Fe#y)RfI2Ww?b;G_n{umc`%NP2Q4J=1O|f zW$4YpjN&VVqq@E2SgaRXu}M91Eo)k+5#8yGNo8VpWz@*1d!|zO?J99*962#{@+Gib zr<$1EF^u!Z?>UCK(iL4jL2?sEi-g|5l-;8Yu_)>@D2mAf#T!*IjoCR7Xc?EQ@mx^a zS<%jg1>mmmp>5h3#4vl@wv-6E=mAONFXNC3NL*gv1Z!}^xM^3ZXHChwx`BWyWLK4G z=qpW+tY$!^O3<4Q&^-oo4tUXd{@=?mXjk=}raN;(L)v?pItDF&<%d8>4wca`YD{*48i2(5XOPpZ-B~A$c$zPYEkgAxxs>(m(OWafk z?YEfVdM{}s^0bN01+LK0)(f%R&y^Cbva3nDQhv?^^iy(4Y1sC1CQ>Ke^6|fKF-aoJ z@h>g2ekE8jWFnlX6nMr?Z^vXqK)bXde3E&)(nSa(59(GHBFqRrk?t%Cw1wz2F z1_o}1=y1D5p>Uen6UqNUH#7g9d)?w*iwTb-)q%B$18Uj=bq?zh62<4{1Jvpt)k(lBH8p& zdUl-R;R=QTgKk|CY~w9oP`|pBHMSluwq^vJi|C+MV{?Sl*O+E)*yncb?N64nA)*c> zgU4y%5KNFHo(!-{?Js$h{3*9OE*}ysxfE^Mg3{=Izqu}8JDXD4cOB|~P2Xi^+CHI}Z7{+1UJ%y7f|3J5;Zm%&MZ0 z@H=V$fqo*DyGaIqi(m8?oFJsomaermi--FzV;SK}U)kkvI3uX6T(Va1hqw2A?9KZo z{&uf|87j>ni5JNKJ5z!GPj+;#|+6=IyLiiusUvIw8j!=x#Z?!1PvLXN+i96=QI|*pa);Vc4_&t*OK{|~B&(Rfl z1&AF-r~oy*DKu9Knu;myQM?0|{lNU?-(j?qs2STJA(({vPqcp7E=yBlGvwA6F;)?o zKcK@~YRo`{56Hqf(isinIyb&U;6UhC4@ zDS*-xWXN6B1*@h&cE10h$P@5KE?`-wNQd0Iby*d5zp60hE;^K^CM-vVwW67tYhFG& zt-_n3E0-LMnlab2vBF~cC`%*A z#2}(SN~wlw^64N{X=kO&)JToli&jeNl4TS|Xvv?T<+G$7^;A_nPRE!WL|r8uN&U=+ zYAM=#B#wp9*PWUw;W5JM`(V}I$CH=ul^=?FyZJ0$oVbLdZZUj=9juxaZpjPSQpb{r z@0DjeoaP~L)W@`KG2+Lr=t zz~(P}_S_xRD0Og3)@OpS&+aKVr_wK@$UppwEJ_lTBj<_mf=P8W13q>?ra5PJNNu_0 z=AvO?7xd@V8`W3KMwDRGpaJ`(zD|wa3#!<0`h?=Q&nXiNfil>l05O%an(V=w4vz@e zqfrUY$LYX{3j^w|e=$K8*>?(rIO@<3#~*Do@*l-SKOiJ8k%eYi=-|pVH(3=JB#&x$-1sASw)UU>E`QmQ_x!p?&qBnB#nC zA7cKCw)GY>%54-doMELdWDUW^2FFuGmJoi;v2#JonqFjYgfifk z&~hie0hG93^3Os%vE;mzyqC6jlsbASaADcKf6h(McdbFygk!|q z0`Uh1W(~24^BX#!#de3BL!kzMgKR~Gli0-ukf^kPU*@lgz$3|t%?tN-53PR8=NDds zx!}eZg|lbpONRaCbmf)%!Q9lB-HFnBkKGn~ayhft`qm{5+EO397iO-f*oMpQw3YWT z+Tws4`terx><0qJ2;?$KJre~{sTssDiKE1`!*ij_kt2G(gD`<{8s%p`ffF^;- zh^49Ok?we7Jl%`Rn*$ELcRqxmlSethCXB#J8{&Cdz*F>1*~sYq_q@eKTpzBHis7{ zy5-Hc+^5iE@tB~#zR@+0H*>^&Tjn{Vsf`0XOnzy4?U?35ymo&mi)U9I=QX~7#kE1d z{Gl-+!^>tt`T!wQbi>;h+>=ek^OtpfO%om7!#MX<+{1to7F1G`7xW-`!pvW{Pta#C zTSRQpzq`FXFKO&ZwKJQe?Pi)A z+*{ka*G9TVR=!DBhtWiWFWSiFH9^sOpaHiWfx$dkwi*w+pjo!Xoz&1fu_|Gj+G~Zq zthJAzDoK2m@e}3fBT!kFa;}?Eg8<>~B~~NOl{44+n@OQx>Q7fDfAyH%T%ztvX|(LQ z!ZmGndJ^R1J04yw8&m8A#ka-5ECVgf=^T`?XZC=6;_*N1h}Bj{yOkHVwhPJ8tCk4G z2JtPgis$=A*lqGx`P?E>2i7XrPNJTqO_%gI3^@9oF5JxR*qeVEmga@rBG9wP?`3$4 zFvYaZa-6QVrMvl9ADW6E8*H7&hL{xdwY|ibg zwmAM^dGH_D8Kol3?vU^*FfW0;V z$3i@TuZk(B-E9(8K-f;hW361m6e_cU@YVeUw~l0^s}CGJ9KEk=)Bw>--9wkIYN2md zWd5t|C;rp~!ElbU|K{uN+{PIc21|#c@jFTFc0CGbEeY7b17wXVa`yApwo4!rPmn!5 z?Jnb3nq^P`>8??m)!K7x)v}`B-LFhf;*5X#$fTliKaRAtmpgaxD@1_u@Y>3O^BS?- zXTbFOedJUis-$}|hD21}3iezYnnELVsoGgZx}{V`GMQ|w*)#>Gx>GkZC9e0#-qFk< zI|MMY2Q8Sd0 zZPwusDA%S>z;3Cl_>BR4D6#~i1c^IegA85n*A5kLuq&yD$MO+`kT#K2w#W`kMMwx4 zLmrq;5m0rY3U5hr8U2>v^`Q9B>8}n!| z`-*wWfvl`}3F<4SeBctmNif2!j?(A~3@HFRP<&?D5&Ud>z&6AGDz%%g%1w($B2Iy7 z+gVm+cTi8SyFTzWte^Zv^MLWZ86B-tKt&e*_pYRIa`^z z{6ECLU$O^n14uwX8r(oYT>p=&{O5xI;vDJ4wQ<-UyMMUXr~zLmE?t&_(ZzK1W3U~! zirth);+lmNq4MnMMWrS1Iu>cVIP3S&{~+Q&DztAzNLe zZ4I7(d7-^ls$Vr)E4?!Pa2uEX+_unBHNmPkH1*74rm zp6~~EL=x3hRny-M#8vKg+dVtY(7iN(^gXkZJicg}oUT{>4f7i}5O{!^q+8zR`0leL zyXwr51M2=B#KL^n%`HkKzj!i}o9t|(6M`X41&a$GAv4iKlpn}h#2lxMA()wyDA3z&y8I zMYHXrcCv6)YD%To$>Wida^^}-i`o$kNS3aR#x^>qYh9`>>{&gU42Lj#*74fL3P9$3 zbk$v(1Mg;i+UGd3GHN|wr6rqDlA_5Pq4JlUN~8jTiRRel{aux+_T(y;bwZddLj4bX zNcj7AKYEfj$a17*+7N=-aq&#z6wZCnGNiZIXBof;#X}f%mb?`%8tB*#Qd##~S;W_O zE^!HJ*g8^C=5zWi7OQAkdEim*nTDzBelBx~jFn3P_E#1^loe;P#g8eW8u+=!Cqwgt9Bv&o3=!t~q2;)JvxcdmOP{W0}Ov zS`H=q$cI6%j$$1jm+t4c7H&|2;#2^xE`MDMp%V0{6m#=NAPLj~FMvk48X$P`j7BN1 zdYReUC&dv_N(4C;YC?4*)!I!dqRah%v34b3F?Q{LlBKMXEhU6hl*(3?$l4|D=pBQ~TO~n%AmHtIs~!w&%(uSSrZZ#r{1imL z^O%z8Fd%>T`UfVL);H?^YOeV^C+WCDHNqPI8r!T(K?`y8j3EN?mkZ4WtM88)&6`nU z(P8a-egWP?HTB8v%6aouR(S9Pmbd>J7&fiEb*Ird;8kx7pGf% zcAjmMc+kT4d&*MyjL)|1uUzME&Of!UT7kiy19M&Kt-PFM|9(Zp%bIqtn!P(cepQ&g zhwcn-<4y$^o18vtqLZfoD&8j>zmnZ-)T1Cd(DTM6GKggEZ5w#X@&dq#8tn? z?=iZl8xfe%vE}btZ#^8(X%`L6Gp|v-)neH=FK`IneFy+|JdOZ@mT)*R*Tj&9HUt1Zr-@l%)hh7 zw3Qm3J#jOZpVHv{p!nhb+poq?G_oEuVf#Jv<~@WfLT-9w>CW5iCOA85w7!nZn~mw# z-kJ6qr>gBw%Mpa{*mJGlQHRdW|2&^_Tijq4&$Diy{F%RJH9wwx(rwqm+Vf|A`nspZ zg3da3x9@qFsq?;<$rQKtCX<%fXTG>CZ*JOnn_U;ZL5_dIUKV{6Znv2qd*Yt?(N2AP zpS6lydiwUp^y;rCjM|fS_eNfJLAzOQqDPb5`We{^kKWc9SJ2e-O!B2?{s*q*eIIqN z)2>}w!S?)l-}d{qoBR4y(80EsPWQR}_e%=z{!F{5q3y39*p)DHYr@bY=dHc9PxP+U z_L9d6jhPn=dM+NSHE#UWZX@>1Y*8Q|F#1x5_9E>!eb)-#e4Di8+d{8Gdqw*68=?LK zzh$O5Y`fyIz}WDjcH`Scr*fqZ{fF$`G+@b(H_Q7LTJ^O%HvH!6+y`@JubkZHcf%DQ zf1E0)wW;Qg9xZ!nrU-^_+;y$X@TcQ+v})d}>H0j<`&P9Rdu`rN`gOXdcG8*r!-_haghfWtknj(*epW3Ft`^rsqQJNWzPyJy!kX_%LAJz(>VjS+n}O&mV4 z`j$8OzMV%sUF)4_8Qq7M*e~f=o79kp!H#L^7h+5U&)4ssHZiZ2-lx~*K89)0!d;1- z>_RMcPhA`T^Udtm{)^t$UB+pPM)Nfb;S9wVfIU zEq~m7k*52e{?AM^-a5?me4P_(_p$c2zuhIB{o>ArryU>Wx%v3EXMqEEyxWvx+k8s{ z%MbgtyX|^1H``q9?0t5q^Skr`g%^KjCH{Kh_Qz_~@bt6EGNJa0Db2Oxnx2`db+&F| zTb8@yvp^} ziNX56mQ+8oG$F9@)E$>^7}+>YwdlBiO=oS{+2+0<`ajxqCGcSX@1iT!_SYKSbjMzC zZf5Fq(FB3!_DKKU{oX&DI5Rdh?ulonMZ+;qvJci?c1!cg)!%`u`xqAPdJ`%cZdauH z-|t28-p5R$lDD-T>n*v~AX9A6U_()QW@LkHQJ%Ago_cWn_?V*~atlTs8T(T2UfX5q zdosdz{fQ2nFjzY#PZW25<#Fp4HjOu)j$L<4T5rNdEwkMRy%qVB3}(Ek-6&e~!p2VN zcJrlH-VuWEgKzZL-S_@^^jhEZi5@n6e-%s{J1RNf+t=nyP_G@K@>InIt(dXnti1_9lzaolA`-oJ;%WVy3Cc>X4m^2lG^iqu9ap|`#v_&njfxJWf+ySmz`=Y^+Rk-cq;G$=|L&>bQ>9X;9zx&7%XmeOi638(fgL@5|@( z*EO;93c2t}mWBn3q|t-ZhVnQMpzDyTjMqtFv`&T>4e}HEr{+Ed70^{`Y6+47>mOAZ(|b zlC^b>MSc79$wJG^Uw$}-J7~^p6+ADwOVTIvYo0Idr*2=RD!yam#?51vn}0gw;*{g_x$n@l<#oEqjVwpRj)R(?5z@XJ>nV@}Csq zbtZYpc9(fKbZtg{YuTjRri7!}yxZ0HP98BUfB%Si<_>9TS^+NyhYy^Z5>iKh=jw># z9mn*1niUs#^v&C5CPyC?)ep*9nZG5k(ZyS>9`GI=`+CZGQ%1Hyuaz5m{TP1w>G_*! zbGu~kkGeCb#+IzCQ;&8&ykYr$o^))x%a;4z&&eCvy#E-_n|n0+q)-3zsl`_Rei5BE zg)g7lYI>CYxsx5cKgmx`{*s%s{@uk_zb<->{C;Z3pV>zomNhP{Zhy^XXr`0R#F|mp zdQOipTKTGmnS9RfHQ$%aej<&#aP^=`PCtz!jfd^Y3>y^GDo$r`xT{m|{TK2)>Yjai z*eqwubiaGcPPu7}>ffl*{Qv6x(w@KhS!anNMx#8SHwa&OM#h4fhY&RPbAwKSg7%v*VdzS<7a`^}7A)z`F(Q zjpJT?UH4}5m@%`PO-Y~IAlM|qw&ssc1|M$p-)ORQkSBkPO{~X&QI_p`pC7lO9 z*u{*Db6b(oaKC%2_BRadov!ztxBAkENh{|>D*|`gG+!0r)}-B`8=gKl8*%=Qcc}P#w!wT9M;cJUE&3 zsn4+83&(|fuYdJ4Wm49nC{NzCtzPq7{~OS4Yuo*^6L%ha^CZ`1!MI7C6FbV3vj(LV zXkS?t)Oh_j-J{ZjH+SBRZs*xL@#tk|&H8PtFPiFmYtTb~+b{R!)4ca=Xfx^!7^?JYi=8_qwfa9lKe3?(d6vZ;#b_eNxBLaefa;ZKuM1iwqr)Cd!6yTlwQe zcj=TE>jhoD2G`FR{WY<{ms{7)J~xcDU9NSg@Ye;+?TH&kbbB_=RXTIQfD>10e9lM^ zo}Bt5GHu@H`lEaQs{iFy+gHD|PWO)x^cyz!*l@dm4qJI!ug{alhYYqn+_ypV)2GI@?wlOw_Pcq=j=V_O zmXxBbeQr4$1O5&f_t$)Ky5Ee#j$hZl+2B;@cd^OTo125;!e>3nDLSI;mHFuWVvRaR zdG-r$1e~+|^CID+a@VE}#)WMzJULnW!cJeaf^E?RpwdijH#Va4G+o&xQx0I^S+B96IIb!7c|^9J{#Y zvfX>l@gY4vz5M>Y7h37=5x!nrs4Ij4|H4_ zEL}16Kp(?1C+htW=)920ZU#q0-dKEm@ld<&%TLdi&gPx!@WbKCtnA~-Z^ug~+5C!Z z(SKp5wmwtyH+jGH(a@W)f8*u-zI_aIOyP=<{_iI{o~C}h_3*UI!INE1IW{v+x9S&E z)Nsu46|M8zJ)PmOY{mY^K^IRiikp^w-7h7FFPs@y&-cKG)0@p*r=B)Cx_x?vhu->! zM(-ZfH;x(8vruMv>SEwr@y$aoj?^3jv)^v>{hJT@ zI7KZxbwB8G!@9TI@9FAiraAGY(BsqObsE+BweM>BGd3V1VbJQif3j+NYXlg7Z8AN> zw)4@)31M~i?zRbN(=Kkf$Ih_FD@XLtxir?KrrW5~BPY6_@I7BQ@%g|>AxRlqMx}J> zyQ`hIhn3z=FQ?hIvtsUqU4FKu-GQeuFMIB?-7N1~|LrP0w{BN$4R6(%J9ft--wrP4 zr+59KwQ%^YZWFeq}mJ;Mn99*ra!m!coNsxY~5Xx z)yrp2j;-0Yde1q+-Z%BnukcIHaJiCjZ~TZJsgLWW%``AQ-1PEzw?RACHZ*?Gedgc> zF@<{KQFZf$-@4ci+E$}>%c})1yKIg`>y`$uGA za%#ketag{D47#*n`*V0!JjLN@oh|2EE=?J>bV|X3&E7Gcu8!_-%3^gmh zmQah=Ty^b1hgW1z{cEr=&_^nVL1zt~CUwYP?uJ9@kBw&CacG4681-waAM+C_{e!$M z1X2n8yS`+<+XDIB#TEXpSSpo?`QBK+&%T>si2QzTmA~(+Q1MWyY)WrvL|kjX;xNRs zmUVc%4k`={`1O=1TlkOivSE0jFobfsRIVr<|AHbaxNSviwG>QT-_X(-z+AQ2V8bDt zRt@Gp$bR6^K^799Vy$C<4VUEVIsp%lU=zv|;p{&xF0c@xoVrbB5hfAi!o4&b{%jfW z<^acU#t7U_Fzc#$6T<(jB#`5~4c~V>s?X!KG2!vrBUtO;|64UyNn*lNS^JBx){Lsl z<25yyUxfsxnc(vC%_>6j5XpmN3SppH?qq}jH`foaa^TldD;fls9m_|t z5{Fm$32{c4JaBnx1gO*loWurUu%RCgAh@JN1n0P3fl_6N2uhF;lH}(bAlyP_+Pb=I z8~*E$gDwn}N##nR4}pYNi$RL+tLkQAt?|qv3Z@^XE z!F*AzI>>M^Y2^|ynbl^;%9WtiIlyQ)M60WUZ~#lRO0LpAt#*yig<{DD;89my8$tvv z76k@{67bx2OYq00!0%8HH0r9aLUDlorP2Tr+qL?0N#`ms+7K8;Wjtvr4ql0j6;d%@ zE+T;*)W4%h3eYRyuLq*u*a#wMzDy$4HPyi043%@MQ|6JV>Ank_)j*zRZ}|jdz;B61fLEvuMq( znjr+P?0+GM241r_@1ZvT>O+{fMyzybECD)kK5f)Dqjz(tR8k?-qxtmuMgm+PA+=KP zMH-Xd41dXg09IQAtQPgn(c1{niIyrqHi)FriQC?AopF9DEb@SWxX;8af`oS;DerB@9UE|g0NfEEXh_E$hw z1ry^j%{bt~-09qjs)5{vd>;vil4!?aTQ@qRTXC`y9IAoBw(VIbU2C`j-9GTw8nL$5 zRsKF%!<`nox|u(ingQ5A8w4fhR8?FMTJ)!R@m7~W^U2_>D9p&SRl$VF`7#3CFWH>m zbq8>x0r?6wve1iF!9dGJHYYpzRJqI_6f>ioa;9CW3JBlC*n_K0skXBcmx%bC?&5K5_pT0F)ZUG=s(@X8aWN(+XuBlQ<79C#gwzz)P`t#_M& z9k_y3qeH8tryPPS=8DXRhOLMnc?Oo9sHE?S z;HAWNV@*9Czz8WAuiJrDC5f&BzRk+{fsjqWn1TYF%;g zitPt_Q$YZyROy<8dKHa#&Up$1AqWcSB(Nx|FHDlSeN!P+C`8ggi(ruiw^lu&dumiG zu+|sw$MnPSuTXB~U_lNTHhheu>kwSHh~Ab>C&15(;ja@SRzDT`BiAh&<5)R{nkjbSop<4Om5H#LN7ObXyTl8W>IvXFHrL2K{JQOoMvP2VZ~BD z$w)Dz-wBHWAmRw%7v)tx5g)WTypo(t`WTvc-T-TQHk7U1*4_lLCGNu+WlOc2>IPz9l4o}k2s{)agYI!sv^QW2;>AKCzcR4!Ai6<{Jc9fjU;Aoxkm1!5sTka}Pf zyCc}x_~@~YAjNTDu&5M=hE~lG0!J1TW`FHtb^<^bf$GqKW^OnED6wZ2J^8f01K`es z7>LHAI@1YoOQcL-t?pNx@+up@JG=Ee6Y0*_|=7 zJVM)QMpZvgAJdrgWq1uT8;PmNX(Y?lRWMQpskq6);*333Vk&YPZzU04uux8wa`?+7 z9VTQx+z08>3S6TPQdw!NAz`!x7#7|js*}{r>z#6M3;-`V0U@C`LPCdiYLS5Hrxg$N znD{_T|LJ-X3ZMsrgDZUD-|5@$`WNUF>a~WmIfQeU4eH>Mb}KJ_W#=w|!~`!x z0v`T9#0O@&NeepuP!)jxw=nS+14S0#r8Zh=Nw^?;s z^b-8_0@PmJ5tBJfh^Rv5%qbPS39~gtbKCqV9=Bp?pr4GdRGqtGusiL;F1@9|ZZ5k<%fV|O&)ZjP~$3eyKIe3vSqAcEL@Z$#Lf%!0IMAK2blSKFuA*@#UO1;Pz zM85bI_Jm~&-dXtTis(Rej)(-}b>?{IkBcUN@L!e_{)qEL$OvQs zXs|;#Z-0>-KPXTUBqLri8#f~4ZD+vO02!b|?pc?JXrRK3S5Tmc~cTU)22O1b&&I)g5 zkdZ)Hp|4yhBwJQ`++upIRbYkJ;m;ni!daO__)G{;&k%io?b$R9#Bc`^EmIT1e}xI> zin~N)P|nDib4teyZL^ozT7c+4G-nt z+*kZrj@0%}>lytLY`_=DKwV#6L_|Vy+$E5`WR-I6egLLI9%_8&{tyAH;;nkd_omVbgRsNk4=uCDg8Pvm zs*t^;N`Im|kUwWnj1B@pzlJgcrNBy)i~@l_by}_v9Fyev3q~PCu0eK+&q0u%`n+zTE%%il=EQlB#xfcY# z1)?qLYa?ruK@)E4F7scc90mJ)Cpxny*s^+Lz$&}r^z%}tCoTE%9qHMJE%#wv$j}Ag=>$fX-dlO% z9msroxvAm+7_yMaoiRGn(z4YqkCX?-aGh)x+vT=7szm_-_wzUN&%vD%UR_YUEmGFz z$;hy&o`QIsmFOp2(GWsh4LDFhjlQXz44x4_q0z5s4sVhJc)!-{G`j(A6_IG4@j6oN z4{kf+jW1{*9R5%d^qfsd0hQv&Bi@D;7n~CS{0;o|MNFUxT(Tw+L9q#t)Rq;Oc<4q) z*SUB^$fQy+{@MQ62^|H^AkgK&RvtP(UQ2{mjLPY674wOfvib}0_!Rjli8%GQ|Jvyg z6p{Oyv7<{AA)*SIliSjSeo1e+4>hi!Ha^jWp0I+9TNSn%=6zICEB6nW_DY~(2x8tg z(9YtRHzV;NcyZrPE)A0LeSDylROkFGP^5F{CzN&n)nq&Sk=10xFajZrckZo+A07bK zFt;iD_@;d<83Bki@PZzW8$6H0BLg;&B_aiWNB1k&WyxVMgO*?h=w^oFRx(5tGN&8h za4X%0hb@9?N<~-))6$v)YHi_2FtV|rJ8iG2OMGKjjLuA;+S|=}L@~Xuv zJOJDTs(G|s&p%8?fOn9uFOkl#)xPM~1AJ{hbk3;7C#MoZhbe^$nMg*mq8au{{`W3O z9(Hh8#mv}~Waz#UlEd&9%fCDw1H!%y2?f>o`cq`M#g^_XhFh{2V#f)rB6tW1$J`Z4 zAF5x(UXV}NUVZp1U^fAR3+iAu2@zGuYNiq9z7DIR z#SW%s*GVx;&^dW7tsvh`SiWm9nD#OF>yK1#_E~DCr6UbM5NF^I-2u7}&u^+r2k{|r zleD5Ka0!M-z0ZQa!5R3Nn+(@sBjC~IsxKUt+Mz~-@pNVv8+|x+&{J+Kf<0{Zbpz(9 z5!%ta=5vEdWlH=$_@lo-ISZ=C_K^{ZA0G0{qUX_ZyWrfsd~;QOb-2} z3cw|=5}pm3bD7%Uxeb44=P&zA1Wo9?o_kK47s6mW8zL#w`GfJo-ayb7Ok7IR1hF$f z?`hN?s?h{9W){L}#EjpVh{ZxCfP7=MIesqGy***9f^O%&s;0>q8Hz2p*qq4K`t;k_ zzt@1f1gJ-t0TRvZLoG~X5%;Sm6_+098y&UlRDlQA)T8|UOg3vmguJ_`5_Uc#?5xR)>%Bo@H~ZUi>t`}dnyW3ZX4AY3#ASvJA} z95Bpvgu7$^kt5*7I>F18T8<6QEeA}!St>k}mBE2(?=ep1{da^}V1yRf9o z(*+wvArtj*AcxvJx{iRqLGB*7kTc}>l9xi1`49fksPj}G2T~xC!~I5*m$8GtkNB|w zZY^n0 ze1DGdb{a8~5K$&%WQuW9Y3MA;NEqz%)`O`GMEZz4bztEw315*P69I}vfa{UE^E&68 zgK&3~I(0%Q$?r-g@?rtNv6F~;IY?+hM8&neopx$M7nNy>Ji220j0>K3ci?tf@Tvh9vjt&$NM=P*8CCG1P)Szf)WGqg0}}G7BUiH4BFhf zA8fkta==Q^qrm~5YLKFYcRLh(0b$m>vg4u#^&Y`Mu#LfpJkF0*gNRaj(BEMo5{N}j z)9h4m8-LIbx`epJOAT7&LWML)E)bGb^;;V6?K~9v2m{E04v08z3e+HhF;Fj{MFv;X z3FF9^+>Re7fO5t_ibSK?Cb1gSlnR6>nrUcV5Ql(`o^8O6W9d<_) zcDPIEg@^VbhVaVL7Iw&pU8Dv&eRr{pHT0`KuPSRW9%ScoHgSAHe;8VOz|b0vTJv}R z0|_POP#7euiUjHrv?b}%SN9-*Uo~Y%E&GFNkWk(nO5FqFV?j=XQftC-H%|eP3*8A= zcS;RvN>WNtpafo|^M{+AmMj#F}!^*CzK|zT)yi^&s#85C)vozR2*%ErWb*g49Yr%1dg`x7(65qh^)BJt>KmEZ^^MMN1d23TOD4?yfga8ax+#g@hT^Fo!zBSt( z-1XEUfN741iap)F6OtN3qzZ)!3q5^$+(8W@&|VS0s<=O(8!rbGF%ZlFEpQ~A)FFfE z<5g`MiCWgZ+BcAT6k#N+_@RfSmo3#G1@RDWI_TjT``n6o)r_9)gu%B>NIXQMz<;xD z^o#?|U|E>g4Qv9fZl0@w3dmlxNnoaMs>WOC@VGxUFMn^s;|)N1vTN|+2vWu=5@d3i z>WE}8I4F%#9F-oGw^FhV+HU|^*g@Torj3S9?t1Enl`-am_{9Azbuq*BT% zPHoKA0IfLPg=CcB?_W7gF><;8NN{Z?RN(V_vzx;iYT+tFi}9J<);!C(s^*ZQVCSmL zX1#!d56LS@``zR>$b-O5%F!=8u^i-CK1S~CT?{>(enFr-Hx^3PRXdzY=N|V ztR^j#caWtI-c)}}TR0lAD|fkN<2N;lpah}}CDY5z@k1nY!8(URM}Rh{ZbfR5p*oN7 z;S+tGr6#W_{|bKY6qgXJn3;sr_UwA?i-TpKd$fN}#Z z4O_LykV(ZN0a4dZNyB<^jP_M~}3B8^=M3#U+5r@leAj9SN4SGCAM z>kRzZ_2WuFeYlLsTM4F$#?Mdil^Qj|Mu}RuXaK)}f7tyZv)x9w9on9lG?0waHvZUV z)dI_tVwH{xRB#+R`~Au#kTLtWXV-Key$M(ac104IIG8UMLB1?m z?c<1z6allkUvIw^jwlawWgioN4kRZ)AyfvH>=R?4kNV;|e;x#YyMT^9#84xG0G&2= z?;w%5%%w#Rc*j2Ag9t-S2AMXB?kLmZ$v`Px=A zwH6kLuJIW@09dd_YZPY8rzjc*?ft73Dhog+kf^T26E#(*C}Bj2FYx4|Y=j$|#{yTc@)p zwc=Cbs(9x)prZyD0eS?uJ^LSMp>LowbX20|%6vol! z!_3969zwX=0i>Z(*lygv%7UVUk&K$^VdfdMXf{v!SCWXzm6c<6j%^EW6lnxs$wXYq zfd79XgrbJzCPSOReADevxDJJl1Sf=`bK-v`h*16 zCa4<(+mqjReGe(>GPLBw5YYq#{hvsY@dW{Vzmj?a<5EGl7voQeAa_!Wv8Vw(jrczi zB@7Jabgk0lkoa@c-tpk=+HflCf=KB`d_ohW`s8EThIq z&dc-wv4pyoK)j9fz zoO=o}%g`J61i{1((+sEtke|;Rpn!hf!GL{K`1mL>K5!qXI6BwX}4R>}{;S3h;G76zJ0WhL=QwR`FeoA0Q+d&95%F6?+t%dprzfn1LC660zg0 zIwW9C=SwB9Z(oD$us6p$2}f=yeCAJe;HeN#pn#NVb9h~V8huChapR9a>cG=_;3S}8 z%ST`H+oD?wZxThjnj!?->R(BM;--Psz?uf{NvzhXhyl&i4)Bql|?2F}ld z+);%W_EQ7iPe}5})wk>#fmDxI1HjShY1lwgaGxNFBrJftfGN!?K2z*k4hMxpnaE=O z&=68|FgG$=AM@*?(+^<%Jq$=tiwlMWTCBr`l8{cA&PE;H`_2sbZU&JZb+a5-QfTmT z&OAm-oI1mpY?eQx7X;QN9oZ5OawkQm9wjYRH^(^z6;+e{<{ z2VFy8mlEw&d^#H;7lOv&jFn|>{RBk##o3hbeMk38_dCHN18)*Ak1lmI^(6u?Habp~ zS6sTFMf-3u5peNhGyZh{Nc-OYe?i;r!Q9Zb|8%u*X?RY?OQTDzIYSBPUf&9DcfAv5ed&;S!&qDPm5C{2*0?E~JE8thma!|)X7?Pmv^Tj1< z5kgKv`_>mP@PUL{;HKy*{mm6>k)Q}6C*r#2f4ZInFO6sDT~Y&C-?tJtO7Wl1Jd| z-mqSUb`|(o~ez_tq1HLAbd2!JWnOUhOUAT`e^LyuZsYBA4FM{?GML@ zpeb#`-ZF{E@3*%M3V`A0#7^vYli!}e#KwBan2x9HZDsT+-n1K-h-Gi|60XmpRb}g& zWQan!Tq@_<7NTv6I$+U=UDjtLxYIERC1@eDSUq4Gp9v?G9^SgBYDXa@g$mrMvmdq}3W7cbBR z?XQPFbUHQuo*J-$!jjXqN_j3dy*+i8&xr*Q=(S)+@>}=S07q7y{>kogo{_-|A70K@RYBQ6nEE^8r6K?-FEgUprCy@3R=HXivptVoeDdL z9xnX*5R7gj_#gWA%= z_i_T*r!F)@gPLIn6+rcmWCHLNOZ}jI#9OPQZ18Zl!M!_B$k@VDn`qCbP#0Q70w@2a z6_v@9q2r!|BgkQp#O%s~Qs6O@lRwnt-%li{#WD9lQts*>#OE0uzP>;Jo1+jIyB#1sC|NoHDo z^@&j9i!gN@dhY833BVOjgVAgL(;KKy2(1|cd7L)0Y10?%wI&z{)9%nwu)8iU8DyVu z^S<0aFB)!W)dVv@zrK^*7#Hy$dOAHM_FZjT5u`7C4j^2W&k3Ur`Z|DNyDEMjKGj6u zF{F3Xu*1xzh{k{Pp?X^dzQi2+&?<`}feV(3gCr!qc>CPpM$|L%bztg+;%b=^uu0X6 zrI(;8O^~ID`s0dw#XFz|;3>@7E6uOCBLS|GXjvmDMj1K+4)hibXMYXrgCzl|NK$6E zAA{GB5Wq5D8{^9Ze54_PxE~96yFK}W7~qydFkm`S8vP|) zt}Wk=tNes*$U|W_g*rmUg*|St;C(tY;!mvZu#!)bfy6^r-O+?`)}jaON!}Vy0??A;h=AX|i<6G%fn;~VA9`@BJ%2B0M~xx2!~<#AAOtWDr~}o?qV&hAEANEVFdvy*=3yhNA$N>2N6?#j81El*AajU zN_0%1-l*jDu*kpLE55y!Bq&xPsl zQHBD(&6!#i;6-s#C3YegwCcWuA0k|*}z7d8m z>hN*rC+vgl&)sAX?7a@4BqpEp8EVVlQQ{Cx4Vpx!~gSe-Z< z2d#-$V&TY?@Wn>F=?44qHB&;+jej8toD#0+!}|^r{8#V)+<0eu5wuqXZir5ie4gOQ zQ^jW~aLK>nKdwlP)Z%|QIx2yVv9RBZ(vkS?U+E}$%dgUyNSiNP5lqgb6|ts(fDWMq z1cTiX#rd7zJ`Li-ai9ZTkK%nN1}%mr6aMX-v;FP^elW~5QT)%p)Wug<=uAsZ3%xf_ zyMjcdiWwzNtujJ>Ail_}4}DbA8Q9$q_J)=j+eje+mQ37@@{jh+f(2V81ZEU_Vr@cp zi?MM<&5mm(Nc>FH#loh*IHD+>hRkFfZ|q^c}mX_6>~ zb!|4TsT_Q%NqhF`oPz~EtV~*b8cIzr`MxEC1`PO++!hW^;O*e%FsNfrCZNQE$-KEO zKD;ngDGXG=m!V5GOfaAe9&Dcd5SkO%USm}n$;0rWkp>t8HN<_{pCV{}{U`Ex%pD|} z;Q|kQR2W<{l^h1fiYC94&B*Vq0J$DP{xboLSO2! zV*>mKK^K?UKsT1$hOOaaXYlcbQ-VsTbr^P4lygL=1uu!jk7ftw2{-XkDN%dL;3Iye z!+i|wzGJlKj|A*2A9mol`yL+~(jq+8RQ$Oed<$!SE-dCV2s^qho9%VAYvZKg;=BOW zrve6sUhrxurlP6ZFSTI(>|qeJIzzL<)Y^3T_|*&t8><_mOFVW8Y>uSBB>jruBqCve z>TI}D9n!zfE+AVWzy7C+U#C~7u?ogjj-y=8w`|^i6;v)hvw6G@DiB&?qYWx&K?MSn zx6;Q*vTiP^>J~i(CU-uP-Wp1!TJRAh$AWk%9NbOTK8f_Ysoj0mK(h}qd^(BwT z+={1pyA#HVrjYt7{S^`m(4H^uV0x8@_R~P9>!-kR6{$Hr#QhV zi}dlX+5u=2p&VearH6kF5F@-5%wu*qXb0GJnG@>&7UdhjcN5AFHx)8pt1cXkO~p~( zutaD&ydryk6~7)Vg2ap!oET_q;_zMyY-KZ1*Yi+%_)lT0 zrs!Ga;-VQU{=bYjVPM^gQjTo}5%&^A3&!GTGceMqQ>kibtgt>M_;ma$NZuVjvM&#()9M>hA}v;Bv~6w&B8}BuK#4(+wZP7eJg?3<5;U zv+3=)py-Jt<;w(sbC1lc76rV`1>R5>lbCV=!W+S`u}T2;EcHgC5a{L`wPk}1>%;{{ zoK2jhuVzz;z9j&ncHf~V7nn$fzlu*670KyaK#BzrJJ8x}Q6DZWpCEMa8Y83F?B8d; z8{jUKGybLhxZuDZi6Yg7PJQm~0jv?g8rlrS4&cIqrDi@ETD#1M-qiP$GU2`wYK}Vx zbD@c3625|Db>+|HCr7NoLcW2sp%&7`nF~xH4I*;v!r-^wR1|JfPK@VWxv+}GNEERY zT3?q30%yCS>0%BuR9&7M7aHx=UZfZMCNG-g@(CFH12)+f3H>`pazTnpzOjN~{FAc; zW2q~vzoCFfQ)huE7Z6rCRoW{g3l~`&zxk_qP$InN1Su&9bK3A3?_&-!G_Q$`MWG8VN~hQ zS1LmM!@{I6I1b^5Da1m4u#g`pE&U1?5&qB{ArsGV!wnebI>Ozt|Hu&pd$LPA zo%AyX)qMtwLDe_bqijIM+KUDksD7Ul#qRU&1Jm!B(-r( zbv>v+hu-3b8{lB?I%JT`upt%_`k(|OLfSb-7aj+J=7Pnbeb0mpZbUKc-;zwahP=)9 z6M}ti1vGSfA>uv;8mKQs1ecgYO7=7`IE=FS`Xv+OS^mh=F^3zI4r~N2c*rG#{&z-1~_e?jMqz4w8x5d@BWmXR`b(M5;2D zFu$RP!~qrjY8YQ4wg|SyE|QCq`?@>>^|vV}pyO5ix=Jt>uqZly+0hQP;7-TWSe6}4B=lM|^w+M&8L}#xB+pJB;R1O1QR)c47Nv!Sn z>dvdupqaftkBxIpSUC>8`$K}${<-zyNf0!Xpo&1n_AI1w90fcyTDoI|VQBR(Zw{9N z%q)OGqrt|hmBY{p-2J1X7zzUp6;XElXH<@ZZpLA-6D5^@6yl778% z5UhkrM>Oi7a``mPjT0c$>>LZH0Z2rfcC!S8X2@c)LQ3Dhtn^JHdiKEXHqo0O#yKUw z>nD}^6@Pt_`i_-_RIc7)73+Mps-LIcw7|~Gb~$a*70@@Vfj_i0zs-pOccD2eGFn*d z(_&_1OONHYKCVJo#oWk*1X~1|b6n0Bf;qi`QUh&H{^9{qXq=3d=F1fuMTVOo$9x{b zPR?VWaWPi>{z%CZaHZZ~u@o8RXeo~Q!38FOZ<@d-RYdRzKDK>~AG>~2X9%8tP)-d- zT<16uUKwmJYNNqRCNI8=+JivQO&t&S83(i&K_`gbm=XU+!h1Pd;7%+F9le(oK5_s9 zdk3_jbPV9tD-Dcnw=cHjGT5EV{5vfZpo8T6d(rp@Q*VQ5Jcp$z^y+ynO*QEt(8f-a z4mLHw#ZrI*v}JXw&xKA6aHPH@UmdAG&pvSulvuj}4LyfR*5yJ2v638(JRi{eMFK$S zLheJm|5eSopx|f(lB^IO7~_s06+1N(glVUagY)E)Ok1Hr!R0q4zB^Bl4eFW+N^1$L z^(b$DF_DV#2+ZWt%gaG2;3&pW88O$(=nCAn9UgD0Z{Ly(8%*DS6i}nZtL3a^lnECo zVK6YeKgEoC-?}eAp~t#L=3G!pIeed*K$frc7k*EG1G~PR*h7uM)?8TLe5gP0Kcz

      &1X-^Qp(dd| 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 literal 0 HcmV?d00001 diff --git a/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/go/shimAPIDriver.go b/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/go/shimAPIDriver.go new file mode 100644 index 000000000..ec557d343 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/go/shimAPIDriver.go @@ -0,0 +1,212 @@ +/* +# +# copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +*/ + +package main + +import ( + "bytes" + "encoding/gob" + "fmt" + "github.com/golang/protobuf/proto" + "github.com/hyperledger/fabric/common/tools/protolator" + "github.com/hyperledger/fabric/protos/msp" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// =================================================================================== +// Main +// =================================================================================== +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} + +// Init initializes chaincode +// =========================== +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke - Our entry point for Invocations +// ======================================== +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + + fmt.Println("\n\nex02 Invoke") + + fmt.Printf("Begin*** GetArgs \n") + //check for getArgs and getSttringArgs + args_take1 := stub.GetArgs() + + for key, currArg := range args_take1 { + fmt.Printf("args_take1[%d] := %s\n", key, string(currArg)) + } + fmt.Printf("End*** GetArgs \n\n") + + fmt.Printf("Begin*** GetStringArgs \n") + params := stub.GetStringArgs() + fmt.Printf("args_take2 := %s \n", params) + fmt.Printf("End*** GetStringArgs \n\n") + + fmt.Printf("Begin*** GetArgsSlice \n") + argsSlice, err := stub.GetArgsSlice() + if err != nil { + fmt.Printf("Error in argsSlice := %v \n", err) + } + + if err == nil { + fmt.Printf("argsSlice := %v \n", string(argsSlice)) + } + fmt.Printf("End*** GetArgsSlice\n\n") + + fmt.Printf("Begin*** GetFunctionAndParameters \n") + function, args := stub.GetFunctionAndParameters() + fmt.Printf("function := %s, args := %s \n", function, args) + fmt.Printf("End*** GetFunctionAndParameters\n\n") + + // Handle different functions + if function == "getTxTimeStamp" { + return t.getTxTimeStamp(stub) + } else if function == "getCreator" { + return t.getCreator(stub) + } else if function == "getBinding" { + return t.getBinding(stub) + } else if function == "getSignedProposal" { + return t.getSignedProposal(stub) + } else if function == "getTransient" { + return t.getTransient(stub) + } + + fmt.Println("invoke did not find func: " + function) //error + return shim.Error("Received unknown function invocation") +} + +//=================================================================================================== +// functon getCreator +// You can verify by calling getCreator during initMarble and checking fot the value +// during a transferMarble say +//=================================================================================================== + +func (t *SimpleChaincode) getCreator(stub shim.ChaincodeStubInterface) pb.Response { + + fmt.Printf("\nBegin*** getCreator \n") + creator, err := stub.GetCreator() + if err != nil { + fmt.Printf("GetCreator Error") + return shim.Error(err.Error()) + } + + si := &msp.SerializedIdentity{} + err2 := proto.Unmarshal(creator, si) + if err2 != nil { + fmt.Printf("Proto Unmarshal Error") + return shim.Error(err2.Error()) + } + buf := &bytes.Buffer{} + protolator.DeepMarshalJSON(buf, si) + fmt.Printf("End*** getCreator \n") + fmt.Printf(string(buf.Bytes())) + + return shim.Success([]byte(buf.Bytes())) +} + +//=================================================================================================== +// functon to getBinding +//=================================================================================================== +func (t *SimpleChaincode) getBinding(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Printf("\nBegin*** getBinding \n") + binding, err := stub.GetBinding() + if err != nil { + fmt.Printf("Returning error ****************** ") + return shim.Error(err.Error()) + } else if binding == nil { + fmt.Printf("###### No Transaction Binding is generated ###### ") + return shim.Error("###### No Transaction Binding is generated ###### ") + } + fmt.Printf("\t returned value from stub : %v\n", binding) + fmt.Printf("End*** getBinding \n") + return shim.Success(binding) +} + +//=================================================================================================== +// functon to getTxTimestamp +// in the time that is associated with current invoke on channel +//=================================================================================================== +func (t *SimpleChaincode) getTxTimeStamp(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Printf("\nBegin*** getTxTimeStamp \n") + txTimeAsPtr, err := stub.GetTxTimestamp() + if err != nil { + fmt.Printf("Returning error ******************\n") + return shim.Error(err.Error()) + } + fmt.Printf("\t returned value from stub: %v\n", txTimeAsPtr) + fmt.Printf("\t After converting time to Unix format %s \n", time.Unix(txTimeAsPtr.Seconds, int64(txTimeAsPtr.Nanos)).String()) + fmt.Printf("\nEnd*** getTxTimeStamp \n") + //return shim.Success([]byte(txTimeAsPtr)) + return shim.Success(nil) +} + +//=================================================================================================== +// functon to getTransient +// got to pass these variables during invoke in a transient map +// these values are not stored on ledger +//=================================================================================================== +func (t *SimpleChaincode) getTransient(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Printf("\nBegin*** getTransient \n") + payload, err := stub.GetTransient() + fmt.Printf(" payload from chaincode : %v", payload) + if err != nil { + return shim.Error(err.Error()) + } + for key, currArg := range payload { + fmt.Printf("Inside ... Loop") + fmt.Printf("payload[%d] := %s\n", key, currArg) + } + b, err2 := GetBytes(payload) + if err2 != nil { + return shim.Error(err2.Error()) + } + fmt.Printf("\nEnd*** getTransient \n") + return shim.Success([]byte(b)) +} + +//=================================================================================================== +// functon to getSignedProposal +//=================================================================================================== +func (t *SimpleChaincode) getSignedProposal(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Printf("\nBegin*** getSignedProposal \n") + signedProposal, err := stub.GetSignedProposal() + if err != nil { + fmt.Printf("Returning error ****************** ") + return shim.Error(err.Error()) + } + fmt.Printf("\t returned value from stub: %v", signedProposal) + fmt.Printf("\nEnd*** getSignedProposal \n") + buf := &bytes.Buffer{} + protolator.DeepMarshalJSON(buf, signedProposal) + fmt.Printf(string(buf.Bytes())) + return shim.Success([]byte(buf.Bytes())) +} + +func GetBytes(key interface{}) ([]byte, error) { + var buf bytes.Buffer + enc := gob.NewEncoder(&buf) + err := enc.Encode(key) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} diff --git a/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/package.json b/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/package.json new file mode 100644 index 000000000..fa938ec34 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/package.json @@ -0,0 +1,18 @@ +{ + "name": "fabcar", + "version": "1.0.0", + "description": "chaincode to demonstrate shim apis in node.js", + "engines": { + "node": ">=8.4.0", + "npm": ">=5.3.0" + }, + "scripts": { + "start": "node shimApiDriver.js" + }, + "engine-strict": true, + "engineStrict": true, + "license": "Apache-2.0", + "dependencies": { + "fabric-shim": "unstable" + } +} diff --git a/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/shimApiDriver.js b/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/shimApiDriver.js new file mode 100644 index 000000000..a1f52b5a8 --- /dev/null +++ b/app/platform/fabric/e2e-test/chaincodes/shimApiDriver/node/shimApiDriver.js @@ -0,0 +1,190 @@ +/* +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +*/ + +// This chaincode demonstrates the following ChaincodeStubInterface APIs +// More details can be obtained from the following link: +// https://github.com/hyperledger/fabric-chaincode-node/blob/master/src/lib/stub.js +// +// getArgs -- arguments intended for the chaincode Init and Invoke +// as an array of byte arrays +// getStringArgs -- arguments intended for the chaincode Init and +// Invoke as a string array +// getFunctionAndParameters -- returns the first argument as the function +// name and the rest of the arguments as parameters +// in a string array +// getTxID -- the Transaction ID of the transaction proposal +// invokeChaincode -- call the specified chaincode `Invoke` using the +// same transaction context +// getCreator -- returns `SignatureHeader.Creator` (e.g. an identity) +// of the `SignedProposal` +// getTransient -- It is a map that contains data (e.g. cryptographic material) +// that might be used to implement some form of application-level +// confidentiality. +// getBinding -- returns the transaction binding +// getSignedProposal -- returns the SignedProposal object, which contains all +// data elements part of a transaction proposal +// getTxTimestamp -- returns the timestamp when the transaction was created +// This is extracted from transaction ChannelHeader +// setEvent -- If the transaction is validated and successfully committed, +// the event will be delivered to the current event listeners + +const shim = require('fabric-shim'); +const util = require('util'); +const path = require('path'); + +var Chaincode = class { + + // Initialize the chaincode + async Init(stub) { + let fileName = __filename.slice(__filename.lastIndexOf(path.sep)+1, __filename.length -3); + console.info('========= Instantiated chaincode '+fileName+' ========='); + return shim.success(); + } + + // Invoke, to update or query the ledger in a proposal transaction. + async Invoke(stub) { + let ret = stub.getFunctionAndParameters(); + let method = this[ret.fcn]; + if (!method) { + console.log('no method of name:' + ret.fcn + ' found'); + return shim.success(); + } + try { + let payload = await method(stub, this, ret.params); + return shim.success(payload); + } catch (err) { + console.log(err); + return shim.error(err); + } + } + + // ======================================================== + // Input Sanitation - input checking, look for empty strings + // ======================================================== + sanitizeArgs(args, count) { + if (args.length != count){ + throw new Error('Incorrect number of arguments. Expecting '+count); + } + for (let i=0;i" -} -``` - -The response contains the success/failure status, an **enrollment Secret** and a **JSON Web Token (JWT)** that is a required string in the Request Headers for subsequent requests. - -### Create Channel request - -``` -curl -s -X POST \ - http://localhost:4000/channels \ - -H "authorization: Bearer " \ - -H "content-type: application/json" \ - -d '{ - "channelName":"mychannel", - "channelConfigPath":"../artifacts/channel/mychannel.tx" -}' -``` - -Please note that the Header **authorization** must contain the JWT returned from the `POST /users` call - -### Join Channel request - -``` -curl -s -X POST \ - http://localhost:4000/channels/mychannel/peers \ - -H "authorization: Bearer " \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer0.org1.example.com","peer1.org1.example.com"] -}' -``` -### Install chaincode - -``` -curl -s -X POST \ - http://localhost:4000/chaincodes \ - -H "authorization: Bearer " \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer0.org1.example.com","peer1.org1.example.com"], - "chaincodeName":"mycc", - "chaincodePath":"github.com/example_cc/go", - "chaincodeType": "golang", - "chaincodeVersion":"v0" -}' -``` -**NOTE:** *chaincodeType* must be set to **node** when node.js chaincode is used and *chaincodePath* must be set to the location of the node.js chaincode. Also put in the $PWD -``` -ex: -curl -s -X POST \ - http://localhost:4000/chaincodes \ - -H "authorization: Bearer " \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer0.org1.example.com","peer1.org1.example.com"], - "chaincodeName":"mycc", - "chaincodePath":"$PWD/artifacts/src/github.com/example_cc/node", - "chaincodeType": "node", - "chaincodeVersion":"v0" -}' -``` - -### Instantiate chaincode - -This is the endorsement policy defined during instantiation. -This policy can be fulfilled when members from both orgs sign the transaction proposal. - -``` -{ - identities: [{ - role: { - name: 'member', - mspId: 'Org1MSP' - } - }, - { - role: { - name: 'member', - mspId: 'Org2MSP' - } - } - ], - policy: { - '2-of': [{ - 'signed-by': 0 - }, { - 'signed-by': 1 - }] - } -} -``` - -``` -curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes \ - -H "authorization: Bearer " \ - -H "content-type: application/json" \ - -d '{ - "chaincodeName":"mycc", - "chaincodeVersion":"v0", - "chaincodeType": "golang", - "args":["a","100","b","200"] -}' -``` -**NOTE:** *chaincodeType* must be set to **node** when node.js chaincode is used - -### Invoke request - -This invoke request is signed by peers from both orgs, *org1* & *org2*. -``` -curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes/mycc \ - -H "authorization: Bearer " \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer0.org1.example.com","peer0.org2.example.com"], - "fcn":"move", - "args":["a","b","10"] -}' -``` -**NOTE:** Ensure that you save the Transaction ID from the response in order to pass this string in the subsequent query transactions. - -### Chaincode Query - -``` -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer0.org1.example.com&fcn=query&args=%5B%22a%22%5D" \ - -H "authorization: Bearer " \ - -H "content-type: application/json" -``` - -### Query Block by BlockNumber - -``` -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/blocks/1?peer=peer0.org1.example.com" \ - -H "authorization: Bearer " \ - -H "content-type: application/json" -``` - -### Query Transaction by TransactionID - -``` -curl -s -X GET http://localhost:4000/channels/mychannel/transactions/?peer=peer0.org1.example.com \ - -H "authorization: Bearer " \ - -H "content-type: application/json" -``` -**NOTE**: The transaction id can be from any previous invoke transaction, see results of the invoke request, will look something like `8a95b1794cb17e7772164c3f1292f8410fcfdc1943955a35c9764a21fcd1d1b3`. - - -### Query ChainInfo - -``` -curl -s -X GET \ - "http://localhost:4000/channels/mychannel?peer=peer0.org1.example.com" \ - -H "authorization: Bearer " \ - -H "content-type: application/json" -``` - -### Query Installed chaincodes - -``` -curl -s -X GET \ - "http://localhost:4000/chaincodes?peer=peer0.org1.example.com&type=installed" \ - -H "authorization: Bearer " \ - -H "content-type: application/json" -``` - -### Query Instantiated chaincodes - -``` -curl -s -X GET \ - "http://localhost:4000/chaincodes?peer=peer0.org1.example.com&type=instantiated" \ - -H "authorization: Bearer " \ - -H "content-type: application/json" -``` - -### Query Channels - -``` -curl -s -X GET \ - "http://localhost:4000/channels?peer=peer0.org1.example.com" \ - -H "authorization: Bearer " \ - -H "content-type: application/json" -``` - -### Clean the network - -The network will still be running at this point. Before starting the network manually again, here are the commands which cleans the containers and artifacts. - -``` -docker rm -f $(docker ps -aq) -docker rmi -f $(docker images | grep dev | awk '{print $3}') -rm -rf fabric-client-kv-org[1-2] -``` - -### Network configuration considerations - -You have the ability to change configuration parameters by either directly editing the network-config.yaml file or provide an additional file for an alternative target network. The app uses an optional environment variable "TARGET_NETWORK" to control the configuration files to use. For example, if you deployed the target network on Amazon Web Services EC2, you can add a file "network-config-aws.yaml", and set the "TARGET_NETWORK" environment to 'aws'. The app will pick up the settings inside the "network-config-aws.yaml" file. - -#### IP Address** and PORT information - -If you choose to customize your docker-compose yaml file by hardcoding IP Addresses and PORT information for your peers and orderer, then you MUST also add the identical values into the network-config.yaml file. The url and eventUrl settings will need to be adjusted to match your docker-compose yaml file. - -``` -peer1.org1.example.com: - url: grpcs://x.x.x.x:7056 - eventUrl: grpcs://x.x.x.x:7058 - -``` - -#### Discover IP Address - -To retrieve the IP Address for one of your network entities, issue the following command: - -``` -# this will return the IP Address for peer0 -docker inspect peer0 | grep IPAddress -``` - -Creative Commons License
      This work is licensed under a Creative Commons Attribution 4.0 International License. diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app.js deleted file mode 100644 index c257e9976..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app.js +++ /dev/null @@ -1,560 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; -var log4js = require('log4js'); -var logger = log4js.getLogger('SampleWebApp'); -var express = require('express'); -var session = require('express-session'); -var cookieParser = require('cookie-parser'); -var bodyParser = require('body-parser'); -var http = require('http'); -var util = require('util'); -var app = express(); -var expressJWT = require('express-jwt'); -var jwt = require('jsonwebtoken'); -var bearerToken = require('express-bearer-token'); -var cors = require('cors'); - -require('./config.js'); -var hfc = require('fabric-client'); - -var helper = require('./app/helper.js'); -var createChannel = require('./app/create-channel.js'); -var join = require('./app/join-channel.js'); -var updateAnchorPeers = require('./app/update-anchor-peers.js'); -var install = require('./app/install-chaincode.js'); -var instantiate = require('./app/instantiate-chaincode.js'); -var invoke = require('./app/invoke-transaction.js'); -var query = require('./app/query.js'); -var host = process.env.HOST || hfc.getConfigSetting('host'); -var port = process.env.PORT || hfc.getConfigSetting('port'); -/////////////////////////////////////////////////////////////////////////////// -//////////////////////////////// SET CONFIGURATONS //////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -app.options('*', cors()); -app.use(cors()); -//support parsing of application/json type post data -app.use(bodyParser.json()); -//support parsing of application/x-www-form-urlencoded post data -app.use( - bodyParser.urlencoded({ - extended: false - }) -); -// set secret variable -app.set('secret', 'thisismysecret'); -app.use( - expressJWT({ - secret: 'thisismysecret' - }).unless({ - path: ['/users'] - }) -); -app.use(bearerToken()); -app.use(function(req, res, next) { - logger.debug(' ------>>>>>> new request for %s', req.originalUrl); - if (req.originalUrl.indexOf('/users') >= 0) { - return next(); - } - - var token = req.token; - jwt.verify(token, app.get('secret'), function(err, decoded) { - if (err) { - res.send({ - success: false, - message: - 'Failed to authenticate token. Make sure to include the ' + - 'token returned from /users call in the authorization header ' + - ' as a Bearer token' - }); - return; - } else { - // add the decoded user name and org name to the request object - // for the downstream code to use - req.username = decoded.username; - req.orgname = decoded.orgName; - logger.debug( - util.format( - 'Decoded from JWT token: username - %s, orgname - %s', - decoded.username, - decoded.orgName - ) - ); - return next(); - } - }); -}); - -/////////////////////////////////////////////////////////////////////////////// -//////////////////////////////// START SERVER ///////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -var server = http.createServer(app).listen(port, function() {}); -logger.info('****************** SERVER STARTED ************************'); -logger.info('*************** http://%s:%s ******************', host, port); -server.timeout = 240000; - -function getErrorMessage(field) { - var response = { - success: false, - message: field + ' field is missing or Invalid in the request' - }; - return response; -} - -/////////////////////////////////////////////////////////////////////////////// -///////////////////////// REST ENDPOINTS START HERE /////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -// Register and enroll user -app.post('/users', async function(req, res) { - var username = req.body.username; - var orgName = req.body.orgName; - logger.debug('End point : /users'); - logger.debug('User name : ' + username); - logger.debug('Org name : ' + orgName); - if (!username) { - res.json(getErrorMessage("'username'")); - return; - } - if (!orgName) { - res.json(getErrorMessage("'orgName'")); - return; - } - var token = jwt.sign( - { - exp: - Math.floor(Date.now() / 1000) + - parseInt(hfc.getConfigSetting('jwt_expiretime')), - username: username, - orgName: orgName - }, - app.get('secret') - ); - let response = await helper.getRegisteredUser(username, orgName, true); - logger.debug( - '-- returned from registering the username %s for organization %s', - username, - orgName - ); - if (response && typeof response !== 'string') { - logger.debug( - 'Successfully registered the username %s for organization %s', - username, - orgName - ); - response.token = token; - res.json(response); - } else { - logger.debug( - 'Failed to register the username %s for organization %s with::%s', - username, - orgName, - response - ); - res.json({ success: false, message: response }); - } -}); -// Create Channel -app.post('/channels', async function(req, res) { - logger.info('<<<<<<<<<<<<<<<<< C R E A T E C H A N N E L >>>>>>>>>>>>>>>>>'); - logger.debug('End point : /channels'); - var channelName = req.body.channelName; - var channelConfigPath = req.body.channelConfigPath; - logger.debug('Channel name : ' + channelName); - logger.debug('channelConfigPath : ' + channelConfigPath); //../artifacts/channel/mychannel.tx - if (!channelName) { - res.json(getErrorMessage("'channelName'")); - return; - } - if (!channelConfigPath) { - res.json(getErrorMessage("'channelConfigPath'")); - return; - } - - let message = await createChannel.createChannel( - channelName, - channelConfigPath, - req.username, - req.orgname - ); - res.send(message); -}); -// Join Channel -app.post('/channels/:channelName/peers', async function(req, res) { - logger.info('<<<<<<<<<<<<<<<<< J O I N C H A N N E L >>>>>>>>>>>>>>>>>'); - var channelName = req.params.channelName; - var peers = req.body.peers; - logger.debug('channelName : ' + channelName); - logger.debug('peers : ' + peers); - logger.debug('username :' + req.username); - logger.debug('orgname:' + req.orgname); - - if (!channelName) { - res.json(getErrorMessage("'channelName'")); - return; - } - if (!peers || peers.length == 0) { - res.json(getErrorMessage("'peers'")); - return; - } - - let message = await join.joinChannel( - channelName, - peers, - req.username, - req.orgname - ); - res.send(message); -}); -// Update anchor peers -app.post('/channels/:channelName/anchorpeers', async function(req, res) { - logger.debug('==================== UPDATE ANCHOR PEERS =================='); - var channelName = req.params.channelName; - var configUpdatePath = req.body.configUpdatePath; - logger.debug('Channel name : ' + channelName); - logger.debug('configUpdatePath : ' + configUpdatePath); - if (!channelName) { - res.json(getErrorMessage("'channelName'")); - return; - } - if (!configUpdatePath) { - res.json(getErrorMessage("'configUpdatePath'")); - return; - } - - let message = await updateAnchorPeers.updateAnchorPeers( - channelName, - configUpdatePath, - req.username, - req.orgname - ); - res.send(message); -}); -// Install chaincode on target peers -app.post('/chaincodes', async function(req, res) { - logger.debug('==================== INSTALL CHAINCODE =================='); - var peers = req.body.peers; - var chaincodeName = req.body.chaincodeName; - var chaincodePath = req.body.chaincodePath; - var chaincodeVersion = req.body.chaincodeVersion; - var chaincodeType = req.body.chaincodeType; - logger.debug('peers : ' + peers); // target peers list - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('chaincodePath : ' + chaincodePath); - logger.debug('chaincodeVersion : ' + chaincodeVersion); - logger.debug('chaincodeType : ' + chaincodeType); - if (!peers || peers.length == 0) { - res.json(getErrorMessage("'peers'")); - return; - } - if (!chaincodeName) { - res.json(getErrorMessage("'chaincodeName'")); - return; - } - if (!chaincodePath) { - res.json(getErrorMessage("'chaincodePath'")); - return; - } - if (!chaincodeVersion) { - res.json(getErrorMessage("'chaincodeVersion'")); - return; - } - if (!chaincodeType) { - res.json(getErrorMessage("'chaincodeType'")); - return; - } - let message = await install.installChaincode( - peers, - chaincodeName, - chaincodePath, - chaincodeVersion, - chaincodeType, - req.username, - req.orgname - ); - res.send(message); -}); -// Instantiate chaincode on target peers -app.post('/channels/:channelName/chaincodes', async function(req, res) { - logger.debug('==================== INSTANTIATE CHAINCODE =================='); - var peers = req.body.peers; - var chaincodeName = req.body.chaincodeName; - var chaincodeVersion = req.body.chaincodeVersion; - var channelName = req.params.channelName; - var chaincodeType = req.body.chaincodeType; - var fcn = req.body.fcn; - var args = req.body.args; - logger.debug('peers : ' + peers); - logger.debug('channelName : ' + channelName); - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('chaincodeVersion : ' + chaincodeVersion); - logger.debug('chaincodeType : ' + chaincodeType); - logger.debug('fcn : ' + fcn); - logger.debug('args : ' + args); - if (!chaincodeName) { - res.json(getErrorMessage("'chaincodeName'")); - return; - } - if (!chaincodeVersion) { - res.json(getErrorMessage("'chaincodeVersion'")); - return; - } - if (!channelName) { - res.json(getErrorMessage("'channelName'")); - return; - } - if (!chaincodeType) { - res.json(getErrorMessage("'chaincodeType'")); - return; - } - if (!args) { - res.json(getErrorMessage("'args'")); - return; - } - - let message = await instantiate.instantiateChaincode( - peers, - channelName, - chaincodeName, - chaincodeVersion, - chaincodeType, - fcn, - args, - req.username, - req.orgname - ); - res.send(message); -}); -// Invoke transaction on chaincode on target peers -app.post('/channels/:channelName/chaincodes/:chaincodeName', async function( - req, - res -) { - logger.debug('==================== INVOKE ON CHAINCODE =================='); - var peers = req.body.peers; - var chaincodeName = req.params.chaincodeName; - var channelName = req.params.channelName; - var fcn = req.body.fcn; - var args = req.body.args; - logger.debug('channelName : ' + channelName); - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('fcn : ' + fcn); - logger.debug('args : ' + args); - if (!chaincodeName) { - res.json(getErrorMessage("'chaincodeName'")); - return; - } - if (!channelName) { - res.json(getErrorMessage("'channelName'")); - return; - } - if (!fcn) { - res.json(getErrorMessage("'fcn'")); - return; - } - if (!args) { - res.json(getErrorMessage("'args'")); - return; - } - - let message = await invoke.invokeChaincode( - peers, - channelName, - chaincodeName, - fcn, - args, - req.username, - req.orgname - ); - res.send(message); -}); -// Query on chaincode on target peers -app.get('/channels/:channelName/chaincodes/:chaincodeName', async function( - req, - res -) { - logger.debug('==================== QUERY BY CHAINCODE =================='); - var channelName = req.params.channelName; - var chaincodeName = req.params.chaincodeName; - let args = req.query.args; - let fcn = req.query.fcn; - let peer = req.query.peer; - - logger.debug('channelName : ' + channelName); - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('fcn : ' + fcn); - logger.debug('args : ' + args); - - if (!chaincodeName) { - res.json(getErrorMessage("'chaincodeName'")); - return; - } - if (!channelName) { - res.json(getErrorMessage("'channelName'")); - return; - } - if (!fcn) { - res.json(getErrorMessage("'fcn'")); - return; - } - if (!args) { - res.json(getErrorMessage("'args'")); - return; - } - args = args.replace(/'/g, '"'); - args = JSON.parse(args); - logger.debug(args); - - let message = await query.queryChaincode( - peer, - channelName, - chaincodeName, - args, - fcn, - req.username, - req.orgname - ); - res.send(message); -}); -// Query Get Block by BlockNumber -app.get('/channels/:channelName/blocks/:blockId', async function(req, res) { - logger.debug('==================== GET BLOCK BY NUMBER =================='); - let blockId = req.params.blockId; - let peer = req.query.peer; - logger.debug('channelName : ' + req.params.channelName); - logger.debug('BlockID : ' + blockId); - logger.debug('Peer : ' + peer); - if (!blockId) { - res.json(getErrorMessage("'blockId'")); - return; - } - - let message = await query.getBlockByNumber( - peer, - req.params.channelName, - blockId, - req.username, - req.orgname - ); - res.send(message); -}); -// Query Get Transaction by Transaction ID -app.get('/channels/:channelName/transactions/:trxnId', async function( - req, - res -) { - logger.debug( - '================ GET TRANSACTION BY TRANSACTION_ID ======================' - ); - logger.debug('channelName : ' + req.params.channelName); - let trxnId = req.params.trxnId; - let peer = req.query.peer; - if (!trxnId) { - res.json(getErrorMessage("'trxnId'")); - return; - } - - let message = await query.getTransactionByID( - peer, - req.params.channelName, - trxnId, - req.username, - req.orgname - ); - res.send(message); -}); -// Query Get Block by Hash -app.get('/channels/:channelName/blocks', async function(req, res) { - logger.debug('================ GET BLOCK BY HASH ======================'); - logger.debug('channelName : ' + req.params.channelName); - let hash = req.query.hash; - let peer = req.query.peer; - if (!hash) { - res.json(getErrorMessage("'hash'")); - return; - } - - let message = await query.getBlockByHash( - peer, - req.params.channelName, - hash, - req.username, - req.orgname - ); - res.send(message); -}); -//Query for Channel Information -app.get('/channels/:channelName', async function(req, res) { - logger.debug( - '================ GET CHANNEL INFORMATION ======================' - ); - logger.debug('channelName : ' + req.params.channelName); - let peer = req.query.peer; - - let message = await query.getChainInfo( - peer, - req.params.channelName, - req.username, - req.orgname - ); - res.send(message); -}); -//Query for Channel instantiated chaincodes -app.get('/channels/:channelName/chaincodes', async function(req, res) { - logger.debug( - '================ GET INSTANTIATED CHAINCODES ======================' - ); - logger.debug('channelName : ' + req.params.channelName); - let peer = req.query.peer; - - let message = await query.getInstalledChaincodes( - peer, - req.params.channelName, - 'instantiated', - req.username, - req.orgname - ); - res.send(message); -}); -// Query to fetch all Installed/instantiated chaincodes -app.get('/chaincodes', async function(req, res) { - var peer = req.query.peer; - var installType = req.query.type; - logger.debug( - '================ GET INSTALLED CHAINCODES ======================' - ); - - let message = await query.getInstalledChaincodes( - peer, - null, - 'installed', - req.username, - req.orgname - ); - res.send(message); -}); -// Query to fetch channels -app.get('/channels', async function(req, res) { - logger.debug('================ GET CHANNELS ======================'); - logger.debug('peer: ' + req.query.peer); - var peer = req.query.peer; - if (!peer) { - res.json(getErrorMessage("'peer'")); - return; - } - - let message = await query.getChannels(peer, req.username, req.orgname); - res.send(message); -}); diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/create-channel.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/create-channel.js deleted file mode 100644 index f1b2f7b27..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/create-channel.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var fs = require('fs'); -var path = require('path'); - -var helper = require('./helper.js'); -var logger = helper.getLogger('Create-Channel'); -//Attempt to send a request to the orderer with the sendTransaction method -var createChannel = async function( - channelName, - channelConfigPath, - username, - orgName -) { - logger.debug("\n====== Creating Channel '" + channelName + "' ======\n"); - try { - // first setup the client for this org - var client = await helper.getClientForOrg(orgName); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - orgName - ); - - // read in the envelope for the channel config raw bytes - var envelope = fs.readFileSync(path.join(__dirname, channelConfigPath)); - // extract the channel config bytes from the envelope to be signed - var channelConfig = client.extractChannelConfig(envelope); - - //Acting as a client in the given organization provided with "orgName" param - // sign the channel config bytes as "endorsement", this is required by - // the orderer's channel creation policy - // this will use the admin identity assigned to the client when the connection profile was loaded - let signature = client.signChannelConfig(channelConfig); - - let request = { - config: channelConfig, - signatures: [signature], - name: channelName, - txId: client.newTransactionID(true) // get an admin based transactionID - }; - - // send to orderer - const result = await client.createChannel(request); - logger.debug(' result ::%j', result); - if (result) { - if (result.status === 'SUCCESS') { - logger.debug('Successfully created the channel.'); - const response = { - success: true, - message: "Channel '" + channelName + "' created Successfully" - }; - return response; - } else { - logger.error( - 'Failed to create the channel. status:' + - result.status + - ' reason:' + - result.info - ); - const response = { - success: false, - message: - "Channel '" + - channelName + - "' failed to create status:" + - result.status + - ' reason:' + - result.info - }; - return response; - } - } else { - logger.error( - "\n!!!!!!!!! Failed to create the channel '" + - channelName + - "' !!!!!!!!!\n\n" - ); - const response = { - success: false, - message: "Failed to create the channel '" + channelName + "'" - }; - return response; - } - } catch (err) { - logger.error( - 'Failed to initialize the channel: ' + err.stack ? err.stack : err - ); - throw new Error('Failed to initialize the channel: ' + err.toString()); - } -}; - -exports.createChannel = createChannel; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/helper.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/helper.js deleted file mode 100644 index ef18f0d28..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/helper.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; -var log4js = require('log4js'); -var logger = log4js.getLogger('Helper'); -logger.setLevel('DEBUG'); - -var path = require('path'); -var util = require('util'); - -var hfc = require('fabric-client'); -hfc.setLogger(logger); - -async function getClientForOrg(userorg, username) { - logger.debug('getClientForOrg - ****** START %s %s', userorg, username); - // get a fabric client loaded with a connection profile for this org - let config = '-connection-profile-path'; - - // build a client context and load it with a connection profile - // lets only load the network settings and save the client for later - let client = hfc.loadFromConfig(hfc.getConfigSetting('network' + config)); - - // This will load a connection profile over the top of the current one one - // since the first one did not have a client section and the following one does - // nothing will actually be replaced. - // This will also set an admin identity because the organization defined in the - // client section has one defined - client.loadFromConfig(hfc.getConfigSetting(userorg + config)); - - // this will create both the state store and the crypto store based - // on the settings in the client section of the connection profile - await client.initCredentialStores(); - - // The getUserContext call tries to get the user from persistence. - // If the user has been saved to persistence then that means the user has - // been registered and enrolled. If the user is found in persistence - // the call will then assign the user to the client object. - if (username) { - let user = await client.getUserContext(username, true); - if (!user) { - throw new Error(util.format('User was not found :', username)); - } else { - logger.debug('User %s was found to be registered and enrolled', username); - } - } - logger.debug('getClientForOrg - ****** END %s %s \n\n', userorg, username); - - return client; -} - -var getRegisteredUser = async function(username, userOrg, isJson) { - try { - var client = await getClientForOrg(userOrg); - logger.debug('Successfully initialized the credential stores'); - // client can now act as an agent for organization Org1 - // first check to see if the user is already enrolled - var user = await client.getUserContext(username, true); - if (user && user.isEnrolled()) { - logger.info('Successfully loaded member from persistence'); - } else { - // user was not enrolled, so we will need an admin user object to register - logger.info( - 'User %s was not enrolled, so we will need an admin user object to register', - username - ); - var admins = hfc.getConfigSetting('admins'); - let adminUserObj = await client.setUserContext({ - username: admins[0].username, - password: admins[0].secret - }); - let caClient = client.getCertificateAuthority(); - let secret = await caClient.register( - { - enrollmentID: username, - affiliation: userOrg.toLowerCase() + '.department1' - }, - adminUserObj - ); - logger.debug('Successfully got the secret for user %s', username); - user = await client.setUserContext({ username: username, password: secret }); - logger.debug( - 'Successfully enrolled username %s and setUserContext on the client object', - username - ); - } - if (user && user.isEnrolled) { - if (isJson && isJson === true) { - var response = { - success: true, - secret: user._enrollmentSecret, - message: username + ' enrolled Successfully' - }; - return response; - } - } else { - throw new Error('User was not enrolled '); - } - } catch (error) { - logger.error( - 'Failed to get registered user: %s with error: %s', - username, - error.toString() - ); - return 'failed ' + error.toString(); - } -}; - -var setupChaincodeDeploy = function() { - process.env.GOPATH = path.join(__dirname, hfc.getConfigSetting('CC_SRC_PATH')); -}; - -var getLogger = function(moduleName) { - var logger = log4js.getLogger(moduleName); - logger.setLevel('DEBUG'); - return logger; -}; - -exports.getClientForOrg = getClientForOrg; -exports.getLogger = getLogger; -exports.setupChaincodeDeploy = setupChaincodeDeploy; -exports.getRegisteredUser = getRegisteredUser; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/install-chaincode.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/install-chaincode.js deleted file mode 100644 index 96a7098ea..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/install-chaincode.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; -var util = require('util'); -var helper = require('./helper.js'); -var logger = helper.getLogger('install-chaincode'); - -var installChaincode = async function( - peers, - chaincodeName, - chaincodePath, - chaincodeVersion, - chaincodeType, - username, - org_name -) { - logger.debug( - '\n\n============ Install chaincode on organizations ============\n' - ); - helper.setupChaincodeDeploy(); - let error_message = null; - try { - logger.info( - 'Calling peers in organization "%s" to join the channel', - org_name - ); - - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - - var request = { - targets: peers, - chaincodePath: chaincodePath, - chaincodeId: chaincodeName, - chaincodeVersion: chaincodeVersion, - chaincodeType: chaincodeType - }; - let results = await client.installChaincode(request); - // the returned object has both the endorsement results - // and the actual proposal, the proposal will be needed - // later when we send a transaction to the orederer - var proposalResponses = results[0]; - var proposal = results[1]; - - // lets have a look at the responses to see if they are - // all good, if good they will also include signatures - // required to be committed - for (const i in proposalResponses) { - if (proposalResponses[i] instanceof Error) { - error_message = util.format( - 'install proposal resulted in an error :: %s', - proposalResponses[i].toString() - ); - logger.error(error_message); - } else if ( - proposalResponses[i].response && - proposalResponses[i].response.status === 200 - ) { - logger.info('install proposal was good'); - } else { - all_good = false; - error_message = util.format( - 'install proposal was bad for an unknown reason %j', - proposalResponses[i] - ); - logger.error(error_message); - } - } - } catch (error) { - logger.error( - 'Failed to install due to error: ' + error.stack ? error.stack : error - ); - error_message = error.toString(); - } - - if (!error_message) { - let message = util.format('Successfully installed chaincode'); - logger.info(message); - // build a response to send back to the REST caller - const response = { - success: true, - message: message - }; - return response; - } else { - let message = util.format('Failed to install due to:%s', error_message); - logger.error(message); - const response = { - success: false, - message: message - }; - return response; - } -}; -exports.installChaincode = installChaincode; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/instantiate-chaincode.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/instantiate-chaincode.js deleted file mode 100644 index 772ac7476..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/instantiate-chaincode.js +++ /dev/null @@ -1,269 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; -const util = require('util'); -const helper = require('./helper.js'); -const logger = helper.getLogger('instantiate-chaincode'); - -const instantiateChaincode = async function( - peers, - channelName, - chaincodeName, - chaincodeVersion, - functionName, - chaincodeType, - args, - username, - org_name -) { - logger.debug( - '\n\n============ Instantiate chaincode on channel ' + - channelName + - ' ============\n' - ); - let error_message = null; - let client = null; - let channel = null; - try { - // first setup the client for this org - client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - const tx_id = client.newTransactionID(true); // Get an admin based transactionID - // An admin based transactionID will - // indicate that admin identity should - // be used to sign the proposal request. - // will need the transaction ID string for the event registration later - const deployId = tx_id.getTransactionID(); - - // send proposal to endorser - const request = { - targets: peers, - chaincodeId: chaincodeName, - chaincodeType: chaincodeType, - chaincodeVersion: chaincodeVersion, - args: args, - txId: tx_id, - - // Use this to demonstrate the following policy: - // The policy can be fulfilled when members from both orgs signed. - 'endorsement-policy': { - identities: [ - { role: { name: 'member', mspId: 'Org1MSP' } }, - { role: { name: 'member', mspId: 'Org2MSP' } } - ], - policy: { - '2-of': [{ 'signed-by': 0 }, { 'signed-by': 1 }] - } - } - }; - - if (functionName) request.fcn = functionName; - - let results = await channel.sendInstantiateProposal(request, 60000); //instantiate takes much longer - - // the returned object has both the endorsement results - // and the actual proposal, the proposal will be needed - // later when we send a transaction to the orderer - const proposalResponses = results[0]; - const proposal = results[1]; - - // look at the responses to see if they are all are good - // response will also include signatures required to be committed - let all_good = true; - for (const i in proposalResponses) { - if (proposalResponses[i] instanceof Error) { - all_good = false; - error_message = util.format( - 'instantiate proposal resulted in an error :: %s', - proposalResponses[i].toString() - ); - logger.error(error_message); - } else if ( - proposalResponses[i].response && - proposalResponses[i].response.status === 200 - ) { - logger.info('instantiate proposal was good'); - } else { - all_good = false; - error_message = util.format( - 'instantiate proposal was bad for an unknown reason %j', - proposalResponses[i] - ); - logger.error(error_message); - } - } - - if (all_good) { - logger.info( - util.format( - 'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s', - proposalResponses[0].response.status, - proposalResponses[0].response.message, - proposalResponses[0].response.payload, - proposalResponses[0].endorsement.signature - ) - ); - - // wait for the channel-based event hub to tell us that the - // instantiate transaction was committed on the peer - const promises = []; - const event_hubs = channel.getChannelEventHubsForOrg(); - logger.debug( - 'found %s eventhubs for this organization %s', - event_hubs.length, - org_name - ); - event_hubs.forEach(eh => { - let instantiateEventPromise = new Promise((resolve, reject) => { - logger.debug('instantiateEventPromise - setting up event'); - let event_timeout = setTimeout(() => { - let message = 'REQUEST_TIMEOUT:' + eh.getPeerAddr(); - logger.error(message); - eh.disconnect(); - }, 60000); - eh.registerTxEvent( - deployId, - (tx, code, block_num) => { - logger.info( - 'The chaincode instantiate transaction has been committed on peer %s', - eh.getPeerAddr() - ); - logger.info( - 'Transaction %s has status of %s in blocl %s', - tx, - code, - block_num - ); - clearTimeout(event_timeout); - - if (code !== 'VALID') { - let message = util.format( - 'The chaincode instantiate transaction was invalid, code:%s', - code - ); - logger.error(message); - reject(new Error(message)); - } else { - let message = 'The chaincode instantiate transaction was valid.'; - logger.info(message); - resolve(message); - } - }, - err => { - clearTimeout(event_timeout); - logger.error(err); - reject(err); - }, - // the default for 'unregister' is true for transaction listeners - // so no real need to set here, however for 'disconnect' - // the default is false as most event hubs are long running - // in this use case we are using it only once - { unregister: true, disconnect: true } - ); - eh.connect(); - }); - promises.push(instantiateEventPromise); - }); - - const orderer_request = { - txId: tx_id, // must include the transaction id so that the outbound - // transaction to the orderer will be signed by the admin id - // the same as the proposal above, notice that transactionID - // generated above was based on the admin id not the current - // user assigned to the 'client' instance. - proposalResponses: proposalResponses, - proposal: proposal - }; - const sendPromise = channel.sendTransaction(orderer_request); - // put the send to the orderer last so that the events get registered and - // are ready for the orderering and committing - promises.push(sendPromise); - const results = await Promise.all(promises); - logger.debug(util.format('------->>> R E S P O N S E : %j', results)); - const response = results.pop(); // orderer results are last in the results - if (response.status === 'SUCCESS') { - logger.info('Successfully sent transaction to the orderer.'); - } else { - error_message = util.format( - 'Failed to order the transaction. Error code: %s', - response.status - ); - logger.debug(error_message); - } - - // now see what each of the event hubs reported - for (const i in results) { - const event_hub_result = results[i]; - const event_hub = event_hubs[i]; - logger.debug('Event results for event hub :%s', event_hub.getPeerAddr()); - if (typeof event_hub_result === 'string') { - logger.debug(event_hub_result); - } else { - if (!error_message) error_message = event_hub_result.toString(); - logger.debug(event_hub_result.toString()); - } - } - } - } catch (error) { - logger.error( - 'Failed to send instantiate due to error: ' + error.stack - ? error.stack - : error - ); - error_message = error.toString(); - } finally { - if (channel) { - channel.close(); - } - } - - let success = true; - let message = util.format( - "Successfully instantiate chaincode in organization %s to the channel '%s'", - org_name, - channelName - ); - if (error_message) { - message = util.format( - 'Failed to instantiate the chaincode. cause:%s', - error_message - ); - success = false; - logger.error(message); - } else { - logger.info(message); - } - - // build a response to send back to the REST caller - const response = { - success: success, - message: message - }; - return response; -}; -exports.instantiateChaincode = instantiateChaincode; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/invoke-transaction.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/invoke-transaction.js deleted file mode 100644 index 5ac8a049a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/invoke-transaction.js +++ /dev/null @@ -1,240 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -'use strict'; -const util = require('util'); -const helper = require('./helper.js'); -const logger = helper.getLogger('invoke-chaincode'); - -const invokeChaincode = async function( - peerNames, - channelName, - chaincodeName, - fcn, - args, - username, - org_name -) { - logger.debug( - util.format( - '\n============ invoke transaction on channel %s ============\n', - channelName - ) - ); - let error_message = null; - let tx_id_string = null; - let client = null; - let channel = null; - try { - // first setup the client for this org - client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - const tx_id = client.newTransactionID(); - // will need the transaction ID string for the event registration later - tx_id_string = tx_id.getTransactionID(); - - // send proposal to endorser - const request = { - targets: peerNames, - chaincodeId: chaincodeName, - fcn: fcn, - args: args, - chainId: channelName, - txId: tx_id - }; - - let results = await channel.sendTransactionProposal(request); - - // the returned object has both the endorsement results - // and the actual proposal, the proposal will be needed - // later when we send a transaction to the orderer - const proposalResponses = results[0]; - const proposal = results[1]; - - // look at the responses to see if they are all are good - // response will also include signatures required to be committed - let all_good = true; - for (const i in proposalResponses) { - if (proposalResponses[i] instanceof Error) { - all_good = false; - error_message = util.format( - 'invoke chaincode proposal resulted in an error :: %s', - proposalResponses[i].toString() - ); - logger.error(error_message); - } else if ( - proposalResponses[i].response && - proposalResponses[i].response.status === 200 - ) { - logger.info('invoke chaincode proposal was good'); - } else { - all_good = false; - error_message = util.format( - 'invoke chaincode proposal failed for an unknown reason %j', - proposalResponses[i] - ); - logger.error(error_message); - } - } - - if (all_good) { - logger.info( - util.format( - 'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s', - proposalResponses[0].response.status, - proposalResponses[0].response.message, - proposalResponses[0].response.payload, - proposalResponses[0].endorsement.signature - ) - ); - - // wait for the channel-based event hub to tell us - // that the commit was good or bad on each peer in our organization - const promises = []; - let event_hubs = channel.getChannelEventHubsForOrg(); - event_hubs.forEach(eh => { - logger.debug('invokeEventPromise - setting up event'); - let invokeEventPromise = new Promise((resolve, reject) => { - let event_timeout = setTimeout(() => { - let message = 'REQUEST_TIMEOUT:' + eh.getPeerAddr(); - logger.error(message); - eh.disconnect(); - }, 3000); - eh.registerTxEvent( - tx_id_string, - (tx, code, block_num) => { - logger.info( - 'The chaincode invoke chaincode transaction has been committed on peer %s', - eh.getPeerAddr() - ); - logger.info( - 'Transaction %s has status of %s in blocl %s', - tx, - code, - block_num - ); - clearTimeout(event_timeout); - - if (code !== 'VALID') { - let message = util.format( - 'The invoke chaincode transaction was invalid, code:%s', - code - ); - logger.error(message); - reject(new Error(message)); - } else { - let message = 'The invoke chaincode transaction was valid.'; - logger.info(message); - resolve(message); - } - }, - err => { - clearTimeout(event_timeout); - logger.error(err); - reject(err); - }, - // the default for 'unregister' is true for transaction listeners - // so no real need to set here, however for 'disconnect' - // the default is false as most event hubs are long running - // in this use case we are using it only once - { unregister: true, disconnect: true } - ); - eh.connect(); - }); - promises.push(invokeEventPromise); - }); - - const orderer_request = { - txId: tx_id, - proposalResponses: proposalResponses, - proposal: proposal - }; - const sendPromise = channel.sendTransaction(orderer_request); - // put the send to the orderer last so that the events get registered and - // are ready for the orderering and committing - promises.push(sendPromise); - let results = await Promise.all(promises); - logger.debug(util.format('------->>> R E S P O N S E : %j', results)); - let response = results.pop(); // orderer results are last in the results - if (response.status === 'SUCCESS') { - logger.info('Successfully sent transaction to the orderer.'); - } else { - error_message = util.format( - 'Failed to order the transaction. Error code: %s', - response.status - ); - logger.debug(error_message); - } - - // now see what each of the event hubs reported - for (let i in results) { - let event_hub_result = results[i]; - let event_hub = event_hubs[i]; - logger.debug('Event results for event hub :%s', event_hub.getPeerAddr()); - if (typeof event_hub_result === 'string') { - logger.debug(event_hub_result); - } else { - if (!error_message) error_message = event_hub_result.toString(); - logger.debug(event_hub_result.toString()); - } - } - } - } catch (error) { - logger.error( - 'Failed to invoke due to error: ' + error.stack ? error.stack : error - ); - error_message = error.toString(); - } finally { - if (channel) { - channel.close(); - } - } - - let success = true; - let message = util.format( - "Successfully invoked the chaincode %s to the channel '%s' for transaction ID: %s", - org_name, - channelName, - tx_id_string - ); - if (error_message) { - message = util.format('Failed to invoke chaincode. cause:%s', error_message); - success = false; - logger.error(message); - } else { - logger.info(message); - } - - // build a response to send back to the REST caller - const response = { - success: success, - message: message - }; - return response; -}; - -exports.invokeChaincode = invokeChaincode; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/join-channel.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/join-channel.js deleted file mode 100644 index 3c72ffd85..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/join-channel.js +++ /dev/null @@ -1,133 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var util = require('util'); - -var helper = require('./helper.js'); -var logger = helper.getLogger('Join-Channel'); - -/* - * Have an organization join a channel - */ -var joinChannel = async function(channel_name, peers, username, org_name) { - logger.debug('\n\n============ Join Channel start ============\n'); - var error_message = null; - var all_eventhubs = []; - try { - logger.info( - 'Calling peers in organization "%s" to join the channel', - org_name - ); - - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - var channel = client.getChannel(channel_name); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channel_name - ); - logger.error(message); - throw new Error(message); - } - - // next step is to get the genesis_block from the orderer, - // the starting point for the channel that we want to join - let request = { - txId: client.newTransactionID(true) //get an admin based transactionID - }; - let genesis_block = await channel.getGenesisBlock(request); - - // tell each peer to join and wait 10 seconds - // for the channel to be created on each peer - var promises = []; - promises.push(new Promise(resolve => setTimeout(resolve, 10000))); - - let join_request = { - targets: peers, //using the peer names which only is allowed when a connection profile is loaded - txId: client.newTransactionID(true), //get an admin based transactionID - block: genesis_block - }; - let join_promise = channel.joinChannel(join_request); - promises.push(join_promise); - let results = await Promise.all(promises); - logger.debug(util.format('Join Channel R E S P O N S E : %j', results)); - - // lets check the results of sending to the peers which is - // last in the results array - let peers_results = results.pop(); - // then each peer results - for (let i in peers_results) { - let peer_result = peers_results[i]; - if (peer_result instanceof Error) { - error_message = util.format( - 'Failed to join peer to the channel with error :: %s', - peer_result.toString() - ); - logger.error(error_message); - } else if (peer_result.response && peer_result.response.status == 200) { - logger.info('Successfully joined peer to the channel %s', channel_name); - } else { - error_message = util.format( - 'Failed to join peer to the channel %s', - channel_name - ); - logger.error(error_message); - } - } - } catch (error) { - logger.error( - 'Failed to join channel due to error: ' + error.stack ? error.stack : error - ); - error_message = error.toString(); - } - - // need to shutdown open event streams - all_eventhubs.forEach(eh => { - eh.disconnect(); - }); - - if (!error_message) { - let message = util.format( - 'Successfully joined peers in organization %s to the channel:%s', - org_name, - channel_name - ); - logger.info(message); - // build a response to send back to the REST caller - const response = { - success: true, - message: message - }; - return response; - } else { - let message = util.format( - 'Failed to join all peers to channel. cause:%s', - error_message - ); - logger.error(message); - // build a response to send back to the REST caller - const response = { - success: false, - message: message - }; - return response; - } -}; -exports.joinChannel = joinChannel; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/query.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/query.js deleted file mode 100644 index 9c8eb2177..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/query.js +++ /dev/null @@ -1,343 +0,0 @@ -/** - * Copyright 2017 IBM All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var util = require('util'); -var helper = require('./helper.js'); -var logger = helper.getLogger('Query'); - -var queryChaincode = async function( - peer, - channelName, - chaincodeName, - args, - fcn, - username, - org_name -) { - let client = null; - let channel = null; - try { - // first setup the client for this org - client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - - // send query - var request = { - targets: [peer], //queryByChaincode allows for multiple targets - chaincodeId: chaincodeName, - fcn: fcn, - args: args - }; - let response_payloads = await channel.queryByChaincode(request); - if (response_payloads) { - for (let i = 0; i < response_payloads.length; i++) { - logger.info( - args[0] + - ' now has ' + - response_payloads[i].toString('utf8') + - ' after the move' - ); - } - return ( - args[0] + - ' now has ' + - response_payloads[0].toString('utf8') + - ' after the move' - ); - } else { - logger.error('response_payloads is null'); - return 'response_payloads is null'; - } - } catch (error) { - logger.error( - 'Failed to query due to error: ' + error.stack ? error.stack : error - ); - return error.toString(); - } finally { - if (channel) { - channel.close(); - } - } -}; -var getBlockByNumber = async function( - peer, - channelName, - blockNumber, - username, - org_name -) { - try { - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - var channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - - let response_payload = await channel.queryBlock(parseInt(blockNumber, peer)); - if (response_payload) { - logger.debug(response_payload); - return response_payload; - } else { - logger.error('response_payload is null'); - return 'response_payload is null'; - } - } catch (error) { - logger.error( - 'Failed to query due to error: ' + error.stack ? error.stack : error - ); - return error.toString(); - } -}; -var getTransactionByID = async function( - peer, - channelName, - trxnID, - username, - org_name -) { - try { - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - var channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - - let response_payload = await channel.queryTransaction(trxnID, peer); - if (response_payload) { - logger.debug(response_payload); - return response_payload; - } else { - logger.error('response_payload is null'); - return 'response_payload is null'; - } - } catch (error) { - logger.error( - 'Failed to query due to error: ' + error.stack ? error.stack : error - ); - return error.toString(); - } -}; -var getBlockByHash = async function( - peer, - channelName, - hash, - username, - org_name -) { - try { - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - var channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - - let response_payload = await channel.queryBlockByHash( - Buffer.from(hash, 'hex'), - peer - ); - if (response_payload) { - logger.debug(response_payload); - return response_payload; - } else { - logger.error('response_payload is null'); - return 'response_payload is null'; - } - } catch (error) { - logger.error( - 'Failed to query due to error: ' + error.stack ? error.stack : error - ); - return error.toString(); - } -}; -var getChainInfo = async function(peer, channelName, username, org_name) { - try { - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - var channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - - let response_payload = await channel.queryInfo(peer); - if (response_payload) { - logger.debug(response_payload); - return response_payload; - } else { - logger.error('response_payload is null'); - return 'response_payload is null'; - } - } catch (error) { - logger.error( - 'Failed to query due to error: ' + error.stack ? error.stack : error - ); - return error.toString(); - } -}; -//getInstalledChaincodes -var getInstalledChaincodes = async function( - peer, - channelName, - type, - username, - org_name -) { - try { - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - - let response = null; - if (type === 'installed') { - response = await client.queryInstalledChaincodes(peer, true); //use the admin identity - } else { - var channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - response = await channel.queryInstantiatedChaincodes(peer, true); //use the admin identity - } - if (response) { - if (type === 'installed') { - logger.debug('<<< Installed Chaincodes >>>'); - } else { - logger.debug('<<< Instantiated Chaincodes >>>'); - } - var details = []; - for (let i = 0; i < response.chaincodes.length; i++) { - logger.debug( - 'name: ' + - response.chaincodes[i].name + - ', version: ' + - response.chaincodes[i].version + - ', path: ' + - response.chaincodes[i].path - ); - details.push( - 'name: ' + - response.chaincodes[i].name + - ', version: ' + - response.chaincodes[i].version + - ', path: ' + - response.chaincodes[i].path - ); - } - return details; - } else { - logger.error('response is null'); - return 'response is null'; - } - } catch (error) { - logger.error( - 'Failed to query due to error: ' + error.stack ? error.stack : error - ); - return error.toString(); - } -}; -var getChannels = async function(peer, username, org_name) { - try { - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - - let response = await client.queryChannels(peer); - if (response) { - logger.debug('<<< channels >>>'); - var channelNames = []; - for (let i = 0; i < response.channels.length; i++) { - channelNames.push('channel id: ' + response.channels[i].channel_id); - } - logger.debug(channelNames); - return response; - } else { - logger.error('response_payloads is null'); - return 'response_payloads is null'; - } - } catch (error) { - logger.error( - 'Failed to query due to error: ' + error.stack ? error.stack : error - ); - return error.toString(); - } -}; - -exports.queryChaincode = queryChaincode; -exports.getBlockByNumber = getBlockByNumber; -exports.getTransactionByID = getTransactionByID; -exports.getBlockByHash = getBlockByHash; -exports.getChainInfo = getChainInfo; -exports.getInstalledChaincodes = getInstalledChaincodes; -exports.getChannels = getChannels; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/update-anchor-peers.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/update-anchor-peers.js deleted file mode 100644 index b3e76a73e..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/app/update-anchor-peers.js +++ /dev/null @@ -1,165 +0,0 @@ -/** - * Copyright Hitachi America, Ltd. All Rights Reserved. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -'use strict'; -var util = require('util'); -var fs = require('fs'); -var path = require('path'); - -var helper = require('./helper.js'); -var logger = helper.getLogger('update-anchor-peers'); - -var updateAnchorPeers = async function( - channelName, - configUpdatePath, - username, - org_name -) { - logger.debug( - "\n====== Updating Anchor Peers on '" + channelName + "' ======\n" - ); - var error_message = null; - try { - // first setup the client for this org - var client = await helper.getClientForOrg(org_name, username); - logger.debug( - 'Successfully got the fabric client for the organization "%s"', - org_name - ); - var channel = client.getChannel(channelName); - if (!channel) { - let message = util.format( - 'Channel %s was not defined in the connection profile', - channelName - ); - logger.error(message); - throw new Error(message); - } - - // read in the envelope for the channel config raw bytes - var envelope = fs.readFileSync(path.join(__dirname, configUpdatePath)); - // extract the channel config bytes from the envelope to be signed - var channelConfig = client.extractChannelConfig(envelope); - - //Acting as a client in the given organization provided with "orgName" param - // sign the channel config bytes as "endorsement", this is required by - // the orderer's channel creation policy - // this will use the admin identity assigned to the client when the connection profile was loaded - let signature = client.signChannelConfig(channelConfig); - - let request = { - config: channelConfig, - signatures: [signature], - name: channelName, - txId: client.newTransactionID(true) // get an admin based transactionID - }; - - var promises = []; - let event_hubs = channel.getChannelEventHubsForOrg(); - logger.debug( - 'found %s eventhubs for this organization %s', - event_hubs.length, - org_name - ); - event_hubs.forEach(eh => { - let anchorUpdateEventPromise = new Promise((resolve, reject) => { - logger.debug('anchorUpdateEventPromise - setting up event'); - const event_timeout = setTimeout(() => { - let message = 'REQUEST_TIMEOUT:' + eh.getPeerAddr(); - logger.error(message); - eh.disconnect(); - }, 60000); - eh.registerBlockEvent( - block => { - logger.info( - 'The config update has been committed on peer %s', - eh.getPeerAddr() - ); - clearTimeout(event_timeout); - resolve(); - }, - err => { - clearTimeout(event_timeout); - logger.error(err); - reject(err); - }, - // the default for 'unregister' is true for block listeners - // so no real need to set here, however for 'disconnect' - // the default is false as most event hubs are long running - // in this use case we are using it only once - { unregister: true, disconnect: true } - ); - eh.connect(); - }); - promises.push(anchorUpdateEventPromise); - }); - - var sendPromise = client.updateChannel(request); - // put the send to the orderer last so that the events get registered and - // are ready for the orderering and committing - promises.push(sendPromise); - let results = await Promise.all(promises); - logger.debug(util.format('------->>> R E S P O N S E : %j', results)); - let response = results.pop(); // orderer results are last in the results - - if (response) { - if (response.status === 'SUCCESS') { - logger.info( - 'Successfully update anchor peers to the channel %s', - channelName - ); - } else { - error_message = util.format( - 'Failed to update anchor peers to the channel %s with status: %s reason: %s', - channelName, - response.status, - response.info - ); - logger.error(error_message); - } - } else { - error_message = util.format( - 'Failed to update anchor peers to the channel %s', - channelName - ); - logger.error(error_message); - } - } catch (error) { - logger.error( - 'Failed to update anchor peers due to error: ' + error.stack - ? error.stack - : error - ); - error_message = error.toString(); - } - - if (!error_message) { - let message = util.format( - "Successfully update anchor peers in organization %s to the channel '%s'", - org_name, - channelName - ); - logger.info(message); - const response = { - success: true, - message: message - }; - return response; - } else { - let message = util.format( - 'Failed to update anchor peers. cause:%s', - error_message - ); - logger.error(message); - const response = { - success: false, - message: message - }; - return response; - } -}; - -exports.updateAnchorPeers = updateAnchorPeers; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/base.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/base.yaml deleted file mode 100644 index 35027d7ff..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/base.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' -services: - peer-base: - image: hyperledger/fabric-peer - environment: - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - # the following setting starts chaincode containers on the same - # bridge network as the peers - # https://docs.docker.com/compose/networking/ - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default - - FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_GOSSIP_USELEADERELECTION=true - - CORE_PEER_GOSSIP_ORGLEADER=false - # The following setting skips the gossip handshake since we are - # are not doing mutual TLS - - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/crypto/peer/msp - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/crypto/peer/tls/server.key - - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/crypto/peer/tls/server.crt - - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/crypto/peer/tls/ca.crt - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: peer node start - volumes: - - /var/run/:/host/var/run/ diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/Org1MSPanchors.tx b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/Org1MSPanchors.tx deleted file mode 100644 index 104ee50e05f779149e3447269ac3990a264bd081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmd;@$;8Fa#mm8@#F<-}oROH9mzpEg%EZ;g#DydfE)>ee?O0HdlbM`Yl9`_;8yp~{FU8Kq3}P@SadWW;r6#7N78OG{;YFDx5Dpg?n`26DW*$&N3(At3 z%_ua35!L7pMxfa>2(t@07~!T%nE}=2C1>Op1*C!uRTq-wlI9XC0CEiU@_~-gORY%E XEyzjLOU};~=r)&v+C!SFV6FoIk7Y?N diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/Org2MSPanchors.tx b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/Org2MSPanchors.tx deleted file mode 100644 index eaaf1d7f12187c6bbf19d3f405cba5f90dad353a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmd;@$;8Fa#mm8@#F<-}oROH9mzpEg%EZ;g#DydfE)>ee?O0HdlbM`Yl9`_;2(t@07~!T%nE}=2C1>Op1*C!uRTq-wlI9XC0CEiU@_~-gORY%E XEyzjLOU};~=r)&v+C!SFV6FoIkqt>P diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/configtx.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/configtx.yaml deleted file mode 100644 index 98f5cb720..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/configtx.yaml +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# Section: Organizations -# -# - This section defines the different organizational identities which will -# be referenced later in the configuration. -# -################################################################################ -Organizations: - - # SampleOrg defines an MSP using the sampleconfig. It should never be used - # in production but may be used as a template for other definitions - - &OrdererOrg - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: OrdererMSP - - # ID to load the MSP definition as - ID: OrdererMSP - - # MSPDir is the filesystem path which contains the MSP configuration - MSPDir: crypto-config/ordererOrganizations/example.com/msp - - - &Org1 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org1MSP - - # ID to load the MSP definition as - ID: Org1MSP - - MSPDir: crypto-config/peerOrganizations/org1.example.com/msp - - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org1.example.com - Port: 7051 - - - &Org2 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org2MSP - - # ID to load the MSP definition as - ID: Org2MSP - - MSPDir: crypto-config/peerOrganizations/org2.example.com/msp - - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org2.example.com - Port: 7051 - -################################################################################ -# -# SECTION: Application -# -# - This section defines the values to encode into a config transaction or -# genesis block for application related parameters -# -################################################################################ -Application: &ApplicationDefaults - - # Organizations is the list of orgs which are defined as participants on - # the application side of the network - Organizations: - -################################################################################ -# -# SECTION: Orderer -# -# - This section defines the values to encode into a config transaction or -# genesis block for orderer related parameters -# -################################################################################ -Orderer: &OrdererDefaults - - # Orderer Type: The orderer implementation to start - # Available types are "solo" and "kafka" - OrdererType: solo - - Addresses: - - orderer.example.com:7050 - - # Batch Timeout: The amount of time to wait before creating a batch - BatchTimeout: 2s - - # Batch Size: Controls the number of messages batched into a block - BatchSize: - - # Max Message Count: The maximum number of messages to permit in a batch - MaxMessageCount: 10 - - # Absolute Max Bytes: The absolute maximum number of bytes allowed for - # the serialized messages in a batch. - AbsoluteMaxBytes: 98 MB - - # Preferred Max Bytes: The preferred maximum number of bytes allowed for - # the serialized messages in a batch. A message larger than the preferred - # max bytes will result in a batch larger than preferred max bytes. - PreferredMaxBytes: 512 KB - - Kafka: - # Brokers: A list of Kafka brokers to which the orderer connects - # NOTE: Use IP:port notation - Brokers: - - 127.0.0.1:9092 - - # Organizations is the list of orgs which are defined as participants on - # the orderer side of the network - Organizations: - -################################################################################ -# -# Profile -# -# - Different configuration profiles may be encoded here to be specified -# as parameters to the configtxgen tool -# -################################################################################ -Profiles: - - TwoOrgsOrdererGenesis: - Orderer: - <<: *OrdererDefaults - Organizations: - - *OrdererOrg - Consortiums: - SampleConsortium: - Organizations: - - *Org1 - - *Org2 - TwoOrgsChannel: - Consortium: SampleConsortium - Application: - <<: *ApplicationDefaults - Organizations: - - *Org1 - - *Org2 diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk deleted file mode 100755 index 6e2c4c3d5..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9pRJ4Y87tn+vE1fU -uAGVg5OOGwHYlqBuvAOvy0Z+mEChRANCAAQyw4A26b4ouKj0TxbF3mM4I51vDLZ2 -clA+fdrYJwZcI9F/lLmpu+oEd/XXdQn/ELzEsgeCi9xdThVYmeXJ/53K ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem deleted file mode 100644 index e83e629e1..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w -bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz -Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M -tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd -MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB -Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG -CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly -AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/sk deleted file mode 120000 index b29025bb6..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/ca/sk +++ /dev/null @@ -1 +0,0 @@ -0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem deleted file mode 100644 index 4a1dbfa9d..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt -cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp -c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf -f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM -BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy -7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 -im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem deleted file mode 100644 index e83e629e1..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w -bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz -Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M -tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd -MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB -Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG -CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly -AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem deleted file mode 100644 index 88a1e69db..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l -eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ -BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh -bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh -bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 -DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT -RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB -Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa -/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 -WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem deleted file mode 100644 index 4a1dbfa9d..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt -cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp -c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf -f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM -BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy -7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 -im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem deleted file mode 100644 index e83e629e1..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w -bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz -Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M -tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd -MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB -Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG -CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly -AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk deleted file mode 100755 index 403d8e5e4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgc4TjL7yNIkRpowuC -Y0uEEkzJraTtTM380wlyrRoVs96hRANCAARi2C4soUEstzRVLDI8ccc17vocfvWg -5crrC6fxj/m+0xrA9n9ZOb+8FVRZ182XNz14DbxpfHrMEAHyJGbXoR5T ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/sk deleted file mode 120000 index 7e7a7494d..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem deleted file mode 100644 index 0fb71451b..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICDTCCAbOgAwIBAgIRALFafJiTFN/47AvAGfvj1ZEwCgYIKoZIzj0EAwIwaTEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt -cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFgxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp -c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI -KoZIzj0DAQcDQgAEYtguLKFBLLc0VSwyPHHHNe76HH71oOXK6wun8Y/5vtMawPZ/ -WTm/vBVUWdfNlzc9eA28aXx6zBAB8iRm16EeU6NNMEswDgYDVR0PAQH/BAQDAgeA -MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDUbM8OlDbBvDtuK/gM2yAsSUNgT5 -XHLuD/g50+wwBxkwCgYIKoZIzj0EAwIDSAAwRQIhANJuEGHBftrtlWgie9zgc60J -/XVytPN/D0rPlkMV17n7AiBBbStggGBfFYcQ2LhDhcKut8nScJ2OFrt+dJSdJbod -7A== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem deleted file mode 100644 index 88a1e69db..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l -eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ -BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh -bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh -bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 -DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT -RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB -Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa -/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 -WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt deleted file mode 100644 index 88a1e69db..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l -eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ -BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh -bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh -bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 -DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT -RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB -Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa -/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 -WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt deleted file mode 100644 index 5f61f509b..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICWjCCAgCgAwIBAgIRAKk85zOKA4NKFQe/AmGxK7EwCgYIKoZIzj0EAwIwbDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l -eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFgxCzAJ -BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh -bmNpc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0C -AQYIKoZIzj0DAQcDQgAE3Nve7G2pybxbA+S3bvKlP8BAR4kJG96Yd2k9UFc7+Mmd -XM5/7TeVCbaidnYpODYr2pNlzo8HijwoyvYxnN7U3aOBljCBkzAOBgNVHQ8BAf8E -BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC -MAAwKwYDVR0jBCQwIoAgaiEe0YiAtNs4Z4Mcl3gJkCcTuOMhpatV7MEE2vwu7Ekw -JwYDVR0RBCAwHoITb3JkZXJlci5leGFtcGxlLmNvbYIHb3JkZXJlcjAKBggqhkjO -PQQDAgNIADBFAiEAtW6SunJ0GXR2gZY2yOg4CAOLPqb3YB07/9byOSFYZygCIA77 -iitG1Mkvlc7fyNFcgYKDUpbXQBS5iTmAuo/cISDx ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key deleted file mode 100755 index 9096afb08..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUsf4CUpdmdIaax7T -qjCJaQLCsSU1/xaoETdgCCZ8fDihRANCAATc297sbanJvFsD5Ldu8qU/wEBHiQkb -3ph3aT1QVzv4yZ1czn/tN5UJtqJ2dik4Nivak2XOjweKPCjK9jGc3tTd ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk deleted file mode 100755 index 0fc62a252..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghjZ40AvUeupMV603 -i9pA9S8uNLz5i6TePeBgJZhrY/ihRANCAAQkmbjr/9EK0m/4CpR6DiM+Eyke3vxP -X+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFTRWPw ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/sk deleted file mode 120000 index f50669953..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/sk +++ /dev/null @@ -1 +0,0 @@ -6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem deleted file mode 100644 index 88a1e69db..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l -eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ -BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh -bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh -bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 -DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT -RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB -Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa -/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 -WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem deleted file mode 100644 index 4a1dbfa9d..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt -cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp -c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf -f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM -BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy -7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 -im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem deleted file mode 100644 index e83e629e1..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w -bGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz -Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M -tnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd -MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB -Af8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG -CCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly -AiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk deleted file mode 100755 index 06fdf974f..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg33NMbWc5E80ueSIA -iWqRlyC2M+1ce4shkkP/CVKOp4uhRANCAASgMruzeEtmT0Es7AFRf5sMAnsLrvvj -LX3DJlHXqCDxUQY9STAp33/PDNMI9d4EEiUOhn51K0++hvy+XxsQlIn1 ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/sk deleted file mode 120000 index 0bd1e38e8..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem deleted file mode 100644 index 4a1dbfa9d..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt -cGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV -BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp -c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf -f88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM -BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy -7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6 -im3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem deleted file mode 100644 index 88a1e69db..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l -eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ -BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh -bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh -bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 -DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT -RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB -Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa -/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 -WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt deleted file mode 100644 index 88a1e69db..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l -eGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ -BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh -bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh -bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6 -DiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT -RWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB -Af8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa -/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6 -WqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt deleted file mode 100644 index e920e6e2f..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICKzCCAdKgAwIBAgIQF7ZJRSdZJSb9HEWyJaxQuDAKBggqhkjOPQQDAjBsMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4 -YW1wbGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowVjELMAkG -A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu -Y2lzY28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI -KoZIzj0DAQcDQgAE+9xJbd39hXJw8Y49mtzzO1P/KaLjzkEAQGG7cnujbytJHRLL -+kHW2E02+ob8hAucwsjR/Sxg0J2yufaDxKWtSqNsMGowDgYDVR0PAQH/BAQDAgWg -MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsG -A1UdIwQkMCKAIGohHtGIgLTbOGeDHJd4CZAnE7jjIaWrVezBBNr8LuxJMAoGCCqG -SM49BAMCA0cAMEQCIA5f8O7WfymKaLrJ71f77GGb/6z72Jh7g5svHDZBgKkBAiAg -fkCIypxeGnU1Vbo3vYauhqU6lQYO6VcVBhk3182wyQ== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key deleted file mode 100755 index e8e021d03..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgixJReeen2sIgyqT6 -F0z2Y9iYIu++FVOGg7ha4FR6G2WhRANCAAT73Elt3f2FcnDxjj2a3PM7U/8pouPO -QQBAYbtye6NvK0kdEsv6QdbYTTb6hvyEC5zCyNH9LGDQnbK59oPEpa1K ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk deleted file mode 100755 index 3c356ecbf..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgp4Y9v/Cx/ee3K2mP -N62ttbG2y1NkppMN6MlycYpqtT2hRANCAAQohXCFPMmsvPN+QiP874DXwHXyTZxI -oRZ1Jt9ZkikUlJv3LDxCgSxu2TjCP0kkP/A5JrV4MP+lCit6MKbbkKYF ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem deleted file mode 100644 index 01ce790d2..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD -ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w -OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG -BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 -9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc -tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl -rg/GXwkv ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/sk deleted file mode 120000 index 2f22fb700..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/sk +++ /dev/null @@ -1 +0,0 @@ -0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem deleted file mode 100644 index e716793f4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw -EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT -8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE -yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ -yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy -CKqf8052NVUs2CvPzA== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem deleted file mode 100644 index 01ce790d2..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD -ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w -OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG -BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 -9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc -tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl -rg/GXwkv ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem deleted file mode 100644 index e716793f4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw -EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT -8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE -yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ -yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy -CKqf8052NVUs2CvPzA== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem deleted file mode 100644 index 01ce790d2..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD -ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w -OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG -BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 -9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc -tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl -rg/GXwkv ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk deleted file mode 100755 index 04b22a2db..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTEPwtCyJ1jFk2qQs -oFgHzMo3/MEXG1XJHiTgoRYvnPahRANCAATNL2TaAIodxq3xaPhPacHW7ILxHbOD -e6bF1MvueaAVanS7IIJtBDEP9VL7xH/cM28QWS/OFyNz01T+dGoyKuku ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/sk deleted file mode 120000 index 41b4a07e4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem deleted file mode 100644 index 53158d458..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGDCCAb+gAwIBAgIQPcMFFEB/vq6mEL6vXV7aUTAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkw -EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzS9k2gCKHcat8Wj4T2nB1uyC8R2zg3um -xdTL7nmgFWp0uyCCbQQxD/VS+8R/3DNvEFkvzhcjc9NU/nRqMirpLqNNMEswDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE -yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgHBdxbHUG -rFUzKPX9UmmN3SwigWcRUREUy/GTb3hDIAsCIEF1BxTqv8ilQYE8ql0wJL4mTber -HE6DFYvvBCUnicUh ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt deleted file mode 100644 index f34c5be89..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICczCCAhmgAwIBAgIRAIKTnLyvyRImVvGtyrD0wH4wCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCZF1/1UYwnRJk2d+3zB0cW9oi8H -h7g6CaBw6aEI1WwgtKZ+/s28oQVUYBVJsdT3RAGgRRRt12QrqO/xa7/i1UejgaIw -gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD -AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3Bn -N9ANBL9l9045dvn4MDMGA1UdEQQsMCqCFnBlZXIwLm9yZzEuZXhhbXBsZS5jb22C -BXBlZXIwgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDSAAwRQIhAPs/YOkkkh2835Vb -pXtUuQNCi/PlhPhTiFlEdeE56vmmAiBadeHDYBIHkEA10wzr33wS1FpELg18eC5N -5gtmHzQUBA== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key deleted file mode 100755 index d4a96e2d3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCRU1ZAMLxDAlcr5d -D6ZSprL4Lf0+TkWwN6rCFVWmjDuhRANCAAQmRdf9VGMJ0SZNnft8wdHFvaIvB4e4 -OgmgcOmhCNVsILSmfv7NvKEFVGAVSbHU90QBoEUUbddkK6jv8Wu/4tVH ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem deleted file mode 100644 index e716793f4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw -EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT -8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE -yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ -yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy -CKqf8052NVUs2CvPzA== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem deleted file mode 100644 index 01ce790d2..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD -ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w -OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG -BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 -9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc -tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl -rg/GXwkv ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/fdee12a3510fde3155c37128cfec26090ae249bfbca28f884e60c21338493edd_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/fdee12a3510fde3155c37128cfec26090ae249bfbca28f884e60c21338493edd_sk deleted file mode 100755 index ae23cef09..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/fdee12a3510fde3155c37128cfec26090ae249bfbca28f884e60c21338493edd_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtzNlo4v/qB1j5dJ6 -CRLQb9UAfUMMevXdnbuXUux2K2GhRANCAAQp09OJbb47IImVbghi7EWMxIgkyWZW -cIdx0/9u9wdzZFgO8K5ciuxXwGpyMnsbkdVCPZuPmCjahRunIGJ3/DLH ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/sk deleted file mode 120000 index 8db44f683..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -fdee12a3510fde3155c37128cfec26090ae249bfbca28f884e60c21338493edd_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem deleted file mode 100644 index 35a225be9..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAI+BBtEBvpOqhfRZZH7eV/YwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABCnT04ltvjsgiZVuCGLsRYzEiCTJZlZw -h3HT/273B3NkWA7wrlyK7FfAanIyexuR1UI9m4+YKNqFG6cgYnf8MsejTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX -hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQCSRdWm -i4IgVUajvzWVxyE/wi7n617pVqS4+nJ7gbTRjQIgefzBwS+bkNhPc3/rktySFLRC -WMnq87KyqMLc6iRaJx0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt deleted file mode 100644 index 15158a45a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICczCCAhmgAwIBAgIRALZ2km4W6KjPQb9rM12Ewb4wCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKpNWa4jf/Rk5bpSZqFYteLESkd7 -KbrSOoiqLJmYSvM+KjDRPt+/pjLBNKM60tvknTUslU6Jne/7CVx1FpiHjRGjgaIw -gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD -AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3Bn -N9ANBL9l9045dvn4MDMGA1UdEQQsMCqCFnBlZXIxLm9yZzEuZXhhbXBsZS5jb22C -BXBlZXIxgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDSAAwRQIhAKjhWT8ZdaYR2Hvx -hPUl3t6gDJmkVuhy2Mxin04XxrUUAiBmBN83NmGoluPHQnvtGQ1BQP/JpY+UCkMR -O0xeuEChjA== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key deleted file mode 100755 index 5fa4ace4c..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi4EN3aLIYYJMpLwD -r3yCKO+EBzcCcTA5QbNZ1SvDFa+hRANCAASqTVmuI3/0ZOW6UmahWLXixEpHeym6 -0jqIqiyZmErzPiow0T7fv6YywTSjOtLb5J01LJVOiZ3v+wlcdRaYh40R ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk deleted file mode 100755 index 9d302e4d1..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/I1tIO3Xr1ZlsJUm -FDoUo/CNIJXLPlpUxtB7/LjcNzahRANCAASrgcdhvIXc7eJf5u3u0BM2B2tZboZh -dZ8oomOyuIEyG1ivnL+xOO+DrixnnXs3H9A2PbrIot1n29IFQaEBR951 ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/sk deleted file mode 120000 index 9522c877a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/sk +++ /dev/null @@ -1 +0,0 @@ -945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem deleted file mode 100644 index e716793f4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw -EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT -8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE -yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ -yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy -CKqf8052NVUs2CvPzA== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem deleted file mode 100644 index 01ce790d2..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD -ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w -OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG -BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 -9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc -tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl -rg/GXwkv ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk deleted file mode 100755 index 09b7d469e..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNmsvQQm4nwrxOKFX -UNfLPgjNm+FtYu3vb6OZ9q/5GbChRANCAAQKZvNQOjMissqOnc4DMi1IbubsWXDv -qtPxU7wTqi2ULDEq0FGQ+lkvueisLc2yPITff0nk7ilcKqEgClDJFGxG ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/sk deleted file mode 120000 index a452faa98..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem deleted file mode 100644 index e716793f4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw -EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT -8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE -yKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/ -yfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy -CKqf8052NVUs2CvPzA== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt deleted file mode 100644 index 54c13d412..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICOzCCAeKgAwIBAgIRALvUEE81tMguFRFvx00HyREwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCk0mXNbPIzN+YOJvx/0XnOVdb6G -RxNetOOuuWq+QBWLJhdlRKrhtI+NTiHKjq7UMmBNdIfBPC1YXHIGdeD2u+CjbDBq -MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw -DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCCUUJLZNvWDjFpvZITbl02FeTNwZzfQ -DQS/ZfdOOXb5+DAKBggqhkjOPQQDAgNHADBEAiAp9+XFJ2igUvUlvkFVLeH7sWHf -+Q4m47hVT/81vedY1gIgTSz5CufvmWnI5AgwCuw4D0w0eDPFAc1HkO1rlVo5icY= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key deleted file mode 100755 index 2cfab9b41..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgfVrs13ZtxgKp8l5T -WAq2IXqgd+zF1V6sTh7rbQ104rShRANCAAQpNJlzWzyMzfmDib8f9F5zlXW+hkcT -XrTjrrlqvkAViyYXZUSq4bSPjU4hyo6u1DJgTXSHwTwtWFxyBnXg9rvg ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem deleted file mode 100644 index 377625822..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRANfNECvok9C6hT58XJZ/lJAwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV6X/kWuQK6xhXe9OenQZKDI7/zax7Y -jYlRvUlHgCoqKIy8fFAat3glGbVX1oo2oZ7cMJVlFnbuiPdrg4vkyjejTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX -hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQDbCDrW -eqZ4yw7vcEhnNExiRZTv0xcVbRF8JgGozLz6qwIgZoXcqxvkJaBdZpwzg4f0RvVQ -QrjJMURXXchQ1Mnd5+o= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem deleted file mode 100644 index 01ce790d2..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD -ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE -KIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w -OSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG -BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472 -9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc -tQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl -rg/GXwkv ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk deleted file mode 100755 index 37d8e8df8..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgaYlbFIz6yVz0SYqh -nrhdTCb797PBwSwtCw9HtOkbqQGhRANCAAR1el/5FrkCusYV3vTnp0GSgyO/82se -2I2JUb1JR4AqKiiMvHxQGrd4JRm1V9aKNqGe3DCVZRZ27oj3a4OL5Mo3 ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/sk deleted file mode 120000 index 14d632f0a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem deleted file mode 100644 index 377625822..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRANfNECvok9C6hT58XJZ/lJAwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV6X/kWuQK6xhXe9OenQZKDI7/zax7Y -jYlRvUlHgCoqKIy8fFAat3glGbVX1oo2oZ7cMJVlFnbuiPdrg4vkyjejTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA5ykiTos/MX -hMipPFuO9vTByR2ebld8RcMxY2Cf5AARMAoGCCqGSM49BAMCA0gAMEUCIQDbCDrW -eqZ4yw7vcEhnNExiRZTv0xcVbRF8JgGozLz6qwIgZoXcqxvkJaBdZpwzg4f0RvVQ -QrjJMURXXchQ1Mnd5+o= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt deleted file mode 100644 index d4e635366..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD -VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s -Z517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud -JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa -b2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw -14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F -qwkrkz69kT1ZsL7SXw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt deleted file mode 100644 index 20a118275..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICOjCCAeGgAwIBAgIQSEKNVPcBOB7Kgrrzf05rJjAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29t -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyHrGhNgy26huH3hNap1UMtQRBVIx -xTX0NqIbUMKcBSw9DRF0ndZHd5KQUVrj5t2/QY+YSpqK6ufDk68fWSAZ7KNsMGow -DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM -BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJRQktk29YOMWm9khNuXTYV5M3BnN9AN -BL9l9045dvn4MAoGCCqGSM49BAMCA0cAMEQCIE6HCTr9in2CqF6S+m/aGCVQrZwK -/o3oyXdcymDc/PbDAiAHIRDkIw1mU31KNhvPd6f8c/sReVDr3PQLydWh/HJpTQ== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key deleted file mode 100755 index f23e877ea..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOXZUBNCAmIwJR3bt -GfoOwtmo3QunwcBnBBUPjot4frihRANCAATIesaE2DLbqG4feE1qnVQy1BEFUjHF -NfQ2ohtQwpwFLD0NEXSd1kd3kpBRWuPm3b9Bj5hKmorq58OTrx9ZIBns ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk deleted file mode 100755 index 3f732ae44..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUgMy/PQKxjfxITFM -mVPTu4ZwQlhYIh1vJkn3dkjqDBShRANCAARVtStps/F2HsCLFIdah6iJhTW6Vvro -DQ/HOkGAfPZjzjB4cYpfaRNX19I/9fPnuLqIWxSjj/FEwdeXNX/5hUhH ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem deleted file mode 100644 index a26e1ec29..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE -AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA -BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 -uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG -BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s -E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA -Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 -BIirBFsT0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/sk deleted file mode 120000 index 87477281f..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/sk +++ /dev/null @@ -1 +0,0 @@ -a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem deleted file mode 100644 index 93086ac94..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 -302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R -+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 -m1UCqGDwNTHDm5mO+es= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem deleted file mode 100644 index a26e1ec29..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE -AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA -BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 -uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG -BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s -E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA -Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 -BIirBFsT0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem deleted file mode 100644 index 93086ac94..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 -302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R -+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 -m1UCqGDwNTHDm5mO+es= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem deleted file mode 100644 index a26e1ec29..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE -AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA -BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 -uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG -BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s -E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA -Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 -BIirBFsT0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk deleted file mode 100755 index d9e2dfdfc..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNYZ86CFF4Iz0K+sE -HMg3lSS+mo5lRIFFLUOGrfseqhOhRANCAAT/Dd/SwXAdKicm97/WPViD32Bzn1j5 -2k/FslsxorK2Lx1Rfhi3wyxa40LNLjfED7E7KmJZ1w7PzI7+7WWhPTbq ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/sk deleted file mode 120000 index 86e02cdc7..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem deleted file mode 100644 index 511295cac..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRANDlqX1daKI2aN0Qm7vrfKAwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABP8N39LBcB0qJyb3v9Y9WIPfYHOfWPna -T8WyWzGisrYvHVF+GLfDLFrjQs0uN8QPsTsqYlnXDs/Mjv7tZaE9NuqjTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1gKe -PRVRN/i8hUptACw02V7V9Yeo7kKlbQ6vWU5fqAIgXg2xAQ4TjwXOHlKbIyYZ7fox -cekBJ+E8yAFm8XQrfy0= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt deleted file mode 100644 index 0ab47140a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICcjCCAhmgAwIBAgIRAKTjFkKbLMrbEP10dpOEqz4wCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMDiCfhksPZRhxpGyowvLu8lQjC6 -H4y/SiQuTbhG+ZXK99VRyDDoKzkyzDpUxMco1xvD3gafSDvrXrKlZObN9bOjgaIw -gZ8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD -AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIHu4uj/xHTyM9ZK9QyYGLnfQasSW -PHt65FkoTfvT61qsMDMGA1UdEQQsMCqCFnBlZXIwLm9yZzIuZXhhbXBsZS5jb22C -BXBlZXIwgglsb2NhbGhvc3QwCgYIKoZIzj0EAwIDRwAwRAIgf1MZC8BVgrxO76J+ -aCGntiQsicgU1DPMt5l45jXiEeECIAHHYsIZcV8GW7iyKQevvdXSQ3JC7XgyuPrm -eDhWmPcO ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key deleted file mode 100755 index babe991b5..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgVlcwZfAKBQZ+W/JX -w64rHF3JiaddhBcUfxk7WuyZxrChRANCAATA4gn4ZLD2UYcaRsqMLy7vJUIwuh+M -v0okLk24RvmVyvfVUcgw6Cs5Msw6VMTHKNcbw94Gn0g7616ypWTmzfWz ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem deleted file mode 100644 index 93086ac94..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 -302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R -+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 -m1UCqGDwNTHDm5mO+es= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem deleted file mode 100644 index a26e1ec29..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE -AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA -BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 -uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG -BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s -E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA -Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 -BIirBFsT0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/27ccb54a06020260c66c65bec91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/27ccb54a06020260c66c65bec91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk deleted file mode 100755 index fdd7fa73d..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/27ccb54a06020260c66c65bec91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtRT9fcsCMexhHlCO -dfzBqkDIfC88UFE51dYxRHDSrMShRANCAAS4r7MB6WDw96YKpJIzOvqhXs1dQ3XQ -5QMMX4aOwVLT1vZHOkPghRr2wMhJeQs1vVY+5RcnOWy6OyB/oYCCIPka ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/sk deleted file mode 120000 index 16c7f2ace..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -27ccb54a06020260c66c65bec91f91e1c9043e3076d3d6128692e7271c4c7a2c_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem deleted file mode 100644 index 19868dd50..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGTCCAb+gAwIBAgIQKeRyEPaHSUPvshfEtmg9tzAKBggqhkjOPQQDAjBzMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu -b3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla -MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T -YW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcyLmV4YW1wbGUuY29tMFkw -EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuK+zAelg8PemCqSSMzr6oV7NXUN10OUD -DF+GjsFS09b2RzpD4IUa9sDISXkLNb1WPuUXJzlsujsgf6GAgiD5GqNNMEswDgYD -VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgp9R++kamugdz -DIUP7SwTdd8nNg1yJ/SM3C+A5QVngAUwCgYIKoZIzj0EAwIDSAAwRQIhAMIQLWEv -wpaNibkXEGJlT0IzSIBsCjMJD7VaqZLKm5h9AiAlYmNBB8siyLLxFawvEB/4F26x -e1jgyza7Yg+ardDzlw== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt deleted file mode 100644 index f75611a09..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICcjCCAhigAwIBAgIQEV3hkn7yJpdb29dDQvTKWDAKBggqhkjOPQQDAjB2MQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz -Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz -MTlaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH -Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcyLmV4YW1wbGUuY29t -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpXRG2CwqI+F0UoMSImo3In9R7lze -S+DuL1pLOjF5s05kVAcH604/9FRI61ujvWp4mYXornB+R1pcQwtolYNzPKOBojCB -nzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC -MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAge7i6P/EdPIz1kr1DJgYud9BqxJY8 -e3rkWShN+9PrWqwwMwYDVR0RBCwwKoIWcGVlcjEub3JnMi5leGFtcGxlLmNvbYIF -cGVlcjGCCWxvY2FsaG9zdDAKBggqhkjOPQQDAgNIADBFAiEAmzFD5Dd4yR5lKy44 -Jdz4hy5AtRLQAmhlmLhli46z0r8CIDXFZJ7EwiD3F/jBT6906IFizjr9CD/DtOC9 -bxT5JhIN ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key deleted file mode 100755 index 890178397..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxFdgRfevcXrABROv -sV6HvrpoN5PHW6qXIFj71CAwtzyhRANCAASldEbYLCoj4XRSgxIiajcif1HuXN5L -4O4vWks6MXmzTmRUBwfrTj/0VEjrW6O9aniZheiucH5HWlxDC2iVg3M8 ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk deleted file mode 100755 index e4f49a0d9..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXu7VBLhnEUi4mu4d -tU1nT4lcMR9aoG29s5hLPmIKH/mhRANCAAQafufB/FcqVxwfR3/9RMWU5jXXAZU1 -IAJhx+bG/Q4sx18JY6Os3cl32XC70wqaC8myf656eDyiezSlA5q0Mpi1 ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/sk deleted file mode 120000 index 8a35c290f..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/sk +++ /dev/null @@ -1 +0,0 @@ -7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem deleted file mode 100644 index 93086ac94..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 -302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R -+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 -m1UCqGDwNTHDm5mO+es= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem deleted file mode 100644 index a26e1ec29..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE -AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA -BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 -uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG -BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s -E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA -Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 -BIirBFsT0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk deleted file mode 100755 index 09b1c6a7e..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgHa4xvmGVQJV5wrMj -KttcA0hh/Yz0dezmXlRLjNk9HyahRANCAATCyh15tcTe05OGM2loOBmIS6MjY647 -Od9NqN+5tdlPC6K0eyC+X3RYGCC3i+F1D4wv0BuBNqOoT5d7mT1FRK22 ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/sk deleted file mode 120000 index ce3843032..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem deleted file mode 100644 index 93086ac94..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5 -302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R -+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0 -m1UCqGDwNTHDm5mO+es= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt deleted file mode 100644 index bc9e1ed06..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICPDCCAeKgAwIBAgIRAJyMPO3I72b3mbPNKpVYYLMwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMFNcSoYN82cQnSGoxBiWhzlYi9N -nVbrfOCNdsxMOjhYIfvptjVgBhc87ZqUsQp4sSYVHV1qxAJ7PD50CJRC+4SjbDBq -MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw -DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB7uLo/8R08jPWSvUMmBi530GrEljx7 -euRZKE370+tarDAKBggqhkjOPQQDAgNIADBFAiEAkPjfzaF3Dxz5n39QChNSfWwC -lpxiBCgw8DMP2D91UFICIC640slBiPu2zx3U7izA6Zu00IIaEt8xGtt4pbhwwqWj ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key deleted file mode 100755 index 1b542d8a8..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOa1azVZZkkb3rRW1 -y3z1TCvqOzftqGI3eELPG2TWK6WhRANCAATBTXEqGDfNnEJ0hqMQYloc5WIvTZ1W -63zgjXbMTDo4WCH76bY1YAYXPO2alLEKeLEmFR1dasQCezw+dAiUQvuE ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/User1@org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/User1@org2.example.com-cert.pem deleted file mode 100644 index 008d25557..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/User1@org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAIPRwJHVLhHK47XK0BbFZJswCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBd9SsEiFH1/JIb3qMEPLR2dygokFVKW -eINcB0Ni4TBRkfIWWUJeCANTUY11Pm/+5gs+fBTqBz8M2UzpJDVX7+2jTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQC8NIMw -e4ym/QRwCJb5umbONNLSVQuEpnPsJrM/ssBPvgIgQpe2oYa3yO3USro9nBHjpM3L -KsFQrpVnF8O6hoHOYZQ= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem deleted file mode 100644 index a26e1ec29..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE -AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA -BFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4 -uohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG -BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s -E3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA -Zql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2 -BIirBFsT0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk deleted file mode 100755 index d1ac0c7a4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmHG6n4ZvwUeV4jCp -kvAmGSQKZ+vOYsyzRZgYwORO+vChRANCAAQXfUrBIhR9fySG96jBDy0dncoKJBVS -lniDXAdDYuEwUZHyFllCXggDU1GNdT5v/uYLPnwU6gc/DNlM6SQ1V+/t ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/sk b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/sk deleted file mode 120000 index ddc933962..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/sk +++ /dev/null @@ -1 +0,0 @@ -585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem deleted file mode 100644 index 008d25557..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICGjCCAcCgAwIBAgIRAIPRwJHVLhHK47XK0BbFZJswCgYIKoZIzj0EAwIwczEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh -Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5 -WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN -U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMi5leGFtcGxlLmNvbTBZ -MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBd9SsEiFH1/JIb3qMEPLR2dygokFVKW -eINcB0Ni4TBRkfIWWUJeCANTUY11Pm/+5gs+fBTqBz8M2UzpJDVX7+2jTTBLMA4G -A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH -cwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQC8NIMw -e4ym/QRwCJb5umbONNLSVQuEpnPsJrM/ssBPvgIgQpe2oYa3yO3USro9nBHjpM3L -KsFQrpVnF8O6hoHOYZQ= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt deleted file mode 100644 index 6d01d67c3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G -A1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49 -AwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ -cLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV -HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM -9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD -mB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a -nfIdbwvBbsl1XV/j0g== ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt deleted file mode 100644 index b81ee15ca..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICOzCCAeKgAwIBAgIRAPD3UPMtRDq5GhVZUuS25LUwCgYIKoZIzj0EAwIwdjEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs -c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz -MzE5WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE -BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMi5leGFtcGxlLmNv -bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLM/EP7l2gwX4RGxW9gX78CTINQ6 -3RRcU01F91HSpT3l+e1H0HACgJWTGkf5ZnwCnUcdZ/z2YD15zfVFHF2fvwejbDBq -MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw -DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB7uLo/8R08jPWSvUMmBi530GrEljx7 -euRZKE370+tarDAKBggqhkjOPQQDAgNHADBEAiBo0H6ZNg1XJladWoGNnFsdRm3I -u4dLlJBwe9gTrscPAAIgXfsHfA8qVvyK2Pnlca2cwUHvRrJ4cAvaYrWNTMG1t7Q= ------END CERTIFICATE----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key deleted file mode 100755 index 505f5b333..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgftZDPdCM6QMMv8ZO -eXbUFGQqnFhEUAiChttdWcSp6QOhRANCAASzPxD+5doMF+ERsVvYF+/AkyDUOt0U -XFNNRfdR0qU95fntR9BwAoCVkxpH+WZ8Ap1HHWf89mA9ec31RRxdn78H ------END PRIVATE KEY----- diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/cryptogen.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/cryptogen.yaml deleted file mode 100644 index be2a9f860..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/cryptogen.yaml +++ /dev/null @@ -1,113 +0,0 @@ -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# -# --------------------------------------------------------------------------- -# "OrdererOrgs" - Definition of organizations managing orderer nodes -# --------------------------------------------------------------------------- -OrdererOrgs: - # --------------------------------------------------------------------------- - # Orderer - # --------------------------------------------------------------------------- - - Name: Orderer - Domain: example.com - - # --------------------------------------------------------------------------- - # "Specs" - See PeerOrgs below for complete description - # --------------------------------------------------------------------------- - Specs: - - Hostname: orderer - -# --------------------------------------------------------------------------- -# "PeerOrgs" - Definition of organizations managing peer nodes -# --------------------------------------------------------------------------- -PeerOrgs: - # --------------------------------------------------------------------------- - # Org1 - # --------------------------------------------------------------------------- - - Name: Org1 - Domain: org1.example.com - - # --------------------------------------------------------------------------- - # "CA" - # --------------------------------------------------------------------------- - # Uncomment this section to enable the explicit definition of the CA for this - # organization. This entry is a Spec. See "Specs" section below for details. - # --------------------------------------------------------------------------- - CA: - Hostname: ca # implicitly ca.org1.example.com - - # --------------------------------------------------------------------------- - # "Specs" - # --------------------------------------------------------------------------- - # Uncomment this section to enable the explicit definition of hosts in your - # configuration. Most users will want to use Template, below - # - # Specs is an array of Spec entries. Each Spec entry consists of two fields: - # - Hostname: (Required) The desired hostname, sans the domain. - # - CommonName: (Optional) Specifies the template or explicit override for - # the CN. By default, this is the template: - # - # "{{.Hostname}}.{{.Domain}}" - # - # which obtains its values from the Spec.Hostname and - # Org.Domain, respectively. - # - SANS: (Optional) Specifies one or more Subject Alternative Names - # the be set in the resulting x509. Accepts template - # variables {{.Hostname}}, {{.Domain}}, {{.CommonName}} - # NOTE: Two implicit entries are created for you: - # - {{ .CommonName }} - # - {{ .Hostname }} - # --------------------------------------------------------------------------- - # Specs: - # - Hostname: foo # implicitly "foo.org1.example.com" - # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above - # SANS: - # - "bar.{{.Domain}}" - # - "altfoo.{{.Domain}}" - # - "{{.Hostname}}.org6.net" - # - Hostname: bar - # - Hostname: baz - - # --------------------------------------------------------------------------- - # "Template" - # --------------------------------------------------------------------------- - # Allows for the definition of 1 or more hosts that are created sequentially - # from a template. By default, this looks like "peer%d" from 0 to Count-1. - # You may override the number of nodes (Count), the starting index (Start) - # or the template used to construct the name (Hostname). - # - # Note: Template and Specs are not mutually exclusive. You may define both - # sections and the aggregate nodes will be created for you. Take care with - # name collisions - # --------------------------------------------------------------------------- - Template: - Count: 2 - # Start: 5 - # Hostname: {{.Prefix}}{{.Index}} # default - SANS: - - "localhost" - - # --------------------------------------------------------------------------- - # "Users" - # --------------------------------------------------------------------------- - # Count: The number of user accounts _in addition_ to Admin - # --------------------------------------------------------------------------- - Users: - Count: 1 - - # --------------------------------------------------------------------------- - # Org2: See "Org1" for full specification - # --------------------------------------------------------------------------- - - Name: Org2 - Domain: org2.example.com - CA: - Hostname: ca # implicitly ca.org1.example.com - - Template: - Count: 2 - SANS: - - "localhost" - Users: - Count: 1 diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/genesis.block b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/genesis.block deleted file mode 100644 index 07b9c8d71e844850027ec45d2b210cc6db46fad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9089 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 F_rFcR=`jER diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/mychannel.tx b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/channel/mychannel.tx deleted file mode 100644 index 73323fa803578ae096423d637d089e098ec93da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmd;TXXc9J3g=*wV&gbqa+JcQ=yeiT+5ia z5Jn353u$t3I~Ek=WF{w;Waj4yNeOXtvHKUL8~O$Z2r)o8MqrMV5*L?qeqM2YQAuWL zu8@e35SKu3Vs1fBDneB1IHS-4MpPpwFmf>BHdRT9i#;ecF(tLASV&xmmxEb|6D}ad t=9rS3nO6){17!(G2=M`xaKZQjz<`3QVGl3LEI}~`DgaZX1yxIoPXHnnX*U1> diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose-explorer.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose-explorer.yaml deleted file mode 100644 index 65b59e4d8..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose-explorer.yaml +++ /dev/null @@ -1,136 +0,0 @@ -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# -version: '2' - -networks: - behave: - -services: - - ca.org1.example.com: - extends: - file: docker-compose.yaml - service: ca.org1.example.com - container_name: ca_peerorg1 - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - ca.org2.example.com: - extends: - file: docker-compose.yaml - service: ca.org2.example.com - container_name: ca_peerorg2 - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - orderer.example.com: - extends: - file: docker-compose.yaml - service: orderer.example.com - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org1.example.com - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${CORE_PEER_NETWORKID}_behave - ports: - - 7051:7051 - - 7053:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org1.example.com - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051 - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${CORE_PEER_NETWORKID}_behave - ports: - - 7056:7051 - - 7058:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org2.example.com - - CORE_PEER_LOCALMSPID=Org2MSP - - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${CORE_PEER_NETWORKID}_behave - ports: - - 8051:7051 - - 8053:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org2.example.com - - CORE_PEER_LOCALMSPID=Org2MSP - - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051 - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${CORE_PEER_NETWORKID}_behave - ports: - - 8056:7051 - - 8058:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose.yaml deleted file mode 100644 index 6fd88df2f..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/docker-compose.yaml +++ /dev/null @@ -1,142 +0,0 @@ -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# -version: '2' - -services: - - ca.org1.example.com: - image: hyperledger/fabric-ca - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org1 - - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start -b admin:adminpw -d' - volumes: - - ./channel/crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - - ca.org2.example.com: - image: hyperledger/fabric-ca - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org2 - - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk - ports: - - "8054:7054" - command: sh -c 'fabric-ca-server start -b admin:adminpw -d' - volumes: - - ./channel/crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - - orderer.example.com: - container_name: orderer.example.com - image: hyperledger/fabric-orderer - environment: - - FABRIC_LOGGING_SPEC=debug - - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - - ORDERER_GENERAL_GENESISMETHOD=file - - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/genesis.block - - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/crypto/orderer/msp - - ORDERER_GENERAL_TLS_ENABLED=true - - ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/crypto/orderer/tls/server.key - - ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/crypto/orderer/tls/server.crt - - ORDERER_GENERAL_TLS_ROOTCAS=[/etc/hyperledger/crypto/orderer/tls/ca.crt, /etc/hyperledger/crypto/peerOrg1/tls/ca.crt, /etc/hyperledger/crypto/peerOrg2/tls/ca.crt] - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderers - command: orderer - ports: - - 7050:7050 - volumes: - - ./channel:/etc/hyperledger/configtx - - ./channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/:/etc/hyperledger/crypto/orderer - - ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/etc/hyperledger/crypto/peerOrg1 - - ./channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/:/etc/hyperledger/crypto/peerOrg2 - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org1.example.com - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 - ports: - - 7051:7051 - - 7053:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org1.example.com - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051 - ports: - - 7056:7051 - - 7058:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org2.example.com - - CORE_PEER_LOCALMSPID=Org2MSP - - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 - ports: - - 8051:7051 - - 8053:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org2.example.com - - CORE_PEER_LOCALMSPID=Org2MSP - - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051 - ports: - - 8056:7051 - - 8058:7053 - volumes: - - ./channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/:/etc/hyperledger/crypto/peer - depends_on: - - orderer.example.com diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config-aws.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config-aws.yaml deleted file mode 100644 index 87912d719..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config-aws.yaml +++ /dev/null @@ -1,230 +0,0 @@ ---- -# -# The network connection profile provides client applications the information about the target -# blockchain network that are necessary for the applications to interact with it. These are all -# knowledge that must be acquired from out-of-band sources. This file provides such a source. -# -name: "balance-transfer" - -# -# Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming -# in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave -# them for the applications to process. This is a mechanism for different components of an application -# to exchange information that are not part of the standard schema described below. In particular, -# the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to -# determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. -# -x-type: "hlfv1" - -# -# Describe what the target network is/does. -# -description: "Balance Transfer Network" - -# -# Schema version of the content. Used by the SDK to apply the corresponding parsing rules. -# -version: "1.0" - -# -# The client section will be added on a per org basis see org1.yaml and org2.yaml -# -#client: - -# -# [Optional]. But most apps would have this section so that channel objects can be constructed -# based on the content below. If an app is creating channels, then it likely will not need this -# section. -# -channels: - # name of the channel - mychannel: - # Required. list of orderers designated by the application to use for transactions on this - # channel. This list can be a result of access control ("org1" can only access "ordererA"), or - # operational decisions to share loads from applications among the orderers. The values must - # be "names" of orgs defined under "organizations/peers" - orderers: - - orderer.example.com - - # Required. list of peers from participating orgs - peers: - peer0.org1.example.com: - # [Optional]. will this peer be sent transaction proposals for endorsement? The peer must - # have the chaincode installed. The app can also use this property to decide which peers - # to send the chaincode install request. Default: true - endorsingPeer: true - - # [Optional]. will this peer be sent query proposals? The peer must have the chaincode - # installed. The app can also use this property to decide which peers to send the - # chaincode install request. Default: true - chaincodeQuery: true - - # [Optional]. will this peer be sent query proposals that do not require chaincodes, like - # queryBlock(), queryTransaction(), etc. Default: true - ledgerQuery: true - - # [Optional]. will this peer be the target of the SDK's listener registration? All peers can - # produce events but the app typically only needs to connect to one to listen to events. - # Default: true - eventSource: true - - peer1.org1.example.com: - endorsingPeer: false - chaincodeQuery: true - ledgerQuery: true - eventSource: false - - peer0.org2.example.com: - endorsingPeer: true - chaincodeQuery: true - ledgerQuery: true - eventSource: true - - peer1.org2.example.com: - endorsingPeer: false - chaincodeQuery: true - ledgerQuery: true - eventSource: false - - # [Optional]. what chaincodes are expected to exist on this channel? The application can use - # this information to validate that the target peers are in the expected state by comparing - # this list with the query results of getInstalledChaincodes() and getInstantiatedChaincodes() - chaincodes: - # the format follows the "cannonical name" of chaincodes by fabric code - - mycc:v0 - -# -# list of participating organizations in this network -# -organizations: - Org1: - mspid: Org1MSP - - peers: - - peer0.org1.example.com - - peer1.org1.example.com - - # [Optional]. Certificate Authorities issue certificates for identification purposes in a Fabric based - # network. Typically certificates provisioning is done in a separate process outside of the - # runtime network. Fabric-CA is a special certificate authority that provides a REST APIs for - # dynamic certificate management (enroll, revoke, re-enroll). The following section is only for - # Fabric-CA servers. - certificateAuthorities: - - ca-org1 - - # [Optional]. If the application is going to make requests that are reserved to organization - # administrators, including creating/updating channels, installing/instantiating chaincodes, it - # must have access to the admin identity represented by the private key and signing certificate. - # Both properties can be the PEM string or local path to the PEM file. Note that this is mainly for - # convenience in development mode, production systems should not expose sensitive information - # this way. The SDK should allow applications to set the org admin identity via APIs, and only use - # this route as an alternative when it exists. - adminPrivateKey: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk - signedCert: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem - - # the profile will contain public information about organizations other than the one it belongs to. - # These are necessary information to make transaction lifecycles work, including MSP IDs and - # peers with a public URL to send transaction proposals. The file will not contain private - # information reserved for members of the organization, such as admin key and certificate, - # fabric-ca registrar enroll ID and secret, etc. - Org2: - mspid: Org2MSP - peers: - - peer0.org2.example.com - - peer1.org2.example.com - certificateAuthorities: - - ca-org2 - adminPrivateKey: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk - signedCert: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem - -# -# List of orderers to send transaction and channel create/update requests to. For the time -# being only one orderer is needed. If more than one is defined, which one get used by the -# SDK is implementation specific. Consult each SDK's documentation for its handling of orderers. -# -orderers: - orderer.example.com: - url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7050 - - # these are standard properties defined by the gRPC library - # they will be passed in as-is to gRPC client constructor - grpcOptions: - ssl-target-name-override: orderer.example.com - - tlsCACerts: - path: artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt - -# -# List of peers to send various requests to, including endorsement, query -# and event listener registration. -# -peers: - peer0.org1.example.com: - # this URL is used to send endorsement and query requests - url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7051 - - grpcOptions: - ssl-target-name-override: peer0.org1.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - - peer1.org1.example.com: - url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7056 - eventUrl: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7058 - grpcOptions: - ssl-target-name-override: peer1.org1.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt - - peer0.org2.example.com: - url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8051 - grpcOptions: - ssl-target-name-override: peer0.org2.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt - - peer1.org2.example.com: - url: grpcs://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8056 - grpcOptions: - ssl-target-name-override: peer1.org2.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt - -# -# Fabric-CA is a special kind of Certificate Authority provided by Hyperledger Fabric which allows -# certificate management to be done via REST APIs. Application may choose to use a standard -# Certificate Authority instead of Fabric-CA, in which case this section would not be specified. -# -certificateAuthorities: - ca-org1: - url: https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7054 - # the properties specified under this object are passed to the 'http' client verbatim when - # making the request to the Fabric-CA server - httpOptions: - verify: false - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem - - # Fabric-CA supports dynamic user enrollment via REST APIs. A "root" user, a.k.a registrar, is - # needed to enroll and invoke new users. - registrar: - - enrollId: admin - enrollSecret: adminpw - # [Optional] The optional name of the CA. - caName: ca-org1 - - ca-org2: - url: https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8054 - httpOptions: - verify: false - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem - registrar: - - enrollId: admin - enrollSecret: adminpw - # [Optional] The optional name of the CA. - caName: ca-org2 diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config.yaml deleted file mode 100644 index 1d6d9efee..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/network-config.yaml +++ /dev/null @@ -1,230 +0,0 @@ ---- -# -# The network connection profile provides client applications the information about the target -# blockchain network that are necessary for the applications to interact with it. These are all -# knowledge that must be acquired from out-of-band sources. This file provides such a source. -# -name: "balance-transfer" - -# -# Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming -# in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave -# them for the applications to process. This is a mechanism for different components of an application -# to exchange information that are not part of the standard schema described below. In particular, -# the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to -# determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. -# -x-type: "hlfv1" - -# -# Describe what the target network is/does. -# -description: "Balance Transfer Network" - -# -# Schema version of the content. Used by the SDK to apply the corresponding parsing rules. -# -version: "1.0" - -# -# The client section will be added on a per org basis see org1.yaml and org2.yaml -# -#client: - -# -# [Optional]. But most apps would have this section so that channel objects can be constructed -# based on the content below. If an app is creating channels, then it likely will not need this -# section. -# -channels: - # name of the channel - mychannel: - # Required. list of orderers designated by the application to use for transactions on this - # channel. This list can be a result of access control ("org1" can only access "ordererA"), or - # operational decisions to share loads from applications among the orderers. The values must - # be "names" of orgs defined under "organizations/peers" - orderers: - - orderer.example.com - - # Required. list of peers from participating orgs - peers: - peer0.org1.example.com: - # [Optional]. will this peer be sent transaction proposals for endorsement? The peer must - # have the chaincode installed. The app can also use this property to decide which peers - # to send the chaincode install request. Default: true - endorsingPeer: true - - # [Optional]. will this peer be sent query proposals? The peer must have the chaincode - # installed. The app can also use this property to decide which peers to send the - # chaincode install request. Default: true - chaincodeQuery: true - - # [Optional]. will this peer be sent query proposals that do not require chaincodes, like - # queryBlock(), queryTransaction(), etc. Default: true - ledgerQuery: true - - # [Optional]. will this peer be the target of the SDK's listener registration? All peers can - # produce events but the app typically only needs to connect to one to listen to events. - # Default: true - eventSource: true - - peer1.org1.example.com: - endorsingPeer: false - chaincodeQuery: true - ledgerQuery: true - eventSource: false - - peer0.org2.example.com: - endorsingPeer: true - chaincodeQuery: true - ledgerQuery: true - eventSource: true - - peer1.org2.example.com: - endorsingPeer: false - chaincodeQuery: true - ledgerQuery: true - eventSource: false - - # [Optional]. what chaincodes are expected to exist on this channel? The application can use - # this information to validate that the target peers are in the expected state by comparing - # this list with the query results of getInstalledChaincodes() and getInstantiatedChaincodes() - chaincodes: - # the format follows the "cannonical name" of chaincodes by fabric code - - mycc:v0 - -# -# list of participating organizations in this network -# -organizations: - Org1: - mspid: Org1MSP - - peers: - - peer0.org1.example.com - - peer1.org1.example.com - - # [Optional]. Certificate Authorities issue certificates for identification purposes in a Fabric based - # network. Typically certificates provisioning is done in a separate process outside of the - # runtime network. Fabric-CA is a special certificate authority that provides a REST APIs for - # dynamic certificate management (enroll, revoke, re-enroll). The following section is only for - # Fabric-CA servers. - certificateAuthorities: - - ca-org1 - - # [Optional]. If the application is going to make requests that are reserved to organization - # administrators, including creating/updating channels, installing/instantiating chaincodes, it - # must have access to the admin identity represented by the private key and signing certificate. - # Both properties can be the PEM string or local path to the PEM file. Note that this is mainly for - # convenience in development mode, production systems should not expose sensitive information - # this way. The SDK should allow applications to set the org admin identity via APIs, and only use - # this route as an alternative when it exists. - adminPrivateKey: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk - signedCert: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem - - # the profile will contain public information about organizations other than the one it belongs to. - # These are necessary information to make transaction lifecycles work, including MSP IDs and - # peers with a public URL to send transaction proposals. The file will not contain private - # information reserved for members of the organization, such as admin key and certificate, - # fabric-ca registrar enroll ID and secret, etc. - Org2: - mspid: Org2MSP - peers: - - peer0.org2.example.com - - peer1.org2.example.com - certificateAuthorities: - - ca-org2 - adminPrivateKey: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk - signedCert: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem - -# -# List of orderers to send transaction and channel create/update requests to. For the time -# being only one orderer is needed. If more than one is defined, which one get used by the -# SDK is implementation specific. Consult each SDK's documentation for its handling of orderers. -# -orderers: - orderer.example.com: - url: grpcs://localhost:7050 - - # these are standard properties defined by the gRPC library - # they will be passed in as-is to gRPC client constructor - grpcOptions: - ssl-target-name-override: orderer.example.com - - tlsCACerts: - path: artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt - -# -# List of peers to send various requests to, including endorsement, query -# and event listener registration. -# -peers: - peer0.org1.example.com: - # this URL is used to send endorsement and query requests - url: grpcs://localhost:7051 - - grpcOptions: - ssl-target-name-override: peer0.org1.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - - peer1.org1.example.com: - url: grpcs://localhost:7056 - grpcOptions: - ssl-target-name-override: peer1.org1.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt - - peer0.org2.example.com: - url: grpcs://localhost:8051 - grpcOptions: - ssl-target-name-override: peer0.org2.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt - - peer1.org2.example.com: - url: grpcs://localhost:8056 - eventUrl: grpcs://localhost:8058 - grpcOptions: - ssl-target-name-override: peer1.org2.example.com - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt - -# -# Fabric-CA is a special kind of Certificate Authority provided by Hyperledger Fabric which allows -# certificate management to be done via REST APIs. Application may choose to use a standard -# Certificate Authority instead of Fabric-CA, in which case this section would not be specified. -# -certificateAuthorities: - ca-org1: - url: https://localhost:7054 - # the properties specified under this object are passed to the 'http' client verbatim when - # making the request to the Fabric-CA server - httpOptions: - verify: false - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem - - # Fabric-CA supports dynamic user enrollment via REST APIs. A "root" user, a.k.a registrar, is - # needed to enroll and invoke new users. - registrar: - - enrollId: admin - enrollSecret: adminpw - # [Optional] The optional name of the CA. - caName: ca-org1 - - ca-org2: - url: https://localhost:8054 - httpOptions: - verify: false - tlsCACerts: - path: artifacts/channel/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem - registrar: - - enrollId: admin - enrollSecret: adminpw - # [Optional] The optional name of the CA. - caName: ca-org2 diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org1.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org1.yaml deleted file mode 100644 index 9f80b2a9c..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org1.yaml +++ /dev/null @@ -1,53 +0,0 @@ ---- -# -# The network connection profile provides client applications the information about the target -# blockchain network that are necessary for the applications to interact with it. These are all -# knowledge that must be acquired from out-of-band sources. This file provides such a source. -# -name: "balance-transfer-org1" - -# -# Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming -# in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave -# them for the applications to process. This is a mechanism for different components of an application -# to exchange information that are not part of the standard schema described below. In particular, -# the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to -# determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. -# -x-type: "hlfv1" - -# -# Describe what the target network is/does. -# -description: "Balance Transfer Network - client definition for Org1" - -# -# Schema version of the content. Used by the SDK to apply the corresponding parsing rules. -# -version: "1.0" - -# -# The client section is SDK-specific. The sample below is for the node.js SDK -# -client: - # Which organization does this application instance belong to? The value must be the name of an org - # defined under "organizations" - organization: Org1 - - # Some SDKs support pluggable KV stores, the properties under "credentialStore" - # are implementation specific - credentialStore: - # [Optional]. Specific to FileKeyValueStore.js or similar implementations in other SDKs. Can be others - # if using an alternative impl. For instance, CouchDBKeyValueStore.js would require an object - # here for properties like url, db name, etc. - path: "./fabric-client-kv-org1" - - # [Optional]. Specific to the CryptoSuite implementation. Software-based implementations like - # CryptoSuite_ECDSA_AES.js in node SDK requires a key store. PKCS#11 based implementations does - # not. - cryptoStore: - # Specific to the underlying KeyValueStore that backs the crypto key store. - path: "/tmp/fabric-client-kv-org1" - - # [Optional]. Specific to Composer environment - wallet: wallet-name diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org2.yaml b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org2.yaml deleted file mode 100644 index 6edc731cf..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/org2.yaml +++ /dev/null @@ -1,53 +0,0 @@ ---- -# -# The network connection profile provides client applications the information about the target -# blockchain network that are necessary for the applications to interact with it. These are all -# knowledge that must be acquired from out-of-band sources. This file provides such a source. -# -name: "balance-transfer-org2" - -# -# Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming -# in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave -# them for the applications to process. This is a mechanism for different components of an application -# to exchange information that are not part of the standard schema described below. In particular, -# the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to -# determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. -# -x-type: "hlfv1" - -# -# Describe what the target network is/does. -# -description: "Balance Transfer Network - client definition for Org2" - -# -# Schema version of the content. Used by the SDK to apply the corresponding parsing rules. -# -version: "1.0" - -# -# The client section is SDK-specific. The sample below is for the node.js SDK -# -client: - # Which organization does this application instance belong to? The value must be the name of an org - # defined under "organizations" - organization: Org2 - - # Some SDKs support pluggable KV stores, the properties under "credentialStore" - # are implementation specific - credentialStore: - # [Optional]. Specific to FileKeyValueStore.js or similar implementations in other SDKs. Can be others - # if using an alternative impl. For instance, CouchDBKeyValueStore.js would require an object - # here for properties like url, db name, etc. - path: "./fabric-client-kv-org2" - - # [Optional]. Specific to the CryptoSuite implementation. Software-based implementations like - # CryptoSuite_ECDSA_AES.js in node SDK requires a key store. PKCS#11 based implementations does - # not. - cryptoStore: - # Specific to the underlying KeyValueStore that backs the crypto key store. - path: "/tmp/fabric-client-kv-org2" - - # [Optional]. Specific to Composer environment - wallet: wallet-name diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/node/example_cc.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/node/example_cc.js deleted file mode 100644 index b011ac942..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/node/example_cc.js +++ /dev/null @@ -1,143 +0,0 @@ -/* -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -*/ - -const shim = require('fabric-shim'); -const util = require('util'); - -var Chaincode = class { - // Initialize the chaincode - async Init(stub) { - console.info('========= example_cc Init ========='); - let ret = stub.getFunctionAndParameters(); - console.info(ret); - let args = ret.params; - // initialise only if 4 parameters passed. - if (args.length != 4) { - return shim.error('Incorrect number of arguments. Expecting 4'); - } - - let A = args[0]; - let B = args[2]; - let Aval = args[1]; - let Bval = args[3]; - - if ( - typeof parseInt(Aval) !== 'number' || - typeof parseInt(Bval) !== 'number' - ) { - return shim.error('Expecting integer value for asset holding'); - } - - try { - await stub.putState(A, Buffer.from(Aval)); - try { - await stub.putState(B, Buffer.from(Bval)); - return shim.success(); - } catch (err) { - return shim.error(err); - } - } catch (err) { - return shim.error(err); - } - } - - async Invoke(stub) { - let ret = stub.getFunctionAndParameters(); - console.info(ret); - let method = this[ret.fcn]; - if (!method) { - console.error('no method of name:' + ret.fcn + ' found'); - return shim.error('no method of name:' + ret.fcn + ' found'); - } - - console.info('\nCalling method : ' + ret.fcn); - try { - let payload = await method(stub, ret.params); - return shim.success(payload); - } catch (err) { - console.log(err); - return shim.error(err); - } - } - - async move(stub, args) { - if (args.length != 3) { - throw new Error('Incorrect number of arguments. Expecting 3'); - } - - let A = args[0]; - let B = args[1]; - if (!A || !B) { - throw new Error('asset holding must not be empty'); - } - - // Get the state from the ledger - let Avalbytes = await stub.getState(A); - if (!Avalbytes) { - throw new Error('Failed to get state of asset holder A'); - } - let Aval = parseInt(Avalbytes.toString()); - - let Bvalbytes = await stub.getState(B); - if (!Bvalbytes) { - throw new Error('Failed to get state of asset holder B'); - } - - let Bval = parseInt(Bvalbytes.toString()); - // Perform the execution - let amount = parseInt(args[2]); - if (typeof amount !== 'number') { - throw new Error('Expecting integer value for amount to be transaferred'); - } - - Aval = Aval - amount; - Bval = Bval + amount; - console.info(util.format('Aval = %d, Bval = %d\n', Aval, Bval)); - - // Write the states back to the ledger - await stub.putState(A, Buffer.from(Aval.toString())); - await stub.putState(B, Buffer.from(Bval.toString())); - } - - // Deletes an entity from state - async delete(stub, args) { - if (args.length != 1) { - throw new Error('Incorrect number of arguments. Expecting 1'); - } - - let A = args[0]; - - // Delete the key from the state in ledger - await stub.deleteState(A); - } - - // query callback representing the query of a chaincode - async query(stub, args) { - if (args.length != 1) { - throw new Error( - 'Incorrect number of arguments. Expecting name of the person to query' - ); - } - - let jsonResp = {}; - let A = args[0]; - - // Get the state from the ledger - let Avalbytes = await stub.getState(A); - if (!Avalbytes) { - jsonResp.error = 'Failed to get state for ' + A; - throw new Error(JSON.stringify(jsonResp)); - } - - jsonResp.name = A; - jsonResp.amount = Avalbytes.toString(); - console.info('Query Response:'); - console.info(jsonResp); - return Avalbytes; - } -}; - -shim.start(new Chaincode()); diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.js b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.js deleted file mode 100644 index 5364a778b..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.js +++ /dev/null @@ -1,25 +0,0 @@ -var util = require('util'); -var path = require('path'); -var hfc = require('fabric-client'); - -var file = 'network-config%s.yaml'; - -var env = process.env.TARGET_NETWORK; -if (env) file = util.format(file, '-' + env); -else file = util.format(file, ''); -// indicate to the application where the setup file is located so it able -// to have the hfc load it to initalize the fabric client instance -hfc.setConfigSetting( - 'network-connection-profile-path', - path.join(__dirname, 'artifacts', file) -); -hfc.setConfigSetting( - 'Org1-connection-profile-path', - path.join(__dirname, 'artifacts', 'org1.yaml') -); -hfc.setConfigSetting( - 'Org2-connection-profile-path', - path.join(__dirname, 'artifacts', 'org2.yaml') -); -// some other settings the application might need to know -hfc.addConfigFile(path.join(__dirname, 'config.json')); diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.json b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.json deleted file mode 100644 index 1a7916179..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "host": "localhost", - "port": "4000", - "jwt_expiretime": "36000", - "channelName": "mychannel", - "CC_SRC_PATH": "../artifacts", - "eventWaitTime": "30000", - "admins": [ - { - "username": "admin", - "secret": "adminpw" - } - ] -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/package.json b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/package.json deleted file mode 100644 index b975d6074..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "balance-transfer", - "version": "1.0.0", - "description": "A balance-transfer example node program to demonstrate using node.js SDK APIs", - "main": "app.js", - "scripts": { - "start": "node app.js" - }, - "keywords": [ - "fabric-client sample app", - "balance-transfer node sample", - "v1.0 fabric nodesdk sample" - ], - "engines": { - "node": ">=8.9.4 <9.0", - "npm": ">=5.6.0 <6.0" - }, - "license": "Apache-2.0", - "dependencies": { - "body-parser": "^1.17.1", - "cookie-parser": "^1.4.3", - "cors": "^2.8.3", - "express": "^4.15.2", - "express-bearer-token": "^2.1.0", - "express-jwt": "^5.1.0", - "express-session": "^1.15.2", - "fabric-ca-client": "~1.4.0", - "fabric-client": "~1.4.0", - "fs-extra": "^2.0.0", - "jsonwebtoken": "^7.3.0", - "log4js": "^0.6.38" - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/runApp.sh b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/runApp.sh deleted file mode 100755 index 03885ae76..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/runApp.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -function dkcl(){ - CONTAINER_IDS=$(docker ps -aq) - echo - if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" = " " ]; then - echo "========== No containers available for deletion ==========" - else - docker rm -f $CONTAINER_IDS - fi - echo -} - -function dkrm(){ - DOCKER_IMAGE_IDS=$(docker images | grep "dev\|none\|test-vp\|peer[0-9]-" | awk '{print $3}') - echo - if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" = " " ]; then - echo "========== No images available for deletion ===========" - else - docker rmi -f $DOCKER_IMAGE_IDS - fi - echo -} - -function restartNetwork() { - echo - - #teardown the network and clean the containers and intermediate images - docker-compose -f ./artifacts/docker-compose-explorer.yaml down - dkcl - dkrm - - #Cleanup the stores - rm -rf ./fabric-client-kv-org* - - #Start the network - docker-compose -f ./artifacts/docker-compose-explorer.yaml up -d - echo -} - -function installNodeModules() { - echo - if [ -d node_modules ]; then - echo "============== node modules installed already =============" - else - echo "============== Installing node modules =============" - npm install - fi - echo -} - - -restartNetwork - -installNodeModules - -PORT=4000 node app diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/testAPIs.sh b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/testAPIs.sh deleted file mode 100755 index ad503b2b2..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/testAPIs.sh +++ /dev/null @@ -1,280 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -jq --version > /dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "Please Install 'jq' https://stedolan.github.io/jq/ to execute this script" - echo - exit 1 -fi - -starttime=$(date +%s) - -# Print the usage message -function printHelp () { - echo "Usage: " - echo " ./testAPIs.sh -l golang|node" - echo " -l - chaincode language (defaults to \"golang\")" -} -# Language defaults to "golang" -LANGUAGE="golang" - -# Parse commandline args -while getopts "h?l:" opt; do - case "$opt" in - h|\?) - printHelp - exit 0 - ;; - l) LANGUAGE=$OPTARG - ;; - esac -done - -##set chaincode path -function setChaincodePath(){ - LANGUAGE=`echo "$LANGUAGE" | tr '[:upper:]' '[:lower:]'` - case "$LANGUAGE" in - "golang") - CC_SRC_PATH="github.com/example_cc/go" - ;; - "node") - CC_SRC_PATH="$PWD/artifacts/src/github.com/example_cc/node" - ;; - *) printf "\n ------ Language $LANGUAGE is not supported yet ------\n"$ - exit 1 - esac -} - -setChaincodePath - -echo "POST request Enroll on Org1 ..." -echo -ORG1_TOKEN=$(curl -s -X POST \ - http://localhost:4000/users \ - -H "content-type: application/x-www-form-urlencoded" \ - -d 'username=Jim&orgName=Org1') -echo $ORG1_TOKEN -ORG1_TOKEN=$(echo $ORG1_TOKEN | jq ".token" | sed "s/\"//g") -echo -echo "ORG1 token is $ORG1_TOKEN" -echo -echo "POST request Enroll on Org2 ..." -echo -ORG2_TOKEN=$(curl -s -X POST \ - http://localhost:4000/users \ - -H "content-type: application/x-www-form-urlencoded" \ - -d 'username=Barry&orgName=Org2') -echo $ORG2_TOKEN -ORG2_TOKEN=$(echo $ORG2_TOKEN | jq ".token" | sed "s/\"//g") -echo -echo "ORG2 token is $ORG2_TOKEN" -echo -echo -echo "POST request Create channel ..." -echo -curl -s -X POST \ - http://localhost:4000/channels \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "channelName":"mychannel", - "channelConfigPath":"../artifacts/channel/mychannel.tx" -}' -echo -echo -sleep 5 -echo "POST request Join channel on Org1" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/peers \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer0.org1.example.com","peer1.org1.example.com"] -}' -echo -echo - -echo "POST request Join channel on Org2" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/peers \ - -H "authorization: Bearer $ORG2_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer0.org2.example.com","peer1.org2.example.com"] -}' -echo -echo - -echo "POST request Update anchor peers on Org1" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/anchorpeers \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "configUpdatePath":"../artifacts/channel/Org1MSPanchors.tx" -}' -echo -echo - -echo "POST request Update anchor peers on Org2" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/anchorpeers \ - -H "authorization: Bearer $ORG2_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "configUpdatePath":"../artifacts/channel/Org2MSPanchors.tx" -}' -echo -echo - -echo "POST Install chaincode on Org1" -echo -curl -s -X POST \ - http://localhost:4000/chaincodes \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d "{ - \"peers\": [\"peer0.org1.example.com\",\"peer1.org1.example.com\"], - \"chaincodeName\":\"mycc\", - \"chaincodePath\":\"$CC_SRC_PATH\", - \"chaincodeType\": \"$LANGUAGE\", - \"chaincodeVersion\":\"v0\" -}" -echo -echo - -echo "POST Install chaincode on Org2" -echo -curl -s -X POST \ - http://localhost:4000/chaincodes \ - -H "authorization: Bearer $ORG2_TOKEN" \ - -H "content-type: application/json" \ - -d "{ - \"peers\": [\"peer0.org2.example.com\",\"peer1.org2.example.com\"], - \"chaincodeName\":\"mycc\", - \"chaincodePath\":\"$CC_SRC_PATH\", - \"chaincodeType\": \"$LANGUAGE\", - \"chaincodeVersion\":\"v0\" -}" -echo -echo - -echo "POST instantiate chaincode on Org1" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d "{ - \"chaincodeName\":\"mycc\", - \"chaincodeVersion\":\"v0\", - \"chaincodeType\": \"$LANGUAGE\", - \"args\":[\"a\",\"100\",\"b\",\"200\"] -}" -echo -echo - -echo "POST invoke chaincode on peers of Org1 and Org2" -echo -VALUES=$(curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes/mycc \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d "{ - \"peers\": [\"peer0.org1.example.com\",\"peer0.org2.example.com\"], - \"fcn\":\"move\", - \"args\":[\"a\",\"b\",\"10\"] -}") -echo $VALUES -# Assign previous invoke transaction id to TRX_ID -MESSAGE=$(echo $VALUES | jq -r ".message") -TRX_ID=${MESSAGE#*ID:} -echo - -echo "GET query chaincode on peer1 of Org1" -echo -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer0.org1.example.com&fcn=query&args=%5B%22a%22%5D" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Block by blockNumber" -echo -BLOCK_INFO=$(curl -s -X GET \ - "http://localhost:4000/channels/mychannel/blocks/1?peer=peer0.org1.example.com" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json") -echo $BLOCK_INFO -# Assign previous block hash to HASH -HASH=$(echo $BLOCK_INFO | jq -r ".header.previous_hash") -echo - -echo "GET query Transaction by TransactionID" -echo -curl -s -X GET http://localhost:4000/channels/mychannel/transactions/$TRX_ID?peer=peer0.org1.example.com \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - - -echo "GET query Block by Hash - Hash is $HASH" -echo -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/blocks?hash=$HASH&peer=peer0.org1.example.com" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "cache-control: no-cache" \ - -H "content-type: application/json" \ - -H "x-access-token: $ORG1_TOKEN" -echo -echo - -echo "GET query ChainInfo" -echo -curl -s -X GET \ - "http://localhost:4000/channels/mychannel?peer=peer0.org1.example.com" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Installed chaincodes" -echo -curl -s -X GET \ - "http://localhost:4000/chaincodes?peer=peer0.org1.example.com" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Instantiated chaincodes" -echo -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/chaincodes?peer=peer0.org1.example.com" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Channels" -echo -curl -s -X GET \ - "http://localhost:4000/channels?peer=peer0.org1.example.com" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - - -echo "Total execution time : $(($(date +%s)-starttime)) secs ..." diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/.gitignore b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/.gitignore deleted file mode 100644 index 5e283e61a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -package-lock.json -dist -types/fabric-client diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/README.md b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/README.md deleted file mode 100644 index bbfdc1f82..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/README.md +++ /dev/null @@ -1,303 +0,0 @@ -## Balance transfer - -This is a sample Node.js application written using typescript which demonstrates -the **__fabric-client__** and **__fabric-ca-client__** Node.js SDK APIs for typescript. - -### Prerequisites and setup: - -* [Docker](https://www.docker.com/products/overview) - v1.12 or higher -* [Docker Compose](https://docs.docker.com/compose/overview/) - v1.8 or higher -* [Git client](https://git-scm.com/downloads) - needed for clone commands -* **Node.js** v6.9.0 - 6.10.0 ( __Node v7+ is not supported__ ) -* [Download Docker images](http://hyperledger-fabric.readthedocs.io/en/latest/samples.html#binaries) - -``` -cd fabric-samples/balance-transfer/ -``` - -Once you have completed the above setup, you will have provisioned a local network with the following docker container configuration: - -* 2 CAs -* A SOLO orderer -* 4 peers (2 peers per Org) - -#### Artifacts - -* Crypto material has been generated using the **cryptogen** tool from Hyperledger Fabric and mounted to all peers, the orderering node and CA containers. More details regarding the cryptogen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html#crypto-generator). - -* An Orderer genesis block (genesis.block) and channel configuration transaction (mychannel.tx) has been pre generated using the **configtxgen** tool from Hyperledger Fabric and placed within the artifacts folder. More details regarding the configtxgen tool are available [here](http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html#configuration-transaction-generator). - -## Running the sample program - -There are two options available for running the balance-transfer sample as shown below. - -### Option 1 - -##### Terminal Window 1 - -``` -cd fabric-samples/balance-transfer/typescript - -./runApp.sh - -``` - -This performs the following steps: -* launches the required network on your local machine -* installs the fabric-client and fabric-ca-client node modules -* starts the node app on PORT 4000 - -##### Terminal Window 2 - -NOTE: In order for the following shell script to properly parse the JSON, you must install ``jq``. - -See instructions at [https://stedolan.github.io/jq/](https://stedolan.github.io/jq/). - -Test the APIs as follows: -``` -cd fabric-samples/balance-transfer/typescript - -./testAPIs.sh - -``` - -### Option 2 is a more manual approach - -##### Terminal Window 1 - -* Launch the network using docker-compose - -``` -docker-compose -f artifacts/docker-compose.yaml up -``` -##### Terminal Window 2 - -* Install the fabric-client and fabric-ca-client node modules - -``` -npm install -``` - -*** NOTE - If running this before the new version of the node SDK is published which includes the typescript definition files, you will need to do the following: - -``` -cp types/fabric-client/index.d.tx node_modules/fabric-client/index.d.ts -cp types/fabric-ca-client/index.d.tx node_modules/fabric-ca-client/index.d.ts -``` - -* Start the node app on PORT 4000 - -``` -PORT=4000 ts-node app.ts -``` - -##### Terminal Window 3 - -* Execute the REST APIs from the section [Sample REST APIs Requests](https://github.com/hyperledger/fabric-samples/tree/master/balance-transfer#sample-rest-apis-requests) - -## Sample REST APIs Requests - -### Login Request - -* Register and enroll new users in Organization - **Org1**: - -`curl -s -X POST http://localhost:4000/users -H "content-type: application/x-www-form-urlencoded" -d 'username=Jim&orgName=org1'` - -**OUTPUT:** - -``` -{ - "success": true, - "secret": "RaxhMgevgJcm", - "message": "Jim enrolled Successfully", - "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" -} -``` - -The response contains the success/failure status, an **enrollment Secret** and a **JSON Web Token (JWT)** that is a required string in the Request Headers for subsequent requests. - -### Create Channel request - -``` -curl -s -X POST \ - http://localhost:4000/channels \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" \ - -d '{ - "channelName":"mychannel", - "channelConfigPath":"../artifacts/channel/mychannel.tx" -}' -``` - -Please note that the Header **authorization** must contain the JWT returned from the `POST /users` call - -### Join Channel request - -``` -curl -s -X POST \ - http://localhost:4000/channels/mychannel/peers \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer1","peer2"] -}' -``` -### Install chaincode - -``` -curl -s -X POST \ - http://localhost:4000/chaincodes \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer1","peer2"], - "chaincodeName":"mycc", - "chaincodePath":"github.com/example_cc/go", - "chaincodeVersion":"v0" -}' -``` - -### Instantiate chaincode - -``` -curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" \ - -d '{ - "chaincodeName":"mycc", - "chaincodeVersion":"v0", - "args":["a","100","b","200"] -}' -``` - -### Invoke request - -``` -curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes/mycc \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" \ - -d '{ - "fcn":"move", - "args":["a","b","10"] -}' -``` -**NOTE:** Ensure that you save the Transaction ID from the response in order to pass this string in the subsequent query transactions. - -### Chaincode Query - -``` -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&fcn=query&args=%5B%22a%22%5D" \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" -``` - -### Query Block by BlockNumber - -``` -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/blocks/1?peer=peer1" \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" -``` - -### Query Transaction by TransactionID - -``` -curl -s -X GET http://localhost:4000/channels/mychannel/transactions/TRX_ID?peer=peer1 \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" -``` -**NOTE**: Here the TRX_ID can be from any previous invoke transaction - - -### Query ChainInfo - -``` -curl -s -X GET \ - "http://localhost:4000/channels/mychannel?peer=peer1" \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" -``` - -### Query Installed chaincodes - -``` -curl -s -X GET \ - "http://localhost:4000/chaincodes?peer=peer1&type=installed" \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" -``` - -### Query Instantiated chaincodes - -``` -curl -s -X GET \ - "http://localhost:4000/chaincodes?peer=peer1&type=instantiated" \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" -``` - -### Query Channels - -``` -curl -s -X GET \ - "http://localhost:4000/channels?peer=peer1" \ - -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ - -H "content-type: application/json" -``` - -### Network configuration considerations - -You have the ability to change configuration parameters by either directly editing the network-config.json file or provide an additional file for an alternative target network. The app uses an optional environment variable "TARGET_NETWORK" to control the configuration files to use. For example, if you deployed the target network on Amazon Web Services EC2, you can add a file "network-config-aws.json", and set the "TARGET_NETWORK" environment to 'aws'. The app will pick up the settings inside the "network-config-aws.json" file. - -#### IP Address** and PORT information - -If you choose to customize your docker-compose yaml file by hardcoding IP Addresses and PORT information for your peers and orderer, then you MUST also add the identical values into the network-config.json file. The paths shown below will need to be adjusted to match your docker-compose yaml file. - -``` - "orderer": { - "url": "grpcs://x.x.x.x:7050", - "server-hostname": "orderer0", - "tls_cacerts": "../artifacts/tls/orderer/ca-cert.pem" - }, - "org1": { - "ca": "http://x.x.x.x:7054", - "peer1": { - "requests": "grpcs://x.x.x.x:7051", - "events": "grpcs://x.x.x.x:7053", - ... - }, - "peer2": { - "requests": "grpcs://x.x.x.x:7056", - "events": "grpcs://x.x.x.x:7058", - ... - } - }, - "org2": { - "ca": "http://x.x.x.x:8054", - "peer1": { - "requests": "grpcs://x.x.x.x:8051", - "events": "grpcs://x.x.x.x:8053", - ... }, - "peer2": { - "requests": "grpcs://x.x.x.x:8056", - "events": "grpcs://x.x.x.x:8058", - ... - } - } - -``` - -#### Discover IP Address - -To retrieve the IP Address for one of your network entities, issue the following command: - -``` -# The following will return the IP Address for peer0 -docker inspect peer0 | grep IPAddress -``` - -Creative Commons License
      This work is licensed under a Creative Commons Attribution 4.0 International License. diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/chaincode.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/chaincode.ts deleted file mode 100644 index 4c5fda6bd..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/chaincode.ts +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as express from 'express'; -import log4js = require('log4js'); -const logger = log4js.getLogger('SampleWebApp'); -import hfc = require('fabric-client'); -import * as jwt from 'jsonwebtoken'; -import * as helper from '../lib/helper'; -import * as channelApi from '../lib/channel'; -import * as chainCodeApi from '../lib/chaincode'; -import { RequestEx } from '../interfaces'; -import { getErrorMessage } from './utils'; - -export default function chainCodeHandlers(app: express.Application) { - - async function installChainCode(req: RequestEx, res: express.Response) { - logger.debug('==================== INSTALL CHAINCODE =================='); - - const peers = req.body.peers; - const chaincodeName = req.body.chaincodeName; - const chaincodePath = req.body.chaincodePath; - const chaincodeVersion = req.body.chaincodeVersion; - - logger.debug('peers : ' + peers); // target peers list - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('chaincodePath : ' + chaincodePath); - logger.debug('chaincodeVersion : ' + chaincodeVersion); - - if (!peers || peers.length === 0) { - res.json(getErrorMessage('\'peers\'')); - return; - } - if (!chaincodeName) { - res.json(getErrorMessage('\'chaincodeName\'')); - return; - } - if (!chaincodePath) { - res.json(getErrorMessage('\'chaincodePath\'')); - return; - } - if (!chaincodeVersion) { - res.json(getErrorMessage('\'chaincodeVersion\'')); - return; - } - - const message = await chainCodeApi.installChaincode( - peers, chaincodeName, chaincodePath, chaincodeVersion, req.username, req.orgname); - - res.send(message); - } - - async function queryChainCode(req: RequestEx, res: express.Response) { - const peer = req.query.peer; - const installType = req.query.type; - // TODO: add Constnats - if (installType === 'installed') { - logger.debug( - '================ GET INSTALLED CHAINCODES ======================'); - } else { - logger.debug( - '================ GET INSTANTIATED CHAINCODES ======================'); - } - - const message = await chainCodeApi.getInstalledChaincodes( - peer, installType, req.username, req.orgname); - - res.send(message); - } - - const API_ENDPOINT_CHAINCODE_INSTALL = '/chaincodes'; - const API_ENDPOINT_CHAINCODE_QUERY = '/chaincodes'; - - app.post(API_ENDPOINT_CHAINCODE_INSTALL, installChainCode); - app.get(API_ENDPOINT_CHAINCODE_QUERY, queryChainCode); -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/channel.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/channel.ts deleted file mode 100644 index 49a79c721..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/channel.ts +++ /dev/null @@ -1,261 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as express from 'express'; -import log4js = require('log4js'); -const logger = log4js.getLogger('SampleWebApp'); -import hfc = require('fabric-client'); -import * as jwt from 'jsonwebtoken'; -import * as helper from '../lib/helper'; -import * as channelApi from '../lib/channel'; -import { RequestEx } from '../interfaces'; -import { getErrorMessage } from './utils'; - -export default function channelHandlers(app: express.Application) { - - async function createNewChannel(req: RequestEx, res: express.Response) { - logger.info('<<<<<<<<<<<<<<<<< C R E A T E C H A N N E L >>>>>>>>>>>>>>>>>'); - logger.debug('End point : /channels'); - - const channelName = req.body.channelName; - const channelConfigPath = req.body.channelConfigPath; - - logger.debug('Channel name : ' + channelName); - // ../artifacts/channel/mychannel.tx - logger.debug('channelConfigPath : ' + channelConfigPath); - - if (!channelName) { - res.json(getErrorMessage('\'channelName\'')); - return; - } - if (!channelConfigPath) { - res.json(getErrorMessage('\'channelConfigPath\'')); - return; - } - - const response = await channelApi.createChannel( - channelName, channelConfigPath, req.username, req.orgname); - - res.send(response); - } - - async function joinChannel(req: RequestEx, res: express.Response) { - logger.info('<<<<<<<<<<<<<<<<< J O I N C H A N N E L >>>>>>>>>>>>>>>>>'); - - const channelName = req.params.channelName; - const peers = req.body.peers; - logger.debug('channelName : ' + channelName); - logger.debug('peers : ' + peers); - if (!channelName) { - res.json(getErrorMessage('\'channelName\'')); - return; - } - if (!peers || peers.length === 0) { - res.json(getErrorMessage('\'peers\'')); - return; - } - - const message = await channelApi.joinChannel(channelName, peers, req.username, req.orgname); - res.send(message); - } - - async function instantiateChainCode(req: RequestEx, res: express.Response) { - logger.debug('==================== INSTANTIATE CHAINCODE =================='); - const chaincodeName = req.body.chaincodeName; - const chaincodeVersion = req.body.chaincodeVersion; - const channelName = req.params.channelName; - const fcn = req.body.fcn; - const args = req.body.args; - logger.debug('channelName : ' + channelName); - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('chaincodeVersion : ' + chaincodeVersion); - logger.debug('fcn : ' + fcn); - logger.debug('args : ' + args); - if (!chaincodeName) { - res.json(getErrorMessage('\'chaincodeName\'')); - return; - } - if (!chaincodeVersion) { - res.json(getErrorMessage('\'chaincodeVersion\'')); - return; - } - if (!channelName) { - res.json(getErrorMessage('\'channelName\'')); - return; - } - if (!args) { - res.json(getErrorMessage('\'args\'')); - return; - } - - const message = await channelApi.instantiateChainCode( - channelName, chaincodeName, chaincodeVersion, fcn, args, req.username, req.orgname); - res.send(message); - } - - async function invokeChainCode(req: RequestEx, res: express.Response) { - logger.debug('==================== INVOKE ON CHAINCODE =================='); - const peers = req.body.peers; - const chaincodeName = req.params.chaincodeName; - const channelName = req.params.channelName; - const fcn = req.body.fcn; - const args = req.body.args; - logger.debug('channelName : ' + channelName); - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('fcn : ' + fcn); - logger.debug('args : ' + args); - if (!chaincodeName) { - res.json(getErrorMessage('\'chaincodeName\'')); - return; - } - if (!channelName) { - res.json(getErrorMessage('\'channelName\'')); - return; - } - if (!fcn) { - res.json(getErrorMessage('\'fcn\'')); - return; - } - if (!args) { - res.json(getErrorMessage('\'args\'')); - return; - } - - const message = await channelApi.invokeChaincode( - peers, channelName, chaincodeName, fcn, args, req.username, req.orgname); - - res.send(message); - } - - async function queryChainCode(req: RequestEx, res: express.Response) { - const channelName = req.params.channelName; - const chaincodeName = req.params.chaincodeName; - let args = req.query.args; - const fcn = req.query.fcn; - const peer = req.query.peer; - - logger.debug('channelName : ' + channelName); - logger.debug('chaincodeName : ' + chaincodeName); - logger.debug('fcn : ' + fcn); - logger.debug('args : ' + args); - - if (!chaincodeName) { - res.json(getErrorMessage('\'chaincodeName\'')); - return; - } - if (!channelName) { - res.json(getErrorMessage('\'channelName\'')); - return; - } - if (!fcn) { - res.json(getErrorMessage('\'fcn\'')); - return; - } - if (!args) { - res.json(getErrorMessage('\'args\'')); - return; - } - - args = args.replace(/'/g, '"'); - args = JSON.parse(args); - logger.debug(args); - - const message = await channelApi.queryChaincode( - peer, channelName, chaincodeName, args, fcn, req.username, req.orgname); - - res.send(message); - } - - async function queryByBlockNumber(req: RequestEx, res: express.Response) { - logger.debug('==================== GET BLOCK BY NUMBER =================='); - const blockId = req.params.blockId; - const peer = req.query.peer; - logger.debug('channelName : ' + req.params.channelName); - logger.debug('BlockID : ' + blockId); - logger.debug('Peer : ' + peer); - if (!blockId) { - res.json(getErrorMessage('\'blockId\'')); - return; - } - - const message = await channelApi.getBlockByNumber(peer, blockId, req.username, req.orgname); - res.send(message); - } - - async function queryByTransactionId(req: RequestEx, res: express.Response) { - logger.debug( - '================ GET TRANSACTION BY TRANSACTION_ID ======================' - ); - logger.debug('channelName : ' + req.params.channelName); - const trxnId = req.params.trxnId; - const peer = req.query.peer; - if (!trxnId) { - res.json(getErrorMessage('\'trxnId\'')); - return; - } - - const message = await channelApi.getTransactionByID( - peer, trxnId, req.username, req.orgname); - - res.send(message); - } - - async function queryChannelInfo(req: RequestEx, res: express.Response) { - logger.debug( - '================ GET CHANNEL INFORMATION ======================'); - logger.debug('channelName : ' + req.params.channelName); - const peer = req.query.peer; - - const message = await channelApi.getChainInfo(peer, req.username, req.orgname); - - res.send(message); - } - - async function queryChannels(req: RequestEx, res: express.Response) { - logger.debug('================ GET CHANNELS ======================'); - logger.debug('peer: ' + req.query.peer); - const peer = req.query.peer; - if (!peer) { - res.json(getErrorMessage('\'peer\'')); - return; - } - - const message = await channelApi.getChannels(peer, req.username, req.orgname); - res.send(message); - } - - const API_ENDPOINT_CHANNEL_CREATE = '/channels'; - const API_ENDPOINT_CHANNEL_JOIN = '/channels/:channelName/peers'; - const API_ENDPOINT_CHANNEL_INSTANTIATE_CHAINCODE = '/channels/:channelName/chaincodes'; - const API_ENDPOINT_CHANNEL_INVOKE_CHAINCODE = - '/channels/:channelName/chaincodes/:chaincodeName'; - const API_ENDPOINT_CHANNEL_QUERY_CHAINCODE = '/channels/:channelName/chaincodes/:chaincodeName'; - const API_ENDPOINT_CHANNEL_QUERY_BY_BLOCKNUMBER = '/channels/:channelName/blocks/:blockId'; - const API_ENDPOINT_CHANNEL_QUERY_BY_TRANSACTIONID - = '/channels/:channelName/transactions/:trxnId'; - const API_ENDPOINT_CHANNEL_INFO = '/channels/:channelName'; - const API_ENDPOINT_CHANNEL_QUERY = '/channels'; - - app.post(API_ENDPOINT_CHANNEL_CREATE, createNewChannel); - app.post(API_ENDPOINT_CHANNEL_JOIN, joinChannel); - app.post(API_ENDPOINT_CHANNEL_INSTANTIATE_CHAINCODE, instantiateChainCode); - app.post(API_ENDPOINT_CHANNEL_INVOKE_CHAINCODE, invokeChainCode); - app.get(API_ENDPOINT_CHANNEL_QUERY_CHAINCODE, queryChainCode); - app.get(API_ENDPOINT_CHANNEL_QUERY_BY_BLOCKNUMBER, queryByBlockNumber); - app.get(API_ENDPOINT_CHANNEL_QUERY_BY_TRANSACTIONID, queryByTransactionId); - app.get(API_ENDPOINT_CHANNEL_INFO, queryChannelInfo); - app.get(API_ENDPOINT_CHANNEL_QUERY, queryChannels); -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/index.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/index.ts deleted file mode 100644 index f49700e08..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as express from 'express'; -import userHandlers from './users'; -import channelHandlers from './channel'; -import chainCodeHandlers from './chaincode'; - -export default function entryPoint(app: express.Application) { - // various handlers - userHandlers(app); - channelHandlers(app); - chainCodeHandlers(app); -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/users.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/users.ts deleted file mode 100644 index d9462555d..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/users.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { RequestEx } from '../interfaces'; -import * as express from 'express'; -import log4js = require('log4js'); -const logger = log4js.getLogger('SampleWebApp'); -import hfc = require('fabric-client'); -import * as jwt from 'jsonwebtoken'; -import * as helper from '../lib/helper'; -import { getErrorMessage } from './utils'; - -export default function userHandlers(app: express.Application) { - - async function registerUser(req: RequestEx, res: express.Response) { - const username = req.body.username; - const orgName = req.body.orgName; - - logger.debug('End point : /users'); - logger.debug('User name : ' + username); - logger.debug('Org name : ' + orgName); - - if (!username) { - res.json(getErrorMessage('\'username\'')); - return; - } - if (!orgName) { - res.json(getErrorMessage('\'orgName\'')); - return; - } - const token = jwt.sign({ - exp: Math.floor(Date.now() / 1000) + parseInt( - hfc.getConfigSetting('jwt_expiretime'), 10), - username, - orgName - }, app.get('secret')); - - const response = await helper.getRegisteredUsers(username, orgName); - - if (response && typeof response !== 'string') { - res.json({ - success: true, - token - }); - } else { - res.json({ - success: false, - message: response - }); - } - } - - const API_ENDPOINT_REGISTER_USER = '/users'; - - app.post(API_ENDPOINT_REGISTER_USER, registerUser); -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/utils.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/utils.ts deleted file mode 100644 index 128545fe9..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/api/utils.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export function getErrorMessage(field: string) { - const response = { - success: false, - message: field + ' field is missing or Invalid in the request' - }; - return response; -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app.ts deleted file mode 100644 index 66e8680bf..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import log4js = require('log4js'); -import * as util from 'util'; -import * as http from 'http'; -import * as express from 'express'; -import * as jwt from 'jsonwebtoken'; -import * as bodyParser from 'body-parser'; -import expressJWT = require('express-jwt'); -// tslint:disable-next-line:no-var-requires -const bearerToken = require('express-bearer-token'); -import cors = require('cors'); -import hfc = require('fabric-client'); -import * as helper from './lib/helper'; -import { RequestEx } from './interfaces'; -import api from './api'; - -helper.init(); - -const SERVER_HOST = process.env.HOST || hfc.getConfigSetting('host'); -const SERVER_PORT = process.env.PORT || hfc.getConfigSetting('port'); - -const logger = log4js.getLogger('SampleWebApp'); - -// create express App -const app = express(); - -app.options('*', cors()); -app.use(cors()); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ - extended: false -})); -app.set('secret', 'thisismysecret'); -app.use(expressJWT({ - secret: 'thisismysecret' -}).unless({ - path: ['/users'] -})); -app.use(bearerToken()); - -app.use((req: RequestEx, res, next) => { - if (req.originalUrl.indexOf('/users') >= 0) { - return next(); - } - - const token = req.token; - jwt.verify(token, app.get('secret'), (err: Error, decoded: any) => { - if (err) { - res.send({ - success: false, - message: 'Failed to authenticate token. Make sure to include the ' + - 'token returned from /users call in the authorization header ' + - ' as a Bearer token' - }); - return; - } else { - // add the decoded user name and org name to the request object - // for the downstream code to use - req.username = decoded.username; - req.orgname = decoded.orgName; - logger.debug( - util.format('Decoded from JWT token: username - %s, orgname - %s', - decoded.username, decoded.orgName)); - return next(); - } - }); -}); - -// configure various routes -api(app); - -const server = http.createServer(app); -server.listen(SERVER_PORT); - -logger.info('****************** SERVER STARTED ************************'); -logger.info('************** http://' + SERVER_HOST + ':' + SERVER_PORT + ' ******************'); -server.timeout = 240000; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app_config.json b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app_config.json deleted file mode 100644 index dc27c8312..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/app_config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "host": "localhost", - "port": "4000", - "jwt_expiretime": "36000", - "channelName": "mychannel", - "CC_SRC_PATH": "../artifacts", - "keyValueStore": "/tmp/fabric-client-kvs", - "eventWaitTime": "30000", - "admins": [ - { - "username": "admin", - "secret": "adminpw" - } - ] -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/config.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/config.ts deleted file mode 100644 index 1277eee48..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/config.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as util from 'util'; - -let file = 'network-config%s.json'; - -const env = process.env.TARGET_NETWORK; -if (env) { - file = util.format(file, '-' + env); -} else { - file = util.format(file, ''); -} - -export default { - networkConfigFile: file -}; diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/interfaces.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/interfaces.ts deleted file mode 100644 index 6acd2b1b6..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/interfaces.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as express from 'express'; - -export interface RequestEx extends express.Request { - username?: any; - orgname?: any; - token?: any; -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/chaincode.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/chaincode.ts deleted file mode 100644 index 45629acb4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/chaincode.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as util from 'util'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as helper from './helper'; -import { Peer, ProposalResponse, ChaincodeQueryResponse } from 'fabric-client'; - -// tslint:disable-next-line:no-var-requires -const config = require('../app_config.json'); -const logger = helper.getLogger('ChaincodeApi'); - -function buildTarget(peer: string, org: string): Peer { - let target: Peer = null; - if (typeof peer !== 'undefined') { - const targets: Peer[] = helper.newPeers([peer], org); - if (targets && targets.length > 0) { - target = targets[0]; - } - } - - return target; -} - -export async function installChaincode( - peers: string[], chaincodeName: string, chaincodePath: string, - chaincodeVersion: string, username: string, org: string) { - - logger.debug( - '\n============ Install chaincode on organizations ============\n'); - - helper.setupChaincodeDeploy(); - - const channel = helper.getChannelForOrg(org); - const client = helper.getClientForOrg(org); - - const admin = await helper.getOrgAdmin(org); - - const request = { - targets: helper.newPeers(peers, org), - chaincodePath, - chaincodeId: chaincodeName, - chaincodeVersion, - txId: client.newTransactionID(true) - }; - - try { - - const results = await client.installChaincode(request); - - const proposalResponses = results[0]; - const proposal = results[1]; - let allGood = true; - - proposalResponses.forEach((pr: ProposalResponse) => { - let oneGood = false; - if (pr.response && pr.response.status === 200) { - oneGood = true; - logger.info('install proposal was good'); - } else { - logger.error('install proposal was bad'); - } - allGood = allGood && oneGood; - }); - - if (allGood) { - const proposalResponse = proposalResponses[0] as ProposalResponse; - logger.info(util.format( - 'Successfully sent install Proposal and received ProposalResponse: Status - %s', - proposalResponse.response.status)); - logger.debug('\nSuccessfully Installed chaincode on organization ' + org + - '\n'); - return 'Successfully Installed chaincode on organization ' + org; - } else { - logger.error( - // tslint:disable-next-line:max-line-length - 'Failed to send install Proposal or receive valid response. Response null or status is not 200. exiting...' - ); - // tslint:disable-next-line:max-line-length - return 'Failed to send install Proposal or receive valid response. Response null or status is not 200. exiting...'; - } - - } catch (err) { - logger.error('Failed to send install proposal due to error: ' + err.stack ? - err.stack : err); - throw new Error('Failed to send install proposal due to error: ' + err.stack ? - err.stack : err); - } -} - -export async function getInstalledChaincodes( - peer: string, type: string, username: string, org: string) { - - const target = buildTarget(peer, org); - const channel = helper.getChannelForOrg(org); - const client = helper.getClientForOrg(org); - - const user = await helper.getOrgAdmin(org); - - try { - - let response: ChaincodeQueryResponse = null; - - if (type === 'installed') { - response = await client.queryInstalledChaincodes(target); - } else { - response = await channel.queryInstantiatedChaincodes(target); - } - - if (response) { - if (type === 'installed') { - logger.debug('<<< Installed Chaincodes >>>'); - } else { - logger.debug('<<< Instantiated Chaincodes >>>'); - } - - const details: string[] = []; - response.chaincodes.forEach((c) => { - logger.debug('name: ' + c.name + ', version: ' + - c.version + ', path: ' + c.path - ); - details.push('name: ' + c.name + ', version: ' + - c.version + ', path: ' + c.path - ); - }); - - return details; - } else { - logger.error('response is null'); - return 'response is null'; - } - - } catch (err) { - logger.error('Failed to query with error:' + err.stack ? err.stack : err); - return 'Failed to query with error:' + err.stack ? err.stack : err; - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/channel.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/channel.ts deleted file mode 100644 index 5976351dd..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/channel.ts +++ /dev/null @@ -1,566 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as util from 'util'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as helper from './helper'; -import { ChannelEventHub, Peer, ProposalResponse, ChaincodeInvokeRequest, - ChaincodeQueryRequest, ChannelInfo } from 'fabric-client'; - -const logger = helper.getLogger('ChannelApi'); -// tslint:disable-next-line:no-var-requires -const config = require('../app_config.json'); - -const allEventhubs: ChannelEventHub[] = []; - -function buildTarget(peer: string, org: string): Peer { - let target: Peer = null; - if (typeof peer !== 'undefined') { - const targets: Peer[] = helper.newPeers([peer], org); - if (targets && targets.length > 0) { - target = targets[0]; - } - } - - return target; -} - -// Attempt to send a request to the orderer with the sendCreateChain method -export async function createChannel( - channelName: string, channelConfigPath: string, username: string, orgName: string) { - - logger.debug('\n====== Creating Channel \'' + channelName + '\' ======\n'); - - const client = helper.getClientForOrg(orgName); - const channel = helper.getChannelForOrg(orgName); - - // read in the envelope for the channel config raw bytes - const envelope = fs.readFileSync(path.join(__dirname, channelConfigPath)); - // extract the channel config bytes from the envelope to be signed - const channelConfig = client.extractChannelConfig(envelope); - - // Acting as a client in the given organization provided with "orgName" param - const admin = await helper.getOrgAdmin(orgName); - - logger.debug(util.format('Successfully acquired admin user for the organization "%s"', - orgName)); - - // sign the channel config bytes as "endorsement", this is required by - // the orderer's channel creation policy - const signature = client.signChannelConfig(channelConfig); - - const request = { - config: channelConfig, - signatures: [signature], - name: channelName, - orderer: channel.getOrderers()[0], - txId: client.newTransactionID() - }; - - try { - const response = await client.createChannel(request); - - if (response && response.status === 'SUCCESS') { - logger.debug('Successfully created the channel.'); - return { - success: true, - message: 'Channel \'' + channelName + '\' created Successfully' - }; - } else { - logger.error('\n!!!!!!!!! Failed to create the channel \'' + channelName + - '\' !!!!!!!!!\n\n'); - throw new Error('Failed to create the channel \'' + channelName + '\''); - } - - } catch (err) { - logger.error('\n!!!!!!!!! Failed to create the channel \'' + channelName + - '\' !!!!!!!!!\n\n'); - throw new Error('Failed to create the channel \'' + channelName + '\''); - } -} - -export async function joinChannel( - channelName: string, peers: string[], username: string, org: string) { - - // on process exit, always disconnect the event hub - const closeConnections = (isSuccess: boolean) => { - if (isSuccess) { - logger.debug('\n============ Join Channel is SUCCESS ============\n'); - } else { - logger.debug('\n!!!!!!!! ERROR: Join Channel FAILED !!!!!!!!\n'); - } - logger.debug(''); - - allEventhubs.forEach((hub) => { - console.log(hub); - if (hub && hub.isconnected()) { - hub.disconnect(); - } - }); - }; - - // logger.debug('\n============ Join Channel ============\n') - logger.info(util.format( - 'Calling peers in organization "%s" to join the channel', org)); - - const client = helper.getClientForOrg(org); - const channel = helper.getChannelForOrg(org); - - const admin = await helper.getOrgAdmin(org); - - logger.info(util.format('received member object for admin of the organization "%s": ', org)); - const request = { - txId: client.newTransactionID() - }; - - const genesisBlock = await channel.getGenesisBlock(request); - - const request2 = { - targets: helper.newPeers(peers, org), - txId: client.newTransactionID(), - block: genesisBlock - }; - - const results = await channel.joinChannel(request2); - - logger.debug(util.format('Join Channel R E S P O N S E : %j', results)); - if (results[0] && results[0].response && results[0].response.status === 200) { - logger.info(util.format( - 'Successfully joined peers in organization %s to the channel \'%s\'', - org, channelName)); - closeConnections(true); - const response = { - success: true, - message: util.format( - 'Successfully joined peers in organization %s to the channel \'%s\'', - org, channelName) - }; - return response; - } else { - logger.error(' Failed to join channel'); - closeConnections(false); - throw new Error('Failed to join channel'); - } -} - -export async function instantiateChainCode( - channelName: string, chaincodeName: string, chaincodeVersion: string, - functionName: string, args: string[], username: string, org: string) { - - logger.debug('\n============ Instantiate chaincode on organization ' + org + - ' ============\n'); - - const channel = helper.getChannelForOrg(org); - const client = helper.getClientForOrg(org); - - const admin = await helper.getOrgAdmin(org); - await channel.initialize(); - - const txId = client.newTransactionID(); - // send proposal to endorser - const request = { - chaincodeId: chaincodeName, - chaincodeVersion, - args, - txId, - fcn: functionName - }; - - try { - - const results = await channel.sendInstantiateProposal(request); - - const proposalResponses = results[0]; - const proposal = results[1]; - - let allGood = true; - - proposalResponses.forEach((pr: ProposalResponse) => { - let oneGood = false; - if (pr.response && pr.response.status === 200) { - oneGood = true; - logger.info('install proposal was good'); - } else { - logger.error('install proposal was bad'); - } - allGood = allGood && oneGood; - }); - - if (allGood) { - const responses = proposalResponses as ProposalResponse[]; - const proposalResponse = responses[0]; - logger.info(util.format( - // tslint:disable-next-line:max-line-length - 'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s', - proposalResponse.response.status, proposalResponse.response.message, - proposalResponse.response.payload, proposalResponse.endorsement - .signature)); - - const request2 = { - proposalResponses: responses, - proposal - }; - // set the transaction listener and set a timeout of 30sec - // if the transaction did not get committed within the timeout period, - // fail the test - const deployId = txId.getTransactionID(); - const ORGS = helper.getOrgs(); - - const eh = channel.newChannelEventHub('peer1'); - eh.connect(); - - const txPromise: Promise = new Promise((resolve, reject) => { - const handle = setTimeout(() => { - eh.disconnect(); - reject(); - }, 30000); - - eh.registerTxEvent(deployId, (tx: string, code: string) => { - // logger.info( - // 'The chaincode instantiate transaction has been committed on peer ' + - // eh._ep._endpoint.addr); - - clearTimeout(handle); - eh.unregisterTxEvent(deployId); - eh.disconnect(); - - if (code !== 'VALID') { - logger.error( - 'The chaincode instantiate transaction was invalid, code = ' + code); - reject(); - } else { - logger.info('The chaincode instantiate transaction was valid.'); - resolve(); - } - }); - }); - - const sendPromise = channel.sendTransaction(request2); - const transactionResults = await Promise.all([sendPromise].concat([txPromise])); - - const response = transactionResults[0]; - if (response.status === 'SUCCESS') { - logger.info('Successfully sent transaction to the orderer.'); - return 'Chaincode Instantiation is SUCCESS'; - } else { - logger.error('Failed to order the transaction. Error code: ' + response.status); - return 'Failed to order the transaction. Error code: ' + response.status; - } - - } else { - logger.error( - // tslint:disable-next-line:max-line-length - 'Failed to send instantiate Proposal or receive valid response. Response null or status is not 200. exiting...' - ); - // tslint:disable-next-line:max-line-length - return 'Failed to send instantiate Proposal or receive valid response. Response null or status is not 200. exiting...'; - } - - } catch (err) { - logger.error('Failed to send instantiate due to error: ' + err.stack ? err - .stack : err); - return 'Failed to send instantiate due to error: ' + err.stack ? err.stack : - err; - } -} - -export async function invokeChaincode( - peerNames: string[], channelName: string, - chaincodeName: string, fcn: string, args: string[], username: string, org: string) { - - logger.debug( - util.format('\n============ invoke transaction on organization %s ============\n', org)); - - const client = helper.getClientForOrg(org); - const channel = helper.getChannelForOrg(org); - const targets = (peerNames) ? helper.newPeers(peerNames, org) : undefined; - - const user = await helper.getRegisteredUsers(username, org); - - const txId = client.newTransactionID(); - logger.debug(util.format('Sending transaction "%j"', txId)); - // send proposal to endorser - const request: ChaincodeInvokeRequest = { - chaincodeId: chaincodeName, - fcn, - args, - txId - }; - - if (targets) { - request.targets = targets; - } - - try { - - const results = await channel.sendTransactionProposal(request); - - const proposalResponses = results[0]; - const proposal = results[1]; - let allGood = true; - - proposalResponses.forEach((pr: ProposalResponse) => { - let oneGood = false; - if (pr.response && pr.response.status === 200) { - oneGood = true; - logger.info('transaction proposal was good'); - } else { - logger.error('transaction proposal was bad'); - } - allGood = allGood && oneGood; - }); - - if (allGood) { - const responses = proposalResponses as ProposalResponse[]; - const proposalResponse = responses[0]; - logger.debug(util.format( - // tslint:disable-next-line:max-line-length - 'Successfully sent Proposal and received ProposalResponse: Status - %s, message - "%s", metadata - "%s", endorsement signature: %s', - proposalResponse.response.status, proposalResponse.response.message, - proposalResponse.response.payload, proposalResponse.endorsement - .signature)); - - const request2 = { - proposalResponses: responses, - proposal - }; - - // set the transaction listener and set a timeout of 30sec - // if the transaction did not get committed within the timeout period, - // fail the test - const transactionID = txId.getTransactionID(); - const eventPromises: Array> = []; - - if (!peerNames) { - peerNames = channel.getPeers().map((peer) => { - return peer.getName(); - }); - } - - const eventhubs = helper.newEventHubs(peerNames, org); - - eventhubs.forEach((eh: ChannelEventHub) => { - eh.connect(); - - const txPromise = new Promise((resolve, reject) => { - const handle = setTimeout(() => { - eh.disconnect(); - reject(); - }, 30000); - - eh.registerTxEvent(transactionID, (tx: string, code: string) => { - clearTimeout(handle); - eh.unregisterTxEvent(transactionID); - eh.disconnect(); - - if (code !== 'VALID') { - logger.error( - 'The balance transfer transaction was invalid, code = ' + code); - reject(); - } else { - // logger.info( - // 'The balance transfer transaction has been committed on peer ' + - // eh._ep._endpoint.addr); - resolve(); - } - }); - }); - eventPromises.push(txPromise); - }); - - const sendPromise = channel.sendTransaction(request2); - const results2 = await Promise.all([sendPromise].concat(eventPromises)); - - logger.debug(' event promise all complete and testing complete'); - - if (results2[0].status === 'SUCCESS') { - logger.info('Successfully sent transaction to the orderer.'); - return txId.getTransactionID(); - } else { - logger.error('Failed to order the transaction. Error code: ' + results2[0].status); - return 'Failed to order the transaction. Error code: ' + results2[0].status; - } - } else { - logger.error( - // tslint:disable-next-line:max-line-length - 'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...' - ); - // tslint:disable-next-line:max-line-length - return 'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...'; - } - - } catch (err) { - logger.error('Failed to send transaction due to error: ' + err.stack ? err - .stack : err); - return 'Failed to send transaction due to error: ' + err.stack ? err.stack : - err; - } -} - -export async function queryChaincode( - peer: string, channelName: string, chaincodeName: string, - args: string[], fcn: string, username: string, org: string) { - - const channel = helper.getChannelForOrg(org); - const client = helper.getClientForOrg(org); - const target = buildTarget(peer, org); - - const user = await helper.getRegisteredUsers(username, org); - - // send query - const request: ChaincodeQueryRequest = { - chaincodeId: chaincodeName, - fcn, - args - }; - - if (target) { - request.targets = [target]; - } - - try { - const responsePayloads = await channel.queryByChaincode(request); - - if (responsePayloads) { - - responsePayloads.forEach((rp: Buffer) => { - logger.info(args[0] + ' now has ' + rp.toString('utf8') + - ' after the move'); - return args[0] + ' now has ' + rp.toString('utf8') + - ' after the move'; - }); - - } else { - logger.error('response_payloads is null'); - return 'response_payloads is null'; - } - } catch (err) { - logger.error('Failed to send query due to error: ' + err.stack ? err.stack : - err); - return 'Failed to send query due to error: ' + err.stack ? err.stack : err; - } -} - -export async function getBlockByNumber( - peer: string, blockNumber: string, username: string, org: string) { - - const target = buildTarget(peer, org); - const channel = helper.getChannelForOrg(org); - - const user = await helper.getRegisteredUsers(username, org); - - try { - - const responsePayloads = await channel.queryBlock(parseInt(blockNumber, 10), target); - - if (responsePayloads) { - logger.debug(responsePayloads.toString()); - return responsePayloads; // response_payloads.data.data[0].buffer; - } else { - logger.error('response_payloads is null'); - return 'response_payloads is null'; - } - - } catch (err) { - logger.error('Failed to query with error:' + err.stack ? err.stack : err); - return 'Failed to query with error:' + err.stack ? err.stack : err; - } -} - -export async function getTransactionByID( - peer: string, trxnID: string, username: string, org: string) { - - const target = buildTarget(peer, org); - const channel = helper.getChannelForOrg(org); - - const user = await helper.getRegisteredUsers(username, org); - - try { - - const responsePayloads = await channel.queryTransaction(trxnID, target); - - if (responsePayloads) { - logger.debug(responsePayloads); - return responsePayloads; - } else { - logger.error('response_payloads is null'); - return 'response_payloads is null'; - } - - } catch (err) { - logger.error('Failed to query with error:' + err.stack ? err.stack : err); - return 'Failed to query with error:' + err.stack ? err.stack : err; - } -} - -export async function getChainInfo(peer: string, username: string, org: string) { - - const target = buildTarget(peer, org); - const channel = helper.getChannelForOrg(org); - - const user = await helper.getRegisteredUsers(username, org); - - try { - - const blockChainInfo = await channel.queryInfo(target); - - if (blockChainInfo) { - // FIXME: Save this for testing 'getBlockByHash' ? - logger.debug('==========================================='); - logger.debug(blockChainInfo.currentBlockHash.toString()); - logger.debug('==========================================='); - // logger.debug(blockchainInfo); - return blockChainInfo; - } else { - logger.error('blockChainInfo is null'); - return 'blockChainInfo is null'; - } - - } catch (err) { - logger.error('Failed to query with error:' + err.stack ? err.stack : err); - return 'Failed to query with error:' + err.stack ? err.stack : err; - } -} - -export async function getChannels(peer: string, username: string, org: string) { - const target = buildTarget(peer, org); - const channel = helper.getChannelForOrg(org); - const client = helper.getClientForOrg(org); - - const user = await helper.getRegisteredUsers(username, org); - - try { - - const response = await client.queryChannels(target); - - if (response) { - logger.debug('<<< channels >>>'); - const channelNames: string[] = []; - response.channels.forEach((ci: ChannelInfo) => { - channelNames.push('channel id: ' + ci.channel_id); - }); - return response; - } else { - logger.error('response_payloads is null'); - return 'response_payloads is null'; - } - - } catch (err) { - logger.error('Failed to query with error:' + err.stack ? err.stack : err); - return 'Failed to query with error:' + err.stack ? err.stack : err; - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/helper.ts b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/helper.ts deleted file mode 100644 index 15c7a4cf9..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/helper.ts +++ /dev/null @@ -1,315 +0,0 @@ -/** - * Copyright 2017 Kapil Sachdeva All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import log4js = require('log4js'); -import * as path from 'path'; -import * as fs from 'fs'; -import * as util from 'util'; -import config from '../config'; -import Client = require('fabric-client'); -import { User, UserOpts, Channel } from 'fabric-client'; -// tslint:disable-next-line:no-var-requires -const copService = require('fabric-ca-client'); - -const logger = log4js.getLogger('Helper'); -logger.setLevel('DEBUG'); -Client.setLogger(logger); - -let ORGS: any; -const clients = {}; -const channels = {}; -const caClients = {}; - -function readAllFiles(dir: string) { - const files = fs.readdirSync(dir); - const certs: any = []; - files.forEach((fileName) => { - const filePath = path.join(dir, fileName); - const data = fs.readFileSync(filePath); - certs.push(data); - }); - return certs; -} - -function getKeyStoreForOrg(org: string) { - return Client.getConfigSetting('keyValueStore') + '_' + org; -} - -function setupPeers(channel: any, org: string, client: Client) { - for (const key in ORGS[org].peers) { - if (key) { - const data = fs.readFileSync( - path.join(__dirname, ORGS[org].peers[key]['tls_cacerts'])); - const peer = client.newPeer( - ORGS[org].peers[key].requests, - { - 'pem': Buffer.from(data).toString(), - 'ssl-target-name-override': ORGS[org].peers[key]['server-hostname'] - } - ); - peer.setName(key); - - channel.addPeer(peer); - } - } -} - -function newOrderer(client: Client) { - const caRootsPath = ORGS.orderer.tls_cacerts; - const data = fs.readFileSync(path.join(__dirname, caRootsPath)); - const caroots = Buffer.from(data).toString(); - return client.newOrderer(ORGS.orderer.url, { - 'pem': caroots, - 'ssl-target-name-override': ORGS.orderer['server-hostname'] - }); -} - -function getOrgName(org: string) { - return ORGS[org].name; -} - -function getMspID(org: string) { - logger.debug('Msp ID : ' + ORGS[org].mspid); - return ORGS[org].mspid; -} - -function newRemotes(names: string[], forPeers: boolean, userOrg: string) { - const client = getClientForOrg(userOrg); - const channel = getChannelForOrg(userOrg); - const targets: any[] = []; - // find the peer that match the names - names.forEach((n) => { - if (ORGS[userOrg].peers[n]) { - // found a peer matching the name - const data = fs.readFileSync( - path.join(__dirname, ORGS[userOrg].peers[n]['tls_cacerts'])); - const grpcOpts = { - 'pem': Buffer.from(data).toString(), - 'ssl-target-name-override': ORGS[userOrg].peers[n]['server-hostname'] - }; - - const peer = client.newPeer(ORGS[userOrg].peers[n].requests, grpcOpts); - if (forPeers) { - targets.push(peer); - } else { - const eh = channel.newChannelEventHub(peer); - targets.push(eh); - } - } - }); - - if (targets.length === 0) { - logger.error(util.format('Failed to find peers matching the names %s', names)); - } - - return targets; -} - -async function getAdminUser(userOrg: string): Promise { - const users = Client.getConfigSetting('admins'); - const username = users[0].username; - const password = users[0].secret; - - const client = getClientForOrg(userOrg); - - const store = await Client.newDefaultKeyValueStore({ - path: getKeyStoreForOrg(getOrgName(userOrg)) - }); - - client.setStateStore(store); - - const user = await client.getUserContext(username, true); - - if (user && user.isEnrolled()) { - logger.info('Successfully loaded member from persistence'); - return user; - } - - const caClient = caClients[userOrg]; - - const enrollment = await caClient.enroll({ - enrollmentID: username, - enrollmentSecret: password - }); - - logger.info('Successfully enrolled user \'' + username + '\''); - const userOptions: UserOpts = { - username, - mspid: getMspID(userOrg), - cryptoContent: { - privateKeyPEM: enrollment.key.toBytes(), - signedCertPEM: enrollment.certificate - }, - skipPersistence: false - }; - - const member = await client.createUser(userOptions); - return member; -} - -export function newPeers(names: string[], org: string) { - return newRemotes(names, true, org); -} - -export function newEventHubs(names: string[], org: string) { - return newRemotes(names, false, org); -} - -export function setupChaincodeDeploy() { - process.env.GOPATH = path.join(__dirname, Client.getConfigSetting('CC_SRC_PATH')); -} - -export function getOrgs() { - return ORGS; -} - -export function getClientForOrg(org: string): Client { - return clients[org]; -} - -export function getChannelForOrg(org: string): Channel { - return channels[org]; -} - -export function init() { - - Client.addConfigFile(path.join(__dirname, config.networkConfigFile)); - Client.addConfigFile(path.join(__dirname, '../app_config.json')); - - ORGS = Client.getConfigSetting('network-config'); - - // set up the client and channel objects for each org - for (const key in ORGS) { - if (key.indexOf('org') === 0) { - const client = new Client(); - - const cryptoSuite = Client.newCryptoSuite(); - // TODO: Fix it up as setCryptoKeyStore is only available for s/w impl - (cryptoSuite as any).setCryptoKeyStore( - Client.newCryptoKeyStore({ - path: getKeyStoreForOrg(ORGS[key].name) - })); - - client.setCryptoSuite(cryptoSuite); - - const channel = client.newChannel(Client.getConfigSetting('channelName')); - channel.addOrderer(newOrderer(client)); - - clients[key] = client; - channels[key] = channel; - - setupPeers(channel, key, client); - - const caUrl = ORGS[key].ca; - caClients[key] = new copService( - caUrl, null /*defautl TLS opts*/, '' /* default CA */, cryptoSuite); - } - } -} - -export async function getRegisteredUsers( - username: string, userOrg: string): Promise { - - const client = getClientForOrg(userOrg); - - const store = await Client.newDefaultKeyValueStore({ - path: getKeyStoreForOrg(getOrgName(userOrg)) - }); - - client.setStateStore(store); - const user = await client.getUserContext(username, true); - - if (user && user.isEnrolled()) { - logger.info('Successfully loaded member from persistence'); - return user; - } - - logger.info('Using admin to enroll this user ..'); - - // get the Admin and use it to enroll the user - const adminUser = await getAdminUser(userOrg); - - const caClient = caClients[userOrg]; - const secret = await caClient.register({ - enrollmentID: username, - affiliation: userOrg + '.department1' - }, adminUser); - - logger.debug(username + ' registered successfully'); - - const message = await caClient.enroll({ - enrollmentID: username, - enrollmentSecret: secret - }); - - if (message && typeof message === 'string' && message.includes( - 'Error:')) { - logger.error(username + ' enrollment failed'); - } - logger.debug(username + ' enrolled successfully'); - - const userOptions: UserOpts = { - username, - mspid: getMspID(userOrg), - cryptoContent: { - privateKeyPEM: message.key.toBytes(), - signedCertPEM: message.certificate - }, - skipPersistence: false - }; - - const member = await client.createUser(userOptions); - return member; -} - -export function getLogger(moduleName: string) { - const moduleLogger = log4js.getLogger(moduleName); - moduleLogger.setLevel('DEBUG'); - return moduleLogger; -} - -export async function getOrgAdmin(userOrg: string): Promise { - const admin = ORGS[userOrg].admin; - const keyPath = path.join(__dirname, admin.key); - const keyPEM = Buffer.from(readAllFiles(keyPath)[0]).toString(); - const certPath = path.join(__dirname, admin.cert); - const certPEM = readAllFiles(certPath)[0].toString(); - - const client = getClientForOrg(userOrg); - const cryptoSuite = Client.newCryptoSuite(); - - if (userOrg) { - (cryptoSuite as any).setCryptoKeyStore( - Client.newCryptoKeyStore({ path: getKeyStoreForOrg(getOrgName(userOrg)) })); - client.setCryptoSuite(cryptoSuite); - } - - const store = await Client.newDefaultKeyValueStore({ - path: getKeyStoreForOrg(getOrgName(userOrg)) - }); - - client.setStateStore(store); - - return client.createUser({ - username: 'peer' + userOrg + 'Admin', - mspid: getMspID(userOrg), - cryptoContent: { - privateKeyPEM: keyPEM, - signedCertPEM: certPEM - }, - skipPersistence: false - }); -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/network-config.json b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/network-config.json deleted file mode 100644 index ff738bb5b..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/lib/network-config.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "network-config": { - "orderer": { - "url": "grpcs://localhost:7050", - "server-hostname": "orderer.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt" - }, - "org1": { - "name": "peerOrg1", - "mspid": "Org1MSP", - "ca": "https://localhost:7054", - "peers": { - "peer1": { - "requests": "grpcs://localhost:7051", - "events": "grpcs://localhost:7053", - "server-hostname": "peer0.org1.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" - }, - "peer2": { - "requests": "grpcs://localhost:7056", - "events": "grpcs://localhost:7058", - "server-hostname": "peer1.org1.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt" - } - }, - "admin": { - "key": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", - "cert": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts" - } - }, - "org2": { - "name": "peerOrg2", - "mspid": "Org2MSP", - "ca": "https://localhost:8054", - "peers": { - "peer1": { - "requests": "grpcs://localhost:8051", - "events": "grpcs://localhost:8053", - "server-hostname": "peer0.org2.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" - }, - "peer2": { - "requests": "grpcs://localhost:8056", - "events": "grpcs://localhost:8058", - "server-hostname": "peer1.org2.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt" - } - }, - "admin": { - "key": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore", - "cert": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts" - } - } - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/package.json b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/package.json deleted file mode 100644 index a94f7e7a8..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "balance-transfer-typescript", - "version": "0.1.0", - "description": "The balance transfer sample written using typescript", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Kapil Sachdeva", - "license": "Apache-2.0", - "devDependencies": { - "@types/body-parser": "^1.16.5", - "@types/bytebuffer": "^5.0.36", - "@types/cors": "^2.8.1", - "@types/express-jwt": "0.0.37", - "@types/express-session": "^1.15.3", - "@types/jsonwebtoken": "^7.2.3", - "@types/log4js": "0.0.33", - "@types/node": "^8.0.33", - "express-bearer-token": "^2.1.0", - "jsonwebtoken": "^8.1.0", - "ts-node": "^7.0.1", - "tslint": "^5.6.0", - "tslint-microsoft-contrib": "^5.0.1", - "typescript": "^2.5.3" - }, - "dependencies": { - "body-parser": "^1.18.2", - "cookie-parser": "^1.4.3", - "cors": "^2.8.4", - "express": "^4.16.1", - "express-jwt": "^5.3.0", - "express-session": "^1.15.6", - "fabric-ca-client": "~1.4.0", - "fabric-client": "~1.4.0", - "log4js": "^0.6.38" - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/runApp.sh b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/runApp.sh deleted file mode 100755 index 3a86224d4..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/runApp.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -function dkcl(){ - CONTAINER_IDS=$(docker ps -aq) - echo - if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" = " " ]; then - echo "========== No containers available for deletion ==========" - else - docker rm -f $CONTAINER_IDS - fi - echo -} - -function dkrm(){ - DOCKER_IMAGE_IDS=$(docker images | grep "dev\|none\|test-vp\|peer[0-9]-" | awk '{print $3}') - echo - if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" = " " ]; then - echo "========== No images available for deletion ===========" - else - docker rmi -f $DOCKER_IMAGE_IDS - fi - echo -} - -function restartNetwork() { - echo - - #teardown the network and clean the containers and intermediate images - docker-compose -f ../artifacts/docker-compose.yaml down - dkcl - dkrm - - #Cleanup the material - rm -rf /tmp/hfc-test-kvs_peerOrg* $HOME/.hfc-key-store/ /tmp/fabric-client-kvs_peerOrg* - - #Start the network - docker-compose -f ../artifacts/docker-compose.yaml up -d - echo -} - -function installNodeModules() { - echo - if [ -d node_modules ]; then - echo "============== node modules installed already =============" - else - echo "============== Installing node modules =============" - npm install - fi - echo -} - -restartNetwork - -installNodeModules - - - -PORT=4000 `npm bin`/ts-node app.ts diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/testAPIs.sh b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/testAPIs.sh deleted file mode 100755 index 8447ad2c1..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/testAPIs.sh +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -jq --version > /dev/null 2>&1 -if [ $? -ne 0 ]; then - echo "Please Install 'jq' https://stedolan.github.io/jq/ to execute this script" - echo - exit 1 -fi -starttime=$(date +%s) - -echo "POST request Enroll on Org1 ..." -echo -ORG1_TOKEN=$(curl -s -X POST \ - http://localhost:4000/users \ - -H "content-type: application/x-www-form-urlencoded" \ - -d 'username=Jim&orgName=org1') -echo $ORG1_TOKEN -ORG1_TOKEN=$(echo $ORG1_TOKEN | jq ".token" | sed "s/\"//g") -echo -echo "ORG1 token is $ORG1_TOKEN" -echo -echo "POST request Enroll on Org2 ..." -echo -ORG2_TOKEN=$(curl -s -X POST \ - http://localhost:4000/users \ - -H "content-type: application/x-www-form-urlencoded" \ - -d 'username=Barry&orgName=org2') -echo $ORG2_TOKEN -ORG2_TOKEN=$(echo $ORG2_TOKEN | jq ".token" | sed "s/\"//g") -echo -echo "ORG2 token is $ORG2_TOKEN" -echo -echo -echo "POST request Create channel ..." -echo -curl -s -X POST \ - http://localhost:4000/channels \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "channelName":"mychannel", - "channelConfigPath":"../artifacts/channel/mychannel.tx" -}' -echo -echo -sleep 5 -echo "POST request Join channel on Org1" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/peers \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer1","peer2"] -}' -echo -echo - -echo "POST request Join channel on Org2" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/peers \ - -H "authorization: Bearer $ORG2_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer1","peer2"] -}' -echo -echo - -echo "POST Install chaincode on Org1" -echo -curl -s -X POST \ - http://localhost:4000/chaincodes \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer1", "peer2"], - "chaincodeName":"mycc", - "chaincodePath":"github.com/example_cc/go", - "chaincodeVersion":"v0" -}' -echo -echo - - -echo "POST Install chaincode on Org2" -echo -curl -s -X POST \ - http://localhost:4000/chaincodes \ - -H "authorization: Bearer $ORG2_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "peers": ["peer1","peer2"], - "chaincodeName":"mycc", - "chaincodePath":"github.com/example_cc/go", - "chaincodeVersion":"v0" -}' -echo -echo - -echo "POST instantiate chaincode on peer1 of Org1" -echo -curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "chaincodeName":"mycc", - "chaincodeVersion":"v0", - "args":["a","100","b","200"] -}' -echo -echo - -echo "POST invoke chaincode on peers of Org1 and Org2" -echo -TRX_ID=$(curl -s -X POST \ - http://localhost:4000/channels/mychannel/chaincodes/mycc \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" \ - -d '{ - "fcn":"move", - "args":["a","b","10"] -}') -echo "Transaction ID is $TRX_ID" -echo -echo - -echo "GET query chaincode on peer1 of Org1" -echo -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/chaincodes/mycc?peer=peer1&fcn=query&args=%5B%22a%22%5D" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Block by blockNumber" -echo -curl -s -X GET \ - "http://localhost:4000/channels/mychannel/blocks/1?peer=peer1" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Transaction by TransactionID" -echo -curl -s -X GET http://localhost:4000/channels/mychannel/transactions/$TRX_ID?peer=peer1 \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query ChainInfo" -echo -curl -s -X GET \ - "http://localhost:4000/channels/mychannel?peer=peer1" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Installed chaincodes" -echo -curl -s -X GET \ - "http://localhost:4000/chaincodes?peer=peer1&type=installed" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Instantiated chaincodes" -echo -curl -s -X GET \ - "http://localhost:4000/chaincodes?peer=peer1&type=instantiated" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "GET query Channels" -echo -curl -s -X GET \ - "http://localhost:4000/channels?peer=peer1" \ - -H "authorization: Bearer $ORG1_TOKEN" \ - -H "content-type: application/json" -echo -echo - -echo "Total execution time : $(($(date +%s)-starttime)) secs ..." diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tsconfig.json b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tsconfig.json deleted file mode 100644 index e8591d6b8..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "removeComments": false, - "preserveConstEnums": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "sourceMap": true, - "declaration": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "suppressImplicitAnyIndexErrors": true, - "moduleResolution": "node", - "module": "commonjs", - "target": "es6", - "outDir": "dist", - "baseUrl": ".", - "typeRoots": ["types", "node_modules/@types"] - }, - "formatCodeOptions": { - "indentSize": 2, - "tabSize": 2 - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tslint.json b/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tslint.json deleted file mode 100644 index 499ac424b..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/typescript/tslint.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "extends": "tslint:recommended", - "rulesDirectory": ["tslint-microsoft-contrib"], - "rules": { - "trailing-comma": [ - false, - { - "multiline": "always", - "singleline": "never" - } - ], - "interface-name": [false, "always-prefix"], - "no-console": [true, "time", "timeEnd", "trace"], - "max-line-length": [true, 100], - "no-string-literal": false, - "no-use-before-declare": true, - "object-literal-sort-keys": false, - "ordered-imports": [false], - "quotemark": [true, "single", "avoid-escape"], - "variable-name": [ - true, - "allow-leading-underscore", - "allow-pascal-case", - "ban-keywords", - "check-format" - ] - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/go/example_cc.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/abac.go similarity index 76% rename from app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/go/example_cc.go rename to app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/abac.go index 06fd76b96..b54367bf6 100644 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/go/example_cc.go +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/abac.go @@ -16,28 +16,41 @@ limitations under the License. package main - import ( "fmt" "strconv" + "github.com/hyperledger/fabric/core/chaincode/shim/ext/cid" "github.com/hyperledger/fabric/core/chaincode/shim" pb "github.com/hyperledger/fabric/protos/peer" ) -var logger = shim.NewLogger("example_cc0") - // SimpleChaincode example simple Chaincode implementation type SimpleChaincode struct { } -func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { - logger.Info("########### example_cc0 Init ###########") +// Init initializes the chaincode +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + + fmt.Println("abac Init") + + // + // Demonstrate the use of Attribute-Based Access Control (ABAC) by checking + // to see if the caller has the "abac.init" attribute with a value of true; + // if not, return an error. + // + err := cid.AssertAttributeValue(stub, "abac.init", "true") + if err != nil { + return shim.Error(err.Error()) + } _, args := stub.GetFunctionAndParameters() var A, B string // Entities var Aval, Bval int // Asset holdings - var err error + + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } // Initialize the chaincode A = args[0] @@ -50,7 +63,7 @@ func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { if err != nil { return shim.Error("Expecting integer value for asset holding") } - logger.Info("Aval = %d, Bval = %d\n", Aval, Bval) + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) // Write the state to the ledger err = stub.PutState(A, []byte(strconv.Itoa(Aval))) @@ -64,43 +77,34 @@ func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { } return shim.Success(nil) - - } -// Transaction makes payment of X units from A to B func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { - logger.Info("########### example_cc0 Invoke ###########") - + fmt.Println("abac Invoke") function, args := stub.GetFunctionAndParameters() - - if function == "delete" { + if function == "invoke" { + // Make payment of X units from A to B + return t.invoke(stub, args) + } else if function == "delete" { // Deletes an entity from its state return t.delete(stub, args) - } - - if function == "query" { - // queries an entity state + } else if function == "query" { + // the old "Query" is now implemtned in invoke return t.query(stub, args) } - if function == "move" { - // Deletes an entity from its state - return t.move(stub, args) - } - logger.Errorf("Unknown action, check the first argument, must be one of 'delete', 'query', or 'move'. But got: %v", args[0]) - return shim.Error(fmt.Sprintf("Unknown action, check the first argument, must be one of 'delete', 'query', or 'move'. But got: %v", args[0])) + return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"delete\" \"query\"") } -func (t *SimpleChaincode) move(stub shim.ChaincodeStubInterface, args []string) pb.Response { - // must be an invoke +// Transaction makes payment of X units from A to B +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { var A, B string // Entities var Aval, Bval int // Asset holdings var X int // Transaction value var err error if len(args) != 3 { - return shim.Error("Incorrect number of arguments. Expecting 4, function followed by 2 names and 1 value") + return shim.Error("Incorrect number of arguments. Expecting 3") } A = args[0] @@ -133,7 +137,7 @@ func (t *SimpleChaincode) move(stub shim.ChaincodeStubInterface, args []string) } Aval = Aval - X Bval = Bval + X - logger.Infof("Aval = %d, Bval = %d\n", Aval, Bval) + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) // Write the state back to the ledger err = stub.PutState(A, []byte(strconv.Itoa(Aval))) @@ -146,7 +150,7 @@ func (t *SimpleChaincode) move(stub shim.ChaincodeStubInterface, args []string) return shim.Error(err.Error()) } - return shim.Success(nil); + return shim.Success(nil) } // Deletes an entity from state @@ -166,9 +170,8 @@ func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string return shim.Success(nil) } -// Query callback representing the query of a chaincode +// query callback representing the query of a chaincode func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { - var A string // Entities var err error @@ -191,13 +194,13 @@ func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) } jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}" - logger.Infof("Query Response:%s\n", jsonResp) + fmt.Printf("Query Response:%s\n", jsonResp) return shim.Success(Avalbytes) } func main() { err := shim.Start(new(SimpleChaincode)) if err != nil { - logger.Errorf("Error starting Simple chaincode: %s", err) + fmt.Printf("Error starting Simple chaincode: %s", err) } } diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/LICENSE b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/LICENSE new file mode 100644 index 000000000..0f646931a --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/LICENSE @@ -0,0 +1,28 @@ +Copyright 2010 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/clone.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/clone.go new file mode 100644 index 000000000..3cd3249f7 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/clone.go @@ -0,0 +1,253 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Protocol buffer deep copy and merge. +// TODO: RawMessage. + +package proto + +import ( + "fmt" + "log" + "reflect" + "strings" +) + +// Clone returns a deep copy of a protocol buffer. +func Clone(src Message) Message { + in := reflect.ValueOf(src) + if in.IsNil() { + return src + } + out := reflect.New(in.Type().Elem()) + dst := out.Interface().(Message) + Merge(dst, src) + return dst +} + +// Merger is the interface representing objects that can merge messages of the same type. +type Merger interface { + // Merge merges src into this message. + // Required and optional fields that are set in src will be set to that value in dst. + // Elements of repeated fields will be appended. + // + // Merge may panic if called with a different argument type than the receiver. + Merge(src Message) +} + +// generatedMerger is the custom merge method that generated protos will have. +// We must add this method since a generate Merge method will conflict with +// many existing protos that have a Merge data field already defined. +type generatedMerger interface { + XXX_Merge(src Message) +} + +// Merge merges src into dst. +// Required and optional fields that are set in src will be set to that value in dst. +// Elements of repeated fields will be appended. +// Merge panics if src and dst are not the same type, or if dst is nil. +func Merge(dst, src Message) { + if m, ok := dst.(Merger); ok { + m.Merge(src) + return + } + + in := reflect.ValueOf(src) + out := reflect.ValueOf(dst) + if out.IsNil() { + panic("proto: nil destination") + } + if in.Type() != out.Type() { + panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) + } + if in.IsNil() { + return // Merge from nil src is a noop + } + if m, ok := dst.(generatedMerger); ok { + m.XXX_Merge(src) + return + } + mergeStruct(out.Elem(), in.Elem()) +} + +func mergeStruct(out, in reflect.Value) { + sprop := GetProperties(in.Type()) + for i := 0; i < in.NumField(); i++ { + f := in.Type().Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) + } + + if emIn, err := extendable(in.Addr().Interface()); err == nil { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } + } + + uf := in.FieldByName("XXX_unrecognized") + if !uf.IsValid() { + return + } + uin := uf.Bytes() + if len(uin) > 0 { + out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...)) + } +} + +// mergeAny performs a merge between two values of the same type. +// viaPtr indicates whether the values were indirected through a pointer (implying proto2). +// prop is set if this is a struct field (it may be nil). +func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { + if in.Type() == protoMessageType { + if !in.IsNil() { + if out.IsNil() { + out.Set(reflect.ValueOf(Clone(in.Interface().(Message)))) + } else { + Merge(out.Interface().(Message), in.Interface().(Message)) + } + } + return + } + switch in.Kind() { + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, + reflect.String, reflect.Uint32, reflect.Uint64: + if !viaPtr && isProto3Zero(in) { + return + } + out.Set(in) + case reflect.Interface: + // Probably a oneof field; copy non-nil values. + if in.IsNil() { + return + } + // Allocate destination if it is not set, or set to a different type. + // Otherwise we will merge as normal. + if out.IsNil() || out.Elem().Type() != in.Elem().Type() { + out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) + } + mergeAny(out.Elem(), in.Elem(), false, nil) + case reflect.Map: + if in.Len() == 0 { + return + } + if out.IsNil() { + out.Set(reflect.MakeMap(in.Type())) + } + // For maps with value types of *T or []byte we need to deep copy each value. + elemKind := in.Type().Elem().Kind() + for _, key := range in.MapKeys() { + var val reflect.Value + switch elemKind { + case reflect.Ptr: + val = reflect.New(in.Type().Elem().Elem()) + mergeAny(val, in.MapIndex(key), false, nil) + case reflect.Slice: + val = in.MapIndex(key) + val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) + default: + val = in.MapIndex(key) + } + out.SetMapIndex(key, val) + } + case reflect.Ptr: + if in.IsNil() { + return + } + if out.IsNil() { + out.Set(reflect.New(in.Elem().Type())) + } + mergeAny(out.Elem(), in.Elem(), true, nil) + case reflect.Slice: + if in.IsNil() { + return + } + if in.Type().Elem().Kind() == reflect.Uint8 { + // []byte is a scalar bytes field, not a repeated field. + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value, and should not + // be merged. + if prop != nil && prop.proto3 && in.Len() == 0 { + return + } + + // Make a deep copy. + // Append to []byte{} instead of []byte(nil) so that we never end up + // with a nil result. + out.SetBytes(append([]byte{}, in.Bytes()...)) + return + } + n := in.Len() + if out.IsNil() { + out.Set(reflect.MakeSlice(in.Type(), 0, n)) + } + switch in.Type().Elem().Kind() { + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, + reflect.String, reflect.Uint32, reflect.Uint64: + out.Set(reflect.AppendSlice(out, in)) + default: + for i := 0; i < n; i++ { + x := reflect.Indirect(reflect.New(in.Type().Elem())) + mergeAny(x, in.Index(i), false, nil) + out.Set(reflect.Append(out, x)) + } + } + case reflect.Struct: + mergeStruct(out, in) + default: + // unknown type, so not a protocol buffer + log.Printf("proto: don't know how to copy %v", in) + } +} + +func mergeExtension(out, in map[int32]Extension) { + for extNum, eIn := range in { + eOut := Extension{desc: eIn.desc} + if eIn.value != nil { + v := reflect.New(reflect.TypeOf(eIn.value)).Elem() + mergeAny(v, reflect.ValueOf(eIn.value), false, nil) + eOut.value = v.Interface() + } + if eIn.enc != nil { + eOut.enc = make([]byte, len(eIn.enc)) + copy(eOut.enc, eIn.enc) + } + + out[extNum] = eOut + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/decode.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/decode.go new file mode 100644 index 000000000..63b0f08be --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/decode.go @@ -0,0 +1,427 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for decoding protocol buffer data to construct in-memory representations. + */ + +import ( + "errors" + "fmt" + "io" +) + +// errOverflow is returned when an integer is too large to be represented. +var errOverflow = errors.New("proto: integer overflow") + +// ErrInternalBadWireType is returned by generated code when an incorrect +// wire type is encountered. It does not get returned to user code. +var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") + +// DecodeVarint reads a varint-encoded integer from the slice. +// It returns the integer and the number of bytes consumed, or +// zero if there is not enough. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func DecodeVarint(buf []byte) (x uint64, n int) { + for shift := uint(0); shift < 64; shift += 7 { + if n >= len(buf) { + return 0, 0 + } + b := uint64(buf[n]) + n++ + x |= (b & 0x7F) << shift + if (b & 0x80) == 0 { + return x, n + } + } + + // The number is too large to represent in a 64-bit value. + return 0, 0 +} + +func (p *Buffer) decodeVarintSlow() (x uint64, err error) { + i := p.index + l := len(p.buf) + + for shift := uint(0); shift < 64; shift += 7 { + if i >= l { + err = io.ErrUnexpectedEOF + return + } + b := p.buf[i] + i++ + x |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + p.index = i + return + } + } + + // The number is too large to represent in a 64-bit value. + err = errOverflow + return +} + +// DecodeVarint reads a varint-encoded integer from the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) DecodeVarint() (x uint64, err error) { + i := p.index + buf := p.buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + p.index++ + return uint64(buf[i]), nil + } else if len(buf)-i < 10 { + return p.decodeVarintSlow() + } + + var b uint64 + // we already checked the first byte + x = uint64(buf[i]) - 0x80 + i++ + + b = uint64(buf[i]) + i++ + x += b << 7 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 7 + + b = uint64(buf[i]) + i++ + x += b << 14 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 14 + + b = uint64(buf[i]) + i++ + x += b << 21 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 21 + + b = uint64(buf[i]) + i++ + x += b << 28 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 28 + + b = uint64(buf[i]) + i++ + x += b << 35 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 35 + + b = uint64(buf[i]) + i++ + x += b << 42 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 42 + + b = uint64(buf[i]) + i++ + x += b << 49 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 49 + + b = uint64(buf[i]) + i++ + x += b << 56 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 56 + + b = uint64(buf[i]) + i++ + x += b << 63 + if b&0x80 == 0 { + goto done + } + + return 0, errOverflow + +done: + p.index = i + return x, nil +} + +// DecodeFixed64 reads a 64-bit integer from the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) DecodeFixed64() (x uint64, err error) { + // x, err already 0 + i := p.index + 8 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-8]) + x |= uint64(p.buf[i-7]) << 8 + x |= uint64(p.buf[i-6]) << 16 + x |= uint64(p.buf[i-5]) << 24 + x |= uint64(p.buf[i-4]) << 32 + x |= uint64(p.buf[i-3]) << 40 + x |= uint64(p.buf[i-2]) << 48 + x |= uint64(p.buf[i-1]) << 56 + return +} + +// DecodeFixed32 reads a 32-bit integer from the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) DecodeFixed32() (x uint64, err error) { + // x, err already 0 + i := p.index + 4 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-4]) + x |= uint64(p.buf[i-3]) << 8 + x |= uint64(p.buf[i-2]) << 16 + x |= uint64(p.buf[i-1]) << 24 + return +} + +// DecodeZigzag64 reads a zigzag-encoded 64-bit integer +// from the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) DecodeZigzag64() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) + return +} + +// DecodeZigzag32 reads a zigzag-encoded 32-bit integer +// from the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) DecodeZigzag32() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) + return +} + +// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { + n, err := p.DecodeVarint() + if err != nil { + return nil, err + } + + nb := int(n) + if nb < 0 { + return nil, fmt.Errorf("proto: bad byte length %d", nb) + } + end := p.index + nb + if end < p.index || end > len(p.buf) { + return nil, io.ErrUnexpectedEOF + } + + if !alloc { + // todo: check if can get more uses of alloc=false + buf = p.buf[p.index:end] + p.index += nb + return + } + + buf = make([]byte, nb) + copy(buf, p.buf[p.index:]) + p.index += nb + return +} + +// DecodeStringBytes reads an encoded string from the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) DecodeStringBytes() (s string, err error) { + buf, err := p.DecodeRawBytes(false) + if err != nil { + return + } + return string(buf), nil +} + +// Unmarshaler is the interface representing objects that can +// unmarshal themselves. The argument points to data that may be +// overwritten, so implementations should not keep references to the +// buffer. +// Unmarshal implementations should not clear the receiver. +// Any unmarshaled data should be merged into the receiver. +// Callers of Unmarshal that do not want to retain existing data +// should Reset the receiver before calling Unmarshal. +type Unmarshaler interface { + Unmarshal([]byte) error +} + +// newUnmarshaler is the interface representing objects that can +// unmarshal themselves. The semantics are identical to Unmarshaler. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newUnmarshaler interface { + XXX_Unmarshal([]byte) error +} + +// Unmarshal parses the protocol buffer representation in buf and places the +// decoded result in pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// Unmarshal resets pb before starting to unmarshal, so any +// existing data in pb is always removed. Use UnmarshalMerge +// to preserve and append to existing data. +func Unmarshal(buf []byte, pb Message) error { + pb.Reset() + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } + if u, ok := pb.(Unmarshaler); ok { + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) +} + +// UnmarshalMerge parses the protocol buffer representation in buf and +// writes the decoded result to pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// UnmarshalMerge merges into existing data in pb. +// Most code should use Unmarshal instead. +func UnmarshalMerge(buf []byte, pb Message) error { + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } + if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) +} + +// DecodeMessage reads a count-delimited message from the Buffer. +func (p *Buffer) DecodeMessage(pb Message) error { + enc, err := p.DecodeRawBytes(false) + if err != nil { + return err + } + return NewBuffer(enc).Unmarshal(pb) +} + +// DecodeGroup reads a tag-delimited group from the Buffer. +// StartGroup tag is already consumed. This function consumes +// EndGroup tag. +func (p *Buffer) DecodeGroup(pb Message) error { + b := p.buf[p.index:] + x, y := findEndGroup(b) + if x < 0 { + return io.ErrUnexpectedEOF + } + err := Unmarshal(b[:x], pb) + p.index += y + return err +} + +// Unmarshal parses the protocol buffer representation in the +// Buffer and places the decoded result in pb. If the struct +// underlying pb does not match the data in the buffer, the results can be +// unpredictable. +// +// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. +func (p *Buffer) Unmarshal(pb Message) error { + // If the object can unmarshal itself, let it. + if u, ok := pb.(newUnmarshaler); ok { + err := u.XXX_Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) + return err + } + if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 + err := u.Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) + return err + } + + // Slow workaround for messages that aren't Unmarshalers. + // This includes some hand-coded .pb.go files and + // bootstrap protos. + // TODO: fix all of those and then add Unmarshal to + // the Message interface. Then: + // The cast above and code below can be deleted. + // The old unmarshaler can be deleted. + // Clients can call Unmarshal directly (can already do that, actually). + var info InternalMessageInfo + err := info.Unmarshal(pb, p.buf[p.index:]) + p.index = len(p.buf) + return err +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/deprecated.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/deprecated.go new file mode 100644 index 000000000..69de0ea0e --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/deprecated.go @@ -0,0 +1,38 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2018 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Deprecated: do not use. +type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 } + +// Deprecated: do not use. +func GetStats() Stats { return Stats{} } diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/discard.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/discard.go new file mode 100644 index 000000000..dea2617ce --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/discard.go @@ -0,0 +1,350 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2017 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +type generatedDiscarder interface { + XXX_DiscardUnknown() +} + +// DiscardUnknown recursively discards all unknown fields from this message +// and all embedded messages. +// +// When unmarshaling a message with unrecognized fields, the tags and values +// of such fields are preserved in the Message. This allows a later call to +// marshal to be able to produce a message that continues to have those +// unrecognized fields. To avoid this, DiscardUnknown is used to +// explicitly clear the unknown fields after unmarshaling. +// +// For proto2 messages, the unknown fields of message extensions are only +// discarded from messages that have been accessed via GetExtension. +func DiscardUnknown(m Message) { + if m, ok := m.(generatedDiscarder); ok { + m.XXX_DiscardUnknown() + return + } + // TODO: Dynamically populate a InternalMessageInfo for legacy messages, + // but the master branch has no implementation for InternalMessageInfo, + // so it would be more work to replicate that approach. + discardLegacy(m) +} + +// DiscardUnknown recursively discards all unknown fields. +func (a *InternalMessageInfo) DiscardUnknown(m Message) { + di := atomicLoadDiscardInfo(&a.discard) + if di == nil { + di = getDiscardInfo(reflect.TypeOf(m).Elem()) + atomicStoreDiscardInfo(&a.discard, di) + } + di.discard(toPointer(&m)) +} + +type discardInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []discardFieldInfo + unrecognized field +} + +type discardFieldInfo struct { + field field // Offset of field, guaranteed to be valid + discard func(src pointer) +} + +var ( + discardInfoMap = map[reflect.Type]*discardInfo{} + discardInfoLock sync.Mutex +) + +func getDiscardInfo(t reflect.Type) *discardInfo { + discardInfoLock.Lock() + defer discardInfoLock.Unlock() + di := discardInfoMap[t] + if di == nil { + di = &discardInfo{typ: t} + discardInfoMap[t] = di + } + return di +} + +func (di *discardInfo) discard(src pointer) { + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&di.initialized) == 0 { + di.computeDiscardInfo() + } + + for _, fi := range di.fields { + sfp := src.offset(fi.field) + fi.discard(sfp) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { + // Ignore lock since DiscardUnknown is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + DiscardUnknown(m) + } + } + } + + if di.unrecognized.IsValid() { + *src.offset(di.unrecognized).toBytes() = nil + } +} + +func (di *discardInfo) computeDiscardInfo() { + di.lock.Lock() + defer di.lock.Unlock() + if di.initialized != 0 { + return + } + t := di.typ + n := t.NumField() + + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + dfi := discardFieldInfo{field: toField(&f)} + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) + case isSlice: // E.g., []*pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sps := src.getPointerSlice() + for _, sp := range sps { + if !sp.isNil() { + di.discard(sp) + } + } + } + default: // E.g., *pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sp := src.getPointer() + if !sp.isNil() { + di.discard(sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) + default: // E.g., map[K]V + if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) + dfi.discard = func(src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + DiscardUnknown(val.Interface().(Message)) + } + } + } else { + dfi.discard = func(pointer) {} // Noop + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) + default: // E.g., interface{} + // TODO: Make this faster? + dfi.discard = func(src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + DiscardUnknown(sv.Interface().(Message)) + } + } + } + } + default: + continue + } + di.fields = append(di.fields, dfi) + } + + di.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + di.unrecognized = toField(&f) + } + + atomic.StoreInt32(&di.initialized, 1) +} + +func discardLegacy(m Message) { + v := reflect.ValueOf(m) + if v.Kind() != reflect.Ptr || v.IsNil() { + return + } + v = v.Elem() + if v.Kind() != reflect.Struct { + return + } + t := v.Type() + + for i := 0; i < v.NumField(); i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + vf := v.Field(i) + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) + case isSlice: // E.g., []*pb.T + for j := 0; j < vf.Len(); j++ { + discardLegacy(vf.Index(j).Interface().(Message)) + } + default: // E.g., *pb.T + discardLegacy(vf.Interface().(Message)) + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) + default: // E.g., map[K]V + tv := vf.Type().Elem() + if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) + for _, key := range vf.MapKeys() { + val := vf.MapIndex(key) + discardLegacy(val.Interface().(Message)) + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) + default: // E.g., test_proto.isCommunique_Union interface + if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { + vf = vf.Elem() // E.g., *test_proto.Communique_Msg + if !vf.IsNil() { + vf = vf.Elem() // E.g., test_proto.Communique_Msg + vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value + if vf.Kind() == reflect.Ptr { + discardLegacy(vf.Interface().(Message)) + } + } + } + } + } + } + + if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { + if vf.Type() != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + vf.Set(reflect.ValueOf([]byte(nil))) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(m); err == nil { + // Ignore lock since discardLegacy is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + discardLegacy(m) + } + } + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/encode.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/encode.go new file mode 100644 index 000000000..3abfed2cf --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/encode.go @@ -0,0 +1,203 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for encoding data into the wire format for protocol buffers. + */ + +import ( + "errors" + "reflect" +) + +var ( + // errRepeatedHasNil is the error returned if Marshal is called with + // a struct with a repeated field containing a nil element. + errRepeatedHasNil = errors.New("proto: repeated field has nil element") + + // errOneofHasNil is the error returned if Marshal is called with + // a struct with a oneof field containing a nil element. + errOneofHasNil = errors.New("proto: oneof field has nil value") + + // ErrNil is the error returned if Marshal is called with nil. + ErrNil = errors.New("proto: Marshal called with nil") + + // ErrTooLarge is the error returned if Marshal is called with a + // message that encodes to >2GB. + ErrTooLarge = errors.New("proto: message encodes to over 2 GB") +) + +// The fundamental encoders that put bytes on the wire. +// Those that take integer types all accept uint64 and are +// therefore of type valueEncoder. + +const maxVarintBytes = 10 // maximum length of a varint + +// EncodeVarint returns the varint encoding of x. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +// Not used by the package itself, but helpful to clients +// wishing to use the same encoding. +func EncodeVarint(x uint64) []byte { + var buf [maxVarintBytes]byte + var n int + for n = 0; x > 127; n++ { + buf[n] = 0x80 | uint8(x&0x7F) + x >>= 7 + } + buf[n] = uint8(x) + n++ + return buf[0:n] +} + +// EncodeVarint writes a varint-encoded integer to the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) EncodeVarint(x uint64) error { + for x >= 1<<7 { + p.buf = append(p.buf, uint8(x&0x7f|0x80)) + x >>= 7 + } + p.buf = append(p.buf, uint8(x)) + return nil +} + +// SizeVarint returns the varint encoding size of an integer. +func SizeVarint(x uint64) int { + switch { + case x < 1<<7: + return 1 + case x < 1<<14: + return 2 + case x < 1<<21: + return 3 + case x < 1<<28: + return 4 + case x < 1<<35: + return 5 + case x < 1<<42: + return 6 + case x < 1<<49: + return 7 + case x < 1<<56: + return 8 + case x < 1<<63: + return 9 + } + return 10 +} + +// EncodeFixed64 writes a 64-bit integer to the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) EncodeFixed64(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24), + uint8(x>>32), + uint8(x>>40), + uint8(x>>48), + uint8(x>>56)) + return nil +} + +// EncodeFixed32 writes a 32-bit integer to the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) EncodeFixed32(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24)) + return nil +} + +// EncodeZigzag64 writes a zigzag-encoded 64-bit integer +// to the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) EncodeZigzag64(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +// EncodeZigzag32 writes a zigzag-encoded 32-bit integer +// to the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) EncodeZigzag32(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) +} + +// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) EncodeRawBytes(b []byte) error { + p.EncodeVarint(uint64(len(b))) + p.buf = append(p.buf, b...) + return nil +} + +// EncodeStringBytes writes an encoded string to the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) EncodeStringBytes(s string) error { + p.EncodeVarint(uint64(len(s))) + p.buf = append(p.buf, s...) + return nil +} + +// Marshaler is the interface representing objects that can marshal themselves. +type Marshaler interface { + Marshal() ([]byte, error) +} + +// EncodeMessage writes the protocol buffer to the Buffer, +// prefixed by a varint-encoded length. +func (p *Buffer) EncodeMessage(pb Message) error { + siz := Size(pb) + p.EncodeVarint(uint64(siz)) + return p.Marshal(pb) +} + +// All protocol buffer fields are nillable, but be careful. +func isNil(v reflect.Value) bool { + switch v.Kind() { + case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return v.IsNil() + } + return false +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/equal.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/equal.go new file mode 100644 index 000000000..d4db5a1c1 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/equal.go @@ -0,0 +1,300 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Protocol buffer comparison. + +package proto + +import ( + "bytes" + "log" + "reflect" + "strings" +) + +/* +Equal returns true iff protocol buffers a and b are equal. +The arguments must both be pointers to protocol buffer structs. + +Equality is defined in this way: + - Two messages are equal iff they are the same type, + corresponding fields are equal, unknown field sets + are equal, and extensions sets are equal. + - Two set scalar fields are equal iff their values are equal. + If the fields are of a floating-point type, remember that + NaN != x for all x, including NaN. If the message is defined + in a proto3 .proto file, fields are not "set"; specifically, + zero length proto3 "bytes" fields are equal (nil == {}). + - Two repeated fields are equal iff their lengths are the same, + and their corresponding elements are equal. Note a "bytes" field, + although represented by []byte, is not a repeated field and the + rule for the scalar fields described above applies. + - Two unset fields are equal. + - Two unknown field sets are equal if their current + encoded state is equal. + - Two extension sets are equal iff they have corresponding + elements that are pairwise equal. + - Two map fields are equal iff their lengths are the same, + and they contain the same set of elements. Zero-length map + fields are equal. + - Every other combination of things are not equal. + +The return value is undefined if a and b are not protocol buffers. +*/ +func Equal(a, b Message) bool { + if a == nil || b == nil { + return a == b + } + v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) + if v1.Type() != v2.Type() { + return false + } + if v1.Kind() == reflect.Ptr { + if v1.IsNil() { + return v2.IsNil() + } + if v2.IsNil() { + return false + } + v1, v2 = v1.Elem(), v2.Elem() + } + if v1.Kind() != reflect.Struct { + return false + } + return equalStruct(v1, v2) +} + +// v1 and v2 are known to have the same type. +func equalStruct(v1, v2 reflect.Value) bool { + sprop := GetProperties(v1.Type()) + for i := 0; i < v1.NumField(); i++ { + f := v1.Type().Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + f1, f2 := v1.Field(i), v2.Field(i) + if f.Type.Kind() == reflect.Ptr { + if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { + // both unset + continue + } else if n1 != n2 { + // set/unset mismatch + return false + } + f1, f2 = f1.Elem(), f2.Elem() + } + if !equalAny(f1, f2, sprop.Prop[i]) { + return false + } + } + + if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_InternalExtensions") + if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { + return false + } + } + + if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_extensions") + if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { + return false + } + } + + uf := v1.FieldByName("XXX_unrecognized") + if !uf.IsValid() { + return true + } + + u1 := uf.Bytes() + u2 := v2.FieldByName("XXX_unrecognized").Bytes() + return bytes.Equal(u1, u2) +} + +// v1 and v2 are known to have the same type. +// prop may be nil. +func equalAny(v1, v2 reflect.Value, prop *Properties) bool { + if v1.Type() == protoMessageType { + m1, _ := v1.Interface().(Message) + m2, _ := v2.Interface().(Message) + return Equal(m1, m2) + } + switch v1.Kind() { + case reflect.Bool: + return v1.Bool() == v2.Bool() + case reflect.Float32, reflect.Float64: + return v1.Float() == v2.Float() + case reflect.Int32, reflect.Int64: + return v1.Int() == v2.Int() + case reflect.Interface: + // Probably a oneof field; compare the inner values. + n1, n2 := v1.IsNil(), v2.IsNil() + if n1 || n2 { + return n1 == n2 + } + e1, e2 := v1.Elem(), v2.Elem() + if e1.Type() != e2.Type() { + return false + } + return equalAny(e1, e2, nil) + case reflect.Map: + if v1.Len() != v2.Len() { + return false + } + for _, key := range v1.MapKeys() { + val2 := v2.MapIndex(key) + if !val2.IsValid() { + // This key was not found in the second map. + return false + } + if !equalAny(v1.MapIndex(key), val2, nil) { + return false + } + } + return true + case reflect.Ptr: + // Maps may have nil values in them, so check for nil. + if v1.IsNil() && v2.IsNil() { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return equalAny(v1.Elem(), v2.Elem(), prop) + case reflect.Slice: + if v1.Type().Elem().Kind() == reflect.Uint8 { + // short circuit: []byte + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value. + if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) + } + + if v1.Len() != v2.Len() { + return false + } + for i := 0; i < v1.Len(); i++ { + if !equalAny(v1.Index(i), v2.Index(i), prop) { + return false + } + } + return true + case reflect.String: + return v1.Interface().(string) == v2.Interface().(string) + case reflect.Struct: + return equalStruct(v1, v2) + case reflect.Uint32, reflect.Uint64: + return v1.Uint() == v2.Uint() + } + + // unknown type, so not a protocol buffer + log.Printf("proto: don't know how to compare %v", v1) + return false +} + +// base is the struct type that the extensions are based on. +// x1 and x2 are InternalExtensions. +func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { + em1, _ := x1.extensionsRead() + em2, _ := x2.extensionsRead() + return equalExtMap(base, em1, em2) +} + +func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { + if len(em1) != len(em2) { + return false + } + + for extNum, e1 := range em1 { + e2, ok := em2[extNum] + if !ok { + return false + } + + m1, m2 := e1.value, e2.value + + if m1 == nil && m2 == nil { + // Both have only encoded form. + if bytes.Equal(e1.enc, e2.enc) { + continue + } + // The bytes are different, but the extensions might still be + // equal. We need to decode them to compare. + } + + if m1 != nil && m2 != nil { + // Both are unencoded. + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + continue + } + + // At least one is encoded. To do a semantically correct comparison + // we need to unmarshal them first. + var desc *ExtensionDesc + if m := extensionMaps[base]; m != nil { + desc = m[extNum] + } + if desc == nil { + // If both have only encoded form and the bytes are the same, + // it is handled above. We get here when the bytes are different. + // We don't know how to decode it, so just compare them as byte + // slices. + log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) + return false + } + var err error + if m1 == nil { + m1, err = decodeExtension(e1.enc, desc) + } + if m2 == nil && err == nil { + m2, err = decodeExtension(e2.enc, desc) + } + if err != nil { + // The encoded form is invalid. + log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) + return false + } + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + } + + return true +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/extensions.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/extensions.go new file mode 100644 index 000000000..dacdd22d2 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/extensions.go @@ -0,0 +1,543 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Types and routines for supporting protocol buffer extensions. + */ + +import ( + "errors" + "fmt" + "io" + "reflect" + "strconv" + "sync" +) + +// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. +var ErrMissingExtension = errors.New("proto: missing extension") + +// ExtensionRange represents a range of message extensions for a protocol buffer. +// Used in code generated by the protocol compiler. +type ExtensionRange struct { + Start, End int32 // both inclusive +} + +// extendableProto is an interface implemented by any protocol buffer generated by the current +// proto compiler that may be extended. +type extendableProto interface { + Message + ExtensionRangeArray() []ExtensionRange + extensionsWrite() map[int32]Extension + extensionsRead() (map[int32]Extension, sync.Locker) +} + +// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous +// version of the proto compiler that may be extended. +type extendableProtoV1 interface { + Message + ExtensionRangeArray() []ExtensionRange + ExtensionMap() map[int32]Extension +} + +// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. +type extensionAdapter struct { + extendableProtoV1 +} + +func (e extensionAdapter) extensionsWrite() map[int32]Extension { + return e.ExtensionMap() +} + +func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { + return e.ExtensionMap(), notLocker{} +} + +// notLocker is a sync.Locker whose Lock and Unlock methods are nops. +type notLocker struct{} + +func (n notLocker) Lock() {} +func (n notLocker) Unlock() {} + +// extendable returns the extendableProto interface for the given generated proto message. +// If the proto message has the old extension format, it returns a wrapper that implements +// the extendableProto interface. +func extendable(p interface{}) (extendableProto, error) { + switch p := p.(type) { + case extendableProto: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return p, nil + case extendableProtoV1: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return extensionAdapter{p}, nil + } + // Don't allocate a specific error containing %T: + // this is the hot path for Clone and MarshalText. + return nil, errNotExtendable +} + +var errNotExtendable = errors.New("proto: not an extendable proto.Message") + +func isNilPtr(x interface{}) bool { + v := reflect.ValueOf(x) + return v.Kind() == reflect.Ptr && v.IsNil() +} + +// XXX_InternalExtensions is an internal representation of proto extensions. +// +// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, +// thus gaining the unexported 'extensions' method, which can be called only from the proto package. +// +// The methods of XXX_InternalExtensions are not concurrency safe in general, +// but calls to logically read-only methods such as has and get may be executed concurrently. +type XXX_InternalExtensions struct { + // The struct must be indirect so that if a user inadvertently copies a + // generated message and its embedded XXX_InternalExtensions, they + // avoid the mayhem of a copied mutex. + // + // The mutex serializes all logically read-only operations to p.extensionMap. + // It is up to the client to ensure that write operations to p.extensionMap are + // mutually exclusive with other accesses. + p *struct { + mu sync.Mutex + extensionMap map[int32]Extension + } +} + +// extensionsWrite returns the extension map, creating it on first use. +func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { + if e.p == nil { + e.p = new(struct { + mu sync.Mutex + extensionMap map[int32]Extension + }) + e.p.extensionMap = make(map[int32]Extension) + } + return e.p.extensionMap +} + +// extensionsRead returns the extensions map for read-only use. It may be nil. +// The caller must hold the returned mutex's lock when accessing Elements within the map. +func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { + if e.p == nil { + return nil, nil + } + return e.p.extensionMap, &e.p.mu +} + +// ExtensionDesc represents an extension specification. +// Used in generated code from the protocol compiler. +type ExtensionDesc struct { + ExtendedType Message // nil pointer to the type that is being extended + ExtensionType interface{} // nil pointer to the extension type + Field int32 // field number + Name string // fully-qualified name of extension, for text formatting + Tag string // protobuf tag style + Filename string // name of the file in which the extension is defined +} + +func (ed *ExtensionDesc) repeated() bool { + t := reflect.TypeOf(ed.ExtensionType) + return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 +} + +// Extension represents an extension in a message. +type Extension struct { + // When an extension is stored in a message using SetExtension + // only desc and value are set. When the message is marshaled + // enc will be set to the encoded form of the message. + // + // When a message is unmarshaled and contains extensions, each + // extension will have only enc set. When such an extension is + // accessed using GetExtension (or GetExtensions) desc and value + // will be set. + desc *ExtensionDesc + value interface{} + enc []byte +} + +// SetRawExtension is for testing only. +func SetRawExtension(base Message, id int32, b []byte) { + epb, err := extendable(base) + if err != nil { + return + } + extmap := epb.extensionsWrite() + extmap[id] = Extension{enc: b} +} + +// isExtensionField returns true iff the given field number is in an extension range. +func isExtensionField(pb extendableProto, field int32) bool { + for _, er := range pb.ExtensionRangeArray() { + if er.Start <= field && field <= er.End { + return true + } + } + return false +} + +// checkExtensionTypes checks that the given extension is valid for pb. +func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { + var pbi interface{} = pb + // Check the extended type. + if ea, ok := pbi.(extensionAdapter); ok { + pbi = ea.extendableProtoV1 + } + if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { + return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) + } + // Check the range. + if !isExtensionField(pb, extension.Field) { + return errors.New("proto: bad extension number; not in declared ranges") + } + return nil +} + +// extPropKey is sufficient to uniquely identify an extension. +type extPropKey struct { + base reflect.Type + field int32 +} + +var extProp = struct { + sync.RWMutex + m map[extPropKey]*Properties +}{ + m: make(map[extPropKey]*Properties), +} + +func extensionProperties(ed *ExtensionDesc) *Properties { + key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} + + extProp.RLock() + if prop, ok := extProp.m[key]; ok { + extProp.RUnlock() + return prop + } + extProp.RUnlock() + + extProp.Lock() + defer extProp.Unlock() + // Check again. + if prop, ok := extProp.m[key]; ok { + return prop + } + + prop := new(Properties) + prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) + extProp.m[key] = prop + return prop +} + +// HasExtension returns whether the given extension is present in pb. +func HasExtension(pb Message, extension *ExtensionDesc) bool { + // TODO: Check types, field numbers, etc.? + epb, err := extendable(pb) + if err != nil { + return false + } + extmap, mu := epb.extensionsRead() + if extmap == nil { + return false + } + mu.Lock() + _, ok := extmap[extension.Field] + mu.Unlock() + return ok +} + +// ClearExtension removes the given extension from pb. +func ClearExtension(pb Message, extension *ExtensionDesc) { + epb, err := extendable(pb) + if err != nil { + return + } + // TODO: Check types, field numbers, etc.? + extmap := epb.extensionsWrite() + delete(extmap, extension.Field) +} + +// GetExtension retrieves a proto2 extended field from pb. +// +// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), +// then GetExtension parses the encoded field and returns a Go value of the specified type. +// If the field is not present, then the default value is returned (if one is specified), +// otherwise ErrMissingExtension is reported. +// +// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), +// then GetExtension returns the raw encoded bytes of the field extension. +func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + + if extension.ExtendedType != nil { + // can only check type if this is a complete descriptor + if err := checkExtensionTypes(epb, extension); err != nil { + return nil, err + } + } + + emap, mu := epb.extensionsRead() + if emap == nil { + return defaultExtensionValue(extension) + } + mu.Lock() + defer mu.Unlock() + e, ok := emap[extension.Field] + if !ok { + // defaultExtensionValue returns the default value or + // ErrMissingExtension if there is no default. + return defaultExtensionValue(extension) + } + + if e.value != nil { + // Already decoded. Check the descriptor, though. + if e.desc != extension { + // This shouldn't happen. If it does, it means that + // GetExtension was called twice with two different + // descriptors with the same field number. + return nil, errors.New("proto: descriptor conflict") + } + return e.value, nil + } + + if extension.ExtensionType == nil { + // incomplete descriptor + return e.enc, nil + } + + v, err := decodeExtension(e.enc, extension) + if err != nil { + return nil, err + } + + // Remember the decoded version and drop the encoded version. + // That way it is safe to mutate what we return. + e.value = v + e.desc = extension + e.enc = nil + emap[extension.Field] = e + return e.value, nil +} + +// defaultExtensionValue returns the default value for extension. +// If no default for an extension is defined ErrMissingExtension is returned. +func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { + if extension.ExtensionType == nil { + // incomplete descriptor, so no default + return nil, ErrMissingExtension + } + + t := reflect.TypeOf(extension.ExtensionType) + props := extensionProperties(extension) + + sf, _, err := fieldDefault(t, props) + if err != nil { + return nil, err + } + + if sf == nil || sf.value == nil { + // There is no default value. + return nil, ErrMissingExtension + } + + if t.Kind() != reflect.Ptr { + // We do not need to return a Ptr, we can directly return sf.value. + return sf.value, nil + } + + // We need to return an interface{} that is a pointer to sf.value. + value := reflect.New(t).Elem() + value.Set(reflect.New(value.Type().Elem())) + if sf.kind == reflect.Int32 { + // We may have an int32 or an enum, but the underlying data is int32. + // Since we can't set an int32 into a non int32 reflect.value directly + // set it as a int32. + value.Elem().SetInt(int64(sf.value.(int32))) + } else { + value.Elem().Set(reflect.ValueOf(sf.value)) + } + return value.Interface(), nil +} + +// decodeExtension decodes an extension encoded in b. +func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { + t := reflect.TypeOf(extension.ExtensionType) + unmarshal := typeUnmarshaler(t, extension.Tag) + + // t is a pointer to a struct, pointer to basic type or a slice. + // Allocate space to store the pointer/slice. + value := reflect.New(t).Elem() + + var err error + for { + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + wire := int(x) & 7 + + b, err = unmarshal(b, valToPointer(value.Addr()), wire) + if err != nil { + return nil, err + } + + if len(b) == 0 { + break + } + } + return value.Interface(), nil +} + +// GetExtensions returns a slice of the extensions present in pb that are also listed in es. +// The returned slice has the same length as es; missing extensions will appear as nil elements. +func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + extensions = make([]interface{}, len(es)) + for i, e := range es { + extensions[i], err = GetExtension(epb, e) + if err == ErrMissingExtension { + err = nil + } + if err != nil { + return + } + } + return +} + +// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. +// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing +// just the Field field, which defines the extension's field number. +func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + registeredExtensions := RegisteredExtensions(pb) + + emap, mu := epb.extensionsRead() + if emap == nil { + return nil, nil + } + mu.Lock() + defer mu.Unlock() + extensions := make([]*ExtensionDesc, 0, len(emap)) + for extid, e := range emap { + desc := e.desc + if desc == nil { + desc = registeredExtensions[extid] + if desc == nil { + desc = &ExtensionDesc{Field: extid} + } + } + + extensions = append(extensions, desc) + } + return extensions, nil +} + +// SetExtension sets the specified extension of pb to the specified value. +func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { + epb, err := extendable(pb) + if err != nil { + return err + } + if err := checkExtensionTypes(epb, extension); err != nil { + return err + } + typ := reflect.TypeOf(extension.ExtensionType) + if typ != reflect.TypeOf(value) { + return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType) + } + // nil extension values need to be caught early, because the + // encoder can't distinguish an ErrNil due to a nil extension + // from an ErrNil due to a missing field. Extensions are + // always optional, so the encoder would just swallow the error + // and drop all the extensions from the encoded message. + if reflect.ValueOf(value).IsNil() { + return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) + } + + extmap := epb.extensionsWrite() + extmap[extension.Field] = Extension{desc: extension, value: value} + return nil +} + +// ClearAllExtensions clears all extensions from pb. +func ClearAllExtensions(pb Message) { + epb, err := extendable(pb) + if err != nil { + return + } + m := epb.extensionsWrite() + for k := range m { + delete(m, k) + } +} + +// A global registry of extensions. +// The generated code will register the generated descriptors by calling RegisterExtension. + +var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) + +// RegisterExtension is called from the generated code. +func RegisterExtension(desc *ExtensionDesc) { + st := reflect.TypeOf(desc.ExtendedType).Elem() + m := extensionMaps[st] + if m == nil { + m = make(map[int32]*ExtensionDesc) + extensionMaps[st] = m + } + if _, ok := m[desc.Field]; ok { + panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) + } + m[desc.Field] = desc +} + +// RegisteredExtensions returns a map of the registered extensions of a +// protocol buffer struct, indexed by the extension number. +// The argument pb should be a nil pointer to the struct type. +func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { + return extensionMaps[reflect.TypeOf(pb).Elem()] +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/lib.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/lib.go new file mode 100644 index 000000000..c076dbdb9 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/lib.go @@ -0,0 +1,959 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package proto converts data structures to and from the wire format of +protocol buffers. It works in concert with the Go source code generated +for .proto files by the protocol compiler. + +A summary of the properties of the protocol buffer interface +for a protocol buffer variable v: + + - Names are turned from camel_case to CamelCase for export. + - There are no methods on v to set fields; just treat + them as structure fields. + - There are getters that return a field's value if set, + and return the field's default value if unset. + The getters work even if the receiver is a nil message. + - The zero value for a struct is its correct initialization state. + All desired fields must be set before marshaling. + - A Reset() method will restore a protobuf struct to its zero state. + - Non-repeated fields are pointers to the values; nil means unset. + That is, optional or required field int32 f becomes F *int32. + - Repeated fields are slices. + - Helper functions are available to aid the setting of fields. + msg.Foo = proto.String("hello") // set field + - Constants are defined to hold the default values of all fields that + have them. They have the form Default_StructName_FieldName. + Because the getter methods handle defaulted values, + direct use of these constants should be rare. + - Enums are given type names and maps from names to values. + Enum values are prefixed by the enclosing message's name, or by the + enum's type name if it is a top-level enum. Enum types have a String + method, and a Enum method to assist in message construction. + - Nested messages, groups and enums have type names prefixed with the name of + the surrounding message type. + - Extensions are given descriptor names that start with E_, + followed by an underscore-delimited list of the nested messages + that contain it (if any) followed by the CamelCased name of the + extension field itself. HasExtension, ClearExtension, GetExtension + and SetExtension are functions for manipulating extensions. + - Oneof field sets are given a single field in their message, + with distinguished wrapper types for each possible field value. + - Marshal and Unmarshal are functions to encode and decode the wire format. + +When the .proto file specifies `syntax="proto3"`, there are some differences: + + - Non-repeated fields of non-message type are values instead of pointers. + - Enum types do not get an Enum method. + +The simplest way to describe this is to see an example. +Given file test.proto, containing + + package example; + + enum FOO { X = 17; } + + message Test { + required string label = 1; + optional int32 type = 2 [default=77]; + repeated int64 reps = 3; + optional group OptionalGroup = 4 { + required string RequiredField = 5; + } + oneof union { + int32 number = 6; + string name = 7; + } + } + +The resulting file, test.pb.go, is: + + package example + + import proto "github.com/golang/protobuf/proto" + import math "math" + + type FOO int32 + const ( + FOO_X FOO = 17 + ) + var FOO_name = map[int32]string{ + 17: "X", + } + var FOO_value = map[string]int32{ + "X": 17, + } + + func (x FOO) Enum() *FOO { + p := new(FOO) + *p = x + return p + } + func (x FOO) String() string { + return proto.EnumName(FOO_name, int32(x)) + } + func (x *FOO) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FOO_value, data) + if err != nil { + return err + } + *x = FOO(value) + return nil + } + + type Test struct { + Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` + Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` + Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` + Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` + // Types that are valid to be assigned to Union: + // *Test_Number + // *Test_Name + Union isTest_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` + } + func (m *Test) Reset() { *m = Test{} } + func (m *Test) String() string { return proto.CompactTextString(m) } + func (*Test) ProtoMessage() {} + + type isTest_Union interface { + isTest_Union() + } + + type Test_Number struct { + Number int32 `protobuf:"varint,6,opt,name=number"` + } + type Test_Name struct { + Name string `protobuf:"bytes,7,opt,name=name"` + } + + func (*Test_Number) isTest_Union() {} + func (*Test_Name) isTest_Union() {} + + func (m *Test) GetUnion() isTest_Union { + if m != nil { + return m.Union + } + return nil + } + const Default_Test_Type int32 = 77 + + func (m *Test) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" + } + + func (m *Test) GetType() int32 { + if m != nil && m.Type != nil { + return *m.Type + } + return Default_Test_Type + } + + func (m *Test) GetOptionalgroup() *Test_OptionalGroup { + if m != nil { + return m.Optionalgroup + } + return nil + } + + type Test_OptionalGroup struct { + RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` + } + func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } + func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } + + func (m *Test_OptionalGroup) GetRequiredField() string { + if m != nil && m.RequiredField != nil { + return *m.RequiredField + } + return "" + } + + func (m *Test) GetNumber() int32 { + if x, ok := m.GetUnion().(*Test_Number); ok { + return x.Number + } + return 0 + } + + func (m *Test) GetName() string { + if x, ok := m.GetUnion().(*Test_Name); ok { + return x.Name + } + return "" + } + + func init() { + proto.RegisterEnum("example.FOO", FOO_name, FOO_value) + } + +To create and play with a Test object: + + package main + + import ( + "log" + + "github.com/golang/protobuf/proto" + pb "./example.pb" + ) + + func main() { + test := &pb.Test{ + Label: proto.String("hello"), + Type: proto.Int32(17), + Reps: []int64{1, 2, 3}, + Optionalgroup: &pb.Test_OptionalGroup{ + RequiredField: proto.String("good bye"), + }, + Union: &pb.Test_Name{"fred"}, + } + data, err := proto.Marshal(test) + if err != nil { + log.Fatal("marshaling error: ", err) + } + newTest := &pb.Test{} + err = proto.Unmarshal(data, newTest) + if err != nil { + log.Fatal("unmarshaling error: ", err) + } + // Now test and newTest contain the same data. + if test.GetLabel() != newTest.GetLabel() { + log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) + } + // Use a type switch to determine which oneof was set. + switch u := test.Union.(type) { + case *pb.Test_Number: // u.Number contains the number. + case *pb.Test_Name: // u.Name contains the string. + } + // etc. + } +*/ +package proto + +import ( + "encoding/json" + "fmt" + "log" + "reflect" + "sort" + "strconv" + "sync" +) + +// RequiredNotSetError is an error type returned by either Marshal or Unmarshal. +// Marshal reports this when a required field is not initialized. +// Unmarshal reports this when a required field is missing from the wire data. +type RequiredNotSetError struct{ field string } + +func (e *RequiredNotSetError) Error() string { + if e.field == "" { + return fmt.Sprintf("proto: required field not set") + } + return fmt.Sprintf("proto: required field %q not set", e.field) +} +func (e *RequiredNotSetError) RequiredNotSet() bool { + return true +} + +type invalidUTF8Error struct{ field string } + +func (e *invalidUTF8Error) Error() string { + if e.field == "" { + return "proto: invalid UTF-8 detected" + } + return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field) +} +func (e *invalidUTF8Error) InvalidUTF8() bool { + return true +} + +// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8. +// This error should not be exposed to the external API as such errors should +// be recreated with the field information. +var errInvalidUTF8 = &invalidUTF8Error{} + +// isNonFatal reports whether the error is either a RequiredNotSet error +// or a InvalidUTF8 error. +func isNonFatal(err error) bool { + if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() { + return true + } + if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() { + return true + } + return false +} + +type nonFatal struct{ E error } + +// Merge merges err into nf and reports whether it was successful. +// Otherwise it returns false for any fatal non-nil errors. +func (nf *nonFatal) Merge(err error) (ok bool) { + if err == nil { + return true // not an error + } + if !isNonFatal(err) { + return false // fatal error + } + if nf.E == nil { + nf.E = err // store first instance of non-fatal error + } + return true +} + +// Message is implemented by generated protocol buffer messages. +type Message interface { + Reset() + String() string + ProtoMessage() +} + +// A Buffer is a buffer manager for marshaling and unmarshaling +// protocol buffers. It may be reused between invocations to +// reduce memory usage. It is not necessary to use a Buffer; +// the global functions Marshal and Unmarshal create a +// temporary Buffer and are fine for most applications. +type Buffer struct { + buf []byte // encode/decode byte stream + index int // read point + + deterministic bool +} + +// NewBuffer allocates a new Buffer and initializes its internal data to +// the contents of the argument slice. +func NewBuffer(e []byte) *Buffer { + return &Buffer{buf: e} +} + +// Reset resets the Buffer, ready for marshaling a new protocol buffer. +func (p *Buffer) Reset() { + p.buf = p.buf[0:0] // for reading/writing + p.index = 0 // for reading +} + +// SetBuf replaces the internal buffer with the slice, +// ready for unmarshaling the contents of the slice. +func (p *Buffer) SetBuf(s []byte) { + p.buf = s + p.index = 0 +} + +// Bytes returns the contents of the Buffer. +func (p *Buffer) Bytes() []byte { return p.buf } + +// SetDeterministic sets whether to use deterministic serialization. +// +// Deterministic serialization guarantees that for a given binary, equal +// messages will always be serialized to the same bytes. This implies: +// +// - Repeated serialization of a message will return the same bytes. +// - Different processes of the same binary (which may be executing on +// different machines) will serialize equal messages to the same bytes. +// +// Note that the deterministic serialization is NOT canonical across +// languages. It is not guaranteed to remain stable over time. It is unstable +// across different builds with schema changes due to unknown fields. +// Users who need canonical serialization (e.g., persistent storage in a +// canonical form, fingerprinting, etc.) should define their own +// canonicalization specification and implement their own serializer rather +// than relying on this API. +// +// If deterministic serialization is requested, map entries will be sorted +// by keys in lexographical order. This is an implementation detail and +// subject to change. +func (p *Buffer) SetDeterministic(deterministic bool) { + p.deterministic = deterministic +} + +/* + * Helper routines for simplifying the creation of optional fields of basic type. + */ + +// Bool is a helper routine that allocates a new bool value +// to store v and returns a pointer to it. +func Bool(v bool) *bool { + return &v +} + +// Int32 is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it. +func Int32(v int32) *int32 { + return &v +} + +// Int is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it, but unlike Int32 +// its argument value is an int. +func Int(v int) *int32 { + p := new(int32) + *p = int32(v) + return p +} + +// Int64 is a helper routine that allocates a new int64 value +// to store v and returns a pointer to it. +func Int64(v int64) *int64 { + return &v +} + +// Float32 is a helper routine that allocates a new float32 value +// to store v and returns a pointer to it. +func Float32(v float32) *float32 { + return &v +} + +// Float64 is a helper routine that allocates a new float64 value +// to store v and returns a pointer to it. +func Float64(v float64) *float64 { + return &v +} + +// Uint32 is a helper routine that allocates a new uint32 value +// to store v and returns a pointer to it. +func Uint32(v uint32) *uint32 { + return &v +} + +// Uint64 is a helper routine that allocates a new uint64 value +// to store v and returns a pointer to it. +func Uint64(v uint64) *uint64 { + return &v +} + +// String is a helper routine that allocates a new string value +// to store v and returns a pointer to it. +func String(v string) *string { + return &v +} + +// EnumName is a helper function to simplify printing protocol buffer enums +// by name. Given an enum map and a value, it returns a useful string. +func EnumName(m map[int32]string, v int32) string { + s, ok := m[v] + if ok { + return s + } + return strconv.Itoa(int(v)) +} + +// UnmarshalJSONEnum is a helper function to simplify recovering enum int values +// from their JSON-encoded representation. Given a map from the enum's symbolic +// names to its int values, and a byte buffer containing the JSON-encoded +// value, it returns an int32 that can be cast to the enum type by the caller. +// +// The function can deal with both JSON representations, numeric and symbolic. +func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { + if data[0] == '"' { + // New style: enums are strings. + var repr string + if err := json.Unmarshal(data, &repr); err != nil { + return -1, err + } + val, ok := m[repr] + if !ok { + return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) + } + return val, nil + } + // Old style: enums are ints. + var val int32 + if err := json.Unmarshal(data, &val); err != nil { + return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) + } + return val, nil +} + +// DebugPrint dumps the encoded data in b in a debugging format with a header +// including the string s. Used in testing but made available for general debugging. +func (p *Buffer) DebugPrint(s string, b []byte) { + var u uint64 + + obuf := p.buf + index := p.index + p.buf = b + p.index = 0 + depth := 0 + + fmt.Printf("\n--- %s ---\n", s) + +out: + for { + for i := 0; i < depth; i++ { + fmt.Print(" ") + } + + index := p.index + if index == len(p.buf) { + break + } + + op, err := p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: fetching op err %v\n", index, err) + break out + } + tag := op >> 3 + wire := op & 7 + + switch wire { + default: + fmt.Printf("%3d: t=%3d unknown wire=%d\n", + index, tag, wire) + break out + + case WireBytes: + var r []byte + + r, err = p.DecodeRawBytes(false) + if err != nil { + break out + } + fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) + if len(r) <= 6 { + for i := 0; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } else { + for i := 0; i < 3; i++ { + fmt.Printf(" %.2x", r[i]) + } + fmt.Printf(" ..") + for i := len(r) - 3; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } + fmt.Printf("\n") + + case WireFixed32: + u, err = p.DecodeFixed32() + if err != nil { + fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) + + case WireFixed64: + u, err = p.DecodeFixed64() + if err != nil { + fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) + + case WireVarint: + u, err = p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) + + case WireStartGroup: + fmt.Printf("%3d: t=%3d start\n", index, tag) + depth++ + + case WireEndGroup: + depth-- + fmt.Printf("%3d: t=%3d end\n", index, tag) + } + } + + if depth != 0 { + fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth) + } + fmt.Printf("\n") + + p.buf = obuf + p.index = index +} + +// SetDefaults sets unset protocol buffer fields to their default values. +// It only modifies fields that are both unset and have defined defaults. +// It recursively sets default values in any non-nil sub-messages. +func SetDefaults(pb Message) { + setDefaults(reflect.ValueOf(pb), true, false) +} + +// v is a pointer to a struct. +func setDefaults(v reflect.Value, recur, zeros bool) { + v = v.Elem() + + defaultMu.RLock() + dm, ok := defaults[v.Type()] + defaultMu.RUnlock() + if !ok { + dm = buildDefaultMessage(v.Type()) + defaultMu.Lock() + defaults[v.Type()] = dm + defaultMu.Unlock() + } + + for _, sf := range dm.scalars { + f := v.Field(sf.index) + if !f.IsNil() { + // field already set + continue + } + dv := sf.value + if dv == nil && !zeros { + // no explicit default, and don't want to set zeros + continue + } + fptr := f.Addr().Interface() // **T + // TODO: Consider batching the allocations we do here. + switch sf.kind { + case reflect.Bool: + b := new(bool) + if dv != nil { + *b = dv.(bool) + } + *(fptr.(**bool)) = b + case reflect.Float32: + f := new(float32) + if dv != nil { + *f = dv.(float32) + } + *(fptr.(**float32)) = f + case reflect.Float64: + f := new(float64) + if dv != nil { + *f = dv.(float64) + } + *(fptr.(**float64)) = f + case reflect.Int32: + // might be an enum + if ft := f.Type(); ft != int32PtrType { + // enum + f.Set(reflect.New(ft.Elem())) + if dv != nil { + f.Elem().SetInt(int64(dv.(int32))) + } + } else { + // int32 field + i := new(int32) + if dv != nil { + *i = dv.(int32) + } + *(fptr.(**int32)) = i + } + case reflect.Int64: + i := new(int64) + if dv != nil { + *i = dv.(int64) + } + *(fptr.(**int64)) = i + case reflect.String: + s := new(string) + if dv != nil { + *s = dv.(string) + } + *(fptr.(**string)) = s + case reflect.Uint8: + // exceptional case: []byte + var b []byte + if dv != nil { + db := dv.([]byte) + b = make([]byte, len(db)) + copy(b, db) + } else { + b = []byte{} + } + *(fptr.(*[]byte)) = b + case reflect.Uint32: + u := new(uint32) + if dv != nil { + *u = dv.(uint32) + } + *(fptr.(**uint32)) = u + case reflect.Uint64: + u := new(uint64) + if dv != nil { + *u = dv.(uint64) + } + *(fptr.(**uint64)) = u + default: + log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) + } + } + + for _, ni := range dm.nested { + f := v.Field(ni) + // f is *T or []*T or map[T]*T + switch f.Kind() { + case reflect.Ptr: + if f.IsNil() { + continue + } + setDefaults(f, recur, zeros) + + case reflect.Slice: + for i := 0; i < f.Len(); i++ { + e := f.Index(i) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + + case reflect.Map: + for _, k := range f.MapKeys() { + e := f.MapIndex(k) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + } + } +} + +var ( + // defaults maps a protocol buffer struct type to a slice of the fields, + // with its scalar fields set to their proto-declared non-zero default values. + defaultMu sync.RWMutex + defaults = make(map[reflect.Type]defaultMessage) + + int32PtrType = reflect.TypeOf((*int32)(nil)) +) + +// defaultMessage represents information about the default values of a message. +type defaultMessage struct { + scalars []scalarField + nested []int // struct field index of nested messages +} + +type scalarField struct { + index int // struct field index + kind reflect.Kind // element type (the T in *T or []T) + value interface{} // the proto-declared default value, or nil +} + +// t is a struct type. +func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { + sprop := GetProperties(t) + for _, prop := range sprop.Prop { + fi, ok := sprop.decoderTags.get(prop.Tag) + if !ok { + // XXX_unrecognized + continue + } + ft := t.Field(fi).Type + + sf, nested, err := fieldDefault(ft, prop) + switch { + case err != nil: + log.Print(err) + case nested: + dm.nested = append(dm.nested, fi) + case sf != nil: + sf.index = fi + dm.scalars = append(dm.scalars, *sf) + } + } + + return dm +} + +// fieldDefault returns the scalarField for field type ft. +// sf will be nil if the field can not have a default. +// nestedMessage will be true if this is a nested message. +// Note that sf.index is not set on return. +func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) { + var canHaveDefault bool + switch ft.Kind() { + case reflect.Ptr: + if ft.Elem().Kind() == reflect.Struct { + nestedMessage = true + } else { + canHaveDefault = true // proto2 scalar field + } + + case reflect.Slice: + switch ft.Elem().Kind() { + case reflect.Ptr: + nestedMessage = true // repeated message + case reflect.Uint8: + canHaveDefault = true // bytes field + } + + case reflect.Map: + if ft.Elem().Kind() == reflect.Ptr { + nestedMessage = true // map with message values + } + } + + if !canHaveDefault { + if nestedMessage { + return nil, true, nil + } + return nil, false, nil + } + + // We now know that ft is a pointer or slice. + sf = &scalarField{kind: ft.Elem().Kind()} + + // scalar fields without defaults + if !prop.HasDefault { + return sf, false, nil + } + + // a scalar field: either *T or []byte + switch ft.Elem().Kind() { + case reflect.Bool: + x, err := strconv.ParseBool(prop.Default) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Float32: + x, err := strconv.ParseFloat(prop.Default, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err) + } + sf.value = float32(x) + case reflect.Float64: + x, err := strconv.ParseFloat(prop.Default, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Int32: + x, err := strconv.ParseInt(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err) + } + sf.value = int32(x) + case reflect.Int64: + x, err := strconv.ParseInt(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.String: + sf.value = prop.Default + case reflect.Uint8: + // []byte (not *uint8) + sf.value = []byte(prop.Default) + case reflect.Uint32: + x, err := strconv.ParseUint(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err) + } + sf.value = uint32(x) + case reflect.Uint64: + x, err := strconv.ParseUint(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err) + } + sf.value = x + default: + return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind()) + } + + return sf, false, nil +} + +// mapKeys returns a sort.Interface to be used for sorting the map keys. +// Map fields may have key types of non-float scalars, strings and enums. +func mapKeys(vs []reflect.Value) sort.Interface { + s := mapKeySorter{vs: vs} + + // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. + if len(vs) == 0 { + return s + } + switch vs[0].Kind() { + case reflect.Int32, reflect.Int64: + s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } + case reflect.Uint32, reflect.Uint64: + s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } + case reflect.Bool: + s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true + case reflect.String: + s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } + default: + panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) + } + + return s +} + +type mapKeySorter struct { + vs []reflect.Value + less func(a, b reflect.Value) bool +} + +func (s mapKeySorter) Len() int { return len(s.vs) } +func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } +func (s mapKeySorter) Less(i, j int) bool { + return s.less(s.vs[i], s.vs[j]) +} + +// isProto3Zero reports whether v is a zero proto3 value. +func isProto3Zero(v reflect.Value) bool { + switch v.Kind() { + case reflect.Bool: + return !v.Bool() + case reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint32, reflect.Uint64: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.String: + return v.String() == "" + } + return false +} + +// ProtoPackageIsVersion2 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const ProtoPackageIsVersion2 = true + +// ProtoPackageIsVersion1 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const ProtoPackageIsVersion1 = true + +// InternalMessageInfo is a type used internally by generated .pb.go files. +// This type is not intended to be used by non-generated code. +// This type is not subject to any compatibility guarantee. +type InternalMessageInfo struct { + marshal *marshalInfo + unmarshal *unmarshalInfo + merge *mergeInfo + discard *discardInfo +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/message_set.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/message_set.go new file mode 100644 index 000000000..3b6ca41d5 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/message_set.go @@ -0,0 +1,314 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Support for message sets. + */ + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "reflect" + "sort" + "sync" +) + +// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. +// A message type ID is required for storing a protocol buffer in a message set. +var errNoMessageTypeID = errors.New("proto does not have a message type ID") + +// The first two types (_MessageSet_Item and messageSet) +// model what the protocol compiler produces for the following protocol message: +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// }; +// } +// That is the MessageSet wire format. We can't use a proto to generate these +// because that would introduce a circular dependency between it and this package. + +type _MessageSet_Item struct { + TypeId *int32 `protobuf:"varint,2,req,name=type_id"` + Message []byte `protobuf:"bytes,3,req,name=message"` +} + +type messageSet struct { + Item []*_MessageSet_Item `protobuf:"group,1,rep"` + XXX_unrecognized []byte + // TODO: caching? +} + +// Make sure messageSet is a Message. +var _ Message = (*messageSet)(nil) + +// messageTypeIder is an interface satisfied by a protocol buffer type +// that may be stored in a MessageSet. +type messageTypeIder interface { + MessageTypeId() int32 +} + +func (ms *messageSet) find(pb Message) *_MessageSet_Item { + mti, ok := pb.(messageTypeIder) + if !ok { + return nil + } + id := mti.MessageTypeId() + for _, item := range ms.Item { + if *item.TypeId == id { + return item + } + } + return nil +} + +func (ms *messageSet) Has(pb Message) bool { + return ms.find(pb) != nil +} + +func (ms *messageSet) Unmarshal(pb Message) error { + if item := ms.find(pb); item != nil { + return Unmarshal(item.Message, pb) + } + if _, ok := pb.(messageTypeIder); !ok { + return errNoMessageTypeID + } + return nil // TODO: return error instead? +} + +func (ms *messageSet) Marshal(pb Message) error { + msg, err := Marshal(pb) + if err != nil { + return err + } + if item := ms.find(pb); item != nil { + // reuse existing item + item.Message = msg + return nil + } + + mti, ok := pb.(messageTypeIder) + if !ok { + return errNoMessageTypeID + } + + mtid := mti.MessageTypeId() + ms.Item = append(ms.Item, &_MessageSet_Item{ + TypeId: &mtid, + Message: msg, + }) + return nil +} + +func (ms *messageSet) Reset() { *ms = messageSet{} } +func (ms *messageSet) String() string { return CompactTextString(ms) } +func (*messageSet) ProtoMessage() {} + +// Support for the message_set_wire_format message option. + +func skipVarint(buf []byte) []byte { + i := 0 + for ; buf[i]&0x80 != 0; i++ { + } + return buf[i+1:] +} + +// MarshalMessageSet encodes the extension map represented by m in the message set wire format. +// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. +func MarshalMessageSet(exts interface{}) ([]byte, error) { + return marshalMessageSet(exts, false) +} + +// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal. +func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) { + switch exts := exts.(type) { + case *XXX_InternalExtensions: + var u marshalInfo + siz := u.sizeMessageSet(exts) + b := make([]byte, 0, siz) + return u.appendMessageSet(b, exts, deterministic) + + case map[int32]Extension: + // This is an old-style extension map. + // Wrap it in a new-style XXX_InternalExtensions. + ie := XXX_InternalExtensions{ + p: &struct { + mu sync.Mutex + extensionMap map[int32]Extension + }{ + extensionMap: exts, + }, + } + + var u marshalInfo + siz := u.sizeMessageSet(&ie) + b := make([]byte, 0, siz) + return u.appendMessageSet(b, &ie, deterministic) + + default: + return nil, errors.New("proto: not an extension map") + } +} + +// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. +// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. +func UnmarshalMessageSet(buf []byte, exts interface{}) error { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m = exts.extensionsWrite() + case map[int32]Extension: + m = exts + default: + return errors.New("proto: not an extension map") + } + + ms := new(messageSet) + if err := Unmarshal(buf, ms); err != nil { + return err + } + for _, item := range ms.Item { + id := *item.TypeId + msg := item.Message + + // Restore wire type and field number varint, plus length varint. + // Be careful to preserve duplicate items. + b := EncodeVarint(uint64(id)<<3 | WireBytes) + if ext, ok := m[id]; ok { + // Existing data; rip off the tag and length varint + // so we join the new data correctly. + // We can assume that ext.enc is set because we are unmarshaling. + o := ext.enc[len(b):] // skip wire type and field number + _, n := DecodeVarint(o) // calculate length of length varint + o = o[n:] // skip length varint + msg = append(o, msg...) // join old data and new data + } + b = append(b, EncodeVarint(uint64(len(msg)))...) + b = append(b, msg...) + + m[id] = Extension{enc: b} + } + return nil +} + +// MarshalMessageSetJSON encodes the extension map represented by m in JSON format. +// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. +func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + var mu sync.Locker + m, mu = exts.extensionsRead() + if m != nil { + // Keep the extensions map locked until we're done marshaling to prevent + // races between marshaling and unmarshaling the lazily-{en,de}coded + // values. + mu.Lock() + defer mu.Unlock() + } + case map[int32]Extension: + m = exts + default: + return nil, errors.New("proto: not an extension map") + } + var b bytes.Buffer + b.WriteByte('{') + + // Process the map in key order for deterministic output. + ids := make([]int32, 0, len(m)) + for id := range m { + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) // int32Slice defined in text.go + + for i, id := range ids { + ext := m[id] + msd, ok := messageSetMap[id] + if !ok { + // Unknown type; we can't render it, so skip it. + continue + } + + if i > 0 && b.Len() > 1 { + b.WriteByte(',') + } + + fmt.Fprintf(&b, `"[%s]":`, msd.name) + + x := ext.value + if x == nil { + x = reflect.New(msd.t.Elem()).Interface() + if err := Unmarshal(ext.enc, x.(Message)); err != nil { + return nil, err + } + } + d, err := json.Marshal(x) + if err != nil { + return nil, err + } + b.Write(d) + } + b.WriteByte('}') + return b.Bytes(), nil +} + +// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. +// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. +func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { + // Common-case fast path. + if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { + return nil + } + + // This is fairly tricky, and it's not clear that it is needed. + return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") +} + +// A global registry of types that can be used in a MessageSet. + +var messageSetMap = make(map[int32]messageSetDesc) + +type messageSetDesc struct { + t reflect.Type // pointer to struct + name string +} + +// RegisterMessageSetType is called from the generated code. +func RegisterMessageSetType(m Message, fieldNum int32, name string) { + messageSetMap[fieldNum] = messageSetDesc{ + t: reflect.TypeOf(m), + name: name, + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_reflect.go new file mode 100644 index 000000000..b6cad9083 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_reflect.go @@ -0,0 +1,357 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build purego appengine js + +// This file contains an implementation of proto field accesses using package reflect. +// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can +// be used on App Engine. + +package proto + +import ( + "reflect" + "sync" +) + +const unsafeAllowed = false + +// A field identifies a field in a struct, accessible from a pointer. +// In this implementation, a field is identified by the sequence of field indices +// passed to reflect's FieldByIndex. +type field []int + +// toField returns a field equivalent to the given reflect field. +func toField(f *reflect.StructField) field { + return f.Index +} + +// invalidField is an invalid field identifier. +var invalidField = field(nil) + +// zeroField is a noop when calling pointer.offset. +var zeroField = field([]int{}) + +// IsValid reports whether the field identifier is valid. +func (f field) IsValid() bool { return f != nil } + +// The pointer type is for the table-driven decoder. +// The implementation here uses a reflect.Value of pointer type to +// create a generic pointer. In pointer_unsafe.go we use unsafe +// instead of reflect to implement the same (but faster) interface. +type pointer struct { + v reflect.Value +} + +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + return pointer{v: reflect.ValueOf(*i)} +} + +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr bool) pointer { + v := reflect.ValueOf(*i) + u := reflect.New(v.Type()) + u.Elem().Set(v) + return pointer{v: u} +} + +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{v: v} +} + +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} +} + +func (p pointer) isNil() bool { + return p.v.IsNil() +} + +// grow updates the slice s in place to make it one element longer. +// s must be addressable. +// Returns the (addressable) new element. +func grow(s reflect.Value) reflect.Value { + n, m := s.Len(), s.Cap() + if n < m { + s.SetLen(n + 1) + } else { + s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) + } + return s.Index(n) +} + +func (p pointer) toInt64() *int64 { + return p.v.Interface().(*int64) +} +func (p pointer) toInt64Ptr() **int64 { + return p.v.Interface().(**int64) +} +func (p pointer) toInt64Slice() *[]int64 { + return p.v.Interface().(*[]int64) +} + +var int32ptr = reflect.TypeOf((*int32)(nil)) + +func (p pointer) toInt32() *int32 { + return p.v.Convert(int32ptr).Interface().(*int32) +} + +// The toInt32Ptr/Slice methods don't work because of enums. +// Instead, we must use set/get methods for the int32ptr/slice case. +/* + func (p pointer) toInt32Ptr() **int32 { + return p.v.Interface().(**int32) +} + func (p pointer) toInt32Slice() *[]int32 { + return p.v.Interface().(*[]int32) +} +*/ +func (p pointer) getInt32Ptr() *int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().(*int32) + } + // an enum + return p.v.Elem().Convert(int32PtrType).Interface().(*int32) +} +func (p pointer) setInt32Ptr(v int32) { + // Allocate value in a *int32. Possibly convert that to a *enum. + // Then assign it to a **int32 or **enum. + // Note: we can convert *int32 to *enum, but we can't convert + // **int32 to **enum! + p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) +} + +// getInt32Slice copies []int32 from p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getInt32Slice() []int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().([]int32) + } + // an enum + // Allocate a []int32, then assign []enum's values into it. + // Note: we can't convert []enum to []int32. + slice := p.v.Elem() + s := make([]int32, slice.Len()) + for i := 0; i < slice.Len(); i++ { + s[i] = int32(slice.Index(i).Int()) + } + return s +} + +// setInt32Slice copies []int32 into p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setInt32Slice(v []int32) { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + p.v.Elem().Set(reflect.ValueOf(v)) + return + } + // an enum + // Allocate a []enum, then assign []int32's values into it. + // Note: we can't convert []enum to []int32. + slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) + for i, x := range v { + slice.Index(i).SetInt(int64(x)) + } + p.v.Elem().Set(slice) +} +func (p pointer) appendInt32Slice(v int32) { + grow(p.v.Elem()).SetInt(int64(v)) +} + +func (p pointer) toUint64() *uint64 { + return p.v.Interface().(*uint64) +} +func (p pointer) toUint64Ptr() **uint64 { + return p.v.Interface().(**uint64) +} +func (p pointer) toUint64Slice() *[]uint64 { + return p.v.Interface().(*[]uint64) +} +func (p pointer) toUint32() *uint32 { + return p.v.Interface().(*uint32) +} +func (p pointer) toUint32Ptr() **uint32 { + return p.v.Interface().(**uint32) +} +func (p pointer) toUint32Slice() *[]uint32 { + return p.v.Interface().(*[]uint32) +} +func (p pointer) toBool() *bool { + return p.v.Interface().(*bool) +} +func (p pointer) toBoolPtr() **bool { + return p.v.Interface().(**bool) +} +func (p pointer) toBoolSlice() *[]bool { + return p.v.Interface().(*[]bool) +} +func (p pointer) toFloat64() *float64 { + return p.v.Interface().(*float64) +} +func (p pointer) toFloat64Ptr() **float64 { + return p.v.Interface().(**float64) +} +func (p pointer) toFloat64Slice() *[]float64 { + return p.v.Interface().(*[]float64) +} +func (p pointer) toFloat32() *float32 { + return p.v.Interface().(*float32) +} +func (p pointer) toFloat32Ptr() **float32 { + return p.v.Interface().(**float32) +} +func (p pointer) toFloat32Slice() *[]float32 { + return p.v.Interface().(*[]float32) +} +func (p pointer) toString() *string { + return p.v.Interface().(*string) +} +func (p pointer) toStringPtr() **string { + return p.v.Interface().(**string) +} +func (p pointer) toStringSlice() *[]string { + return p.v.Interface().(*[]string) +} +func (p pointer) toBytes() *[]byte { + return p.v.Interface().(*[]byte) +} +func (p pointer) toBytesSlice() *[][]byte { + return p.v.Interface().(*[][]byte) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return p.v.Interface().(*XXX_InternalExtensions) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return p.v.Interface().(*map[int32]Extension) +} +func (p pointer) getPointer() pointer { + return pointer{v: p.v.Elem()} +} +func (p pointer) setPointer(q pointer) { + p.v.Elem().Set(q.v) +} +func (p pointer) appendPointer(q pointer) { + grow(p.v.Elem()).Set(q.v) +} + +// getPointerSlice copies []*T from p as a new []pointer. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getPointerSlice() []pointer { + if p.v.IsNil() { + return nil + } + n := p.v.Elem().Len() + s := make([]pointer, n) + for i := 0; i < n; i++ { + s[i] = pointer{v: p.v.Elem().Index(i)} + } + return s +} + +// setPointerSlice copies []pointer into p as a new []*T. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setPointerSlice(v []pointer) { + if v == nil { + p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) + return + } + s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) + for _, p := range v { + s = reflect.Append(s, p.v) + } + p.v.Elem().Set(s) +} + +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + if p.v.Elem().IsNil() { + return pointer{v: p.v.Elem()} + } + return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct +} + +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + // TODO: check that p.v.Type().Elem() == t? + return p.v +} + +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} + +var atomicLock sync.Mutex diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go new file mode 100644 index 000000000..d55a335d9 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go @@ -0,0 +1,308 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build !purego,!appengine,!js + +// This file contains the implementation of the proto field accesses using package unsafe. + +package proto + +import ( + "reflect" + "sync/atomic" + "unsafe" +) + +const unsafeAllowed = true + +// A field identifies a field in a struct, accessible from a pointer. +// In this implementation, a field is identified by its byte offset from the start of the struct. +type field uintptr + +// toField returns a field equivalent to the given reflect field. +func toField(f *reflect.StructField) field { + return field(f.Offset) +} + +// invalidField is an invalid field identifier. +const invalidField = ^field(0) + +// zeroField is a noop when calling pointer.offset. +const zeroField = field(0) + +// IsValid reports whether the field identifier is valid. +func (f field) IsValid() bool { + return f != invalidField +} + +// The pointer type below is for the new table-driven encoder/decoder. +// The implementation here uses unsafe.Pointer to create a generic pointer. +// In pointer_reflect.go we use reflect instead of unsafe to implement +// the same (but slower) interface. +type pointer struct { + p unsafe.Pointer +} + +// size of pointer +var ptrSize = unsafe.Sizeof(uintptr(0)) + +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + // Super-tricky - read pointer out of data word of interface value. + // Saves ~25ns over the equivalent: + // return valToPointer(reflect.ValueOf(*i)) + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr bool) pointer { + // Super-tricky - read or get the address of data word of interface value. + if isptr { + // The interface is of pointer type, thus it is a direct interface. + // The data word is the pointer data itself. We take its address. + return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} + } + // The interface is not of pointer type. The data word is the pointer + // to the data. + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{p: unsafe.Pointer(v.Pointer())} +} + +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + // For safety, we should panic if !f.IsValid, however calling panic causes + // this to no longer be inlineable, which is a serious performance cost. + /* + if !f.IsValid() { + panic("invalid field") + } + */ + return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} +} + +func (p pointer) isNil() bool { + return p.p == nil +} + +func (p pointer) toInt64() *int64 { + return (*int64)(p.p) +} +func (p pointer) toInt64Ptr() **int64 { + return (**int64)(p.p) +} +func (p pointer) toInt64Slice() *[]int64 { + return (*[]int64)(p.p) +} +func (p pointer) toInt32() *int32 { + return (*int32)(p.p) +} + +// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. +/* + func (p pointer) toInt32Ptr() **int32 { + return (**int32)(p.p) + } + func (p pointer) toInt32Slice() *[]int32 { + return (*[]int32)(p.p) + } +*/ +func (p pointer) getInt32Ptr() *int32 { + return *(**int32)(p.p) +} +func (p pointer) setInt32Ptr(v int32) { + *(**int32)(p.p) = &v +} + +// getInt32Slice loads a []int32 from p. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getInt32Slice() []int32 { + return *(*[]int32)(p.p) +} + +// setInt32Slice stores a []int32 to p. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setInt32Slice(v []int32) { + *(*[]int32)(p.p) = v +} + +// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? +func (p pointer) appendInt32Slice(v int32) { + s := (*[]int32)(p.p) + *s = append(*s, v) +} + +func (p pointer) toUint64() *uint64 { + return (*uint64)(p.p) +} +func (p pointer) toUint64Ptr() **uint64 { + return (**uint64)(p.p) +} +func (p pointer) toUint64Slice() *[]uint64 { + return (*[]uint64)(p.p) +} +func (p pointer) toUint32() *uint32 { + return (*uint32)(p.p) +} +func (p pointer) toUint32Ptr() **uint32 { + return (**uint32)(p.p) +} +func (p pointer) toUint32Slice() *[]uint32 { + return (*[]uint32)(p.p) +} +func (p pointer) toBool() *bool { + return (*bool)(p.p) +} +func (p pointer) toBoolPtr() **bool { + return (**bool)(p.p) +} +func (p pointer) toBoolSlice() *[]bool { + return (*[]bool)(p.p) +} +func (p pointer) toFloat64() *float64 { + return (*float64)(p.p) +} +func (p pointer) toFloat64Ptr() **float64 { + return (**float64)(p.p) +} +func (p pointer) toFloat64Slice() *[]float64 { + return (*[]float64)(p.p) +} +func (p pointer) toFloat32() *float32 { + return (*float32)(p.p) +} +func (p pointer) toFloat32Ptr() **float32 { + return (**float32)(p.p) +} +func (p pointer) toFloat32Slice() *[]float32 { + return (*[]float32)(p.p) +} +func (p pointer) toString() *string { + return (*string)(p.p) +} +func (p pointer) toStringPtr() **string { + return (**string)(p.p) +} +func (p pointer) toStringSlice() *[]string { + return (*[]string)(p.p) +} +func (p pointer) toBytes() *[]byte { + return (*[]byte)(p.p) +} +func (p pointer) toBytesSlice() *[][]byte { + return (*[][]byte)(p.p) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(p.p) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return (*map[int32]Extension)(p.p) +} + +// getPointerSlice loads []*T from p as a []pointer. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getPointerSlice() []pointer { + // Super-tricky - p should point to a []*T where T is a + // message type. We load it as []pointer. + return *(*[]pointer)(p.p) +} + +// setPointerSlice stores []pointer into p as a []*T. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setPointerSlice(v []pointer) { + // Super-tricky - p should point to a []*T where T is a + // message type. We store it as []pointer. + *(*[]pointer)(p.p) = v +} + +// getPointer loads the pointer at p and returns it. +func (p pointer) getPointer() pointer { + return pointer{p: *(*unsafe.Pointer)(p.p)} +} + +// setPointer stores the pointer q at p. +func (p pointer) setPointer(q pointer) { + *(*unsafe.Pointer)(p.p) = q.p +} + +// append q to the slice pointed to by p. +func (p pointer) appendPointer(q pointer) { + s := (*[]unsafe.Pointer)(p.p) + *s = append(*s, q.p) +} + +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + // Super-tricky - read pointer out of data word of interface value. + return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} +} + +// asPointerTo returns a reflect.Value that is a pointer to an +// object of type t stored at p. +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + return reflect.NewAt(t, p.p) +} + +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/properties.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/properties.go new file mode 100644 index 000000000..dce098e6e --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/properties.go @@ -0,0 +1,535 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for encoding data into the wire format for protocol buffers. + */ + +import ( + "fmt" + "log" + "os" + "reflect" + "sort" + "strconv" + "strings" + "sync" +) + +const debug bool = false + +// Constants that identify the encoding of a value on the wire. +const ( + WireVarint = 0 + WireFixed64 = 1 + WireBytes = 2 + WireStartGroup = 3 + WireEndGroup = 4 + WireFixed32 = 5 +) + +// tagMap is an optimization over map[int]int for typical protocol buffer +// use-cases. Encoded protocol buffers are often in tag order with small tag +// numbers. +type tagMap struct { + fastTags []int + slowTags map[int]int +} + +// tagMapFastLimit is the upper bound on the tag number that will be stored in +// the tagMap slice rather than its map. +const tagMapFastLimit = 1024 + +func (p *tagMap) get(t int) (int, bool) { + if t > 0 && t < tagMapFastLimit { + if t >= len(p.fastTags) { + return 0, false + } + fi := p.fastTags[t] + return fi, fi >= 0 + } + fi, ok := p.slowTags[t] + return fi, ok +} + +func (p *tagMap) put(t int, fi int) { + if t > 0 && t < tagMapFastLimit { + for len(p.fastTags) < t+1 { + p.fastTags = append(p.fastTags, -1) + } + p.fastTags[t] = fi + return + } + if p.slowTags == nil { + p.slowTags = make(map[int]int) + } + p.slowTags[t] = fi +} + +// StructProperties represents properties for all the fields of a struct. +// decoderTags and decoderOrigNames should only be used by the decoder. +type StructProperties struct { + Prop []*Properties // properties for each field + reqCount int // required count + decoderTags tagMap // map from proto tag to struct field number + decoderOrigNames map[string]int // map from original name to struct field number + order []int // list of struct field numbers in tag order + + // OneofTypes contains information about the oneof fields in this message. + // It is keyed by the original name of a field. + OneofTypes map[string]*OneofProperties +} + +// OneofProperties represents information about a specific field in a oneof. +type OneofProperties struct { + Type reflect.Type // pointer to generated struct type for this oneof field + Field int // struct field number of the containing oneof in the message + Prop *Properties +} + +// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. +// See encode.go, (*Buffer).enc_struct. + +func (sp *StructProperties) Len() int { return len(sp.order) } +func (sp *StructProperties) Less(i, j int) bool { + return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag +} +func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] } + +// Properties represents the protocol-specific behavior of a single struct field. +type Properties struct { + Name string // name of the field, for error messages + OrigName string // original name before protocol compiler (always set) + JSONName string // name to use for JSON; determined by protoc + Wire string + WireType int + Tag int + Required bool + Optional bool + Repeated bool + Packed bool // relevant for repeated primitives only + Enum string // set for enum types only + proto3 bool // whether this is known to be a proto3 field + oneof bool // whether this is a oneof field + + Default string // default value + HasDefault bool // whether an explicit default was provided + + stype reflect.Type // set for struct types only + sprop *StructProperties // set for struct types only + + mtype reflect.Type // set for map types only + MapKeyProp *Properties // set for map types only + MapValProp *Properties // set for map types only +} + +// String formats the properties in the protobuf struct field tag style. +func (p *Properties) String() string { + s := p.Wire + s += "," + s += strconv.Itoa(p.Tag) + if p.Required { + s += ",req" + } + if p.Optional { + s += ",opt" + } + if p.Repeated { + s += ",rep" + } + if p.Packed { + s += ",packed" + } + s += ",name=" + p.OrigName + if p.JSONName != p.OrigName { + s += ",json=" + p.JSONName + } + if p.proto3 { + s += ",proto3" + } + if p.oneof { + s += ",oneof" + } + if len(p.Enum) > 0 { + s += ",enum=" + p.Enum + } + if p.HasDefault { + s += ",def=" + p.Default + } + return s +} + +// Parse populates p by parsing a string in the protobuf struct field tag style. +func (p *Properties) Parse(s string) { + // "bytes,49,opt,name=foo,def=hello!" + fields := strings.Split(s, ",") // breaks def=, but handled below. + if len(fields) < 2 { + fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) + return + } + + p.Wire = fields[0] + switch p.Wire { + case "varint": + p.WireType = WireVarint + case "fixed32": + p.WireType = WireFixed32 + case "fixed64": + p.WireType = WireFixed64 + case "zigzag32": + p.WireType = WireVarint + case "zigzag64": + p.WireType = WireVarint + case "bytes", "group": + p.WireType = WireBytes + // no numeric converter for non-numeric types + default: + fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) + return + } + + var err error + p.Tag, err = strconv.Atoi(fields[1]) + if err != nil { + return + } + +outer: + for i := 2; i < len(fields); i++ { + f := fields[i] + switch { + case f == "req": + p.Required = true + case f == "opt": + p.Optional = true + case f == "rep": + p.Repeated = true + case f == "packed": + p.Packed = true + case strings.HasPrefix(f, "name="): + p.OrigName = f[5:] + case strings.HasPrefix(f, "json="): + p.JSONName = f[5:] + case strings.HasPrefix(f, "enum="): + p.Enum = f[5:] + case f == "proto3": + p.proto3 = true + case f == "oneof": + p.oneof = true + case strings.HasPrefix(f, "def="): + p.HasDefault = true + p.Default = f[4:] // rest of string + if i+1 < len(fields) { + // Commas aren't escaped, and def is always last. + p.Default += "," + strings.Join(fields[i+1:], ",") + break outer + } + } + } +} + +var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() + +// setFieldProps initializes the field properties for submessages and maps. +func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { + switch t1 := typ; t1.Kind() { + case reflect.Ptr: + if t1.Elem().Kind() == reflect.Struct { + p.stype = t1.Elem() + } + + case reflect.Slice: + if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { + p.stype = t2.Elem() + } + + case reflect.Map: + p.mtype = t1 + p.MapKeyProp = &Properties{} + p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) + p.MapValProp = &Properties{} + vtype := p.mtype.Elem() + if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { + // The value type is not a message (*T) or bytes ([]byte), + // so we need encoders for the pointer to this type. + vtype = reflect.PtrTo(vtype) + } + p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) + } + + if p.stype != nil { + if lockGetProp { + p.sprop = GetProperties(p.stype) + } else { + p.sprop = getPropertiesLocked(p.stype) + } + } +} + +var ( + marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() +) + +// Init populates the properties from a protocol buffer struct tag. +func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { + p.init(typ, name, tag, f, true) +} + +func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) { + // "bytes,49,opt,def=hello!" + p.Name = name + p.OrigName = name + if tag == "" { + return + } + p.Parse(tag) + p.setFieldProps(typ, f, lockGetProp) +} + +var ( + propertiesMu sync.RWMutex + propertiesMap = make(map[reflect.Type]*StructProperties) +) + +// GetProperties returns the list of properties for the type represented by t. +// t must represent a generated struct type of a protocol message. +func GetProperties(t reflect.Type) *StructProperties { + if t.Kind() != reflect.Struct { + panic("proto: type must have kind struct") + } + + // Most calls to GetProperties in a long-running program will be + // retrieving details for types we have seen before. + propertiesMu.RLock() + sprop, ok := propertiesMap[t] + propertiesMu.RUnlock() + if ok { + return sprop + } + + propertiesMu.Lock() + sprop = getPropertiesLocked(t) + propertiesMu.Unlock() + return sprop +} + +// getPropertiesLocked requires that propertiesMu is held. +func getPropertiesLocked(t reflect.Type) *StructProperties { + if prop, ok := propertiesMap[t]; ok { + return prop + } + + prop := new(StructProperties) + // in case of recursive protos, fill this in now. + propertiesMap[t] = prop + + // build properties + prop.Prop = make([]*Properties, t.NumField()) + prop.order = make([]int, t.NumField()) + + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + p := new(Properties) + name := f.Name + p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) + + oneof := f.Tag.Get("protobuf_oneof") // special case + if oneof != "" { + // Oneof fields don't use the traditional protobuf tag. + p.OrigName = oneof + } + prop.Prop[i] = p + prop.order[i] = i + if debug { + print(i, " ", f.Name, " ", t.String(), " ") + if p.Tag > 0 { + print(p.String()) + } + print("\n") + } + } + + // Re-order prop.order. + sort.Sort(prop) + + type oneofMessage interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) + } + if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { + var oots []interface{} + _, _, _, oots = om.XXX_OneofFuncs() + + // Interpret oneof metadata. + prop.OneofTypes = make(map[string]*OneofProperties) + for _, oot := range oots { + oop := &OneofProperties{ + Type: reflect.ValueOf(oot).Type(), // *T + Prop: new(Properties), + } + sft := oop.Type.Elem().Field(0) + oop.Prop.Name = sft.Name + oop.Prop.Parse(sft.Tag.Get("protobuf")) + // There will be exactly one interface field that + // this new value is assignable to. + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if f.Type.Kind() != reflect.Interface { + continue + } + if !oop.Type.AssignableTo(f.Type) { + continue + } + oop.Field = i + break + } + prop.OneofTypes[oop.Prop.OrigName] = oop + } + } + + // build required counts + // build tags + reqCount := 0 + prop.decoderOrigNames = make(map[string]int) + for i, p := range prop.Prop { + if strings.HasPrefix(p.Name, "XXX_") { + // Internal fields should not appear in tags/origNames maps. + // They are handled specially when encoding and decoding. + continue + } + if p.Required { + reqCount++ + } + prop.decoderTags.put(p.Tag, i) + prop.decoderOrigNames[p.OrigName] = i + } + prop.reqCount = reqCount + + return prop +} + +// A global registry of enum types. +// The generated code will register the generated maps by calling RegisterEnum. + +var enumValueMaps = make(map[string]map[string]int32) + +// RegisterEnum is called from the generated code to install the enum descriptor +// maps into the global table to aid parsing text format protocol buffers. +func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) { + if _, ok := enumValueMaps[typeName]; ok { + panic("proto: duplicate enum registered: " + typeName) + } + enumValueMaps[typeName] = valueMap +} + +// EnumValueMap returns the mapping from names to integers of the +// enum type enumType, or a nil if not found. +func EnumValueMap(enumType string) map[string]int32 { + return enumValueMaps[enumType] +} + +// A registry of all linked message types. +// The string is a fully-qualified proto name ("pkg.Message"). +var ( + protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers + protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types + revProtoTypes = make(map[reflect.Type]string) +) + +// RegisterType is called from generated code and maps from the fully qualified +// proto name to the type (pointer to struct) of the protocol buffer. +func RegisterType(x Message, name string) { + if _, ok := protoTypedNils[name]; ok { + // TODO: Some day, make this a panic. + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { + // Generated code always calls RegisterType with nil x. + // This check is just for extra safety. + protoTypedNils[name] = x + } else { + protoTypedNils[name] = reflect.Zero(t).Interface().(Message) + } + revProtoTypes[t] = name +} + +// RegisterMapType is called from generated code and maps from the fully qualified +// proto name to the native map type of the proto map definition. +func RegisterMapType(x interface{}, name string) { + if reflect.TypeOf(x).Kind() != reflect.Map { + panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) + } + if _, ok := protoMapTypes[name]; ok { + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + protoMapTypes[name] = t + revProtoTypes[t] = name +} + +// MessageName returns the fully-qualified proto name for the given message type. +func MessageName(x Message) string { + type xname interface { + XXX_MessageName() string + } + if m, ok := x.(xname); ok { + return m.XXX_MessageName() + } + return revProtoTypes[reflect.TypeOf(x)] +} + +// MessageType returns the message type (pointer to struct) for a named message. +// The type is not guaranteed to implement proto.Message if the name refers to a +// map entry. +func MessageType(name string) reflect.Type { + if t, ok := protoTypedNils[name]; ok { + return reflect.TypeOf(t) + } + return protoMapTypes[name] +} + +// A registry of all linked proto files. +var ( + protoFiles = make(map[string][]byte) // file name => fileDescriptor +) + +// RegisterFile is called from generated code and maps from the +// full file name of a .proto file to its compressed FileDescriptorProto. +func RegisterFile(filename string, fileDescriptor []byte) { + protoFiles[filename] = fileDescriptor +} + +// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. +func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_marshal.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_marshal.go new file mode 100644 index 000000000..f3a2d16a4 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_marshal.go @@ -0,0 +1,2767 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "math" + "reflect" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// a sizer takes a pointer to a field and the size of its tag, computes the size of +// the encoded data. +type sizer func(pointer, int) int + +// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), +// marshals the field to the end of the slice, returns the slice and error (if any). +type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) + +// marshalInfo is the information used for marshaling a message. +type marshalInfo struct { + typ reflect.Type + fields []*marshalFieldInfo + unrecognized field // offset of XXX_unrecognized + extensions field // offset of XXX_InternalExtensions + v1extensions field // offset of XXX_extensions + sizecache field // offset of XXX_sizecache + initialized int32 // 0 -- only typ is set, 1 -- fully initialized + messageset bool // uses message set wire format + hasmarshaler bool // has custom marshaler + sync.RWMutex // protect extElems map, also for initialization + extElems map[int32]*marshalElemInfo // info of extension elements +} + +// marshalFieldInfo is the information used for marshaling a field of a message. +type marshalFieldInfo struct { + field field + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isPointer bool + required bool // field is required + name string // name of the field, for error reporting + oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements +} + +// marshalElemInfo is the information used for marshaling an extension or oneof element. +type marshalElemInfo struct { + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) +} + +var ( + marshalInfoMap = map[reflect.Type]*marshalInfo{} + marshalInfoLock sync.Mutex +) + +// getMarshalInfo returns the information to marshal a given type of message. +// The info it returns may not necessarily initialized. +// t is the type of the message (NOT the pointer to it). +func getMarshalInfo(t reflect.Type) *marshalInfo { + marshalInfoLock.Lock() + u, ok := marshalInfoMap[t] + if !ok { + u = &marshalInfo{typ: t} + marshalInfoMap[t] = u + } + marshalInfoLock.Unlock() + return u +} + +// Size is the entry point from generated code, +// and should be ONLY called by generated code. +// It computes the size of encoded data of msg. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Size(msg Message) int { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return 0 + } + return u.size(ptr) +} + +// Marshal is the entry point from generated code, +// and should be ONLY called by generated code. +// It marshals msg to the end of b. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return b, ErrNil + } + return u.marshal(b, ptr, deterministic) +} + +func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { + // u := a.marshal, but atomically. + // We use an atomic here to ensure memory consistency. + u := atomicLoadMarshalInfo(&a.marshal) + if u == nil { + // Get marshal information from type of message. + t := reflect.ValueOf(msg).Type() + if t.Kind() != reflect.Ptr { + panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) + } + u = getMarshalInfo(t.Elem()) + // Store it in the cache for later users. + // a.marshal = u, but atomically. + atomicStoreMarshalInfo(&a.marshal, u) + } + return u +} + +// size is the main function to compute the size of the encoded data of a message. +// ptr is the pointer to the message. +func (u *marshalInfo) size(ptr pointer) int { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b, _ := m.Marshal() + return len(b) + } + + n := 0 + for _, f := range u.fields { + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + n += f.sizer(ptr.offset(f.field), f.tagsize) + } + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + n += u.sizeMessageSet(e) + } else { + n += u.sizeExtensions(e) + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + n += u.sizeV1Extensions(m) + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + n += len(s) + } + // cache the result for use in marshal + if u.sizecache.IsValid() { + atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) + } + return n +} + +// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), +// fall back to compute the size. +func (u *marshalInfo) cachedsize(ptr pointer) int { + if u.sizecache.IsValid() { + return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) + } + return u.size(ptr) +} + +// marshal is the main function to marshal a message. It takes a byte slice and appends +// the encoded data to the end of the slice, returns the slice and error (if any). +// ptr is the pointer to the message. +// If deterministic is true, map is marshaled in deterministic order. +func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b1, err := m.Marshal() + b = append(b, b1...) + return b, err + } + + var err, errLater error + // The old marshaler encodes extensions at beginning. + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + b, err = u.appendMessageSet(b, e, deterministic) + } else { + b, err = u.appendExtensions(b, e, deterministic) + } + if err != nil { + return b, err + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + b, err = u.appendV1Extensions(b, m, deterministic) + if err != nil { + return b, err + } + } + for _, f := range u.fields { + if f.required { + if ptr.offset(f.field).getPointer().isNil() { + // Required field is not set. + // We record the error but keep going, to give a complete marshaling. + if errLater == nil { + errLater = &RequiredNotSetError{f.name} + } + continue + } + } + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) + if err != nil { + if err1, ok := err.(*RequiredNotSetError); ok { + // Required field in submessage is not set. + // We record the error but keep going, to give a complete marshaling. + if errLater == nil { + errLater = &RequiredNotSetError{f.name + "." + err1.field} + } + continue + } + if err == errRepeatedHasNil { + err = errors.New("proto: repeated field " + f.name + " has nil element") + } + if err == errInvalidUTF8 { + if errLater == nil { + fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name + errLater = &invalidUTF8Error{fullName} + } + continue + } + return b, err + } + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + b = append(b, s...) + } + return b, errLater +} + +// computeMarshalInfo initializes the marshal info. +func (u *marshalInfo) computeMarshalInfo() { + u.Lock() + defer u.Unlock() + if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock + return + } + + t := u.typ + u.unrecognized = invalidField + u.extensions = invalidField + u.v1extensions = invalidField + u.sizecache = invalidField + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if reflect.PtrTo(t).Implements(marshalerType) { + u.hasmarshaler = true + atomic.StoreInt32(&u.initialized, 1) + return + } + + // get oneof implementers + var oneofImplementers []interface{} + if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { + _, _, _, oneofImplementers = m.XXX_OneofFuncs() + } + + n := t.NumField() + + // deal with XXX fields first + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if !strings.HasPrefix(f.Name, "XXX_") { + continue + } + switch f.Name { + case "XXX_sizecache": + u.sizecache = toField(&f) + case "XXX_unrecognized": + u.unrecognized = toField(&f) + case "XXX_InternalExtensions": + u.extensions = toField(&f) + u.messageset = f.Tag.Get("protobuf_messageset") == "1" + case "XXX_extensions": + u.v1extensions = toField(&f) + case "XXX_NoUnkeyedLiteral": + // nothing to do + default: + panic("unknown XXX field: " + f.Name) + } + n-- + } + + // normal fields + fields := make([]marshalFieldInfo, n) // batch allocation + u.fields = make([]*marshalFieldInfo, 0, n) + for i, j := 0, 0; i < t.NumField(); i++ { + f := t.Field(i) + + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + field := &fields[j] + j++ + field.name = f.Name + u.fields = append(u.fields, field) + if f.Tag.Get("protobuf_oneof") != "" { + field.computeOneofFieldInfo(&f, oneofImplementers) + continue + } + if f.Tag.Get("protobuf") == "" { + // field has no tag (not in generated message), ignore it + u.fields = u.fields[:len(u.fields)-1] + j-- + continue + } + field.computeMarshalFieldInfo(&f) + } + + // fields are marshaled in tag order on the wire. + sort.Sort(byTag(u.fields)) + + atomic.StoreInt32(&u.initialized, 1) +} + +// helper for sorting fields by tag +type byTag []*marshalFieldInfo + +func (a byTag) Len() int { return len(a) } +func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } + +// getExtElemInfo returns the information to marshal an extension element. +// The info it returns is initialized. +func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { + // get from cache first + u.RLock() + e, ok := u.extElems[desc.Field] + u.RUnlock() + if ok { + return e + } + + t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct + tags := strings.Split(desc.Tag, ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + sizer, marshaler := typeMarshaler(t, tags, false, false) + e = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + isptr: t.Kind() == reflect.Ptr, + } + + // update cache + u.Lock() + if u.extElems == nil { + u.extElems = make(map[int32]*marshalElemInfo) + } + u.extElems[desc.Field] = e + u.Unlock() + return e +} + +// computeMarshalFieldInfo fills up the information to marshal a field. +func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { + // parse protobuf tag of the field. + // tag has format of "bytes,49,opt,name=foo,def=hello!" + tags := strings.Split(f.Tag.Get("protobuf"), ",") + if tags[0] == "" { + return + } + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + if tags[2] == "req" { + fi.required = true + } + fi.setTag(f, tag, wt) + fi.setMarshaler(f, tags) +} + +func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { + fi.field = toField(f) + fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. + fi.isPointer = true + fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) + fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) + + ityp := f.Type // interface type + for _, o := range oneofImplementers { + t := reflect.TypeOf(o) + if !t.Implements(ityp) { + continue + } + sf := t.Elem().Field(0) // oneof implementer is a struct with a single field + tags := strings.Split(sf.Tag.Get("protobuf"), ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value + fi.oneofElems[t.Elem()] = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + } + } +} + +type oneofMessage interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) +} + +// wiretype returns the wire encoding of the type. +func wiretype(encoding string) uint64 { + switch encoding { + case "fixed32": + return WireFixed32 + case "fixed64": + return WireFixed64 + case "varint", "zigzag32", "zigzag64": + return WireVarint + case "bytes": + return WireBytes + case "group": + return WireStartGroup + } + panic("unknown wire type " + encoding) +} + +// setTag fills up the tag (in wire format) and its size in the info of a field. +func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { + fi.field = toField(f) + fi.wiretag = uint64(tag)<<3 | wt + fi.tagsize = SizeVarint(uint64(tag) << 3) +} + +// setMarshaler fills up the sizer and marshaler in the info of a field. +func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { + switch f.Type.Kind() { + case reflect.Map: + // map field + fi.isPointer = true + fi.sizer, fi.marshaler = makeMapMarshaler(f) + return + case reflect.Ptr, reflect.Slice: + fi.isPointer = true + } + fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) +} + +// typeMarshaler returns the sizer and marshaler of a given field. +// t is the type of the field. +// tags is the generated "protobuf" tag of the field. +// If nozero is true, zero value is not marshaled to the wire. +// If oneof is true, it is a oneof field. +func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { + encoding := tags[0] + + pointer := false + slice := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + packed := false + proto3 := false + validateUTF8 := true + for i := 2; i < len(tags); i++ { + if tags[i] == "packed" { + packed = true + } + if tags[i] == "proto3" { + proto3 = true + } + } + validateUTF8 = validateUTF8 && proto3 + + switch t.Kind() { + case reflect.Bool: + if pointer { + return sizeBoolPtr, appendBoolPtr + } + if slice { + if packed { + return sizeBoolPackedSlice, appendBoolPackedSlice + } + return sizeBoolSlice, appendBoolSlice + } + if nozero { + return sizeBoolValueNoZero, appendBoolValueNoZero + } + return sizeBoolValue, appendBoolValue + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixed32Ptr, appendFixed32Ptr + } + if slice { + if packed { + return sizeFixed32PackedSlice, appendFixed32PackedSlice + } + return sizeFixed32Slice, appendFixed32Slice + } + if nozero { + return sizeFixed32ValueNoZero, appendFixed32ValueNoZero + } + return sizeFixed32Value, appendFixed32Value + case "varint": + if pointer { + return sizeVarint32Ptr, appendVarint32Ptr + } + if slice { + if packed { + return sizeVarint32PackedSlice, appendVarint32PackedSlice + } + return sizeVarint32Slice, appendVarint32Slice + } + if nozero { + return sizeVarint32ValueNoZero, appendVarint32ValueNoZero + } + return sizeVarint32Value, appendVarint32Value + } + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixedS32Ptr, appendFixedS32Ptr + } + if slice { + if packed { + return sizeFixedS32PackedSlice, appendFixedS32PackedSlice + } + return sizeFixedS32Slice, appendFixedS32Slice + } + if nozero { + return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero + } + return sizeFixedS32Value, appendFixedS32Value + case "varint": + if pointer { + return sizeVarintS32Ptr, appendVarintS32Ptr + } + if slice { + if packed { + return sizeVarintS32PackedSlice, appendVarintS32PackedSlice + } + return sizeVarintS32Slice, appendVarintS32Slice + } + if nozero { + return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero + } + return sizeVarintS32Value, appendVarintS32Value + case "zigzag32": + if pointer { + return sizeZigzag32Ptr, appendZigzag32Ptr + } + if slice { + if packed { + return sizeZigzag32PackedSlice, appendZigzag32PackedSlice + } + return sizeZigzag32Slice, appendZigzag32Slice + } + if nozero { + return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero + } + return sizeZigzag32Value, appendZigzag32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixed64Ptr, appendFixed64Ptr + } + if slice { + if packed { + return sizeFixed64PackedSlice, appendFixed64PackedSlice + } + return sizeFixed64Slice, appendFixed64Slice + } + if nozero { + return sizeFixed64ValueNoZero, appendFixed64ValueNoZero + } + return sizeFixed64Value, appendFixed64Value + case "varint": + if pointer { + return sizeVarint64Ptr, appendVarint64Ptr + } + if slice { + if packed { + return sizeVarint64PackedSlice, appendVarint64PackedSlice + } + return sizeVarint64Slice, appendVarint64Slice + } + if nozero { + return sizeVarint64ValueNoZero, appendVarint64ValueNoZero + } + return sizeVarint64Value, appendVarint64Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixedS64Ptr, appendFixedS64Ptr + } + if slice { + if packed { + return sizeFixedS64PackedSlice, appendFixedS64PackedSlice + } + return sizeFixedS64Slice, appendFixedS64Slice + } + if nozero { + return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero + } + return sizeFixedS64Value, appendFixedS64Value + case "varint": + if pointer { + return sizeVarintS64Ptr, appendVarintS64Ptr + } + if slice { + if packed { + return sizeVarintS64PackedSlice, appendVarintS64PackedSlice + } + return sizeVarintS64Slice, appendVarintS64Slice + } + if nozero { + return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero + } + return sizeVarintS64Value, appendVarintS64Value + case "zigzag64": + if pointer { + return sizeZigzag64Ptr, appendZigzag64Ptr + } + if slice { + if packed { + return sizeZigzag64PackedSlice, appendZigzag64PackedSlice + } + return sizeZigzag64Slice, appendZigzag64Slice + } + if nozero { + return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero + } + return sizeZigzag64Value, appendZigzag64Value + } + case reflect.Float32: + if pointer { + return sizeFloat32Ptr, appendFloat32Ptr + } + if slice { + if packed { + return sizeFloat32PackedSlice, appendFloat32PackedSlice + } + return sizeFloat32Slice, appendFloat32Slice + } + if nozero { + return sizeFloat32ValueNoZero, appendFloat32ValueNoZero + } + return sizeFloat32Value, appendFloat32Value + case reflect.Float64: + if pointer { + return sizeFloat64Ptr, appendFloat64Ptr + } + if slice { + if packed { + return sizeFloat64PackedSlice, appendFloat64PackedSlice + } + return sizeFloat64Slice, appendFloat64Slice + } + if nozero { + return sizeFloat64ValueNoZero, appendFloat64ValueNoZero + } + return sizeFloat64Value, appendFloat64Value + case reflect.String: + if validateUTF8 { + if pointer { + return sizeStringPtr, appendUTF8StringPtr + } + if slice { + return sizeStringSlice, appendUTF8StringSlice + } + if nozero { + return sizeStringValueNoZero, appendUTF8StringValueNoZero + } + return sizeStringValue, appendUTF8StringValue + } + if pointer { + return sizeStringPtr, appendStringPtr + } + if slice { + return sizeStringSlice, appendStringSlice + } + if nozero { + return sizeStringValueNoZero, appendStringValueNoZero + } + return sizeStringValue, appendStringValue + case reflect.Slice: + if slice { + return sizeBytesSlice, appendBytesSlice + } + if oneof { + // Oneof bytes field may also have "proto3" tag. + // We want to marshal it as a oneof field. Do this + // check before the proto3 check. + return sizeBytesOneof, appendBytesOneof + } + if proto3 { + return sizeBytes3, appendBytes3 + } + return sizeBytes, appendBytes + case reflect.Struct: + switch encoding { + case "group": + if slice { + return makeGroupSliceMarshaler(getMarshalInfo(t)) + } + return makeGroupMarshaler(getMarshalInfo(t)) + case "bytes": + if slice { + return makeMessageSliceMarshaler(getMarshalInfo(t)) + } + return makeMessageMarshaler(getMarshalInfo(t)) + } + } + panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) +} + +// Below are functions to size/marshal a specific type of a field. +// They are stored in the field's info, and called by function pointers. +// They have type sizer or marshaler. + +func sizeFixed32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixedS32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFloat32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + return (4 + tagsize) * len(s) +} +func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixed64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFixedS64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFloat64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + return (8 + tagsize) * len(s) +} +func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeVarint32Value(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarint32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarint64Value(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + return SizeVarint(v) + tagsize +} +func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return SizeVarint(v) + tagsize +} +func sizeVarint64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return SizeVarint(*p) + tagsize +} +func sizeVarint64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(v) + tagsize + } + return n +} +func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize + } + return n +} +func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize + } + return n +} +func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeBoolValue(_ pointer, tagsize int) int { + return 1 + tagsize +} +func sizeBoolValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toBool() + if !v { + return 0 + } + return 1 + tagsize +} +func sizeBoolPtr(ptr pointer, tagsize int) int { + p := *ptr.toBoolPtr() + if p == nil { + return 0 + } + return 1 + tagsize +} +func sizeBoolSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + return (1 + tagsize) * len(s) +} +func sizeBoolPackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return 0 + } + return len(s) + SizeVarint(uint64(len(s))) + tagsize +} +func sizeStringValue(ptr pointer, tagsize int) int { + v := *ptr.toString() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toString() + if v == "" { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringPtr(ptr pointer, tagsize int) int { + p := *ptr.toStringPtr() + if p == nil { + return 0 + } + v := *p + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringSlice(ptr pointer, tagsize int) int { + s := *ptr.toStringSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} +func sizeBytes(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if v == nil { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytes3(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if len(v) == 0 { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesOneof(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesSlice(ptr pointer, tagsize int) int { + s := *ptr.toBytesSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} + +// appendFixed32 appends an encoded fixed32 to b. +func appendFixed32(b []byte, v uint32) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24)) + return b +} + +// appendFixed64 appends an encoded fixed64 to b. +func appendFixed64(b []byte, v uint64) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24), + byte(v>>32), + byte(v>>40), + byte(v>>48), + byte(v>>56)) + return b +} + +// appendVarint appends an encoded varint to b. +func appendVarint(b []byte, v uint64) []byte { + // TODO: make 1-byte (maybe 2-byte) case inline-able, once we + // have non-leaf inliner. + switch { + case v < 1<<7: + b = append(b, byte(v)) + case v < 1<<14: + b = append(b, + byte(v&0x7f|0x80), + byte(v>>7)) + case v < 1<<21: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte(v>>14)) + case v < 1<<28: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte(v>>21)) + case v < 1<<35: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte(v>>28)) + case v < 1<<42: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte(v>>35)) + case v < 1<<49: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte(v>>42)) + case v < 1<<56: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte(v>>49)) + case v < 1<<63: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte(v>>56)) + default: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte((v>>56)&0x7f|0x80), + 1) + } + return b +} + +func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, *p) + return b, nil +} +func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(*p)) + return b, nil +} +func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(*p)) + return b, nil +} +func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, *p) + return b, nil +} +func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(*p)) + return b, nil +} +func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(*p)) + return b, nil +} +func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, *p) + return b, nil +} +func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + } + return b, nil +} +func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, v) + } + return b, nil +} +func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + if !v { + return b, nil + } + b = appendVarint(b, wiretag) + b = append(b, 1) + return b, nil +} + +func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toBoolPtr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + if *p { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(len(s))) + for _, v := range s { + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + if v == "" { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toStringPtr() + if p == nil { + return b, nil + } + v := *p + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toStringSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} +func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + v := *ptr.toString() + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + v := *ptr.toString() + if v == "" { + return b, nil + } + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + p := *ptr.toStringPtr() + if p == nil { + return b, nil + } + v := *p + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + s := *ptr.toStringSlice() + for _, v := range s { + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if v == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if len(v) == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBytesSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} + +// makeGroupMarshaler returns the sizer and marshaler for a group. +// u is the marshal info of the underlying message. +func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + return u.size(p) + 2*tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + var err error + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, p, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + return b, err + } +} + +// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. +// u is the marshal info of the underlying message. +func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + n += u.size(v) + 2*tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err error + var nerr nonFatal + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, v, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + if !nerr.Merge(err) { + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, nerr.E + } +} + +// makeMessageMarshaler returns the sizer and marshaler for a message field. +// u is the marshal info of the message. +func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + siz := u.size(p) + return siz + SizeVarint(uint64(siz)) + tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(p) + b = appendVarint(b, uint64(siz)) + return u.marshal(b, p, deterministic) + } +} + +// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. +// u is the marshal info of the message. +func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + siz := u.size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err error + var nerr nonFatal + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(v) + b = appendVarint(b, uint64(siz)) + b, err = u.marshal(b, v, deterministic) + + if !nerr.Merge(err) { + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, nerr.E + } +} + +// makeMapMarshaler returns the sizer and marshaler for a map field. +// f is the pointer to the reflect data structure of the field. +func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { + // figure out key and value type + t := f.Type + keyType := t.Key() + valType := t.Elem() + keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") + valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") + keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map + valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map + keyWireTag := 1<<3 | wiretype(keyTags[0]) + valWireTag := 2<<3 | wiretype(valTags[0]) + + // We create an interface to get the addresses of the map key and value. + // If value is pointer-typed, the interface is a direct interface, the + // idata itself is the value. Otherwise, the idata is the pointer to the + // value. + // Key cannot be pointer-typed. + valIsPtr := valType.Kind() == reflect.Ptr + + // If value is a message with nested maps, calling + // valSizer in marshal may be quadratic. We should use + // cached version in marshal (but not in size). + // If value is not message type, we don't have size cache, + // but it cannot be nested either. Just use valSizer. + valCachedSizer := valSizer + if valIsPtr && valType.Elem().Kind() == reflect.Struct { + u := getMarshalInfo(valType.Elem()) + valCachedSizer = func(ptr pointer, tagsize int) int { + // Same as message sizer, but use cache. + p := ptr.getPointer() + if p.isNil() { + return 0 + } + siz := u.cachedsize(p) + return siz + SizeVarint(uint64(siz)) + tagsize + } + } + return func(ptr pointer, tagsize int) int { + m := ptr.asPointerTo(t).Elem() // the map + n := 0 + for _, k := range m.MapKeys() { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value + siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { + m := ptr.asPointerTo(t).Elem() // the map + var err error + keys := m.MapKeys() + if len(keys) > 1 && deterministic { + sort.Sort(mapKeys(keys)) + } + + var nerr nonFatal + for _, k := range keys { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value + b = appendVarint(b, tag) + siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + b = appendVarint(b, uint64(siz)) + b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) + if !nerr.Merge(err) { + return b, err + } + b, err = valMarshaler(b, vaddr, valWireTag, deterministic) + if err != ErrNil && !nerr.Merge(err) { // allow nil value in map + return b, err + } + } + return b, nerr.E + } +} + +// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. +// fi is the marshal info of the field. +// f is the pointer to the reflect data structure of the field. +func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { + // Oneof field is an interface. We need to get the actual data type on the fly. + t := f.Type + return func(ptr pointer, _ int) int { + p := ptr.getInterfacePointer() + if p.isNil() { + return 0 + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + e := fi.oneofElems[telem] + return e.sizer(p, e.tagsize) + }, + func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { + p := ptr.getInterfacePointer() + if p.isNil() { + return b, nil + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { + return b, errOneofHasNil + } + e := fi.oneofElems[telem] + return e.marshaler(b, p, e.wiretag, deterministic) + } +} + +// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. +func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + n += ei.sizer(p, ei.tagsize) + } + mu.Unlock() + return n +} + +// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. +func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + var nerr nonFatal + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E + } + + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// message set format is: +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// }; +// } + +// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field +// in message set format (above). +func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for id, e := range m { + n += 2 // start group, end group. tag = 1 (size=1) + n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + siz := len(msgWithLen) + n += siz + 1 // message, tag = 3 (size=1) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + n += ei.sizer(p, 1) // message, tag = 3 (size=1) + } + mu.Unlock() + return n +} + +// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) +// to the end of byte slice b. +func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + var nerr nonFatal + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for id, e := range m { + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + if !nerr.Merge(err) { + return b, err + } + b = append(b, 1<<3|WireEndGroup) + } + return b, nerr.E + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, id := range keys { + e := m[int32(id)] + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + b = append(b, 1<<3|WireEndGroup) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// sizeV1Extensions computes the size of encoded data for a V1-API extension field. +func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { + if m == nil { + return 0 + } + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + n += ei.sizer(p, ei.tagsize) + } + return n +} + +// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. +func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { + if m == nil { + return b, nil + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + var err error + var nerr nonFatal + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// newMarshaler is the interface representing objects that can marshal themselves. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newMarshaler interface { + XXX_Size() int + XXX_Marshal(b []byte, deterministic bool) ([]byte, error) +} + +// Size returns the encoded size of a protocol buffer message. +// This is the main entry point. +func Size(pb Message) int { + if m, ok := pb.(newMarshaler); ok { + return m.XXX_Size() + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, _ := m.Marshal() + return len(b) + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return 0 + } + var info InternalMessageInfo + return info.Size(pb) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, returning the data. +// This is the main entry point. +func Marshal(pb Message) ([]byte, error) { + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + b := make([]byte, 0, siz) + return m.XXX_Marshal(b, false) + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + return m.Marshal() + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return nil, ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + b := make([]byte, 0, siz) + return info.Marshal(b, pb, false) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, writing the result to the +// Buffer. +// This is an alternative entry point. It is not necessary to use +// a Buffer for most applications. +func (p *Buffer) Marshal(pb Message) error { + var err error + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + p.grow(siz) // make sure buf has enough capacity + p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) + return err + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, err := m.Marshal() + p.buf = append(p.buf, b...) + return err + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + p.grow(siz) // make sure buf has enough capacity + p.buf, err = info.Marshal(p.buf, pb, p.deterministic) + return err +} + +// grow grows the buffer's capacity, if necessary, to guarantee space for +// another n bytes. After grow(n), at least n bytes can be written to the +// buffer without another allocation. +func (p *Buffer) grow(n int) { + need := len(p.buf) + n + if need <= cap(p.buf) { + return + } + newCap := len(p.buf) * 2 + if newCap < need { + newCap = need + } + p.buf = append(make([]byte, 0, newCap), p.buf...) +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_merge.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_merge.go new file mode 100644 index 000000000..5525def6a --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_merge.go @@ -0,0 +1,654 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +// Merge merges the src message into dst. +// This assumes that dst and src of the same type and are non-nil. +func (a *InternalMessageInfo) Merge(dst, src Message) { + mi := atomicLoadMergeInfo(&a.merge) + if mi == nil { + mi = getMergeInfo(reflect.TypeOf(dst).Elem()) + atomicStoreMergeInfo(&a.merge, mi) + } + mi.merge(toPointer(&dst), toPointer(&src)) +} + +type mergeInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []mergeFieldInfo + unrecognized field // Offset of XXX_unrecognized +} + +type mergeFieldInfo struct { + field field // Offset of field, guaranteed to be valid + + // isPointer reports whether the value in the field is a pointer. + // This is true for the following situations: + // * Pointer to struct + // * Pointer to basic type (proto2 only) + // * Slice (first value in slice header is a pointer) + // * String (first value in string header is a pointer) + isPointer bool + + // basicWidth reports the width of the field assuming that it is directly + // embedded in the struct (as is the case for basic types in proto3). + // The possible values are: + // 0: invalid + // 1: bool + // 4: int32, uint32, float32 + // 8: int64, uint64, float64 + basicWidth int + + // Where dst and src are pointers to the types being merged. + merge func(dst, src pointer) +} + +var ( + mergeInfoMap = map[reflect.Type]*mergeInfo{} + mergeInfoLock sync.Mutex +) + +func getMergeInfo(t reflect.Type) *mergeInfo { + mergeInfoLock.Lock() + defer mergeInfoLock.Unlock() + mi := mergeInfoMap[t] + if mi == nil { + mi = &mergeInfo{typ: t} + mergeInfoMap[t] = mi + } + return mi +} + +// merge merges src into dst assuming they are both of type *mi.typ. +func (mi *mergeInfo) merge(dst, src pointer) { + if dst.isNil() { + panic("proto: nil destination") + } + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&mi.initialized) == 0 { + mi.computeMergeInfo() + } + + for _, fi := range mi.fields { + sfp := src.offset(fi.field) + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string + continue + } + if fi.basicWidth > 0 { + switch { + case fi.basicWidth == 1 && !*sfp.toBool(): + continue + case fi.basicWidth == 4 && *sfp.toUint32() == 0: + continue + case fi.basicWidth == 8 && *sfp.toUint64() == 0: + continue + } + } + } + + dfp := dst.offset(fi.field) + fi.merge(dfp, sfp) + } + + // TODO: Make this faster? + out := dst.asPointerTo(mi.typ).Elem() + in := src.asPointerTo(mi.typ).Elem() + if emIn, err := extendable(in.Addr().Interface()); err == nil { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } + } + + if mi.unrecognized.IsValid() { + if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { + *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) + } + } +} + +func (mi *mergeInfo) computeMergeInfo() { + mi.lock.Lock() + defer mi.lock.Unlock() + if mi.initialized != 0 { + return + } + t := mi.typ + n := t.NumField() + + props := GetProperties(t) + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + mfi := mergeFieldInfo{field: toField(&f)} + tf := f.Type + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + switch tf.Kind() { + case reflect.Ptr, reflect.Slice, reflect.String: + // As a special case, we assume slices and strings are pointers + // since we know that the first field in the SliceSlice or + // StringHeader is a data pointer. + mfi.isPointer = true + case reflect.Bool: + mfi.basicWidth = 1 + case reflect.Int32, reflect.Uint32, reflect.Float32: + mfi.basicWidth = 4 + case reflect.Int64, reflect.Uint64, reflect.Float64: + mfi.basicWidth = 8 + } + } + + // Unwrap tf to get at its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + tf.Name()) + } + + switch tf.Kind() { + case reflect.Int32: + switch { + case isSlice: // E.g., []int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Slice is not defined (see pointer_reflect.go). + /* + sfsp := src.toInt32Slice() + if *sfsp != nil { + dfsp := dst.toInt32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + */ + sfs := src.getInt32Slice() + if sfs != nil { + dfs := dst.getInt32Slice() + dfs = append(dfs, sfs...) + if dfs == nil { + dfs = []int32{} + } + dst.setInt32Slice(dfs) + } + } + case isPointer: // E.g., *int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). + /* + sfpp := src.toInt32Ptr() + if *sfpp != nil { + dfpp := dst.toInt32Ptr() + if *dfpp == nil { + *dfpp = Int32(**sfpp) + } else { + **dfpp = **sfpp + } + } + */ + sfp := src.getInt32Ptr() + if sfp != nil { + dfp := dst.getInt32Ptr() + if dfp == nil { + dst.setInt32Ptr(*sfp) + } else { + *dfp = *sfp + } + } + } + default: // E.g., int32 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt32(); v != 0 { + *dst.toInt32() = v + } + } + } + case reflect.Int64: + switch { + case isSlice: // E.g., []int64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toInt64Slice() + if *sfsp != nil { + dfsp := dst.toInt64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + } + case isPointer: // E.g., *int64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toInt64Ptr() + if *sfpp != nil { + dfpp := dst.toInt64Ptr() + if *dfpp == nil { + *dfpp = Int64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., int64 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt64(); v != 0 { + *dst.toInt64() = v + } + } + } + case reflect.Uint32: + switch { + case isSlice: // E.g., []uint32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint32Slice() + if *sfsp != nil { + dfsp := dst.toUint32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint32{} + } + } + } + case isPointer: // E.g., *uint32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint32Ptr() + if *sfpp != nil { + dfpp := dst.toUint32Ptr() + if *dfpp == nil { + *dfpp = Uint32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint32 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint32(); v != 0 { + *dst.toUint32() = v + } + } + } + case reflect.Uint64: + switch { + case isSlice: // E.g., []uint64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint64Slice() + if *sfsp != nil { + dfsp := dst.toUint64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint64{} + } + } + } + case isPointer: // E.g., *uint64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint64Ptr() + if *sfpp != nil { + dfpp := dst.toUint64Ptr() + if *dfpp == nil { + *dfpp = Uint64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint64 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint64(); v != 0 { + *dst.toUint64() = v + } + } + } + case reflect.Float32: + switch { + case isSlice: // E.g., []float32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat32Slice() + if *sfsp != nil { + dfsp := dst.toFloat32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float32{} + } + } + } + case isPointer: // E.g., *float32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat32Ptr() + if *sfpp != nil { + dfpp := dst.toFloat32Ptr() + if *dfpp == nil { + *dfpp = Float32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float32 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat32(); v != 0 { + *dst.toFloat32() = v + } + } + } + case reflect.Float64: + switch { + case isSlice: // E.g., []float64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat64Slice() + if *sfsp != nil { + dfsp := dst.toFloat64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float64{} + } + } + } + case isPointer: // E.g., *float64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat64Ptr() + if *sfpp != nil { + dfpp := dst.toFloat64Ptr() + if *dfpp == nil { + *dfpp = Float64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float64 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat64(); v != 0 { + *dst.toFloat64() = v + } + } + } + case reflect.Bool: + switch { + case isSlice: // E.g., []bool + mfi.merge = func(dst, src pointer) { + sfsp := src.toBoolSlice() + if *sfsp != nil { + dfsp := dst.toBoolSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []bool{} + } + } + } + case isPointer: // E.g., *bool + mfi.merge = func(dst, src pointer) { + sfpp := src.toBoolPtr() + if *sfpp != nil { + dfpp := dst.toBoolPtr() + if *dfpp == nil { + *dfpp = Bool(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., bool + mfi.merge = func(dst, src pointer) { + if v := *src.toBool(); v { + *dst.toBool() = v + } + } + } + case reflect.String: + switch { + case isSlice: // E.g., []string + mfi.merge = func(dst, src pointer) { + sfsp := src.toStringSlice() + if *sfsp != nil { + dfsp := dst.toStringSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []string{} + } + } + } + case isPointer: // E.g., *string + mfi.merge = func(dst, src pointer) { + sfpp := src.toStringPtr() + if *sfpp != nil { + dfpp := dst.toStringPtr() + if *dfpp == nil { + *dfpp = String(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., string + mfi.merge = func(dst, src pointer) { + if v := *src.toString(); v != "" { + *dst.toString() = v + } + } + } + case reflect.Slice: + isProto3 := props.Prop[i].proto3 + switch { + case isPointer: + panic("bad pointer in byte slice case in " + tf.Name()) + case tf.Elem().Kind() != reflect.Uint8: + panic("bad element kind in byte slice case in " + tf.Name()) + case isSlice: // E.g., [][]byte + mfi.merge = func(dst, src pointer) { + sbsp := src.toBytesSlice() + if *sbsp != nil { + dbsp := dst.toBytesSlice() + for _, sb := range *sbsp { + if sb == nil { + *dbsp = append(*dbsp, nil) + } else { + *dbsp = append(*dbsp, append([]byte{}, sb...)) + } + } + if *dbsp == nil { + *dbsp = [][]byte{} + } + } + } + default: // E.g., []byte + mfi.merge = func(dst, src pointer) { + sbp := src.toBytes() + if *sbp != nil { + dbp := dst.toBytes() + if !isProto3 || len(*sbp) > 0 { + *dbp = append([]byte{}, *sbp...) + } + } + } + } + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("message field %s without pointer", tf)) + case isSlice: // E.g., []*pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sps := src.getPointerSlice() + if sps != nil { + dps := dst.getPointerSlice() + for _, sp := range sps { + var dp pointer + if !sp.isNil() { + dp = valToPointer(reflect.New(tf)) + mi.merge(dp, sp) + } + dps = append(dps, dp) + } + if dps == nil { + dps = []pointer{} + } + dst.setPointerSlice(dps) + } + } + default: // E.g., *pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sp := src.getPointer() + if !sp.isNil() { + dp := dst.getPointer() + if dp.isNil() { + dp = valToPointer(reflect.New(tf)) + dst.setPointer(dp) + } + mi.merge(dp, sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic("bad pointer or slice in map case in " + tf.Name()) + default: // E.g., map[K]V + mfi.merge = func(dst, src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + dm := dst.asPointerTo(tf).Elem() + if dm.IsNil() { + dm.Set(reflect.MakeMap(tf)) + } + + switch tf.Elem().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(Clone(val.Interface().(Message))) + dm.SetMapIndex(key, val) + } + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) + dm.SetMapIndex(key, val) + } + default: // Basic type (e.g., string) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + dm.SetMapIndex(key, val) + } + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic("bad pointer or slice in interface case in " + tf.Name()) + default: // E.g., interface{} + // TODO: Make this faster? + mfi.merge = func(dst, src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + du := dst.asPointerTo(tf).Elem() + typ := su.Elem().Type() + if du.IsNil() || du.Elem().Type() != typ { + du.Set(reflect.New(typ.Elem())) // Initialize interface if empty + } + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + dv := du.Elem().Elem().Field(0) + if dv.Kind() == reflect.Ptr && dv.IsNil() { + dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + Merge(dv.Interface().(Message), sv.Interface().(Message)) + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) + default: // Basic type (e.g., string) + dv.Set(sv) + } + } + } + } + default: + panic(fmt.Sprintf("merger not found for type:%s", tf)) + } + mi.fields = append(mi.fields, mfi) + } + + mi.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + mi.unrecognized = toField(&f) + } + + atomic.StoreInt32(&mi.initialized, 1) +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_unmarshal.go new file mode 100644 index 000000000..fd4afec8d --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/table_unmarshal.go @@ -0,0 +1,2051 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "io" + "math" + "reflect" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// Unmarshal is the entry point from the generated .pb.go files. +// This function is not intended to be used by non-generated code. +// This function is not subject to any compatibility guarantee. +// msg contains a pointer to a protocol buffer struct. +// b is the data to be unmarshaled into the protocol buffer. +// a is a pointer to a place to store cached unmarshal information. +func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { + // Load the unmarshal information for this message type. + // The atomic load ensures memory consistency. + u := atomicLoadUnmarshalInfo(&a.unmarshal) + if u == nil { + // Slow path: find unmarshal info for msg, update a with it. + u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) + atomicStoreUnmarshalInfo(&a.unmarshal, u) + } + // Then do the unmarshaling. + err := u.unmarshal(toPointer(&msg), b) + return err +} + +type unmarshalInfo struct { + typ reflect.Type // type of the protobuf struct + + // 0 = only typ field is initialized + // 1 = completely initialized + initialized int32 + lock sync.Mutex // prevents double initialization + dense []unmarshalFieldInfo // fields indexed by tag # + sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # + reqFields []string // names of required fields + reqMask uint64 // 1< 0 { + // Read tag and wire type. + // Special case 1 and 2 byte varints. + var x uint64 + if b[0] < 128 { + x = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + x = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + x, n = decodeVarint(b) + if n == 0 { + return io.ErrUnexpectedEOF + } + b = b[n:] + } + tag := x >> 3 + wire := int(x) & 7 + + // Dispatch on the tag to one of the unmarshal* functions below. + var f unmarshalFieldInfo + if tag < uint64(len(u.dense)) { + f = u.dense[tag] + } else { + f = u.sparse[tag] + } + if fn := f.unmarshal; fn != nil { + var err error + b, err = fn(b, m.offset(f.field), wire) + if err == nil { + reqMask |= f.reqMask + continue + } + if r, ok := err.(*RequiredNotSetError); ok { + // Remember this error, but keep parsing. We need to produce + // a full parse even if a required field is missing. + if errLater == nil { + errLater = r + } + reqMask |= f.reqMask + continue + } + if err != errInternalBadWireType { + if err == errInvalidUTF8 { + if errLater == nil { + fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name + errLater = &invalidUTF8Error{fullName} + } + continue + } + return err + } + // Fragments with bad wire type are treated as unknown fields. + } + + // Unknown tag. + if !u.unrecognized.IsValid() { + // Don't keep unrecognized data; just skip it. + var err error + b, err = skipField(b, wire) + if err != nil { + return err + } + continue + } + // Keep unrecognized data around. + // maybe in extensions, maybe in the unrecognized field. + z := m.offset(u.unrecognized).toBytes() + var emap map[int32]Extension + var e Extension + for _, r := range u.extensionRanges { + if uint64(r.Start) <= tag && tag <= uint64(r.End) { + if u.extensions.IsValid() { + mp := m.offset(u.extensions).toExtensions() + emap = mp.extensionsWrite() + e = emap[int32(tag)] + z = &e.enc + break + } + if u.oldExtensions.IsValid() { + p := m.offset(u.oldExtensions).toOldExtensions() + emap = *p + if emap == nil { + emap = map[int32]Extension{} + *p = emap + } + e = emap[int32(tag)] + z = &e.enc + break + } + panic("no extensions field available") + } + } + + // Use wire type to skip data. + var err error + b0 := b + b, err = skipField(b, wire) + if err != nil { + return err + } + *z = encodeVarint(*z, tag<<3|uint64(wire)) + *z = append(*z, b0[:len(b0)-len(b)]...) + + if emap != nil { + emap[int32(tag)] = e + } + } + if reqMask != u.reqMask && errLater == nil { + // A required field of this message is missing. + for _, n := range u.reqFields { + if reqMask&1 == 0 { + errLater = &RequiredNotSetError{n} + } + reqMask >>= 1 + } + } + return errLater +} + +// computeUnmarshalInfo fills in u with information for use +// in unmarshaling protocol buffers of type u.typ. +func (u *unmarshalInfo) computeUnmarshalInfo() { + u.lock.Lock() + defer u.lock.Unlock() + if u.initialized != 0 { + return + } + t := u.typ + n := t.NumField() + + // Set up the "not found" value for the unrecognized byte buffer. + // This is the default for proto3. + u.unrecognized = invalidField + u.extensions = invalidField + u.oldExtensions = invalidField + + // List of the generated type and offset for each oneof field. + type oneofField struct { + ityp reflect.Type // interface type of oneof field + field field // offset in containing message + } + var oneofFields []oneofField + + for i := 0; i < n; i++ { + f := t.Field(i) + if f.Name == "XXX_unrecognized" { + // The byte slice used to hold unrecognized input is special. + if f.Type != reflect.TypeOf(([]byte)(nil)) { + panic("bad type for XXX_unrecognized field: " + f.Type.Name()) + } + u.unrecognized = toField(&f) + continue + } + if f.Name == "XXX_InternalExtensions" { + // Ditto here. + if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { + panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) + } + u.extensions = toField(&f) + if f.Tag.Get("protobuf_messageset") == "1" { + u.isMessageSet = true + } + continue + } + if f.Name == "XXX_extensions" { + // An older form of the extensions field. + if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { + panic("bad type for XXX_extensions field: " + f.Type.Name()) + } + u.oldExtensions = toField(&f) + continue + } + if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { + continue + } + + oneof := f.Tag.Get("protobuf_oneof") + if oneof != "" { + oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) + // The rest of oneof processing happens below. + continue + } + + tags := f.Tag.Get("protobuf") + tagArray := strings.Split(tags, ",") + if len(tagArray) < 2 { + panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) + } + tag, err := strconv.Atoi(tagArray[1]) + if err != nil { + panic("protobuf tag field not an integer: " + tagArray[1]) + } + + name := "" + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + } + + // Extract unmarshaling function from the field (its type and tags). + unmarshal := fieldUnmarshaler(&f) + + // Required field? + var reqMask uint64 + if tagArray[2] == "req" { + bit := len(u.reqFields) + u.reqFields = append(u.reqFields, name) + reqMask = uint64(1) << uint(bit) + // TODO: if we have more than 64 required fields, we end up + // not verifying that all required fields are present. + // Fix this, perhaps using a count of required fields? + } + + // Store the info in the correct slot in the message. + u.setTag(tag, toField(&f), unmarshal, reqMask, name) + } + + // Find any types associated with oneof fields. + // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it? + fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs") + if fn.IsValid() { + res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{} + for i := res.Len() - 1; i >= 0; i-- { + v := res.Index(i) // interface{} + tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X + typ := tptr.Elem() // Msg_X + + f := typ.Field(0) // oneof implementers have one field + baseUnmarshal := fieldUnmarshaler(&f) + tags := strings.Split(f.Tag.Get("protobuf"), ",") + fieldNum, err := strconv.Atoi(tags[1]) + if err != nil { + panic("protobuf tag field not an integer: " + tags[1]) + } + var name string + for _, tag := range tags { + if strings.HasPrefix(tag, "name=") { + name = strings.TrimPrefix(tag, "name=") + break + } + } + + // Find the oneof field that this struct implements. + // Might take O(n^2) to process all of the oneofs, but who cares. + for _, of := range oneofFields { + if tptr.Implements(of.ityp) { + // We have found the corresponding interface for this struct. + // That lets us know where this struct should be stored + // when we encounter it during unmarshaling. + unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) + u.setTag(fieldNum, of.field, unmarshal, 0, name) + } + } + } + } + + // Get extension ranges, if any. + fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") + if fn.IsValid() { + if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { + panic("a message with extensions, but no extensions field in " + t.Name()) + } + u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) + } + + // Explicitly disallow tag 0. This will ensure we flag an error + // when decoding a buffer of all zeros. Without this code, we + // would decode and skip an all-zero buffer of even length. + // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. + u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { + return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) + }, 0, "") + + // Set mask for required field check. + u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? + for len(u.dense) <= tag { + u.dense = append(u.dense, unmarshalFieldInfo{}) + } + u.dense[tag] = i + return + } + if u.sparse == nil { + u.sparse = map[uint64]unmarshalFieldInfo{} + } + u.sparse[uint64(tag)] = i +} + +// fieldUnmarshaler returns an unmarshaler for the given field. +func fieldUnmarshaler(f *reflect.StructField) unmarshaler { + if f.Type.Kind() == reflect.Map { + return makeUnmarshalMap(f) + } + return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) +} + +// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. +func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { + tagArray := strings.Split(tags, ",") + encoding := tagArray[0] + name := "unknown" + proto3 := false + validateUTF8 := true + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + if tag == "proto3" { + proto3 = true + } + } + validateUTF8 = validateUTF8 && proto3 + + // Figure out packaging (pointer, slice, or both) + slice := false + pointer := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + // We'll never have both pointer and slice for basic types. + if pointer && slice && t.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + t.Name()) + } + + switch t.Kind() { + case reflect.Bool: + if pointer { + return unmarshalBoolPtr + } + if slice { + return unmarshalBoolSlice + } + return unmarshalBoolValue + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixedS32Ptr + } + if slice { + return unmarshalFixedS32Slice + } + return unmarshalFixedS32Value + case "varint": + // this could be int32 or enum + if pointer { + return unmarshalInt32Ptr + } + if slice { + return unmarshalInt32Slice + } + return unmarshalInt32Value + case "zigzag32": + if pointer { + return unmarshalSint32Ptr + } + if slice { + return unmarshalSint32Slice + } + return unmarshalSint32Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixedS64Ptr + } + if slice { + return unmarshalFixedS64Slice + } + return unmarshalFixedS64Value + case "varint": + if pointer { + return unmarshalInt64Ptr + } + if slice { + return unmarshalInt64Slice + } + return unmarshalInt64Value + case "zigzag64": + if pointer { + return unmarshalSint64Ptr + } + if slice { + return unmarshalSint64Slice + } + return unmarshalSint64Value + } + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixed32Ptr + } + if slice { + return unmarshalFixed32Slice + } + return unmarshalFixed32Value + case "varint": + if pointer { + return unmarshalUint32Ptr + } + if slice { + return unmarshalUint32Slice + } + return unmarshalUint32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixed64Ptr + } + if slice { + return unmarshalFixed64Slice + } + return unmarshalFixed64Value + case "varint": + if pointer { + return unmarshalUint64Ptr + } + if slice { + return unmarshalUint64Slice + } + return unmarshalUint64Value + } + case reflect.Float32: + if pointer { + return unmarshalFloat32Ptr + } + if slice { + return unmarshalFloat32Slice + } + return unmarshalFloat32Value + case reflect.Float64: + if pointer { + return unmarshalFloat64Ptr + } + if slice { + return unmarshalFloat64Slice + } + return unmarshalFloat64Value + case reflect.Map: + panic("map type in typeUnmarshaler in " + t.Name()) + case reflect.Slice: + if pointer { + panic("bad pointer in slice case in " + t.Name()) + } + if slice { + return unmarshalBytesSlice + } + return unmarshalBytesValue + case reflect.String: + if validateUTF8 { + if pointer { + return unmarshalUTF8StringPtr + } + if slice { + return unmarshalUTF8StringSlice + } + return unmarshalUTF8StringValue + } + if pointer { + return unmarshalStringPtr + } + if slice { + return unmarshalStringSlice + } + return unmarshalStringValue + case reflect.Struct: + // message or group field + if !pointer { + panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) + } + switch encoding { + case "bytes": + if slice { + return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) + case "group": + if slice { + return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) + } + } + panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) +} + +// Below are all the unmarshalers for individual fields of various types. + +func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64() = v + return b, nil +} + +func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64() = v + return b, nil +} + +func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64() = v + return b, nil +} + +func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64Ptr() = &v + return b, nil +} + +func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + *f.toInt32() = v + return b, nil +} + +func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + *f.toInt32() = v + return b, nil +} + +func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32() = v + return b, nil +} + +func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32Ptr() = &v + return b, nil +} + +func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64() = v + return b[8:], nil +} + +func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64() = v + return b[8:], nil +} + +func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32() = v + return b[4:], nil +} + +func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32Ptr() = &v + return b[4:], nil +} + +func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + *f.toInt32() = v + return b[4:], nil +} + +func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.setInt32Ptr(v) + return b[4:], nil +} + +func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + return b[4:], nil +} + +func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + // Note: any length varint is allowed, even though any sane + // encoder will use one byte. + // See https://github.com/golang/protobuf/issues/76 + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + // TODO: check if x>1? Tests seem to indicate no. + v := x != 0 + *f.toBool() = v + return b[n:], nil +} + +func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + *f.toBoolPtr() = &v + return b[n:], nil +} + +func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + b = b[n:] + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + return b[n:], nil +} + +func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64() = v + return b[8:], nil +} + +func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64Ptr() = &v + return b[8:], nil +} + +func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32() = v + return b[4:], nil +} + +func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32Ptr() = &v + return b[4:], nil +} + +func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toString() = v + return b[x:], nil +} + +func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toStringPtr() = &v + return b[x:], nil +} + +func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + s := f.toStringSlice() + *s = append(*s, v) + return b[x:], nil +} + +func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toString() = v + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toStringPtr() = &v + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + s := f.toStringSlice() + *s = append(*s, v) + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +var emptyBuf [0]byte + +func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // The use of append here is a trick which avoids the zeroing + // that would be required if we used a make/copy pair. + // We append to emptyBuf instead of nil because we want + // a non-nil result even when the length is 0. + v := append(emptyBuf[:], b[:x]...) + *f.toBytes() = v + return b[x:], nil +} + +func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := append(emptyBuf[:], b[:x]...) + s := f.toBytesSlice() + *s = append(*s, v) + return b[x:], nil +} + +func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // First read the message field to see if something is there. + // The semantics of multiple submessages are weird. Instead of + // the last one winning (as it is for all other fields), multiple + // submessages are merged. + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[x:], err + } +} + +func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[x:], err + } +} + +func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[y:], err + } +} + +func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[y:], err + } +} + +func makeUnmarshalMap(f *reflect.StructField) unmarshaler { + t := f.Type + kt := t.Key() + vt := t.Elem() + unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) + unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) + return func(b []byte, f pointer, w int) ([]byte, error) { + // The map entry is a submessage. Figure out how big it is. + if w != WireBytes { + return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + r := b[x:] // unused data to return + b = b[:x] // data for map entry + + // Note: we could use #keys * #values ~= 200 functions + // to do map decoding without reflection. Probably not worth it. + // Maps will be somewhat slow. Oh well. + + // Read key and value from data. + var nerr nonFatal + k := reflect.New(kt) + v := reflect.New(vt) + for len(b) > 0 { + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + wire := int(x) & 7 + b = b[n:] + + var err error + switch x >> 3 { + case 1: + b, err = unmarshalKey(b, valToPointer(k), wire) + case 2: + b, err = unmarshalVal(b, valToPointer(v), wire) + default: + err = errInternalBadWireType // skip unknown tag + } + + if nerr.Merge(err) { + continue + } + if err != errInternalBadWireType { + return nil, err + } + + // Skip past unknown fields. + b, err = skipField(b, wire) + if err != nil { + return nil, err + } + } + + // Get map, allocate if needed. + m := f.asPointerTo(t).Elem() // an addressable map[K]T + if m.IsNil() { + m.Set(reflect.MakeMap(t)) + } + + // Insert into map. + m.SetMapIndex(k.Elem(), v.Elem()) + + return r, nerr.E + } +} + +// makeUnmarshalOneof makes an unmarshaler for oneof fields. +// for: +// message Msg { +// oneof F { +// int64 X = 1; +// float64 Y = 2; +// } +// } +// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). +// ityp is the interface type of the oneof field (e.g. isMsg_F). +// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). +// Note that this function will be called once for each case in the oneof. +func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { + sf := typ.Field(0) + field0 := toField(&sf) + return func(b []byte, f pointer, w int) ([]byte, error) { + // Allocate holder for value. + v := reflect.New(typ) + + // Unmarshal data into holder. + // We unmarshal into the first field of the holder object. + var err error + var nerr nonFatal + b, err = unmarshal(b, valToPointer(v).offset(field0), w) + if !nerr.Merge(err) { + return nil, err + } + + // Write pointer to holder into target field. + f.asPointerTo(ityp).Elem().Set(v) + + return b, nerr.E + } +} + +// Error used by decode internally. +var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") + +// skipField skips past a field of type wire and returns the remaining bytes. +func skipField(b []byte, wire int) ([]byte, error) { + switch wire { + case WireVarint: + _, k := decodeVarint(b) + if k == 0 { + return b, io.ErrUnexpectedEOF + } + b = b[k:] + case WireFixed32: + if len(b) < 4 { + return b, io.ErrUnexpectedEOF + } + b = b[4:] + case WireFixed64: + if len(b) < 8 { + return b, io.ErrUnexpectedEOF + } + b = b[8:] + case WireBytes: + m, k := decodeVarint(b) + if k == 0 || uint64(len(b)-k) < m { + return b, io.ErrUnexpectedEOF + } + b = b[uint64(k)+m:] + case WireStartGroup: + _, i := findEndGroup(b) + if i == -1 { + return b, io.ErrUnexpectedEOF + } + b = b[i:] + default: + return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) + } + return b, nil +} + +// findEndGroup finds the index of the next EndGroup tag. +// Groups may be nested, so the "next" EndGroup tag is the first +// unpaired EndGroup. +// findEndGroup returns the indexes of the start and end of the EndGroup tag. +// Returns (-1,-1) if it can't find one. +func findEndGroup(b []byte) (int, int) { + depth := 1 + i := 0 + for { + x, n := decodeVarint(b[i:]) + if n == 0 { + return -1, -1 + } + j := i + i += n + switch x & 7 { + case WireVarint: + _, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + case WireFixed32: + if len(b)-4 < i { + return -1, -1 + } + i += 4 + case WireFixed64: + if len(b)-8 < i { + return -1, -1 + } + i += 8 + case WireBytes: + m, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + if uint64(len(b)-i) < m { + return -1, -1 + } + i += int(m) + case WireStartGroup: + depth++ + case WireEndGroup: + depth-- + if depth == 0 { + return j, i + } + default: + return -1, -1 + } + } +} + +// encodeVarint appends a varint-encoded integer to b and returns the result. +func encodeVarint(b []byte, x uint64) []byte { + for x >= 1<<7 { + b = append(b, byte(x&0x7f|0x80)) + x >>= 7 + } + return append(b, byte(x)) +} + +// decodeVarint reads a varint-encoded integer from b. +// Returns the decoded integer and the number of bytes read. +// If there is an error, it returns 0,0. +func decodeVarint(b []byte) (uint64, int) { + var x, y uint64 + if len(b) == 0 { + goto bad + } + x = uint64(b[0]) + if x < 0x80 { + return x, 1 + } + x -= 0x80 + + if len(b) <= 1 { + goto bad + } + y = uint64(b[1]) + x += y << 7 + if y < 0x80 { + return x, 2 + } + x -= 0x80 << 7 + + if len(b) <= 2 { + goto bad + } + y = uint64(b[2]) + x += y << 14 + if y < 0x80 { + return x, 3 + } + x -= 0x80 << 14 + + if len(b) <= 3 { + goto bad + } + y = uint64(b[3]) + x += y << 21 + if y < 0x80 { + return x, 4 + } + x -= 0x80 << 21 + + if len(b) <= 4 { + goto bad + } + y = uint64(b[4]) + x += y << 28 + if y < 0x80 { + return x, 5 + } + x -= 0x80 << 28 + + if len(b) <= 5 { + goto bad + } + y = uint64(b[5]) + x += y << 35 + if y < 0x80 { + return x, 6 + } + x -= 0x80 << 35 + + if len(b) <= 6 { + goto bad + } + y = uint64(b[6]) + x += y << 42 + if y < 0x80 { + return x, 7 + } + x -= 0x80 << 42 + + if len(b) <= 7 { + goto bad + } + y = uint64(b[7]) + x += y << 49 + if y < 0x80 { + return x, 8 + } + x -= 0x80 << 49 + + if len(b) <= 8 { + goto bad + } + y = uint64(b[8]) + x += y << 56 + if y < 0x80 { + return x, 9 + } + x -= 0x80 << 56 + + if len(b) <= 9 { + goto bad + } + y = uint64(b[9]) + x += y << 63 + if y < 2 { + return x, 10 + } + +bad: + return 0, 0 +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text.go new file mode 100644 index 000000000..1aaee725b --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text.go @@ -0,0 +1,843 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for writing the text protocol buffer format. + +import ( + "bufio" + "bytes" + "encoding" + "errors" + "fmt" + "io" + "log" + "math" + "reflect" + "sort" + "strings" +) + +var ( + newline = []byte("\n") + spaces = []byte(" ") + endBraceNewline = []byte("}\n") + backslashN = []byte{'\\', 'n'} + backslashR = []byte{'\\', 'r'} + backslashT = []byte{'\\', 't'} + backslashDQ = []byte{'\\', '"'} + backslashBS = []byte{'\\', '\\'} + posInf = []byte("inf") + negInf = []byte("-inf") + nan = []byte("nan") +) + +type writer interface { + io.Writer + WriteByte(byte) error +} + +// textWriter is an io.Writer that tracks its indentation level. +type textWriter struct { + ind int + complete bool // if the current position is a complete line + compact bool // whether to write out as a one-liner + w writer +} + +func (w *textWriter) WriteString(s string) (n int, err error) { + if !strings.Contains(s, "\n") { + if !w.compact && w.complete { + w.writeIndent() + } + w.complete = false + return io.WriteString(w.w, s) + } + // WriteString is typically called without newlines, so this + // codepath and its copy are rare. We copy to avoid + // duplicating all of Write's logic here. + return w.Write([]byte(s)) +} + +func (w *textWriter) Write(p []byte) (n int, err error) { + newlines := bytes.Count(p, newline) + if newlines == 0 { + if !w.compact && w.complete { + w.writeIndent() + } + n, err = w.w.Write(p) + w.complete = false + return n, err + } + + frags := bytes.SplitN(p, newline, newlines+1) + if w.compact { + for i, frag := range frags { + if i > 0 { + if err := w.w.WriteByte(' '); err != nil { + return n, err + } + n++ + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + } + return n, nil + } + + for i, frag := range frags { + if w.complete { + w.writeIndent() + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + if i+1 < len(frags) { + if err := w.w.WriteByte('\n'); err != nil { + return n, err + } + n++ + } + } + w.complete = len(frags[len(frags)-1]) == 0 + return n, nil +} + +func (w *textWriter) WriteByte(c byte) error { + if w.compact && c == '\n' { + c = ' ' + } + if !w.compact && w.complete { + w.writeIndent() + } + err := w.w.WriteByte(c) + w.complete = c == '\n' + return err +} + +func (w *textWriter) indent() { w.ind++ } + +func (w *textWriter) unindent() { + if w.ind == 0 { + log.Print("proto: textWriter unindented too far") + return + } + w.ind-- +} + +func writeName(w *textWriter, props *Properties) error { + if _, err := w.WriteString(props.OrigName); err != nil { + return err + } + if props.Wire != "group" { + return w.WriteByte(':') + } + return nil +} + +func requiresQuotes(u string) bool { + // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. + for _, ch := range u { + switch { + case ch == '.' || ch == '/' || ch == '_': + continue + case '0' <= ch && ch <= '9': + continue + case 'A' <= ch && ch <= 'Z': + continue + case 'a' <= ch && ch <= 'z': + continue + default: + return true + } + } + return false +} + +// isAny reports whether sv is a google.protobuf.Any message +func isAny(sv reflect.Value) bool { + type wkt interface { + XXX_WellKnownType() string + } + t, ok := sv.Addr().Interface().(wkt) + return ok && t.XXX_WellKnownType() == "Any" +} + +// writeProto3Any writes an expanded google.protobuf.Any message. +// +// It returns (false, nil) if sv value can't be unmarshaled (e.g. because +// required messages are not linked in). +// +// It returns (true, error) when sv was written in expanded format or an error +// was encountered. +func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { + turl := sv.FieldByName("TypeUrl") + val := sv.FieldByName("Value") + if !turl.IsValid() || !val.IsValid() { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + b, ok := val.Interface().([]byte) + if !ok { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + parts := strings.Split(turl.String(), "/") + mt := MessageType(parts[len(parts)-1]) + if mt == nil { + return false, nil + } + m := reflect.New(mt.Elem()) + if err := Unmarshal(b, m.Interface().(Message)); err != nil { + return false, nil + } + w.Write([]byte("[")) + u := turl.String() + if requiresQuotes(u) { + writeString(w, u) + } else { + w.Write([]byte(u)) + } + if w.compact { + w.Write([]byte("]:<")) + } else { + w.Write([]byte("]: <\n")) + w.ind++ + } + if err := tm.writeStruct(w, m.Elem()); err != nil { + return true, err + } + if w.compact { + w.Write([]byte("> ")) + } else { + w.ind-- + w.Write([]byte(">\n")) + } + return true, nil +} + +func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { + if tm.ExpandAny && isAny(sv) { + if canExpand, err := tm.writeProto3Any(w, sv); canExpand { + return err + } + } + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < sv.NumField(); i++ { + fv := sv.Field(i) + props := sprops.Prop[i] + name := st.Field(i).Name + + if name == "XXX_NoUnkeyedLiteral" { + continue + } + + if strings.HasPrefix(name, "XXX_") { + // There are two XXX_ fields: + // XXX_unrecognized []byte + // XXX_extensions map[int32]proto.Extension + // The first is handled here; + // the second is handled at the bottom of this function. + if name == "XXX_unrecognized" && !fv.IsNil() { + if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Field not filled in. This could be an optional field or + // a required field that wasn't filled in. Either way, there + // isn't anything we can show for it. + continue + } + if fv.Kind() == reflect.Slice && fv.IsNil() { + // Repeated field that is empty, or a bytes field that is unused. + continue + } + + if props.Repeated && fv.Kind() == reflect.Slice { + // Repeated field. + for j := 0; j < fv.Len(); j++ { + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + v := fv.Index(j) + if v.Kind() == reflect.Ptr && v.IsNil() { + // A nil message in a repeated field is not valid, + // but we can handle that more gracefully than panicking. + if _, err := w.Write([]byte("\n")); err != nil { + return err + } + continue + } + if err := tm.writeAny(w, v, props); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Map { + // Map fields are rendered as a repeated struct with key/value fields. + keys := fv.MapKeys() + sort.Sort(mapKeys(keys)) + for _, key := range keys { + val := fv.MapIndex(key) + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + // open struct + if err := w.WriteByte('<'); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + // key + if _, err := w.WriteString("key:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, key, props.MapKeyProp); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + // nil values aren't legal, but we can avoid panicking because of them. + if val.Kind() != reflect.Ptr || !val.IsNil() { + // value + if _, err := w.WriteString("value:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, val, props.MapValProp); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + // close struct + w.unindent() + if err := w.WriteByte('>'); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { + // empty bytes field + continue + } + if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { + // proto3 non-repeated scalar field; skip if zero value + if isProto3Zero(fv) { + continue + } + } + + if fv.Kind() == reflect.Interface { + // Check if it is a oneof. + if st.Field(i).Tag.Get("protobuf_oneof") != "" { + // fv is nil, or holds a pointer to generated struct. + // That generated struct has exactly one field, + // which has a protobuf struct tag. + if fv.IsNil() { + continue + } + inner := fv.Elem().Elem() // interface -> *T -> T + tag := inner.Type().Field(0).Tag.Get("protobuf") + props = new(Properties) // Overwrite the outer props var, but not its pointee. + props.Parse(tag) + // Write the value in the oneof, not the oneof itself. + fv = inner.Field(0) + + // Special case to cope with malformed messages gracefully: + // If the value in the oneof is a nil pointer, don't panic + // in writeAny. + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Use errors.New so writeAny won't render quotes. + msg := errors.New("/* nil */") + fv = reflect.ValueOf(&msg).Elem() + } + } + } + + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + + // Enums have a String method, so writeAny will work fine. + if err := tm.writeAny(w, fv, props); err != nil { + return err + } + + if err := w.WriteByte('\n'); err != nil { + return err + } + } + + // Extensions (the XXX_extensions field). + pv := sv.Addr() + if _, err := extendable(pv.Interface()); err == nil { + if err := tm.writeExtensions(w, pv); err != nil { + return err + } + } + + return nil +} + +// writeAny writes an arbitrary field. +func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { + v = reflect.Indirect(v) + + // Floats have special cases. + if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { + x := v.Float() + var b []byte + switch { + case math.IsInf(x, 1): + b = posInf + case math.IsInf(x, -1): + b = negInf + case math.IsNaN(x): + b = nan + } + if b != nil { + _, err := w.Write(b) + return err + } + // Other values are handled below. + } + + // We don't attempt to serialise every possible value type; only those + // that can occur in protocol buffers. + switch v.Kind() { + case reflect.Slice: + // Should only be a []byte; repeated fields are handled in writeStruct. + if err := writeString(w, string(v.Bytes())); err != nil { + return err + } + case reflect.String: + if err := writeString(w, v.String()); err != nil { + return err + } + case reflect.Struct: + // Required/optional group/message. + var bra, ket byte = '<', '>' + if props != nil && props.Wire == "group" { + bra, ket = '{', '}' + } + if err := w.WriteByte(bra); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + if v.CanAddr() { + // Calling v.Interface on a struct causes the reflect package to + // copy the entire struct. This is racy with the new Marshaler + // since we atomically update the XXX_sizecache. + // + // Thus, we retrieve a pointer to the struct if possible to avoid + // a race since v.Interface on the pointer doesn't copy the struct. + // + // If v is not addressable, then we are not worried about a race + // since it implies that the binary Marshaler cannot possibly be + // mutating this value. + v = v.Addr() + } + if etm, ok := v.Interface().(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = w.Write(text); err != nil { + return err + } + } else { + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if err := tm.writeStruct(w, v); err != nil { + return err + } + } + w.unindent() + if err := w.WriteByte(ket); err != nil { + return err + } + default: + _, err := fmt.Fprint(w, v.Interface()) + return err + } + return nil +} + +// equivalent to C's isprint. +func isprint(c byte) bool { + return c >= 0x20 && c < 0x7f +} + +// writeString writes a string in the protocol buffer text format. +// It is similar to strconv.Quote except we don't use Go escape sequences, +// we treat the string as a byte sequence, and we use octal escapes. +// These differences are to maintain interoperability with the other +// languages' implementations of the text format. +func writeString(w *textWriter, s string) error { + // use WriteByte here to get any needed indent + if err := w.WriteByte('"'); err != nil { + return err + } + // Loop over the bytes, not the runes. + for i := 0; i < len(s); i++ { + var err error + // Divergence from C++: we don't escape apostrophes. + // There's no need to escape them, and the C++ parser + // copes with a naked apostrophe. + switch c := s[i]; c { + case '\n': + _, err = w.w.Write(backslashN) + case '\r': + _, err = w.w.Write(backslashR) + case '\t': + _, err = w.w.Write(backslashT) + case '"': + _, err = w.w.Write(backslashDQ) + case '\\': + _, err = w.w.Write(backslashBS) + default: + if isprint(c) { + err = w.w.WriteByte(c) + } else { + _, err = fmt.Fprintf(w.w, "\\%03o", c) + } + } + if err != nil { + return err + } + } + return w.WriteByte('"') +} + +func writeUnknownStruct(w *textWriter, data []byte) (err error) { + if !w.compact { + if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { + return err + } + } + b := NewBuffer(data) + for b.index < len(b.buf) { + x, err := b.DecodeVarint() + if err != nil { + _, err := fmt.Fprintf(w, "/* %v */\n", err) + return err + } + wire, tag := x&7, x>>3 + if wire == WireEndGroup { + w.unindent() + if _, err := w.Write(endBraceNewline); err != nil { + return err + } + continue + } + if _, err := fmt.Fprint(w, tag); err != nil { + return err + } + if wire != WireStartGroup { + if err := w.WriteByte(':'); err != nil { + return err + } + } + if !w.compact || wire == WireStartGroup { + if err := w.WriteByte(' '); err != nil { + return err + } + } + switch wire { + case WireBytes: + buf, e := b.DecodeRawBytes(false) + if e == nil { + _, err = fmt.Fprintf(w, "%q", buf) + } else { + _, err = fmt.Fprintf(w, "/* %v */", e) + } + case WireFixed32: + x, err = b.DecodeFixed32() + err = writeUnknownInt(w, x, err) + case WireFixed64: + x, err = b.DecodeFixed64() + err = writeUnknownInt(w, x, err) + case WireStartGroup: + err = w.WriteByte('{') + w.indent() + case WireVarint: + x, err = b.DecodeVarint() + err = writeUnknownInt(w, x, err) + default: + _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) + } + if err != nil { + return err + } + if err = w.WriteByte('\n'); err != nil { + return err + } + } + return nil +} + +func writeUnknownInt(w *textWriter, x uint64, err error) error { + if err == nil { + _, err = fmt.Fprint(w, x) + } else { + _, err = fmt.Fprintf(w, "/* %v */", err) + } + return err +} + +type int32Slice []int32 + +func (s int32Slice) Len() int { return len(s) } +func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } +func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// writeExtensions writes all the extensions in pv. +// pv is assumed to be a pointer to a protocol message struct that is extendable. +func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { + emap := extensionMaps[pv.Type().Elem()] + ep, _ := extendable(pv.Interface()) + + // Order the extensions by ID. + // This isn't strictly necessary, but it will give us + // canonical output, which will also make testing easier. + m, mu := ep.extensionsRead() + if m == nil { + return nil + } + mu.Lock() + ids := make([]int32, 0, len(m)) + for id := range m { + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) + mu.Unlock() + + for _, extNum := range ids { + ext := m[extNum] + var desc *ExtensionDesc + if emap != nil { + desc = emap[extNum] + } + if desc == nil { + // Unknown extension. + if err := writeUnknownStruct(w, ext.enc); err != nil { + return err + } + continue + } + + pb, err := GetExtension(ep, desc) + if err != nil { + return fmt.Errorf("failed getting extension: %v", err) + } + + // Repeated extensions will appear as a slice. + if !desc.repeated() { + if err := tm.writeExtension(w, desc.Name, pb); err != nil { + return err + } + } else { + v := reflect.ValueOf(pb) + for i := 0; i < v.Len(); i++ { + if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { + return err + } + } + } + } + return nil +} + +func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { + if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + return nil +} + +func (w *textWriter) writeIndent() { + if !w.complete { + return + } + remain := w.ind * 2 + for remain > 0 { + n := remain + if n > len(spaces) { + n = len(spaces) + } + w.w.Write(spaces[:n]) + remain -= n + } + w.complete = false +} + +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line). + ExpandAny bool // expand google.protobuf.Any messages of known types +} + +// Marshal writes a given protocol buffer in text format. +// The only errors returned are from w. +func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { + val := reflect.ValueOf(pb) + if pb == nil || val.IsNil() { + w.Write([]byte("")) + return nil + } + var bw *bufio.Writer + ww, ok := w.(writer) + if !ok { + bw = bufio.NewWriter(w) + ww = bw + } + aw := &textWriter{ + w: ww, + complete: true, + compact: tm.Compact, + } + + if etm, ok := pb.(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = aw.Write(text); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil + } + // Dereference the received pointer so we don't have outer < and >. + v := reflect.Indirect(val) + if err := tm.writeStruct(aw, v); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil +} + +// Text is the same as Marshal, but returns the string directly. +func (tm *TextMarshaler) Text(pb Message) string { + var buf bytes.Buffer + tm.Marshal(&buf, pb) + return buf.String() +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// TODO: consider removing some of the Marshal functions below. + +// MarshalText writes a given protocol buffer in text format. +// The only errors returned are from w. +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } + +// MarshalTextString is the same as MarshalText, but returns the string directly. +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } + +// CompactText writes a given protocol buffer in compact text format (one line). +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } + +// CompactTextString is the same as CompactText, but returns the string directly. +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text_parser.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text_parser.go new file mode 100644 index 000000000..bb55a3af2 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -0,0 +1,880 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for parsing the Text protocol buffer format. +// TODO: message sets. + +import ( + "encoding" + "errors" + "fmt" + "reflect" + "strconv" + "strings" + "unicode/utf8" +) + +// Error string emitted when deserializing Any and fields are already set +const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" + +type ParseError struct { + Message string + Line int // 1-based line number + Offset int // 0-based byte offset from start of input +} + +func (p *ParseError) Error() string { + if p.Line == 1 { + // show offset only for first line + return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) + } + return fmt.Sprintf("line %d: %v", p.Line, p.Message) +} + +type token struct { + value string + err *ParseError + line int // line number + offset int // byte number from start of input, not start of line + unquoted string // the unquoted version of value, if it was a quoted string +} + +func (t *token) String() string { + if t.err == nil { + return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) + } + return fmt.Sprintf("parse error: %v", t.err) +} + +type textParser struct { + s string // remaining input + done bool // whether the parsing is finished (success or error) + backed bool // whether back() was called + offset, line int + cur token +} + +func newTextParser(s string) *textParser { + p := new(textParser) + p.s = s + p.line = 1 + p.cur.line = 1 + return p +} + +func (p *textParser) errorf(format string, a ...interface{}) *ParseError { + pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} + p.cur.err = pe + p.done = true + return pe +} + +// Numbers and identifiers are matched by [-+._A-Za-z0-9] +func isIdentOrNumberChar(c byte) bool { + switch { + case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': + return true + case '0' <= c && c <= '9': + return true + } + switch c { + case '-', '+', '.', '_': + return true + } + return false +} + +func isWhitespace(c byte) bool { + switch c { + case ' ', '\t', '\n', '\r': + return true + } + return false +} + +func isQuote(c byte) bool { + switch c { + case '"', '\'': + return true + } + return false +} + +func (p *textParser) skipWhitespace() { + i := 0 + for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { + if p.s[i] == '#' { + // comment; skip to end of line or input + for i < len(p.s) && p.s[i] != '\n' { + i++ + } + if i == len(p.s) { + break + } + } + if p.s[i] == '\n' { + p.line++ + } + i++ + } + p.offset += i + p.s = p.s[i:len(p.s)] + if len(p.s) == 0 { + p.done = true + } +} + +func (p *textParser) advance() { + // Skip whitespace + p.skipWhitespace() + if p.done { + return + } + + // Start of non-whitespace + p.cur.err = nil + p.cur.offset, p.cur.line = p.offset, p.line + p.cur.unquoted = "" + switch p.s[0] { + case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': + // Single symbol + p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] + case '"', '\'': + // Quoted string + i := 1 + for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { + if p.s[i] == '\\' && i+1 < len(p.s) { + // skip escaped char + i++ + } + i++ + } + if i >= len(p.s) || p.s[i] != p.s[0] { + p.errorf("unmatched quote") + return + } + unq, err := unquoteC(p.s[1:i], rune(p.s[0])) + if err != nil { + p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) + return + } + p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] + p.cur.unquoted = unq + default: + i := 0 + for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { + i++ + } + if i == 0 { + p.errorf("unexpected byte %#x", p.s[0]) + return + } + p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] + } + p.offset += len(p.cur.value) +} + +var ( + errBadUTF8 = errors.New("proto: bad UTF-8") +) + +func unquoteC(s string, quote rune) (string, error) { + // This is based on C++'s tokenizer.cc. + // Despite its name, this is *not* parsing C syntax. + // For instance, "\0" is an invalid quoted string. + + // Avoid allocation in trivial cases. + simple := true + for _, r := range s { + if r == '\\' || r == quote { + simple = false + break + } + } + if simple { + return s, nil + } + + buf := make([]byte, 0, 3*len(s)/2) + for len(s) > 0 { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", errBadUTF8 + } + s = s[n:] + if r != '\\' { + if r < utf8.RuneSelf { + buf = append(buf, byte(r)) + } else { + buf = append(buf, string(r)...) + } + continue + } + + ch, tail, err := unescape(s) + if err != nil { + return "", err + } + buf = append(buf, ch...) + s = tail + } + return string(buf), nil +} + +func unescape(s string) (ch string, tail string, err error) { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", "", errBadUTF8 + } + s = s[n:] + switch r { + case 'a': + return "\a", s, nil + case 'b': + return "\b", s, nil + case 'f': + return "\f", s, nil + case 'n': + return "\n", s, nil + case 'r': + return "\r", s, nil + case 't': + return "\t", s, nil + case 'v': + return "\v", s, nil + case '?': + return "?", s, nil // trigraph workaround + case '\'', '"', '\\': + return string(r), s, nil + case '0', '1', '2', '3', '4', '5', '6', '7': + if len(s) < 2 { + return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) + } + ss := string(r) + s[:2] + s = s[2:] + i, err := strconv.ParseUint(ss, 8, 8) + if err != nil { + return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) + } + return string([]byte{byte(i)}), s, nil + case 'x', 'X', 'u', 'U': + var n int + switch r { + case 'x', 'X': + n = 2 + case 'u': + n = 4 + case 'U': + n = 8 + } + if len(s) < n { + return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) + } + ss := s[:n] + s = s[n:] + i, err := strconv.ParseUint(ss, 16, 64) + if err != nil { + return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) + } + if r == 'x' || r == 'X' { + return string([]byte{byte(i)}), s, nil + } + if i > utf8.MaxRune { + return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) + } + return string(i), s, nil + } + return "", "", fmt.Errorf(`unknown escape \%c`, r) +} + +// Back off the parser by one token. Can only be done between calls to next(). +// It makes the next advance() a no-op. +func (p *textParser) back() { p.backed = true } + +// Advances the parser and returns the new current token. +func (p *textParser) next() *token { + if p.backed || p.done { + p.backed = false + return &p.cur + } + p.advance() + if p.done { + p.cur.value = "" + } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { + // Look for multiple quoted strings separated by whitespace, + // and concatenate them. + cat := p.cur + for { + p.skipWhitespace() + if p.done || !isQuote(p.s[0]) { + break + } + p.advance() + if p.cur.err != nil { + return &p.cur + } + cat.value += " " + p.cur.value + cat.unquoted += p.cur.unquoted + } + p.done = false // parser may have seen EOF, but we want to return cat + p.cur = cat + } + return &p.cur +} + +func (p *textParser) consumeToken(s string) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != s { + p.back() + return p.errorf("expected %q, found %q", s, tok.value) + } + return nil +} + +// Return a RequiredNotSetError indicating which required field was not set. +func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < st.NumField(); i++ { + if !isNil(sv.Field(i)) { + continue + } + + props := sprops.Prop[i] + if props.Required { + return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} + } + } + return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen +} + +// Returns the index in the struct for the named field, as well as the parsed tag properties. +func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { + i, ok := sprops.decoderOrigNames[name] + if ok { + return i, sprops.Prop[i], true + } + return -1, nil, false +} + +// Consume a ':' from the input stream (if the next token is a colon), +// returning an error if a colon is needed but not present. +func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ":" { + // Colon is optional when the field is a group or message. + needColon := true + switch props.Wire { + case "group": + needColon = false + case "bytes": + // A "bytes" field is either a message, a string, or a repeated field; + // those three become *T, *string and []T respectively, so we can check for + // this field being a pointer to a non-string. + if typ.Kind() == reflect.Ptr { + // *T or *string + if typ.Elem().Kind() == reflect.String { + break + } + } else if typ.Kind() == reflect.Slice { + // []T or []*T + if typ.Elem().Kind() != reflect.Ptr { + break + } + } else if typ.Kind() == reflect.String { + // The proto3 exception is for a string field, + // which requires a colon. + break + } + needColon = false + } + if needColon { + return p.errorf("expected ':', found %q", tok.value) + } + p.back() + } + return nil +} + +func (p *textParser) readStruct(sv reflect.Value, terminator string) error { + st := sv.Type() + sprops := GetProperties(st) + reqCount := sprops.reqCount + var reqFieldErr error + fieldSet := make(map[string]bool) + // A struct is a sequence of "name: value", terminated by one of + // '>' or '}', or the end of the input. A name may also be + // "[extension]" or "[type/url]". + // + // The whole struct can also be an expanded Any message, like: + // [type/url] < ... struct contents ... > + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + if tok.value == "[" { + // Looks like an extension or an Any. + // + // TODO: Check whether we need to handle + // namespace rooted names (e.g. ".something.Foo"). + extName, err := p.consumeExtName() + if err != nil { + return err + } + + if s := strings.LastIndex(extName, "/"); s >= 0 { + // If it contains a slash, it's an Any type URL. + messageName := extName[s+1:] + mt := MessageType(messageName) + if mt == nil { + return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) + } + tok = p.next() + if tok.err != nil { + return tok.err + } + // consume an optional colon + if tok.value == ":" { + tok = p.next() + if tok.err != nil { + return tok.err + } + } + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + v := reflect.New(mt.Elem()) + if pe := p.readStruct(v.Elem(), terminator); pe != nil { + return pe + } + b, err := Marshal(v.Interface().(Message)) + if err != nil { + return p.errorf("failed to marshal message of type %q: %v", messageName, err) + } + if fieldSet["type_url"] { + return p.errorf(anyRepeatedlyUnpacked, "type_url") + } + if fieldSet["value"] { + return p.errorf(anyRepeatedlyUnpacked, "value") + } + sv.FieldByName("TypeUrl").SetString(extName) + sv.FieldByName("Value").SetBytes(b) + fieldSet["type_url"] = true + fieldSet["value"] = true + continue + } + + var desc *ExtensionDesc + // This could be faster, but it's functional. + // TODO: Do something smarter than a linear scan. + for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { + if d.Name == extName { + desc = d + break + } + } + if desc == nil { + return p.errorf("unrecognized extension %q", extName) + } + + props := &Properties{} + props.Parse(desc.Tag) + + typ := reflect.TypeOf(desc.ExtensionType) + if err := p.checkForColon(props, typ); err != nil { + return err + } + + rep := desc.repeated() + + // Read the extension structure, and set it in + // the value we're constructing. + var ext reflect.Value + if !rep { + ext = reflect.New(typ).Elem() + } else { + ext = reflect.New(typ.Elem()).Elem() + } + if err := p.readAny(ext, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + ep := sv.Addr().Interface().(Message) + if !rep { + SetExtension(ep, desc, ext.Interface()) + } else { + old, err := GetExtension(ep, desc) + var sl reflect.Value + if err == nil { + sl = reflect.ValueOf(old) // existing slice + } else { + sl = reflect.MakeSlice(typ, 0, 1) + } + sl = reflect.Append(sl, ext) + SetExtension(ep, desc, sl.Interface()) + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + continue + } + + // This is a normal, non-extension field. + name := tok.value + var dst reflect.Value + fi, props, ok := structFieldByName(sprops, name) + if ok { + dst = sv.Field(fi) + } else if oop, ok := sprops.OneofTypes[name]; ok { + // It is a oneof. + props = oop.Prop + nv := reflect.New(oop.Type.Elem()) + dst = nv.Elem().Field(0) + field := sv.Field(oop.Field) + if !field.IsNil() { + return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) + } + field.Set(nv) + } + if !dst.IsValid() { + return p.errorf("unknown field name %q in %v", name, st) + } + + if dst.Kind() == reflect.Map { + // Consume any colon. + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Construct the map if it doesn't already exist. + if dst.IsNil() { + dst.Set(reflect.MakeMap(dst.Type())) + } + key := reflect.New(dst.Type().Key()).Elem() + val := reflect.New(dst.Type().Elem()).Elem() + + // The map entry should be this sequence of tokens: + // < key : KEY value : VALUE > + // However, implementations may omit key or value, and technically + // we should support them in any order. See b/28924776 for a time + // this went wrong. + + tok := p.next() + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + switch tok.value { + case "key": + if err := p.consumeToken(":"); err != nil { + return err + } + if err := p.readAny(key, props.MapKeyProp); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + case "value": + if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil { + return err + } + if err := p.readAny(val, props.MapValProp); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + default: + p.back() + return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) + } + } + + dst.SetMapIndex(key, val) + continue + } + + // Check that it's not already set if it's not a repeated field. + if !props.Repeated && fieldSet[name] { + return p.errorf("non-repeated field %q was repeated", name) + } + + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Parse into the field. + fieldSet[name] = true + if err := p.readAny(dst, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + if props.Required { + reqCount-- + } + + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + + } + + if reqCount > 0 { + return p.missingRequiredFieldError(sv) + } + return reqFieldErr +} + +// consumeExtName consumes extension name or expanded Any type URL and the +// following ']'. It returns the name or URL consumed. +func (p *textParser) consumeExtName() (string, error) { + tok := p.next() + if tok.err != nil { + return "", tok.err + } + + // If extension name or type url is quoted, it's a single token. + if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { + name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) + if err != nil { + return "", err + } + return name, p.consumeToken("]") + } + + // Consume everything up to "]" + var parts []string + for tok.value != "]" { + parts = append(parts, tok.value) + tok = p.next() + if tok.err != nil { + return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) + } + if p.done && tok.value != "]" { + return "", p.errorf("unclosed type_url or extension name") + } + } + return strings.Join(parts, ""), nil +} + +// consumeOptionalSeparator consumes an optional semicolon or comma. +// It is used in readStruct to provide backward compatibility. +func (p *textParser) consumeOptionalSeparator() error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ";" && tok.value != "," { + p.back() + } + return nil +} + +func (p *textParser) readAny(v reflect.Value, props *Properties) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "" { + return p.errorf("unexpected EOF") + } + + switch fv := v; fv.Kind() { + case reflect.Slice: + at := v.Type() + if at.Elem().Kind() == reflect.Uint8 { + // Special case for []byte + if tok.value[0] != '"' && tok.value[0] != '\'' { + // Deliberately written out here, as the error after + // this switch statement would write "invalid []byte: ...", + // which is not as user-friendly. + return p.errorf("invalid string: %v", tok.value) + } + bytes := []byte(tok.unquoted) + fv.Set(reflect.ValueOf(bytes)) + return nil + } + // Repeated field. + if tok.value == "[" { + // Repeated field with list notation, like [1,2,3]. + for { + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + err := p.readAny(fv.Index(fv.Len()-1), props) + if err != nil { + return err + } + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "]" { + break + } + if tok.value != "," { + return p.errorf("Expected ']' or ',' found %q", tok.value) + } + } + return nil + } + // One value of the repeated field. + p.back() + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + return p.readAny(fv.Index(fv.Len()-1), props) + case reflect.Bool: + // true/1/t/True or false/f/0/False. + switch tok.value { + case "true", "1", "t", "True": + fv.SetBool(true) + return nil + case "false", "0", "f", "False": + fv.SetBool(false) + return nil + } + case reflect.Float32, reflect.Float64: + v := tok.value + // Ignore 'f' for compatibility with output generated by C++, but don't + // remove 'f' when the value is "-inf" or "inf". + if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { + v = v[:len(v)-1] + } + if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { + fv.SetFloat(f) + return nil + } + case reflect.Int32: + if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { + fv.SetInt(x) + return nil + } + + if len(props.Enum) == 0 { + break + } + m, ok := enumValueMaps[props.Enum] + if !ok { + break + } + x, ok := m[tok.value] + if !ok { + break + } + fv.SetInt(int64(x)) + return nil + case reflect.Int64: + if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { + fv.SetInt(x) + return nil + } + + case reflect.Ptr: + // A basic field (indirected through pointer), or a repeated message/group + p.back() + fv.Set(reflect.New(fv.Type().Elem())) + return p.readAny(fv.Elem(), props) + case reflect.String: + if tok.value[0] == '"' || tok.value[0] == '\'' { + fv.SetString(tok.unquoted) + return nil + } + case reflect.Struct: + var terminator string + switch tok.value { + case "{": + terminator = "}" + case "<": + terminator = ">" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + // TODO: Handle nested messages which implement encoding.TextUnmarshaler. + return p.readStruct(fv, terminator) + case reflect.Uint32: + if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { + fv.SetUint(uint64(x)) + return nil + } + case reflect.Uint64: + if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { + fv.SetUint(x) + return nil + } + } + return p.errorf("invalid %v: %v", v.Type(), tok.value) +} + +// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb +// before starting to unmarshal, so any existing data in pb is always removed. +// If a required field is not set and no other error occurs, +// UnmarshalText returns *RequiredNotSetError. +func UnmarshalText(s string, pb Message) error { + if um, ok := pb.(encoding.TextUnmarshaler); ok { + return um.UnmarshalText([]byte(s)) + } + pb.Reset() + v := reflect.ValueOf(pb) + return newTextParser(s).readStruct(v.Elem(), "") +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/LICENSE b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/LICENSE new file mode 100644 index 000000000..8f71f43fe --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/attrmgr/attrmgr.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/attrmgr/attrmgr.go new file mode 100644 index 000000000..a446f5a2f --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/attrmgr/attrmgr.go @@ -0,0 +1,260 @@ +/* +Copyright IBM Corp. 2017 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* + * The attrmgr package contains utilities for managing attributes. + * Attributes are added to an X509 certificate as an extension. + */ + +package attrmgr + +import ( + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "encoding/json" + "fmt" + + "github.com/golang/protobuf/proto" + "github.com/hyperledger/fabric/protos/msp" + "github.com/pkg/errors" +) + +var ( + // AttrOID is the ASN.1 object identifier for an attribute extension in an + // X509 certificate + AttrOID = asn1.ObjectIdentifier{1, 2, 3, 4, 5, 6, 7, 8, 1} + // AttrOIDString is the string version of AttrOID + AttrOIDString = "1.2.3.4.5.6.7.8.1" +) + +// Attribute is a name/value pair +type Attribute interface { + // GetName returns the name of the attribute + GetName() string + // GetValue returns the value of the attribute + GetValue() string +} + +// AttributeRequest is a request for an attribute +type AttributeRequest interface { + // GetName returns the name of an attribute + GetName() string + // IsRequired returns true if the attribute is required + IsRequired() bool +} + +// New constructs an attribute manager +func New() *Mgr { return &Mgr{} } + +// Mgr is the attribute manager and is the main object for this package +type Mgr struct{} + +// ProcessAttributeRequestsForCert add attributes to an X509 certificate, given +// attribute requests and attributes. +func (mgr *Mgr) ProcessAttributeRequestsForCert(requests []AttributeRequest, attributes []Attribute, cert *x509.Certificate) error { + attrs, err := mgr.ProcessAttributeRequests(requests, attributes) + if err != nil { + return err + } + return mgr.AddAttributesToCert(attrs, cert) +} + +// ProcessAttributeRequests takes an array of attribute requests and an identity's attributes +// and returns an Attributes object containing the requested attributes. +func (mgr *Mgr) ProcessAttributeRequests(requests []AttributeRequest, attributes []Attribute) (*Attributes, error) { + attrsMap := map[string]string{} + attrs := &Attributes{Attrs: attrsMap} + missingRequiredAttrs := []string{} + // For each of the attribute requests + for _, req := range requests { + // Get the attribute + name := req.GetName() + attr := getAttrByName(name, attributes) + if attr == nil { + if req.IsRequired() { + // Didn't find attribute and it was required; return error below + missingRequiredAttrs = append(missingRequiredAttrs, name) + } + // Skip attribute requests which aren't required + continue + } + attrsMap[name] = attr.GetValue() + } + if len(missingRequiredAttrs) > 0 { + return nil, errors.Errorf("The following required attributes are missing: %+v", + missingRequiredAttrs) + } + return attrs, nil +} + +// AddAttributesToCert adds public attribute info to an X509 certificate. +func (mgr *Mgr) AddAttributesToCert(attrs *Attributes, cert *x509.Certificate) error { + buf, err := json.Marshal(attrs) + if err != nil { + return errors.Wrap(err, "Failed to marshal attributes") + } + ext := pkix.Extension{ + Id: AttrOID, + Critical: false, + Value: buf, + } + cert.Extensions = append(cert.Extensions, ext) + return nil +} + +// GetAttributesFromCert gets the attributes from a certificate. +func (mgr *Mgr) GetAttributesFromCert(cert *x509.Certificate) (*Attributes, error) { + // Get certificate attributes from the certificate if it exists + buf, err := getAttributesFromCert(cert) + if err != nil { + return nil, err + } + // Unmarshal into attributes object + attrs := &Attributes{} + if buf != nil { + err := json.Unmarshal(buf, attrs) + if err != nil { + return nil, errors.Wrap(err, "Failed to unmarshal attributes from certificate") + } + } + return attrs, nil +} + +func (mgr *Mgr) GetAttributesFromIdemix(creator []byte) (*Attributes, error) { + if creator == nil { + return nil, errors.New("creator is nil") + } + + sid := &msp.SerializedIdentity{} + err := proto.Unmarshal(creator, sid) + if err != nil { + return nil, errors.Wrap(err, "failed to unmarshal transaction invoker's identity") + } + idemixID := &msp.SerializedIdemixIdentity{} + err = proto.Unmarshal(sid.IdBytes, idemixID) + if err != nil { + return nil, errors.Wrap(err, "failed to unmarshal transaction invoker's idemix identity") + } + // Unmarshal into attributes object + attrs := &Attributes{ + Attrs: make(map[string]string), + } + + ou := &msp.OrganizationUnit{} + err = proto.Unmarshal(idemixID.Ou, ou) + if err != nil { + return nil, errors.Wrap(err, "failed to unmarshal transaction invoker's ou") + } + attrs.Attrs["ou"] = ou.OrganizationalUnitIdentifier + + role := &msp.MSPRole{} + err = proto.Unmarshal(idemixID.Role, role) + if err != nil { + return nil, errors.Wrap(err, "failed to unmarshal transaction invoker's role") + } + var roleStr string + switch role.Role { + case 0: + roleStr = "member" + case 1: + roleStr = "admin" + case 2: + roleStr = "client" + case 3: + roleStr = "peer" + } + attrs.Attrs["role"] = roleStr + + return attrs, nil +} + +// Attributes contains attribute names and values +type Attributes struct { + Attrs map[string]string `json:"attrs"` +} + +// Names returns the names of the attributes +func (a *Attributes) Names() []string { + i := 0 + names := make([]string, len(a.Attrs)) + for name := range a.Attrs { + names[i] = name + i++ + } + return names +} + +// Contains returns true if the named attribute is found +func (a *Attributes) Contains(name string) bool { + _, ok := a.Attrs[name] + return ok +} + +// Value returns an attribute's value +func (a *Attributes) Value(name string) (string, bool, error) { + attr, ok := a.Attrs[name] + return attr, ok, nil +} + +// True returns nil if the value of attribute 'name' is true; +// otherwise, an appropriate error is returned. +func (a *Attributes) True(name string) error { + val, ok, err := a.Value(name) + if err != nil { + return err + } + if !ok { + return fmt.Errorf("Attribute '%s' was not found", name) + } + if val != "true" { + return fmt.Errorf("Attribute '%s' is not true", name) + } + return nil +} + +// Get the attribute info from a certificate extension, or return nil if not found +func getAttributesFromCert(cert *x509.Certificate) ([]byte, error) { + for _, ext := range cert.Extensions { + if isAttrOID(ext.Id) { + return ext.Value, nil + } + } + return nil, nil +} + +// Is the object ID equal to the attribute info object ID? +func isAttrOID(oid asn1.ObjectIdentifier) bool { + if len(oid) != len(AttrOID) { + return false + } + for idx, val := range oid { + if val != AttrOID[idx] { + return false + } + } + return true +} + +// Get an attribute from 'attrs' by its name, or nil if not found +func getAttrByName(name string, attrs []Attribute) Attribute { + for _, attr := range attrs { + if attr.GetName() == name { + return attr + } + } + return nil +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/README.md b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/README.md new file mode 100644 index 000000000..b3add7dca --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/README.md @@ -0,0 +1,214 @@ +# Client Identity Chaincode Library + +The client identity chaincode library enables you to write chaincode which +makes access control decisions based on the identity of the client +(i.e. the invoker of the chaincode). In particular, you may make access +control decisions based on either or both of the following associated with +the client: + +* the client identity's MSP (Membership Service Provider) ID +* an attribute associated with the client identity + +Attributes are simply name and value pairs associated with an identity. +For example, `email=me@gmail.com` indicates an identity has the `email` +attribute with a value of `me@gmail.com`. + + +## Using the client identity chaincode library + +This section describes how to use the client identity chaincode library. + +All code samples below assume two things: +1. The type of the `stub` variable is `ChaincodeStubInterface` as passed + to your chaincode. +2. You have added the following import statement to your chaincode. + ``` + import "github.com/hyperledger/fabric/core/chaincode/lib/cid" + ``` +#### Getting the client's ID + +The following demonstrates how to get an ID for the client which is guaranteed +to be unique within the MSP: + +``` +id, err := cid.GetID(stub) +``` + +#### Getting the MSP ID + +The following demonstrates how to get the MSP ID of the client's identity: + +``` +mspid, err := cid.GetMSPID(stub) +``` + +#### Getting an attribute value + +The following demonstrates how to get the value of the *attr1* attribute: + +``` +val, ok, err := cid.GetAttributeValue(stub, "attr1") +if err != nil { + // There was an error trying to retrieve the attribute +} +if !ok { + // The client identity does not possess the attribute +} +// Do something with the value of 'val' +``` + +#### Asserting an attribute value + +Often all you want to do is to make an access control decision based on the value +of an attribute, i.e. to assert the value of an attribute. For example, the following +will return an error if the client does not have the `myapp.admin` attribute +with a value of `true`: + +``` +err := cid.AssertAttributeValue(stub, "myapp.admin", "true") +if err != nil { + // Return an error +} +``` + +This is effectively using attributes to implement role-based access control, +or RBAC for short. + +#### Getting the client's X509 certificate + +The following demonstrates how to get the X509 certificate of the client, or +nil if the client's identity was not based on an X509 certificate: + +``` +cert, err := cid.GetX509Certificate(stub) +``` + +Note that both `cert` and `err` may be nil as will be the case if the identity +is not using an X509 certificate. + +#### Performing multiple operations more efficiently + +Sometimes you may need to perform multiple operations in order to make an access +decision. For example, the following demonstrates how to grant access to +identities with MSP *org1MSP* and *attr1* OR with MSP *org1MSP* and *attr2*. + +``` +// Get the client ID object +id, err := cid.New(stub) +if err != nil { + // Handle error +} +mspid, err := id.GetMSPID() +if err != nil { + // Handle error +} +switch mspid { + case "org1MSP": + err = id.AssertAttributeValue("attr1", "true") + case "org2MSP": + err = id.AssertAttributeValue("attr2", "true") + default: + err = errors.New("Wrong MSP") +} +``` +Although it is not required, it is more efficient to make the `cid.New` call +to get the ClientIdentity object if you need to perform multiple operations, +as demonstrated above. + +## Adding Attributes to Identities + +This section describes how to add custom attributes to certificates when +using Hyperledger Fabric CA as well as when using an external CA. + +#### Managing attributes with Fabric CA + +There are two methods of adding attributes to an enrollment certificate +with fabric-ca: + + 1. When you register an identity, you can specify that an enrollment certificate + issued for the identity should by default contain an attribute. This behavior + can be overridden at enrollment time, but this is useful for establishing + default behavior and, assuming registration occurs outside of your application, + does not require any application change. + + The following shows how to register *user1* with two attributes: + *app1Admin* and *email*. + The ":ecert" suffix causes the *appAdmin* attribute to be inserted into user1's + enrollment certificate by default. The *email* attribute is not added + to the enrollment certificate by default. + + ``` + fabric-ca-client register --id.name user1 --id.secret user1pw --id.type user --id.affiliation org1 --id.attrs 'app1Admin=true:ecert,email=user1@gmail.com' + ``` + + 2. When you enroll an identity, you may request that one or more attributes + be added to the certificate. + For each attribute requested, you may specify whether the attribute is + optional or not. If it is not optional but does not exist for the identity, + enrollment fails. + + The following shows how to enroll *user1* with the *email* attribute, + without the *app1Admin* attribute and optionally with the *phone* attribute + (if the user possesses *phone* attribute). + ``` + fabric-ca-client enroll -u http://user1:user1pw@localhost:7054 --enrollment.attrs "email,phone:opt" + ``` +#### Attribute format in a certificate + +Attributes are stored inside an X509 certificate as an extension with an +ASN.1 OID (Abstract Syntax Notation Object IDentifier) +of `1.2.3.4.5.6.7.8.1`. The value of the extension is a JSON string of the +form `{"attrs":{: 0 { + s += "," + } + for j, tv := range rdn { + if j > 0 { + s += "+" + } + typeString := tv.Type.String() + typeName, ok := attributeTypeNames[typeString] + if !ok { + derBytes, err := asn1.Marshal(tv.Value) + if err == nil { + s += typeString + "=#" + hex.EncodeToString(derBytes) + continue // No value escaping necessary. + } + typeName = typeString + } + valueString := fmt.Sprint(tv.Value) + escaped := "" + begin := 0 + for idx, c := range valueString { + if (idx == 0 && (c == ' ' || c == '#')) || + (idx == len(valueString)-1 && c == ' ') { + escaped += valueString[begin:idx] + escaped += "\\" + string(c) + begin = idx + 1 + continue + } + switch c { + case ',', '+', '"', '\\', '<', '>', ';': + escaped += valueString[begin:idx] + escaped += "\\" + string(c) + begin = idx + 1 + } + } + escaped += valueString[begin:] + s += typeName + "=" + escaped + } + } + return s +} + +var attributeTypeNames = map[string]string{ + "2.5.4.6": "C", + "2.5.4.10": "O", + "2.5.4.11": "OU", + "2.5.4.3": "CN", + "2.5.4.5": "SERIALNUMBER", + "2.5.4.7": "L", + "2.5.4.8": "ST", + "2.5.4.9": "STREET", + "2.5.4.17": "POSTALCODE", +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/interfaces.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/interfaces.go new file mode 100644 index 000000000..d5ed94a8c --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/core/chaincode/shim/ext/cid/interfaces.go @@ -0,0 +1,55 @@ +/* +Copyright IBM Corp. 2017 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cid + +import "crypto/x509" + +// ChaincodeStubInterface is used by deployable chaincode apps to get identity +// of the agent (or user) submitting the transaction. +type ChaincodeStubInterface interface { + // GetCreator returns `SignatureHeader.Creator` (e.g. an identity) + // of the `SignedProposal`. This is the identity of the agent (or user) + // submitting the transaction. + GetCreator() ([]byte, error) +} + +// ClientIdentity represents information about the identity that submitted the +// transaction +type ClientIdentity interface { + + // GetID returns the ID associated with the invoking identity. This ID + // is guaranteed to be unique within the MSP. + GetID() (string, error) + + // Return the MSP ID of the client + GetMSPID() (string, error) + + // GetAttributeValue returns the value of the client's attribute named `attrName`. + // If the client possesses the attribute, `found` is true and `value` equals the + // value of the attribute. + // If the client does not possess the attribute, `found` is false and `value` + // equals "". + GetAttributeValue(attrName string) (value string, found bool, err error) + + // AssertAttributeValue verifies that the client has the attribute named `attrName` + // with a value of `attrValue`; otherwise, an error is returned. + AssertAttributeValue(attrName, attrValue string) error + + // GetX509Certificate returns the X509 certificate associated with the client, + // or nil if it was not identified by an X509 certificate. + GetX509Certificate() (*x509.Certificate, error) +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.pb.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.pb.go new file mode 100644 index 000000000..ddea9c95a --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.pb.go @@ -0,0 +1,179 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: msp/identities.proto + +package msp // import "github.com/hyperledger/fabric/protos/msp" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// This struct represents an Identity +// (with its MSP identifier) to be used +// to serialize it and deserialize it +type SerializedIdentity struct { + // The identifier of the associated membership service provider + Mspid string `protobuf:"bytes,1,opt,name=mspid,proto3" json:"mspid,omitempty"` + // the Identity, serialized according to the rules of its MPS + IdBytes []byte `protobuf:"bytes,2,opt,name=id_bytes,json=idBytes,proto3" json:"id_bytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SerializedIdentity) Reset() { *m = SerializedIdentity{} } +func (m *SerializedIdentity) String() string { return proto.CompactTextString(m) } +func (*SerializedIdentity) ProtoMessage() {} +func (*SerializedIdentity) Descriptor() ([]byte, []int) { + return fileDescriptor_identities_8fa8af3e5bf2070a, []int{0} +} +func (m *SerializedIdentity) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SerializedIdentity.Unmarshal(m, b) +} +func (m *SerializedIdentity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SerializedIdentity.Marshal(b, m, deterministic) +} +func (dst *SerializedIdentity) XXX_Merge(src proto.Message) { + xxx_messageInfo_SerializedIdentity.Merge(dst, src) +} +func (m *SerializedIdentity) XXX_Size() int { + return xxx_messageInfo_SerializedIdentity.Size(m) +} +func (m *SerializedIdentity) XXX_DiscardUnknown() { + xxx_messageInfo_SerializedIdentity.DiscardUnknown(m) +} + +var xxx_messageInfo_SerializedIdentity proto.InternalMessageInfo + +func (m *SerializedIdentity) GetMspid() string { + if m != nil { + return m.Mspid + } + return "" +} + +func (m *SerializedIdentity) GetIdBytes() []byte { + if m != nil { + return m.IdBytes + } + return nil +} + +// This struct represents an Idemix Identity +// to be used to serialize it and deserialize it. +// The IdemixMSP will first serialize an idemix identity to bytes using +// this proto, and then uses these bytes as id_bytes in SerializedIdentity +type SerializedIdemixIdentity struct { + // nym_x is the X-component of the pseudonym elliptic curve point. + // It is a []byte representation of an amcl.BIG + // The pseudonym can be seen as a public key of the identity, it is used to verify signatures. + NymX []byte `protobuf:"bytes,1,opt,name=nym_x,json=nymX,proto3" json:"nym_x,omitempty"` + // nym_y is the Y-component of the pseudonym elliptic curve point. + // It is a []byte representation of an amcl.BIG + // The pseudonym can be seen as a public key of the identity, it is used to verify signatures. + NymY []byte `protobuf:"bytes,2,opt,name=nym_y,json=nymY,proto3" json:"nym_y,omitempty"` + // ou contains the organizational unit of the idemix identity + Ou []byte `protobuf:"bytes,3,opt,name=ou,proto3" json:"ou,omitempty"` + // role contains the role of this identity (e.g., ADMIN or MEMBER) + Role []byte `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` + // proof contains the cryptographic evidence that this identity is valid + Proof []byte `protobuf:"bytes,5,opt,name=proof,proto3" json:"proof,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SerializedIdemixIdentity) Reset() { *m = SerializedIdemixIdentity{} } +func (m *SerializedIdemixIdentity) String() string { return proto.CompactTextString(m) } +func (*SerializedIdemixIdentity) ProtoMessage() {} +func (*SerializedIdemixIdentity) Descriptor() ([]byte, []int) { + return fileDescriptor_identities_8fa8af3e5bf2070a, []int{1} +} +func (m *SerializedIdemixIdentity) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SerializedIdemixIdentity.Unmarshal(m, b) +} +func (m *SerializedIdemixIdentity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SerializedIdemixIdentity.Marshal(b, m, deterministic) +} +func (dst *SerializedIdemixIdentity) XXX_Merge(src proto.Message) { + xxx_messageInfo_SerializedIdemixIdentity.Merge(dst, src) +} +func (m *SerializedIdemixIdentity) XXX_Size() int { + return xxx_messageInfo_SerializedIdemixIdentity.Size(m) +} +func (m *SerializedIdemixIdentity) XXX_DiscardUnknown() { + xxx_messageInfo_SerializedIdemixIdentity.DiscardUnknown(m) +} + +var xxx_messageInfo_SerializedIdemixIdentity proto.InternalMessageInfo + +func (m *SerializedIdemixIdentity) GetNymX() []byte { + if m != nil { + return m.NymX + } + return nil +} + +func (m *SerializedIdemixIdentity) GetNymY() []byte { + if m != nil { + return m.NymY + } + return nil +} + +func (m *SerializedIdemixIdentity) GetOu() []byte { + if m != nil { + return m.Ou + } + return nil +} + +func (m *SerializedIdemixIdentity) GetRole() []byte { + if m != nil { + return m.Role + } + return nil +} + +func (m *SerializedIdemixIdentity) GetProof() []byte { + if m != nil { + return m.Proof + } + return nil +} + +func init() { + proto.RegisterType((*SerializedIdentity)(nil), "msp.SerializedIdentity") + proto.RegisterType((*SerializedIdemixIdentity)(nil), "msp.SerializedIdemixIdentity") +} + +func init() { proto.RegisterFile("msp/identities.proto", fileDescriptor_identities_8fa8af3e5bf2070a) } + +var fileDescriptor_identities_8fa8af3e5bf2070a = []byte{ + // 238 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x8f, 0x3f, 0x4f, 0xc3, 0x30, + 0x10, 0x47, 0x95, 0x34, 0xe1, 0x8f, 0x55, 0x31, 0x98, 0x0e, 0x66, 0x2b, 0x9d, 0x32, 0xc5, 0x03, + 0xdf, 0xa0, 0x12, 0x03, 0x03, 0x4b, 0x58, 0x80, 0xa5, 0x6a, 0xea, 0x6b, 0x7a, 0x52, 0x2e, 0x67, + 0xd9, 0x8e, 0x54, 0x33, 0xf0, 0xd9, 0x51, 0x62, 0x40, 0xb0, 0xdd, 0xef, 0xe9, 0xe9, 0xc9, 0x16, + 0x2b, 0xf2, 0x56, 0xa3, 0x81, 0x21, 0x60, 0x40, 0xf0, 0xb5, 0x75, 0x1c, 0x58, 0x2e, 0xc8, 0xdb, + 0xcd, 0xa3, 0x90, 0x2f, 0xe0, 0x70, 0xdf, 0xe3, 0x07, 0x98, 0xa7, 0xa4, 0x44, 0xb9, 0x12, 0x25, + 0x79, 0x8b, 0x46, 0x65, 0xeb, 0xac, 0xba, 0x6e, 0xd2, 0x90, 0x77, 0xe2, 0x0a, 0xcd, 0xae, 0x8d, + 0x01, 0xbc, 0xca, 0xd7, 0x59, 0xb5, 0x6c, 0x2e, 0xd1, 0x6c, 0xa7, 0xb9, 0xf9, 0x14, 0xea, 0x5f, + 0x86, 0xf0, 0xfc, 0x1b, 0xbb, 0x15, 0xe5, 0x10, 0x69, 0x77, 0x9e, 0x63, 0xcb, 0xa6, 0x18, 0x22, + 0xbd, 0xfe, 0xc0, 0xf8, 0x1d, 0x9a, 0xe0, 0x9b, 0xbc, 0x11, 0x39, 0x8f, 0x6a, 0x31, 0x93, 0x9c, + 0x47, 0x29, 0x45, 0xe1, 0xb8, 0x07, 0x55, 0x24, 0x67, 0xba, 0xa7, 0xa7, 0x59, 0xc7, 0x7c, 0x54, + 0xe5, 0x0c, 0xd3, 0xd8, 0x3e, 0x8b, 0x7b, 0x76, 0x5d, 0x7d, 0x8a, 0x16, 0x5c, 0x0f, 0xa6, 0x03, + 0x57, 0x1f, 0xf7, 0xad, 0xc3, 0x43, 0xfa, 0xab, 0xaf, 0xc9, 0xdb, 0xf7, 0xaa, 0xc3, 0x70, 0x1a, + 0xdb, 0xfa, 0xc0, 0xa4, 0xff, 0x98, 0x3a, 0x99, 0x3a, 0x99, 0x9a, 0xbc, 0x6d, 0x2f, 0xe6, 0xfb, + 0xe1, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x13, 0xdc, 0xc8, 0x62, 0x39, 0x01, 0x00, 0x00, +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.proto b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.proto new file mode 100644 index 000000000..fef457c85 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/identities.proto @@ -0,0 +1,49 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + + +syntax = "proto3"; + +option go_package = "github.com/hyperledger/fabric/protos/msp"; +option java_package = "org.hyperledger.fabric.protos.msp"; + +package msp; + +// This struct represents an Identity +// (with its MSP identifier) to be used +// to serialize it and deserialize it +message SerializedIdentity { + // The identifier of the associated membership service provider + string mspid = 1; + + // the Identity, serialized according to the rules of its MPS + bytes id_bytes = 2; +} + +// This struct represents an Idemix Identity +// to be used to serialize it and deserialize it. +// The IdemixMSP will first serialize an idemix identity to bytes using +// this proto, and then uses these bytes as id_bytes in SerializedIdentity +message SerializedIdemixIdentity { + // nym_x is the X-component of the pseudonym elliptic curve point. + // It is a []byte representation of an amcl.BIG + // The pseudonym can be seen as a public key of the identity, it is used to verify signatures. + bytes nym_x = 1; + + // nym_y is the Y-component of the pseudonym elliptic curve point. + // It is a []byte representation of an amcl.BIG + // The pseudonym can be seen as a public key of the identity, it is used to verify signatures. + bytes nym_y = 2; + + // ou contains the organizational unit of the idemix identity + bytes ou = 3; + + // role contains the role of this identity (e.g., ADMIN or MEMBER) + bytes role = 4; + + // proof contains the cryptographic evidence that this identity is valid + bytes proof = 5; +} \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.go new file mode 100644 index 000000000..9394550c1 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.go @@ -0,0 +1,41 @@ +/* +Copyright IBM Corp. 2017 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package msp + +import ( + "fmt" + + "github.com/golang/protobuf/proto" +) + +func (mc *MSPConfig) VariablyOpaqueFields() []string { + return []string{"config"} +} + +func (mc *MSPConfig) VariablyOpaqueFieldProto(name string) (proto.Message, error) { + if name != mc.VariablyOpaqueFields()[0] { + return nil, fmt.Errorf("not a marshaled field: %s", name) + } + switch mc.Type { + case 0: + return &FabricMSPConfig{}, nil + case 1: + return &IdemixMSPConfig{}, nil + default: + return nil, fmt.Errorf("unable to decode MSP type: %v", mc.Type) + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.pb.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.pb.go new file mode 100644 index 000000000..eb9066a65 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.pb.go @@ -0,0 +1,743 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: msp/msp_config.proto + +package msp // import "github.com/hyperledger/fabric/protos/msp" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// MSPConfig collects all the configuration information for +// an MSP. The Config field should be unmarshalled in a way +// that depends on the Type +type MSPConfig struct { + // Type holds the type of the MSP; the default one would + // be of type FABRIC implementing an X.509 based provider + Type int32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` + // Config is MSP dependent configuration info + Config []byte `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MSPConfig) Reset() { *m = MSPConfig{} } +func (m *MSPConfig) String() string { return proto.CompactTextString(m) } +func (*MSPConfig) ProtoMessage() {} +func (*MSPConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{0} +} +func (m *MSPConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MSPConfig.Unmarshal(m, b) +} +func (m *MSPConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MSPConfig.Marshal(b, m, deterministic) +} +func (dst *MSPConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_MSPConfig.Merge(dst, src) +} +func (m *MSPConfig) XXX_Size() int { + return xxx_messageInfo_MSPConfig.Size(m) +} +func (m *MSPConfig) XXX_DiscardUnknown() { + xxx_messageInfo_MSPConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_MSPConfig proto.InternalMessageInfo + +func (m *MSPConfig) GetType() int32 { + if m != nil { + return m.Type + } + return 0 +} + +func (m *MSPConfig) GetConfig() []byte { + if m != nil { + return m.Config + } + return nil +} + +// FabricMSPConfig collects all the configuration information for +// a Fabric MSP. +// Here we assume a default certificate validation policy, where +// any certificate signed by any of the listed rootCA certs would +// be considered as valid under this MSP. +// This MSP may or may not come with a signing identity. If it does, +// it can also issue signing identities. If it does not, it can only +// be used to validate and verify certificates. +type FabricMSPConfig struct { + // Name holds the identifier of the MSP; MSP identifier + // is chosen by the application that governs this MSP. + // For example, and assuming the default implementation of MSP, + // that is X.509-based and considers a single Issuer, + // this can refer to the Subject OU field or the Issuer OU field. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // List of root certificates trusted by this MSP + // they are used upon certificate validation (see + // comment for IntermediateCerts below) + RootCerts [][]byte `protobuf:"bytes,2,rep,name=root_certs,json=rootCerts,proto3" json:"root_certs,omitempty"` + // List of intermediate certificates trusted by this MSP; + // they are used upon certificate validation as follows: + // validation attempts to build a path from the certificate + // to be validated (which is at one end of the path) and + // one of the certs in the RootCerts field (which is at + // the other end of the path). If the path is longer than + // 2, certificates in the middle are searched within the + // IntermediateCerts pool + IntermediateCerts [][]byte `protobuf:"bytes,3,rep,name=intermediate_certs,json=intermediateCerts,proto3" json:"intermediate_certs,omitempty"` + // Identity denoting the administrator of this MSP + Admins [][]byte `protobuf:"bytes,4,rep,name=admins,proto3" json:"admins,omitempty"` + // Identity revocation list + RevocationList [][]byte `protobuf:"bytes,5,rep,name=revocation_list,json=revocationList,proto3" json:"revocation_list,omitempty"` + // SigningIdentity holds information on the signing identity + // this peer is to use, and which is to be imported by the + // MSP defined before + SigningIdentity *SigningIdentityInfo `protobuf:"bytes,6,opt,name=signing_identity,json=signingIdentity,proto3" json:"signing_identity,omitempty"` + // OrganizationalUnitIdentifiers holds one or more + // fabric organizational unit identifiers that belong to + // this MSP configuration + OrganizationalUnitIdentifiers []*FabricOUIdentifier `protobuf:"bytes,7,rep,name=organizational_unit_identifiers,json=organizationalUnitIdentifiers,proto3" json:"organizational_unit_identifiers,omitempty"` + // FabricCryptoConfig contains the configuration parameters + // for the cryptographic algorithms used by this MSP + CryptoConfig *FabricCryptoConfig `protobuf:"bytes,8,opt,name=crypto_config,json=cryptoConfig,proto3" json:"crypto_config,omitempty"` + // List of TLS root certificates trusted by this MSP. + // They are returned by GetTLSRootCerts. + TlsRootCerts [][]byte `protobuf:"bytes,9,rep,name=tls_root_certs,json=tlsRootCerts,proto3" json:"tls_root_certs,omitempty"` + // List of TLS intermediate certificates trusted by this MSP; + // They are returned by GetTLSIntermediateCerts. + TlsIntermediateCerts [][]byte `protobuf:"bytes,10,rep,name=tls_intermediate_certs,json=tlsIntermediateCerts,proto3" json:"tls_intermediate_certs,omitempty"` + // fabric_node_ous contains the configuration to distinguish clients from peers from orderers + // based on the OUs. + FabricNodeOus *FabricNodeOUs `protobuf:"bytes,11,opt,name=fabric_node_ous,json=fabricNodeOus,proto3" json:"fabric_node_ous,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FabricMSPConfig) Reset() { *m = FabricMSPConfig{} } +func (m *FabricMSPConfig) String() string { return proto.CompactTextString(m) } +func (*FabricMSPConfig) ProtoMessage() {} +func (*FabricMSPConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{1} +} +func (m *FabricMSPConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FabricMSPConfig.Unmarshal(m, b) +} +func (m *FabricMSPConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FabricMSPConfig.Marshal(b, m, deterministic) +} +func (dst *FabricMSPConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_FabricMSPConfig.Merge(dst, src) +} +func (m *FabricMSPConfig) XXX_Size() int { + return xxx_messageInfo_FabricMSPConfig.Size(m) +} +func (m *FabricMSPConfig) XXX_DiscardUnknown() { + xxx_messageInfo_FabricMSPConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_FabricMSPConfig proto.InternalMessageInfo + +func (m *FabricMSPConfig) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *FabricMSPConfig) GetRootCerts() [][]byte { + if m != nil { + return m.RootCerts + } + return nil +} + +func (m *FabricMSPConfig) GetIntermediateCerts() [][]byte { + if m != nil { + return m.IntermediateCerts + } + return nil +} + +func (m *FabricMSPConfig) GetAdmins() [][]byte { + if m != nil { + return m.Admins + } + return nil +} + +func (m *FabricMSPConfig) GetRevocationList() [][]byte { + if m != nil { + return m.RevocationList + } + return nil +} + +func (m *FabricMSPConfig) GetSigningIdentity() *SigningIdentityInfo { + if m != nil { + return m.SigningIdentity + } + return nil +} + +func (m *FabricMSPConfig) GetOrganizationalUnitIdentifiers() []*FabricOUIdentifier { + if m != nil { + return m.OrganizationalUnitIdentifiers + } + return nil +} + +func (m *FabricMSPConfig) GetCryptoConfig() *FabricCryptoConfig { + if m != nil { + return m.CryptoConfig + } + return nil +} + +func (m *FabricMSPConfig) GetTlsRootCerts() [][]byte { + if m != nil { + return m.TlsRootCerts + } + return nil +} + +func (m *FabricMSPConfig) GetTlsIntermediateCerts() [][]byte { + if m != nil { + return m.TlsIntermediateCerts + } + return nil +} + +func (m *FabricMSPConfig) GetFabricNodeOus() *FabricNodeOUs { + if m != nil { + return m.FabricNodeOus + } + return nil +} + +// FabricCryptoConfig contains configuration parameters +// for the cryptographic algorithms used by the MSP +// this configuration refers to +type FabricCryptoConfig struct { + // SignatureHashFamily is a string representing the hash family to be used + // during sign and verify operations. + // Allowed values are "SHA2" and "SHA3". + SignatureHashFamily string `protobuf:"bytes,1,opt,name=signature_hash_family,json=signatureHashFamily,proto3" json:"signature_hash_family,omitempty"` + // IdentityIdentifierHashFunction is a string representing the hash function + // to be used during the computation of the identity identifier of an MSP identity. + // Allowed values are "SHA256", "SHA384" and "SHA3_256", "SHA3_384". + IdentityIdentifierHashFunction string `protobuf:"bytes,2,opt,name=identity_identifier_hash_function,json=identityIdentifierHashFunction,proto3" json:"identity_identifier_hash_function,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FabricCryptoConfig) Reset() { *m = FabricCryptoConfig{} } +func (m *FabricCryptoConfig) String() string { return proto.CompactTextString(m) } +func (*FabricCryptoConfig) ProtoMessage() {} +func (*FabricCryptoConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{2} +} +func (m *FabricCryptoConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FabricCryptoConfig.Unmarshal(m, b) +} +func (m *FabricCryptoConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FabricCryptoConfig.Marshal(b, m, deterministic) +} +func (dst *FabricCryptoConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_FabricCryptoConfig.Merge(dst, src) +} +func (m *FabricCryptoConfig) XXX_Size() int { + return xxx_messageInfo_FabricCryptoConfig.Size(m) +} +func (m *FabricCryptoConfig) XXX_DiscardUnknown() { + xxx_messageInfo_FabricCryptoConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_FabricCryptoConfig proto.InternalMessageInfo + +func (m *FabricCryptoConfig) GetSignatureHashFamily() string { + if m != nil { + return m.SignatureHashFamily + } + return "" +} + +func (m *FabricCryptoConfig) GetIdentityIdentifierHashFunction() string { + if m != nil { + return m.IdentityIdentifierHashFunction + } + return "" +} + +// IdemixMSPConfig collects all the configuration information for +// an Idemix MSP. +type IdemixMSPConfig struct { + // Name holds the identifier of the MSP + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // ipk represents the (serialized) issuer public key + Ipk []byte `protobuf:"bytes,2,opt,name=ipk,proto3" json:"ipk,omitempty"` + // signer may contain crypto material to configure a default signer + Signer *IdemixMSPSignerConfig `protobuf:"bytes,3,opt,name=signer,proto3" json:"signer,omitempty"` + // revocation_pk is the public key used for revocation of credentials + RevocationPk []byte `protobuf:"bytes,4,opt,name=revocation_pk,json=revocationPk,proto3" json:"revocation_pk,omitempty"` + // epoch represents the current epoch (time interval) used for revocation + Epoch int64 `protobuf:"varint,5,opt,name=epoch,proto3" json:"epoch,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IdemixMSPConfig) Reset() { *m = IdemixMSPConfig{} } +func (m *IdemixMSPConfig) String() string { return proto.CompactTextString(m) } +func (*IdemixMSPConfig) ProtoMessage() {} +func (*IdemixMSPConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{3} +} +func (m *IdemixMSPConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IdemixMSPConfig.Unmarshal(m, b) +} +func (m *IdemixMSPConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IdemixMSPConfig.Marshal(b, m, deterministic) +} +func (dst *IdemixMSPConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_IdemixMSPConfig.Merge(dst, src) +} +func (m *IdemixMSPConfig) XXX_Size() int { + return xxx_messageInfo_IdemixMSPConfig.Size(m) +} +func (m *IdemixMSPConfig) XXX_DiscardUnknown() { + xxx_messageInfo_IdemixMSPConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_IdemixMSPConfig proto.InternalMessageInfo + +func (m *IdemixMSPConfig) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *IdemixMSPConfig) GetIpk() []byte { + if m != nil { + return m.Ipk + } + return nil +} + +func (m *IdemixMSPConfig) GetSigner() *IdemixMSPSignerConfig { + if m != nil { + return m.Signer + } + return nil +} + +func (m *IdemixMSPConfig) GetRevocationPk() []byte { + if m != nil { + return m.RevocationPk + } + return nil +} + +func (m *IdemixMSPConfig) GetEpoch() int64 { + if m != nil { + return m.Epoch + } + return 0 +} + +// IdemixMSPSIgnerConfig contains the crypto material to set up an idemix signing identity +type IdemixMSPSignerConfig struct { + // cred represents the serialized idemix credential of the default signer + Cred []byte `protobuf:"bytes,1,opt,name=cred,proto3" json:"cred,omitempty"` + // sk is the secret key of the default signer, corresponding to credential Cred + Sk []byte `protobuf:"bytes,2,opt,name=sk,proto3" json:"sk,omitempty"` + // organizational_unit_identifier defines the organizational unit the default signer is in + OrganizationalUnitIdentifier string `protobuf:"bytes,3,opt,name=organizational_unit_identifier,json=organizationalUnitIdentifier,proto3" json:"organizational_unit_identifier,omitempty"` + // role defines whether the default signer is admin, peer, member or client + Role int32 `protobuf:"varint,4,opt,name=role,proto3" json:"role,omitempty"` + // enrollment_id contains the enrollment id of this signer + EnrollmentId string `protobuf:"bytes,5,opt,name=enrollment_id,json=enrollmentId,proto3" json:"enrollment_id,omitempty"` + // credential_revocation_information contains a serialized CredentialRevocationInformation + CredentialRevocationInformation []byte `protobuf:"bytes,6,opt,name=credential_revocation_information,json=credentialRevocationInformation,proto3" json:"credential_revocation_information,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IdemixMSPSignerConfig) Reset() { *m = IdemixMSPSignerConfig{} } +func (m *IdemixMSPSignerConfig) String() string { return proto.CompactTextString(m) } +func (*IdemixMSPSignerConfig) ProtoMessage() {} +func (*IdemixMSPSignerConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{4} +} +func (m *IdemixMSPSignerConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IdemixMSPSignerConfig.Unmarshal(m, b) +} +func (m *IdemixMSPSignerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IdemixMSPSignerConfig.Marshal(b, m, deterministic) +} +func (dst *IdemixMSPSignerConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_IdemixMSPSignerConfig.Merge(dst, src) +} +func (m *IdemixMSPSignerConfig) XXX_Size() int { + return xxx_messageInfo_IdemixMSPSignerConfig.Size(m) +} +func (m *IdemixMSPSignerConfig) XXX_DiscardUnknown() { + xxx_messageInfo_IdemixMSPSignerConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_IdemixMSPSignerConfig proto.InternalMessageInfo + +func (m *IdemixMSPSignerConfig) GetCred() []byte { + if m != nil { + return m.Cred + } + return nil +} + +func (m *IdemixMSPSignerConfig) GetSk() []byte { + if m != nil { + return m.Sk + } + return nil +} + +func (m *IdemixMSPSignerConfig) GetOrganizationalUnitIdentifier() string { + if m != nil { + return m.OrganizationalUnitIdentifier + } + return "" +} + +func (m *IdemixMSPSignerConfig) GetRole() int32 { + if m != nil { + return m.Role + } + return 0 +} + +func (m *IdemixMSPSignerConfig) GetEnrollmentId() string { + if m != nil { + return m.EnrollmentId + } + return "" +} + +func (m *IdemixMSPSignerConfig) GetCredentialRevocationInformation() []byte { + if m != nil { + return m.CredentialRevocationInformation + } + return nil +} + +// SigningIdentityInfo represents the configuration information +// related to the signing identity the peer is to use for generating +// endorsements +type SigningIdentityInfo struct { + // PublicSigner carries the public information of the signing + // identity. For an X.509 provider this would be represented by + // an X.509 certificate + PublicSigner []byte `protobuf:"bytes,1,opt,name=public_signer,json=publicSigner,proto3" json:"public_signer,omitempty"` + // PrivateSigner denotes a reference to the private key of the + // peer's signing identity + PrivateSigner *KeyInfo `protobuf:"bytes,2,opt,name=private_signer,json=privateSigner,proto3" json:"private_signer,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SigningIdentityInfo) Reset() { *m = SigningIdentityInfo{} } +func (m *SigningIdentityInfo) String() string { return proto.CompactTextString(m) } +func (*SigningIdentityInfo) ProtoMessage() {} +func (*SigningIdentityInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{5} +} +func (m *SigningIdentityInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SigningIdentityInfo.Unmarshal(m, b) +} +func (m *SigningIdentityInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SigningIdentityInfo.Marshal(b, m, deterministic) +} +func (dst *SigningIdentityInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_SigningIdentityInfo.Merge(dst, src) +} +func (m *SigningIdentityInfo) XXX_Size() int { + return xxx_messageInfo_SigningIdentityInfo.Size(m) +} +func (m *SigningIdentityInfo) XXX_DiscardUnknown() { + xxx_messageInfo_SigningIdentityInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_SigningIdentityInfo proto.InternalMessageInfo + +func (m *SigningIdentityInfo) GetPublicSigner() []byte { + if m != nil { + return m.PublicSigner + } + return nil +} + +func (m *SigningIdentityInfo) GetPrivateSigner() *KeyInfo { + if m != nil { + return m.PrivateSigner + } + return nil +} + +// KeyInfo represents a (secret) key that is either already stored +// in the bccsp/keystore or key material to be imported to the +// bccsp key-store. In later versions it may contain also a +// keystore identifier +type KeyInfo struct { + // Identifier of the key inside the default keystore; this for + // the case of Software BCCSP as well as the HSM BCCSP would be + // the SKI of the key + KeyIdentifier string `protobuf:"bytes,1,opt,name=key_identifier,json=keyIdentifier,proto3" json:"key_identifier,omitempty"` + // KeyMaterial (optional) for the key to be imported; this is + // properly encoded key bytes, prefixed by the type of the key + KeyMaterial []byte `protobuf:"bytes,2,opt,name=key_material,json=keyMaterial,proto3" json:"key_material,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *KeyInfo) Reset() { *m = KeyInfo{} } +func (m *KeyInfo) String() string { return proto.CompactTextString(m) } +func (*KeyInfo) ProtoMessage() {} +func (*KeyInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{6} +} +func (m *KeyInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_KeyInfo.Unmarshal(m, b) +} +func (m *KeyInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_KeyInfo.Marshal(b, m, deterministic) +} +func (dst *KeyInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_KeyInfo.Merge(dst, src) +} +func (m *KeyInfo) XXX_Size() int { + return xxx_messageInfo_KeyInfo.Size(m) +} +func (m *KeyInfo) XXX_DiscardUnknown() { + xxx_messageInfo_KeyInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_KeyInfo proto.InternalMessageInfo + +func (m *KeyInfo) GetKeyIdentifier() string { + if m != nil { + return m.KeyIdentifier + } + return "" +} + +func (m *KeyInfo) GetKeyMaterial() []byte { + if m != nil { + return m.KeyMaterial + } + return nil +} + +// FabricOUIdentifier represents an organizational unit and +// its related chain of trust identifier. +type FabricOUIdentifier struct { + // Certificate represents the second certificate in a certification chain. + // (Notice that the first certificate in a certification chain is supposed + // to be the certificate of an identity). + // It must correspond to the certificate of root or intermediate CA + // recognized by the MSP this message belongs to. + // Starting from this certificate, a certification chain is computed + // and bound to the OrganizationUnitIdentifier specified + Certificate []byte `protobuf:"bytes,1,opt,name=certificate,proto3" json:"certificate,omitempty"` + // OrganizationUnitIdentifier defines the organizational unit under the + // MSP identified with MSPIdentifier + OrganizationalUnitIdentifier string `protobuf:"bytes,2,opt,name=organizational_unit_identifier,json=organizationalUnitIdentifier,proto3" json:"organizational_unit_identifier,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FabricOUIdentifier) Reset() { *m = FabricOUIdentifier{} } +func (m *FabricOUIdentifier) String() string { return proto.CompactTextString(m) } +func (*FabricOUIdentifier) ProtoMessage() {} +func (*FabricOUIdentifier) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{7} +} +func (m *FabricOUIdentifier) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FabricOUIdentifier.Unmarshal(m, b) +} +func (m *FabricOUIdentifier) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FabricOUIdentifier.Marshal(b, m, deterministic) +} +func (dst *FabricOUIdentifier) XXX_Merge(src proto.Message) { + xxx_messageInfo_FabricOUIdentifier.Merge(dst, src) +} +func (m *FabricOUIdentifier) XXX_Size() int { + return xxx_messageInfo_FabricOUIdentifier.Size(m) +} +func (m *FabricOUIdentifier) XXX_DiscardUnknown() { + xxx_messageInfo_FabricOUIdentifier.DiscardUnknown(m) +} + +var xxx_messageInfo_FabricOUIdentifier proto.InternalMessageInfo + +func (m *FabricOUIdentifier) GetCertificate() []byte { + if m != nil { + return m.Certificate + } + return nil +} + +func (m *FabricOUIdentifier) GetOrganizationalUnitIdentifier() string { + if m != nil { + return m.OrganizationalUnitIdentifier + } + return "" +} + +// FabricNodeOUs contains configuration to tell apart clients from peers from orderers +// based on OUs. If NodeOUs recognition is enabled then an msp identity +// that does not contain any of the specified OU will be considered invalid. +type FabricNodeOUs struct { + // If true then an msp identity that does not contain any of the specified OU will be considered invalid. + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` + // OU Identifier of the clients + ClientOuIdentifier *FabricOUIdentifier `protobuf:"bytes,2,opt,name=client_ou_identifier,json=clientOuIdentifier,proto3" json:"client_ou_identifier,omitempty"` + // OU Identifier of the peers + PeerOuIdentifier *FabricOUIdentifier `protobuf:"bytes,3,opt,name=peer_ou_identifier,json=peerOuIdentifier,proto3" json:"peer_ou_identifier,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FabricNodeOUs) Reset() { *m = FabricNodeOUs{} } +func (m *FabricNodeOUs) String() string { return proto.CompactTextString(m) } +func (*FabricNodeOUs) ProtoMessage() {} +func (*FabricNodeOUs) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_config_e749e5bd1d6d997b, []int{8} +} +func (m *FabricNodeOUs) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FabricNodeOUs.Unmarshal(m, b) +} +func (m *FabricNodeOUs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FabricNodeOUs.Marshal(b, m, deterministic) +} +func (dst *FabricNodeOUs) XXX_Merge(src proto.Message) { + xxx_messageInfo_FabricNodeOUs.Merge(dst, src) +} +func (m *FabricNodeOUs) XXX_Size() int { + return xxx_messageInfo_FabricNodeOUs.Size(m) +} +func (m *FabricNodeOUs) XXX_DiscardUnknown() { + xxx_messageInfo_FabricNodeOUs.DiscardUnknown(m) +} + +var xxx_messageInfo_FabricNodeOUs proto.InternalMessageInfo + +func (m *FabricNodeOUs) GetEnable() bool { + if m != nil { + return m.Enable + } + return false +} + +func (m *FabricNodeOUs) GetClientOuIdentifier() *FabricOUIdentifier { + if m != nil { + return m.ClientOuIdentifier + } + return nil +} + +func (m *FabricNodeOUs) GetPeerOuIdentifier() *FabricOUIdentifier { + if m != nil { + return m.PeerOuIdentifier + } + return nil +} + +func init() { + proto.RegisterType((*MSPConfig)(nil), "msp.MSPConfig") + proto.RegisterType((*FabricMSPConfig)(nil), "msp.FabricMSPConfig") + proto.RegisterType((*FabricCryptoConfig)(nil), "msp.FabricCryptoConfig") + proto.RegisterType((*IdemixMSPConfig)(nil), "msp.IdemixMSPConfig") + proto.RegisterType((*IdemixMSPSignerConfig)(nil), "msp.IdemixMSPSignerConfig") + proto.RegisterType((*SigningIdentityInfo)(nil), "msp.SigningIdentityInfo") + proto.RegisterType((*KeyInfo)(nil), "msp.KeyInfo") + proto.RegisterType((*FabricOUIdentifier)(nil), "msp.FabricOUIdentifier") + proto.RegisterType((*FabricNodeOUs)(nil), "msp.FabricNodeOUs") +} + +func init() { proto.RegisterFile("msp/msp_config.proto", fileDescriptor_msp_config_e749e5bd1d6d997b) } + +var fileDescriptor_msp_config_e749e5bd1d6d997b = []byte{ + // 847 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x5f, 0x6f, 0xe3, 0x44, + 0x10, 0x57, 0x92, 0x26, 0x77, 0x99, 0x38, 0x49, 0xd9, 0xeb, 0x15, 0x0b, 0x71, 0x77, 0xa9, 0x01, + 0x91, 0x17, 0x52, 0xa9, 0x87, 0x84, 0x84, 0x78, 0xba, 0xc2, 0x09, 0x03, 0xa5, 0xd5, 0x56, 0x7d, + 0xe1, 0xc5, 0xda, 0xd8, 0x9b, 0x64, 0x65, 0x7b, 0xd7, 0xda, 0x5d, 0x9f, 0x08, 0xe2, 0x99, 0x2f, + 0xc0, 0x77, 0xe0, 0x99, 0x57, 0xbe, 0x1d, 0xda, 0x3f, 0x8d, 0x9d, 0x6b, 0x15, 0x78, 0x9b, 0x9d, + 0xf9, 0xcd, 0xcf, 0xb3, 0xbf, 0x99, 0x59, 0xc3, 0x49, 0xa9, 0xaa, 0xf3, 0x52, 0x55, 0x49, 0x2a, + 0xf8, 0x8a, 0xad, 0x17, 0x95, 0x14, 0x5a, 0xa0, 0x5e, 0xa9, 0xaa, 0xe8, 0x2b, 0x18, 0x5e, 0xdd, + 0xde, 0x5c, 0x5a, 0x3f, 0x42, 0x70, 0xa4, 0xb7, 0x15, 0x0d, 0x3b, 0xb3, 0xce, 0xbc, 0x8f, 0xad, + 0x8d, 0x4e, 0x61, 0xe0, 0xb2, 0xc2, 0xee, 0xac, 0x33, 0x0f, 0xb0, 0x3f, 0x45, 0x7f, 0x1f, 0xc1, + 0xf4, 0x2d, 0x59, 0x4a, 0x96, 0xee, 0xe5, 0x73, 0x52, 0xba, 0xfc, 0x21, 0xb6, 0x36, 0x7a, 0x01, + 0x20, 0x85, 0xd0, 0x49, 0x4a, 0xa5, 0x56, 0x61, 0x77, 0xd6, 0x9b, 0x07, 0x78, 0x68, 0x3c, 0x97, + 0xc6, 0x81, 0xbe, 0x00, 0xc4, 0xb8, 0xa6, 0xb2, 0xa4, 0x19, 0x23, 0x9a, 0x7a, 0x58, 0xcf, 0xc2, + 0x3e, 0x68, 0x47, 0x1c, 0xfc, 0x14, 0x06, 0x24, 0x2b, 0x19, 0x57, 0xe1, 0x91, 0x85, 0xf8, 0x13, + 0xfa, 0x1c, 0xa6, 0x92, 0xbe, 0x13, 0x29, 0xd1, 0x4c, 0xf0, 0xa4, 0x60, 0x4a, 0x87, 0x7d, 0x0b, + 0x98, 0x34, 0xee, 0x9f, 0x98, 0xd2, 0xe8, 0x12, 0x8e, 0x15, 0x5b, 0x73, 0xc6, 0xd7, 0x09, 0xcb, + 0x28, 0xd7, 0x4c, 0x6f, 0xc3, 0xc1, 0xac, 0x33, 0x1f, 0x5d, 0x84, 0x8b, 0x52, 0x55, 0x8b, 0x5b, + 0x17, 0x8c, 0x7d, 0x2c, 0xe6, 0x2b, 0x81, 0xa7, 0x6a, 0xdf, 0x89, 0x12, 0x78, 0x25, 0xe4, 0x9a, + 0x70, 0xf6, 0x9b, 0x25, 0x26, 0x45, 0x52, 0x73, 0xa6, 0x3d, 0xe1, 0x8a, 0x51, 0xa9, 0xc2, 0x27, + 0xb3, 0xde, 0x7c, 0x74, 0xf1, 0xa1, 0xe5, 0x74, 0x32, 0x5d, 0xdf, 0xc5, 0xbb, 0x38, 0x7e, 0xb1, + 0x9f, 0x7f, 0xc7, 0x99, 0x6e, 0xa2, 0x0a, 0x7d, 0x03, 0xe3, 0x54, 0x6e, 0x2b, 0x2d, 0x7c, 0xc7, + 0xc2, 0xa7, 0xb6, 0xc4, 0x36, 0xdd, 0xa5, 0x8d, 0x3b, 0xe1, 0x71, 0x90, 0xb6, 0x4e, 0xe8, 0x53, + 0x98, 0xe8, 0x42, 0x25, 0x2d, 0xd9, 0x87, 0x56, 0x8b, 0x40, 0x17, 0x0a, 0xef, 0x94, 0xff, 0x12, + 0x4e, 0x0d, 0xea, 0x11, 0xf5, 0xc1, 0xa2, 0x4f, 0x74, 0xa1, 0xe2, 0x07, 0x0d, 0xf8, 0x1a, 0xa6, + 0x2b, 0xfb, 0xfd, 0x84, 0x8b, 0x8c, 0x26, 0xa2, 0x56, 0xe1, 0xc8, 0xd6, 0x86, 0x5a, 0xb5, 0xfd, + 0x2c, 0x32, 0x7a, 0x7d, 0xa7, 0xf0, 0x78, 0xd5, 0x1c, 0x6b, 0x15, 0xfd, 0xd9, 0x01, 0xf4, 0xb0, + 0x78, 0x74, 0x01, 0xcf, 0x8d, 0xc0, 0x44, 0xd7, 0x92, 0x26, 0x1b, 0xa2, 0x36, 0xc9, 0x8a, 0x94, + 0xac, 0xd8, 0xfa, 0x31, 0x7a, 0xb6, 0x0b, 0x7e, 0x4f, 0xd4, 0xe6, 0xad, 0x0d, 0xa1, 0x18, 0xce, + 0xee, 0xdb, 0xd7, 0x92, 0xdd, 0x67, 0xd7, 0x3c, 0x35, 0xb2, 0xda, 0x81, 0x1d, 0xe2, 0x97, 0xf7, + 0xc0, 0x46, 0x60, 0x4b, 0xe4, 0x51, 0xd1, 0x5f, 0x1d, 0x98, 0xc6, 0x19, 0x2d, 0xd9, 0xaf, 0x87, + 0x07, 0xf9, 0x18, 0x7a, 0xac, 0xca, 0xfd, 0x16, 0x18, 0x13, 0x5d, 0xc0, 0xc0, 0xd4, 0x46, 0x65, + 0xd8, 0xb3, 0x12, 0x7c, 0x64, 0x25, 0xd8, 0x71, 0xdd, 0xda, 0x98, 0xef, 0x90, 0x47, 0xa2, 0x4f, + 0x60, 0xdc, 0x1a, 0xd4, 0x2a, 0x0f, 0x8f, 0x2c, 0x5f, 0xd0, 0x38, 0x6f, 0x72, 0x74, 0x02, 0x7d, + 0x5a, 0x89, 0x74, 0x13, 0xf6, 0x67, 0x9d, 0x79, 0x0f, 0xbb, 0x43, 0xf4, 0x47, 0x17, 0x9e, 0x3f, + 0x4a, 0x6e, 0xca, 0x4d, 0x25, 0xcd, 0x6c, 0xb9, 0x01, 0xb6, 0x36, 0x9a, 0x40, 0x57, 0xdd, 0x57, + 0xdb, 0x55, 0x39, 0xfa, 0x16, 0x5e, 0x1e, 0x9e, 0x59, 0x7b, 0x89, 0x21, 0xfe, 0xf8, 0xd0, 0x64, + 0x9a, 0x2f, 0x49, 0x51, 0x50, 0x5b, 0x75, 0x1f, 0x5b, 0xdb, 0x5c, 0x89, 0x72, 0x29, 0x8a, 0xa2, + 0xa4, 0xdc, 0x10, 0xda, 0xaa, 0x87, 0x38, 0x68, 0x9c, 0x71, 0x86, 0x7e, 0x80, 0x33, 0x53, 0x96, + 0x21, 0x22, 0x45, 0xd2, 0x92, 0x80, 0xf1, 0x95, 0x90, 0xa5, 0xb5, 0xed, 0x22, 0x06, 0xf8, 0x55, + 0x03, 0xc4, 0x3b, 0x5c, 0xdc, 0xc0, 0x22, 0x01, 0xcf, 0x1e, 0x59, 0x53, 0x53, 0x47, 0x55, 0x2f, + 0x0b, 0x96, 0x26, 0xbe, 0x2b, 0x4e, 0x8e, 0xc0, 0x39, 0x9d, 0x60, 0xe8, 0x35, 0x4c, 0x2a, 0xc9, + 0xde, 0x99, 0x61, 0xf7, 0xa8, 0xae, 0xed, 0x5d, 0x60, 0x7b, 0xf7, 0x23, 0x75, 0x1b, 0x3f, 0xf6, + 0x18, 0x97, 0x14, 0xdd, 0xc2, 0x13, 0x1f, 0x41, 0x9f, 0xc1, 0x24, 0xa7, 0xed, 0x99, 0xf3, 0x33, + 0x32, 0xce, 0x69, 0x6b, 0xc0, 0xd0, 0x19, 0x04, 0x06, 0x56, 0x12, 0x4d, 0x25, 0x23, 0x85, 0xef, + 0xc3, 0x28, 0xa7, 0xdb, 0x2b, 0xef, 0x8a, 0x7e, 0xbf, 0x5f, 0x86, 0xf6, 0xc3, 0x80, 0x66, 0x30, + 0x32, 0x4b, 0xc8, 0x56, 0x2c, 0x25, 0x9a, 0xfa, 0x2b, 0xb4, 0x5d, 0xff, 0xa3, 0x91, 0xdd, 0xff, + 0x6e, 0x64, 0xf4, 0x4f, 0x07, 0xc6, 0x7b, 0xcb, 0x6a, 0x9e, 0x56, 0xca, 0xc9, 0xb2, 0x70, 0x1f, + 0x7d, 0x8a, 0xfd, 0x09, 0xc5, 0x70, 0x92, 0x16, 0xcc, 0xb4, 0x56, 0xd4, 0xef, 0x7f, 0xe5, 0xc0, + 0x0b, 0x87, 0x5c, 0xd2, 0x75, 0xdd, 0xba, 0xdc, 0x77, 0x80, 0x2a, 0x4a, 0xe5, 0x7b, 0x44, 0xbd, + 0xc3, 0x44, 0xc7, 0x26, 0xa5, 0x4d, 0xf3, 0x26, 0x81, 0x33, 0x21, 0xd7, 0x8b, 0xcd, 0xb6, 0xa2, + 0xb2, 0xa0, 0xd9, 0x9a, 0xca, 0x85, 0x7b, 0x68, 0xdc, 0x8f, 0x4d, 0x19, 0xa6, 0x37, 0xc7, 0x57, + 0xaa, 0x72, 0xeb, 0x71, 0x43, 0xd2, 0x9c, 0xac, 0xe9, 0x2f, 0xf3, 0x35, 0xd3, 0x9b, 0x7a, 0xb9, + 0x48, 0x45, 0x79, 0xde, 0xca, 0x3d, 0x77, 0xb9, 0xe7, 0x2e, 0xd7, 0xfc, 0x26, 0x97, 0x03, 0x6b, + 0xbf, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0x54, 0x67, 0x46, 0xdb, 0x38, 0x07, 0x00, 0x00, +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.proto b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.proto new file mode 100644 index 000000000..542f06d82 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_config.proto @@ -0,0 +1,208 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +syntax = "proto3"; + +option go_package = "github.com/hyperledger/fabric/protos/msp"; +option java_package = "org.hyperledger.fabric.protos.msp"; +option java_outer_classname = "MspConfigPackage"; + +package msp; + +// MSPConfig collects all the configuration information for +// an MSP. The Config field should be unmarshalled in a way +// that depends on the Type +message MSPConfig { + // Type holds the type of the MSP; the default one would + // be of type FABRIC implementing an X.509 based provider + int32 type = 1; + + // Config is MSP dependent configuration info + bytes config = 2; +} + +// FabricMSPConfig collects all the configuration information for +// a Fabric MSP. +// Here we assume a default certificate validation policy, where +// any certificate signed by any of the listed rootCA certs would +// be considered as valid under this MSP. +// This MSP may or may not come with a signing identity. If it does, +// it can also issue signing identities. If it does not, it can only +// be used to validate and verify certificates. +message FabricMSPConfig { + // Name holds the identifier of the MSP; MSP identifier + // is chosen by the application that governs this MSP. + // For example, and assuming the default implementation of MSP, + // that is X.509-based and considers a single Issuer, + // this can refer to the Subject OU field or the Issuer OU field. + string name = 1; + + // List of root certificates trusted by this MSP + // they are used upon certificate validation (see + // comment for IntermediateCerts below) + repeated bytes root_certs = 2; + + // List of intermediate certificates trusted by this MSP; + // they are used upon certificate validation as follows: + // validation attempts to build a path from the certificate + // to be validated (which is at one end of the path) and + // one of the certs in the RootCerts field (which is at + // the other end of the path). If the path is longer than + // 2, certificates in the middle are searched within the + // IntermediateCerts pool + repeated bytes intermediate_certs = 3; + + // Identity denoting the administrator of this MSP + repeated bytes admins = 4; + + // Identity revocation list + repeated bytes revocation_list = 5; + + // SigningIdentity holds information on the signing identity + // this peer is to use, and which is to be imported by the + // MSP defined before + SigningIdentityInfo signing_identity = 6; + + // OrganizationalUnitIdentifiers holds one or more + // fabric organizational unit identifiers that belong to + // this MSP configuration + repeated FabricOUIdentifier organizational_unit_identifiers = 7; + + // FabricCryptoConfig contains the configuration parameters + // for the cryptographic algorithms used by this MSP + FabricCryptoConfig crypto_config = 8; + + // List of TLS root certificates trusted by this MSP. + // They are returned by GetTLSRootCerts. + repeated bytes tls_root_certs = 9; + + // List of TLS intermediate certificates trusted by this MSP; + // They are returned by GetTLSIntermediateCerts. + repeated bytes tls_intermediate_certs = 10; + + // fabric_node_ous contains the configuration to distinguish clients from peers from orderers + // based on the OUs. + FabricNodeOUs fabric_node_ous = 11; +} + +// FabricCryptoConfig contains configuration parameters +// for the cryptographic algorithms used by the MSP +// this configuration refers to +message FabricCryptoConfig { + + // SignatureHashFamily is a string representing the hash family to be used + // during sign and verify operations. + // Allowed values are "SHA2" and "SHA3". + string signature_hash_family = 1; + + // IdentityIdentifierHashFunction is a string representing the hash function + // to be used during the computation of the identity identifier of an MSP identity. + // Allowed values are "SHA256", "SHA384" and "SHA3_256", "SHA3_384". + string identity_identifier_hash_function = 2; + +} + +// IdemixMSPConfig collects all the configuration information for +// an Idemix MSP. +message IdemixMSPConfig { + // Name holds the identifier of the MSP + string name = 1; + + // ipk represents the (serialized) issuer public key + bytes ipk = 2; + + // signer may contain crypto material to configure a default signer + IdemixMSPSignerConfig signer = 3; + + // revocation_pk is the public key used for revocation of credentials + bytes revocation_pk = 4; + + // epoch represents the current epoch (time interval) used for revocation + int64 epoch = 5; +} + +// IdemixMSPSIgnerConfig contains the crypto material to set up an idemix signing identity +message IdemixMSPSignerConfig { + // cred represents the serialized idemix credential of the default signer + bytes cred = 1; + + // sk is the secret key of the default signer, corresponding to credential Cred + bytes sk = 2; + + // organizational_unit_identifier defines the organizational unit the default signer is in + string organizational_unit_identifier = 3; + + // role defines whether the default signer is admin, peer, member or client + int32 role = 4; + + // enrollment_id contains the enrollment id of this signer + string enrollment_id = 5; + + // credential_revocation_information contains a serialized CredentialRevocationInformation + bytes credential_revocation_information = 6; +} + +// SigningIdentityInfo represents the configuration information +// related to the signing identity the peer is to use for generating +// endorsements +message SigningIdentityInfo { + // PublicSigner carries the public information of the signing + // identity. For an X.509 provider this would be represented by + // an X.509 certificate + bytes public_signer = 1; + + // PrivateSigner denotes a reference to the private key of the + // peer's signing identity + KeyInfo private_signer = 2; +} + +// KeyInfo represents a (secret) key that is either already stored +// in the bccsp/keystore or key material to be imported to the +// bccsp key-store. In later versions it may contain also a +// keystore identifier +message KeyInfo { + // Identifier of the key inside the default keystore; this for + // the case of Software BCCSP as well as the HSM BCCSP would be + // the SKI of the key + string key_identifier = 1; + + // KeyMaterial (optional) for the key to be imported; this is + // properly encoded key bytes, prefixed by the type of the key + bytes key_material = 2; +} + +// FabricOUIdentifier represents an organizational unit and +// its related chain of trust identifier. +message FabricOUIdentifier { + + // Certificate represents the second certificate in a certification chain. + // (Notice that the first certificate in a certification chain is supposed + // to be the certificate of an identity). + // It must correspond to the certificate of root or intermediate CA + // recognized by the MSP this message belongs to. + // Starting from this certificate, a certification chain is computed + // and bound to the OrganizationUnitIdentifier specified + bytes certificate = 1; + + // OrganizationUnitIdentifier defines the organizational unit under the + // MSP identified with MSPIdentifier + string organizational_unit_identifier = 2; +} + +// FabricNodeOUs contains configuration to tell apart clients from peers from orderers +// based on OUs. If NodeOUs recognition is enabled then an msp identity +// that does not contain any of the specified OU will be considered invalid. +message FabricNodeOUs { + // If true then an msp identity that does not contain any of the specified OU will be considered invalid. + bool enable = 1; + + // OU Identifier of the clients + FabricOUIdentifier client_ou_identifier = 2; + + // OU Identifier of the peers + FabricOUIdentifier peer_ou_identifier = 3; + +} \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.go new file mode 100644 index 000000000..339dc6296 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.go @@ -0,0 +1,43 @@ +/* +Copyright IBM Corp. 2017 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package msp + +import ( + "fmt" + + "github.com/golang/protobuf/proto" +) + +func (mp *MSPPrincipal) VariablyOpaqueFields() []string { + return []string{"principal"} +} + +func (mp *MSPPrincipal) VariablyOpaqueFieldProto(name string) (proto.Message, error) { + if name != mp.VariablyOpaqueFields()[0] { + return nil, fmt.Errorf("not a marshaled field: %s", name) + } + switch mp.PrincipalClassification { + case MSPPrincipal_ROLE: + return &MSPRole{}, nil + case MSPPrincipal_ORGANIZATION_UNIT: + return &OrganizationUnit{}, nil + case MSPPrincipal_IDENTITY: + return nil, fmt.Errorf("unable to decode MSP type IDENTITY until the protos are fixed to include the IDENTITY proto in protos/msp") + default: + return nil, fmt.Errorf("unable to decode MSP type: %v", mp.PrincipalClassification) + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.pb.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.pb.go new file mode 100644 index 000000000..9200e97f2 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.pb.go @@ -0,0 +1,437 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: msp/msp_principal.proto + +package msp // import "github.com/hyperledger/fabric/protos/msp" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type MSPPrincipal_Classification int32 + +const ( + MSPPrincipal_ROLE MSPPrincipal_Classification = 0 + // one of a member of MSP network, and the one of an + // administrator of an MSP network + MSPPrincipal_ORGANIZATION_UNIT MSPPrincipal_Classification = 1 + // groupping of entities, per MSP affiliation + // E.g., this can well be represented by an MSP's + // Organization unit + MSPPrincipal_IDENTITY MSPPrincipal_Classification = 2 + // identity + MSPPrincipal_ANONYMITY MSPPrincipal_Classification = 3 + // an identity to be anonymous or nominal. + MSPPrincipal_COMBINED MSPPrincipal_Classification = 4 +) + +var MSPPrincipal_Classification_name = map[int32]string{ + 0: "ROLE", + 1: "ORGANIZATION_UNIT", + 2: "IDENTITY", + 3: "ANONYMITY", + 4: "COMBINED", +} +var MSPPrincipal_Classification_value = map[string]int32{ + "ROLE": 0, + "ORGANIZATION_UNIT": 1, + "IDENTITY": 2, + "ANONYMITY": 3, + "COMBINED": 4, +} + +func (x MSPPrincipal_Classification) String() string { + return proto.EnumName(MSPPrincipal_Classification_name, int32(x)) +} +func (MSPPrincipal_Classification) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{0, 0} +} + +type MSPRole_MSPRoleType int32 + +const ( + MSPRole_MEMBER MSPRole_MSPRoleType = 0 + MSPRole_ADMIN MSPRole_MSPRoleType = 1 + MSPRole_CLIENT MSPRole_MSPRoleType = 2 + MSPRole_PEER MSPRole_MSPRoleType = 3 +) + +var MSPRole_MSPRoleType_name = map[int32]string{ + 0: "MEMBER", + 1: "ADMIN", + 2: "CLIENT", + 3: "PEER", +} +var MSPRole_MSPRoleType_value = map[string]int32{ + "MEMBER": 0, + "ADMIN": 1, + "CLIENT": 2, + "PEER": 3, +} + +func (x MSPRole_MSPRoleType) String() string { + return proto.EnumName(MSPRole_MSPRoleType_name, int32(x)) +} +func (MSPRole_MSPRoleType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{2, 0} +} + +type MSPIdentityAnonymity_MSPIdentityAnonymityType int32 + +const ( + MSPIdentityAnonymity_NOMINAL MSPIdentityAnonymity_MSPIdentityAnonymityType = 0 + MSPIdentityAnonymity_ANONYMOUS MSPIdentityAnonymity_MSPIdentityAnonymityType = 1 +) + +var MSPIdentityAnonymity_MSPIdentityAnonymityType_name = map[int32]string{ + 0: "NOMINAL", + 1: "ANONYMOUS", +} +var MSPIdentityAnonymity_MSPIdentityAnonymityType_value = map[string]int32{ + "NOMINAL": 0, + "ANONYMOUS": 1, +} + +func (x MSPIdentityAnonymity_MSPIdentityAnonymityType) String() string { + return proto.EnumName(MSPIdentityAnonymity_MSPIdentityAnonymityType_name, int32(x)) +} +func (MSPIdentityAnonymity_MSPIdentityAnonymityType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{3, 0} +} + +// MSPPrincipal aims to represent an MSP-centric set of identities. +// In particular, this structure allows for definition of +// - a group of identities that are member of the same MSP +// - a group of identities that are member of the same organization unit +// in the same MSP +// - a group of identities that are administering a specific MSP +// - a specific identity +// Expressing these groups is done given two fields of the fields below +// - Classification, that defines the type of classification of identities +// in an MSP this principal would be defined on; Classification can take +// three values: +// (i) ByMSPRole: that represents a classification of identities within +// MSP based on one of the two pre-defined MSP rules, "member" and "admin" +// (ii) ByOrganizationUnit: that represents a classification of identities +// within MSP based on the organization unit an identity belongs to +// (iii)ByIdentity that denotes that MSPPrincipal is mapped to a single +// identity/certificate; this would mean that the Principal bytes +// message +type MSPPrincipal struct { + // Classification describes the way that one should process + // Principal. An Classification value of "ByOrganizationUnit" reflects + // that "Principal" contains the name of an organization this MSP + // handles. A Classification value "ByIdentity" means that + // "Principal" contains a specific identity. Default value + // denotes that Principal contains one of the groups by + // default supported by all MSPs ("admin" or "member"). + PrincipalClassification MSPPrincipal_Classification `protobuf:"varint,1,opt,name=principal_classification,json=principalClassification,proto3,enum=common.MSPPrincipal_Classification" json:"principal_classification,omitempty"` + // Principal completes the policy principal definition. For the default + // principal types, Principal can be either "Admin" or "Member". + // For the ByOrganizationUnit/ByIdentity values of Classification, + // PolicyPrincipal acquires its value from an organization unit or + // identity, respectively. + // For the Combined Classification type, the Principal is a marshalled + // CombinedPrincipal. + Principal []byte `protobuf:"bytes,2,opt,name=principal,proto3" json:"principal,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MSPPrincipal) Reset() { *m = MSPPrincipal{} } +func (m *MSPPrincipal) String() string { return proto.CompactTextString(m) } +func (*MSPPrincipal) ProtoMessage() {} +func (*MSPPrincipal) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{0} +} +func (m *MSPPrincipal) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MSPPrincipal.Unmarshal(m, b) +} +func (m *MSPPrincipal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MSPPrincipal.Marshal(b, m, deterministic) +} +func (dst *MSPPrincipal) XXX_Merge(src proto.Message) { + xxx_messageInfo_MSPPrincipal.Merge(dst, src) +} +func (m *MSPPrincipal) XXX_Size() int { + return xxx_messageInfo_MSPPrincipal.Size(m) +} +func (m *MSPPrincipal) XXX_DiscardUnknown() { + xxx_messageInfo_MSPPrincipal.DiscardUnknown(m) +} + +var xxx_messageInfo_MSPPrincipal proto.InternalMessageInfo + +func (m *MSPPrincipal) GetPrincipalClassification() MSPPrincipal_Classification { + if m != nil { + return m.PrincipalClassification + } + return MSPPrincipal_ROLE +} + +func (m *MSPPrincipal) GetPrincipal() []byte { + if m != nil { + return m.Principal + } + return nil +} + +// OrganizationUnit governs the organization of the Principal +// field of a policy principal when a specific organization unity members +// are to be defined within a policy principal. +type OrganizationUnit struct { + // MSPIdentifier represents the identifier of the MSP this organization unit + // refers to + MspIdentifier string `protobuf:"bytes,1,opt,name=msp_identifier,json=mspIdentifier,proto3" json:"msp_identifier,omitempty"` + // OrganizationUnitIdentifier defines the organizational unit under the + // MSP identified with MSPIdentifier + OrganizationalUnitIdentifier string `protobuf:"bytes,2,opt,name=organizational_unit_identifier,json=organizationalUnitIdentifier,proto3" json:"organizational_unit_identifier,omitempty"` + // CertifiersIdentifier is the hash of certificates chain of trust + // related to this organizational unit + CertifiersIdentifier []byte `protobuf:"bytes,3,opt,name=certifiers_identifier,json=certifiersIdentifier,proto3" json:"certifiers_identifier,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OrganizationUnit) Reset() { *m = OrganizationUnit{} } +func (m *OrganizationUnit) String() string { return proto.CompactTextString(m) } +func (*OrganizationUnit) ProtoMessage() {} +func (*OrganizationUnit) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{1} +} +func (m *OrganizationUnit) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OrganizationUnit.Unmarshal(m, b) +} +func (m *OrganizationUnit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OrganizationUnit.Marshal(b, m, deterministic) +} +func (dst *OrganizationUnit) XXX_Merge(src proto.Message) { + xxx_messageInfo_OrganizationUnit.Merge(dst, src) +} +func (m *OrganizationUnit) XXX_Size() int { + return xxx_messageInfo_OrganizationUnit.Size(m) +} +func (m *OrganizationUnit) XXX_DiscardUnknown() { + xxx_messageInfo_OrganizationUnit.DiscardUnknown(m) +} + +var xxx_messageInfo_OrganizationUnit proto.InternalMessageInfo + +func (m *OrganizationUnit) GetMspIdentifier() string { + if m != nil { + return m.MspIdentifier + } + return "" +} + +func (m *OrganizationUnit) GetOrganizationalUnitIdentifier() string { + if m != nil { + return m.OrganizationalUnitIdentifier + } + return "" +} + +func (m *OrganizationUnit) GetCertifiersIdentifier() []byte { + if m != nil { + return m.CertifiersIdentifier + } + return nil +} + +// MSPRole governs the organization of the Principal +// field of an MSPPrincipal when it aims to define one of the +// two dedicated roles within an MSP: Admin and Members. +type MSPRole struct { + // MSPIdentifier represents the identifier of the MSP this principal + // refers to + MspIdentifier string `protobuf:"bytes,1,opt,name=msp_identifier,json=mspIdentifier,proto3" json:"msp_identifier,omitempty"` + // MSPRoleType defines which of the available, pre-defined MSP-roles + // an identiy should posess inside the MSP with identifier MSPidentifier + Role MSPRole_MSPRoleType `protobuf:"varint,2,opt,name=role,proto3,enum=common.MSPRole_MSPRoleType" json:"role,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MSPRole) Reset() { *m = MSPRole{} } +func (m *MSPRole) String() string { return proto.CompactTextString(m) } +func (*MSPRole) ProtoMessage() {} +func (*MSPRole) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{2} +} +func (m *MSPRole) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MSPRole.Unmarshal(m, b) +} +func (m *MSPRole) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MSPRole.Marshal(b, m, deterministic) +} +func (dst *MSPRole) XXX_Merge(src proto.Message) { + xxx_messageInfo_MSPRole.Merge(dst, src) +} +func (m *MSPRole) XXX_Size() int { + return xxx_messageInfo_MSPRole.Size(m) +} +func (m *MSPRole) XXX_DiscardUnknown() { + xxx_messageInfo_MSPRole.DiscardUnknown(m) +} + +var xxx_messageInfo_MSPRole proto.InternalMessageInfo + +func (m *MSPRole) GetMspIdentifier() string { + if m != nil { + return m.MspIdentifier + } + return "" +} + +func (m *MSPRole) GetRole() MSPRole_MSPRoleType { + if m != nil { + return m.Role + } + return MSPRole_MEMBER +} + +// MSPIdentityAnonymity can be used to enforce an identity to be anonymous or nominal. +type MSPIdentityAnonymity struct { + AnonymityType MSPIdentityAnonymity_MSPIdentityAnonymityType `protobuf:"varint,1,opt,name=anonymity_type,json=anonymityType,proto3,enum=common.MSPIdentityAnonymity_MSPIdentityAnonymityType" json:"anonymity_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MSPIdentityAnonymity) Reset() { *m = MSPIdentityAnonymity{} } +func (m *MSPIdentityAnonymity) String() string { return proto.CompactTextString(m) } +func (*MSPIdentityAnonymity) ProtoMessage() {} +func (*MSPIdentityAnonymity) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{3} +} +func (m *MSPIdentityAnonymity) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MSPIdentityAnonymity.Unmarshal(m, b) +} +func (m *MSPIdentityAnonymity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MSPIdentityAnonymity.Marshal(b, m, deterministic) +} +func (dst *MSPIdentityAnonymity) XXX_Merge(src proto.Message) { + xxx_messageInfo_MSPIdentityAnonymity.Merge(dst, src) +} +func (m *MSPIdentityAnonymity) XXX_Size() int { + return xxx_messageInfo_MSPIdentityAnonymity.Size(m) +} +func (m *MSPIdentityAnonymity) XXX_DiscardUnknown() { + xxx_messageInfo_MSPIdentityAnonymity.DiscardUnknown(m) +} + +var xxx_messageInfo_MSPIdentityAnonymity proto.InternalMessageInfo + +func (m *MSPIdentityAnonymity) GetAnonymityType() MSPIdentityAnonymity_MSPIdentityAnonymityType { + if m != nil { + return m.AnonymityType + } + return MSPIdentityAnonymity_NOMINAL +} + +// CombinedPrincipal governs the organization of the Principal +// field of a policy principal when principal_classification has +// indicated that a combined form of principals is required +type CombinedPrincipal struct { + // Principals refer to combined principals + Principals []*MSPPrincipal `protobuf:"bytes,1,rep,name=principals,proto3" json:"principals,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CombinedPrincipal) Reset() { *m = CombinedPrincipal{} } +func (m *CombinedPrincipal) String() string { return proto.CompactTextString(m) } +func (*CombinedPrincipal) ProtoMessage() {} +func (*CombinedPrincipal) Descriptor() ([]byte, []int) { + return fileDescriptor_msp_principal_9016cf1a8a7156cd, []int{4} +} +func (m *CombinedPrincipal) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CombinedPrincipal.Unmarshal(m, b) +} +func (m *CombinedPrincipal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CombinedPrincipal.Marshal(b, m, deterministic) +} +func (dst *CombinedPrincipal) XXX_Merge(src proto.Message) { + xxx_messageInfo_CombinedPrincipal.Merge(dst, src) +} +func (m *CombinedPrincipal) XXX_Size() int { + return xxx_messageInfo_CombinedPrincipal.Size(m) +} +func (m *CombinedPrincipal) XXX_DiscardUnknown() { + xxx_messageInfo_CombinedPrincipal.DiscardUnknown(m) +} + +var xxx_messageInfo_CombinedPrincipal proto.InternalMessageInfo + +func (m *CombinedPrincipal) GetPrincipals() []*MSPPrincipal { + if m != nil { + return m.Principals + } + return nil +} + +func init() { + proto.RegisterType((*MSPPrincipal)(nil), "common.MSPPrincipal") + proto.RegisterType((*OrganizationUnit)(nil), "common.OrganizationUnit") + proto.RegisterType((*MSPRole)(nil), "common.MSPRole") + proto.RegisterType((*MSPIdentityAnonymity)(nil), "common.MSPIdentityAnonymity") + proto.RegisterType((*CombinedPrincipal)(nil), "common.CombinedPrincipal") + proto.RegisterEnum("common.MSPPrincipal_Classification", MSPPrincipal_Classification_name, MSPPrincipal_Classification_value) + proto.RegisterEnum("common.MSPRole_MSPRoleType", MSPRole_MSPRoleType_name, MSPRole_MSPRoleType_value) + proto.RegisterEnum("common.MSPIdentityAnonymity_MSPIdentityAnonymityType", MSPIdentityAnonymity_MSPIdentityAnonymityType_name, MSPIdentityAnonymity_MSPIdentityAnonymityType_value) +} + +func init() { + proto.RegisterFile("msp/msp_principal.proto", fileDescriptor_msp_principal_9016cf1a8a7156cd) +} + +var fileDescriptor_msp_principal_9016cf1a8a7156cd = []byte{ + // 519 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x6a, 0xdb, 0x30, + 0x14, 0xc6, 0xeb, 0xa4, 0x6b, 0x9b, 0x93, 0x3f, 0xa8, 0x22, 0xa5, 0x81, 0x95, 0x11, 0xbc, 0x0d, + 0x72, 0xe5, 0x40, 0xba, 0xed, 0x62, 0x77, 0x4e, 0x62, 0x86, 0x20, 0x96, 0x8d, 0xe3, 0x5c, 0xb4, + 0x94, 0x05, 0xc7, 0x51, 0x52, 0x81, 0x6d, 0x19, 0xdb, 0xbd, 0xf0, 0xde, 0x65, 0x6f, 0xb0, 0xcb, + 0x3d, 0xd5, 0x9e, 0x62, 0xd8, 0x6e, 0x12, 0x65, 0xeb, 0x60, 0x57, 0xf6, 0x39, 0xe7, 0xf7, 0x1d, + 0x1d, 0x49, 0x9f, 0xe0, 0x3a, 0x4c, 0xe3, 0x61, 0x98, 0xc6, 0xcb, 0x38, 0xe1, 0x91, 0xcf, 0x63, + 0x2f, 0xd0, 0xe2, 0x44, 0x64, 0x02, 0x9f, 0xf9, 0x22, 0x0c, 0x45, 0xa4, 0xfe, 0x52, 0xa0, 0x65, + 0xce, 0x6d, 0x7b, 0x57, 0xc6, 0x5f, 0xa1, 0xb7, 0x67, 0x97, 0x7e, 0xe0, 0xa5, 0x29, 0xdf, 0x70, + 0xdf, 0xcb, 0xb8, 0x88, 0x7a, 0x4a, 0x5f, 0x19, 0x74, 0x46, 0x6f, 0xb5, 0x4a, 0xab, 0xc9, 0x3a, + 0x6d, 0x72, 0x84, 0x3a, 0xd7, 0xfb, 0x26, 0xc7, 0x05, 0x7c, 0x03, 0x8d, 0x7d, 0xa9, 0x57, 0xeb, + 0x2b, 0x83, 0x96, 0x73, 0x48, 0xa8, 0x0f, 0xd0, 0xf9, 0x83, 0xbf, 0x80, 0x53, 0xc7, 0x9a, 0x19, + 0xe8, 0x04, 0x5f, 0xc1, 0xa5, 0xe5, 0x7c, 0xd1, 0x29, 0xb9, 0xd7, 0x5d, 0x62, 0xd1, 0xe5, 0x82, + 0x12, 0x17, 0x29, 0xb8, 0x05, 0x17, 0x64, 0x6a, 0x50, 0x97, 0xb8, 0x77, 0xa8, 0x86, 0xdb, 0xd0, + 0xd0, 0xa9, 0x45, 0xef, 0xcc, 0x22, 0xac, 0x17, 0xc5, 0x89, 0x65, 0x8e, 0x09, 0x35, 0xa6, 0xe8, + 0x54, 0xfd, 0xa9, 0x00, 0xb2, 0x92, 0xad, 0x17, 0xf1, 0x6f, 0x65, 0xf3, 0x45, 0xc4, 0x33, 0xfc, + 0x1e, 0x3a, 0xc5, 0x01, 0xf1, 0x35, 0x8b, 0x32, 0xbe, 0xe1, 0x2c, 0x29, 0xb7, 0xd9, 0x70, 0xda, + 0x61, 0x1a, 0x93, 0x7d, 0x12, 0x4f, 0xe1, 0x8d, 0x90, 0xa4, 0x5e, 0xb0, 0x7c, 0x8a, 0x78, 0x26, + 0xcb, 0x6a, 0xa5, 0xec, 0xe6, 0x98, 0x2a, 0x96, 0x90, 0xba, 0xdc, 0xc2, 0x95, 0xcf, 0x92, 0x2a, + 0x48, 0x65, 0x71, 0xbd, 0x3c, 0x89, 0xee, 0xa1, 0x78, 0x10, 0xa9, 0xdf, 0x15, 0x38, 0x37, 0xe7, + 0xb6, 0x23, 0x02, 0xf6, 0xbf, 0xd3, 0x0e, 0xe1, 0x34, 0x11, 0x01, 0x2b, 0x67, 0xea, 0x8c, 0x5e, + 0x4b, 0x37, 0x56, 0x74, 0xd9, 0x7d, 0xdd, 0x3c, 0x66, 0x4e, 0x09, 0xaa, 0x9f, 0xa1, 0x29, 0x25, + 0x31, 0xc0, 0x99, 0x69, 0x98, 0x63, 0xc3, 0x41, 0x27, 0xb8, 0x01, 0xaf, 0xf4, 0xa9, 0x49, 0x28, + 0x52, 0x8a, 0xf4, 0x64, 0x46, 0x0c, 0xea, 0xa2, 0x5a, 0x71, 0x31, 0xb6, 0x61, 0x38, 0xa8, 0xae, + 0xfe, 0x50, 0xa0, 0x6b, 0xce, 0xed, 0x6a, 0xf9, 0x2c, 0xd7, 0x23, 0x11, 0xe5, 0x21, 0xcf, 0x72, + 0xfc, 0x00, 0x1d, 0x6f, 0x17, 0x2c, 0xb3, 0x3c, 0x66, 0xcf, 0x0e, 0xfa, 0x28, 0xcd, 0xf3, 0x97, + 0xea, 0xc5, 0x64, 0x39, 0x69, 0xdb, 0x93, 0x43, 0xf5, 0x13, 0xf4, 0xfe, 0x85, 0xe2, 0x26, 0x9c, + 0x53, 0xcb, 0x24, 0x54, 0x9f, 0xa1, 0x93, 0x83, 0x27, 0xac, 0xc5, 0x1c, 0x29, 0x2a, 0x81, 0xcb, + 0x89, 0x08, 0x57, 0x3c, 0x62, 0xeb, 0x83, 0xed, 0x3f, 0x00, 0xec, 0x5d, 0x98, 0xf6, 0x94, 0x7e, + 0x7d, 0xd0, 0x1c, 0x75, 0x5f, 0x32, 0xba, 0x23, 0x71, 0x63, 0x1b, 0xde, 0x89, 0x64, 0xab, 0x3d, + 0xe6, 0x31, 0x4b, 0x02, 0xb6, 0xde, 0xb2, 0x44, 0xdb, 0x78, 0xab, 0x84, 0xfb, 0xd5, 0x2b, 0x4b, + 0x9f, 0x1b, 0xdc, 0x0f, 0xb6, 0x3c, 0x7b, 0x7c, 0x5a, 0x15, 0xe1, 0x50, 0x82, 0x87, 0x15, 0x3c, + 0xac, 0xe0, 0xe2, 0x9d, 0xae, 0xce, 0xca, 0xff, 0xdb, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x40, + 0x36, 0xd2, 0xf9, 0xb9, 0x03, 0x00, 0x00, +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.proto b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.proto new file mode 100644 index 000000000..972f0fe4d --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/hyperledger/fabric/protos/msp/msp_principal.proto @@ -0,0 +1,153 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +syntax = "proto3"; + +option go_package = "github.com/hyperledger/fabric/protos/msp"; +option java_package = "org.hyperledger.fabric.protos.common"; + +package common; + + +// msp_principal.proto contains proto messages defining the generalized +// MSP notion of identity called an MSPPrincipal. It is used as part of +// the chain configuration, in particular as the identity parameters to +// the configuration.proto file. This does not represent the MSP +// configuration for a chain, but is understood by MSPs + +// MSPPrincipal aims to represent an MSP-centric set of identities. +// In particular, this structure allows for definition of +// - a group of identities that are member of the same MSP +// - a group of identities that are member of the same organization unit +// in the same MSP +// - a group of identities that are administering a specific MSP +// - a specific identity +// Expressing these groups is done given two fields of the fields below +// - Classification, that defines the type of classification of identities +// in an MSP this principal would be defined on; Classification can take +// three values: +// (i) ByMSPRole: that represents a classification of identities within +// MSP based on one of the two pre-defined MSP rules, "member" and "admin" +// (ii) ByOrganizationUnit: that represents a classification of identities +// within MSP based on the organization unit an identity belongs to +// (iii)ByIdentity that denotes that MSPPrincipal is mapped to a single +// identity/certificate; this would mean that the Principal bytes +// message +message MSPPrincipal { + + enum Classification { + ROLE = 0; // Represents the one of the dedicated MSP roles, the + // one of a member of MSP network, and the one of an + // administrator of an MSP network + ORGANIZATION_UNIT = 1; // Denotes a finer grained (affiliation-based) + // groupping of entities, per MSP affiliation + // E.g., this can well be represented by an MSP's + // Organization unit + IDENTITY = 2; // Denotes a principal that consists of a single + // identity + ANONYMITY = 3; // Denotes a principal that can be used to enforce + // an identity to be anonymous or nominal. + COMBINED = 4; // Denotes a combined principal + } + + // Classification describes the way that one should process + // Principal. An Classification value of "ByOrganizationUnit" reflects + // that "Principal" contains the name of an organization this MSP + // handles. A Classification value "ByIdentity" means that + // "Principal" contains a specific identity. Default value + // denotes that Principal contains one of the groups by + // default supported by all MSPs ("admin" or "member"). + Classification principal_classification = 1; + + // Principal completes the policy principal definition. For the default + // principal types, Principal can be either "Admin" or "Member". + // For the ByOrganizationUnit/ByIdentity values of Classification, + // PolicyPrincipal acquires its value from an organization unit or + // identity, respectively. + // For the Combined Classification type, the Principal is a marshalled + // CombinedPrincipal. + bytes principal = 2; +} + + +// OrganizationUnit governs the organization of the Principal +// field of a policy principal when a specific organization unity members +// are to be defined within a policy principal. +message OrganizationUnit { + + // MSPIdentifier represents the identifier of the MSP this organization unit + // refers to + string msp_identifier = 1; + + // OrganizationUnitIdentifier defines the organizational unit under the + // MSP identified with MSPIdentifier + string organizational_unit_identifier = 2; + + // CertifiersIdentifier is the hash of certificates chain of trust + // related to this organizational unit + bytes certifiers_identifier = 3; +} + +// MSPRole governs the organization of the Principal +// field of an MSPPrincipal when it aims to define one of the +// two dedicated roles within an MSP: Admin and Members. +message MSPRole { + + // MSPIdentifier represents the identifier of the MSP this principal + // refers to + string msp_identifier = 1; + + enum MSPRoleType { + MEMBER = 0; // Represents an MSP Member + ADMIN = 1; // Represents an MSP Admin + CLIENT = 2; // Represents an MSP Client + PEER = 3; // Represents an MSP Peer + } + + // MSPRoleType defines which of the available, pre-defined MSP-roles + // an identiy should posess inside the MSP with identifier MSPidentifier + MSPRoleType role = 2; + +} + +// MSPIdentityAnonymity can be used to enforce an identity to be anonymous or nominal. +message MSPIdentityAnonymity { + + enum MSPIdentityAnonymityType { + NOMINAL = 0; // Represents a nominal MSP Identity + ANONYMOUS = 1; // Represents an anonymous MSP Identity + } + + MSPIdentityAnonymityType anonymity_type = 1; + +} + +// CombinedPrincipal governs the organization of the Principal +// field of a policy principal when principal_classification has +// indicated that a combined form of principals is required +message CombinedPrincipal { + + // Principals refer to combined principals + repeated MSPPrincipal principals = 1; +} + +// TODO: Bring msp.SerializedIdentity from fabric/msp/identities.proto here. Reason below. +// SerializedIdentity represents an serialized version of an identity; +// this consists of an MSP-identifier this identity would correspond to +// and the bytes of the actual identity. A serialized form of +// SerializedIdentity would govern "Principal" field of a PolicyPrincipal +// of classification "ByIdentity". diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/LICENSE b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/LICENSE new file mode 100644 index 000000000..835ba3e75 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2015, Dave Cheney +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/README.md b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/README.md new file mode 100644 index 000000000..6483ba2af --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/README.md @@ -0,0 +1,52 @@ +# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge) + +Package errors provides simple error handling primitives. + +`go get github.com/pkg/errors` + +The traditional error handling idiom in Go is roughly akin to +```go +if err != nil { + return err +} +``` +which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error. + +## Adding context to an error + +The errors.Wrap function returns a new error that adds context to the original error. For example +```go +_, err := ioutil.ReadAll(r) +if err != nil { + return errors.Wrap(err, "read failed") +} +``` +## Retrieving the cause of an error + +Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`. +```go +type causer interface { + Cause() error +} +``` +`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example: +```go +switch err := errors.Cause(err).(type) { +case *MyError: + // handle specifically +default: + // unknown error +} +``` + +[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). + +## Contributing + +We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high. + +Before proposing a change, please discuss your change by raising an issue. + +## License + +BSD-2-Clause diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/appveyor.yml b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/appveyor.yml new file mode 100644 index 000000000..a932eade0 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/appveyor.yml @@ -0,0 +1,32 @@ +version: build-{build}.{branch} + +clone_folder: C:\gopath\src\github.com\pkg\errors +shallow_clone: true # for startup speed + +environment: + GOPATH: C:\gopath + +platform: + - x64 + +# http://www.appveyor.com/docs/installed-software +install: + # some helpful output for debugging builds + - go version + - go env + # pre-installed MinGW at C:\MinGW is 32bit only + # but MSYS2 at C:\msys64 has mingw64 + - set PATH=C:\msys64\mingw64\bin;%PATH% + - gcc --version + - g++ --version + +build_script: + - go install -v ./... + +test_script: + - set PATH=C:\gopath\bin;%PATH% + - go test -v ./... + +#artifacts: +# - path: '%GOPATH%\bin\*.exe' +deploy: off diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/errors.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/errors.go new file mode 100644 index 000000000..1963d86bf --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/errors.go @@ -0,0 +1,282 @@ +// Package errors provides simple error handling primitives. +// +// The traditional error handling idiom in Go is roughly akin to +// +// if err != nil { +// return err +// } +// +// which when applied recursively up the call stack results in error reports +// without context or debugging information. The errors package allows +// programmers to add context to the failure path in their code in a way +// that does not destroy the original value of the error. +// +// Adding context to an error +// +// The errors.Wrap function returns a new error that adds context to the +// original error by recording a stack trace at the point Wrap is called, +// together with the supplied message. For example +// +// _, err := ioutil.ReadAll(r) +// if err != nil { +// return errors.Wrap(err, "read failed") +// } +// +// If additional control is required, the errors.WithStack and +// errors.WithMessage functions destructure errors.Wrap into its component +// operations: annotating an error with a stack trace and with a message, +// respectively. +// +// Retrieving the cause of an error +// +// Using errors.Wrap constructs a stack of errors, adding context to the +// preceding error. Depending on the nature of the error it may be necessary +// to reverse the operation of errors.Wrap to retrieve the original error +// for inspection. Any error value which implements this interface +// +// type causer interface { +// Cause() error +// } +// +// can be inspected by errors.Cause. errors.Cause will recursively retrieve +// the topmost error that does not implement causer, which is assumed to be +// the original cause. For example: +// +// switch err := errors.Cause(err).(type) { +// case *MyError: +// // handle specifically +// default: +// // unknown error +// } +// +// Although the causer interface is not exported by this package, it is +// considered a part of its stable public interface. +// +// Formatted printing of errors +// +// All error values returned from this package implement fmt.Formatter and can +// be formatted by the fmt package. The following verbs are supported: +// +// %s print the error. If the error has a Cause it will be +// printed recursively. +// %v see %s +// %+v extended format. Each Frame of the error's StackTrace will +// be printed in detail. +// +// Retrieving the stack trace of an error or wrapper +// +// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are +// invoked. This information can be retrieved with the following interface: +// +// type stackTracer interface { +// StackTrace() errors.StackTrace +// } +// +// The returned errors.StackTrace type is defined as +// +// type StackTrace []Frame +// +// The Frame type represents a call site in the stack trace. Frame supports +// the fmt.Formatter interface that can be used for printing information about +// the stack trace of this error. For example: +// +// if err, ok := err.(stackTracer); ok { +// for _, f := range err.StackTrace() { +// fmt.Printf("%+s:%d", f) +// } +// } +// +// Although the stackTracer interface is not exported by this package, it is +// considered a part of its stable public interface. +// +// See the documentation for Frame.Format for more details. +package errors + +import ( + "fmt" + "io" +) + +// New returns an error with the supplied message. +// New also records the stack trace at the point it was called. +func New(message string) error { + return &fundamental{ + msg: message, + stack: callers(), + } +} + +// Errorf formats according to a format specifier and returns the string +// as a value that satisfies error. +// Errorf also records the stack trace at the point it was called. +func Errorf(format string, args ...interface{}) error { + return &fundamental{ + msg: fmt.Sprintf(format, args...), + stack: callers(), + } +} + +// fundamental is an error that has a message and a stack, but no caller. +type fundamental struct { + msg string + *stack +} + +func (f *fundamental) Error() string { return f.msg } + +func (f *fundamental) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + io.WriteString(s, f.msg) + f.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, f.msg) + case 'q': + fmt.Fprintf(s, "%q", f.msg) + } +} + +// WithStack annotates err with a stack trace at the point WithStack was called. +// If err is nil, WithStack returns nil. +func WithStack(err error) error { + if err == nil { + return nil + } + return &withStack{ + err, + callers(), + } +} + +type withStack struct { + error + *stack +} + +func (w *withStack) Cause() error { return w.error } + +func (w *withStack) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", w.Cause()) + w.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, w.Error()) + case 'q': + fmt.Fprintf(s, "%q", w.Error()) + } +} + +// Wrap returns an error annotating err with a stack trace +// at the point Wrap is called, and the supplied message. +// If err is nil, Wrap returns nil. +func Wrap(err error, message string) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: message, + } + return &withStack{ + err, + callers(), + } +} + +// Wrapf returns an error annotating err with a stack trace +// at the point Wrapf is called, and the format specifier. +// If err is nil, Wrapf returns nil. +func Wrapf(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + err = &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } + return &withStack{ + err, + callers(), + } +} + +// WithMessage annotates err with a new message. +// If err is nil, WithMessage returns nil. +func WithMessage(err error, message string) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: message, + } +} + +// WithMessagef annotates err with the format specifier. +// If err is nil, WithMessagef returns nil. +func WithMessagef(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + } +} + +type withMessage struct { + cause error + msg string +} + +func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } +func (w *withMessage) Cause() error { return w.cause } + +func (w *withMessage) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v\n", w.Cause()) + io.WriteString(s, w.msg) + return + } + fallthrough + case 's', 'q': + io.WriteString(s, w.Error()) + } +} + +// Cause returns the underlying cause of the error, if possible. +// An error value has a cause if it implements the following +// interface: +// +// type causer interface { +// Cause() error +// } +// +// If the error does not implement Cause, the original error will +// be returned. If the error is nil, nil will be returned without further +// investigation. +func Cause(err error) error { + type causer interface { + Cause() error + } + + for err != nil { + cause, ok := err.(causer) + if !ok { + break + } + err = cause.Cause() + } + return err +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/stack.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/stack.go new file mode 100644 index 000000000..2874a048c --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/github.com/pkg/errors/stack.go @@ -0,0 +1,147 @@ +package errors + +import ( + "fmt" + "io" + "path" + "runtime" + "strings" +) + +// Frame represents a program counter inside a stack frame. +type Frame uintptr + +// pc returns the program counter for this frame; +// multiple frames may have the same PC value. +func (f Frame) pc() uintptr { return uintptr(f) - 1 } + +// file returns the full path to the file that contains the +// function for this Frame's pc. +func (f Frame) file() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + file, _ := fn.FileLine(f.pc()) + return file +} + +// line returns the line number of source code of the +// function for this Frame's pc. +func (f Frame) line() int { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return 0 + } + _, line := fn.FileLine(f.pc()) + return line +} + +// Format formats the frame according to the fmt.Formatter interface. +// +// %s source file +// %d source line +// %n function name +// %v equivalent to %s:%d +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+s function name and path of source file relative to the compile time +// GOPATH separated by \n\t (\n\t) +// %+v equivalent to %+s:%d +func (f Frame) Format(s fmt.State, verb rune) { + switch verb { + case 's': + switch { + case s.Flag('+'): + pc := f.pc() + fn := runtime.FuncForPC(pc) + if fn == nil { + io.WriteString(s, "unknown") + } else { + file, _ := fn.FileLine(pc) + fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file) + } + default: + io.WriteString(s, path.Base(f.file())) + } + case 'd': + fmt.Fprintf(s, "%d", f.line()) + case 'n': + name := runtime.FuncForPC(f.pc()).Name() + io.WriteString(s, funcname(name)) + case 'v': + f.Format(s, 's') + io.WriteString(s, ":") + f.Format(s, 'd') + } +} + +// StackTrace is stack of Frames from innermost (newest) to outermost (oldest). +type StackTrace []Frame + +// Format formats the stack of Frames according to the fmt.Formatter interface. +// +// %s lists source files for each Frame in the stack +// %v lists the source file and line number for each Frame in the stack +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+v Prints filename, function, and line number for each Frame in the stack. +func (st StackTrace) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case s.Flag('+'): + for _, f := range st { + fmt.Fprintf(s, "\n%+v", f) + } + case s.Flag('#'): + fmt.Fprintf(s, "%#v", []Frame(st)) + default: + fmt.Fprintf(s, "%v", []Frame(st)) + } + case 's': + fmt.Fprintf(s, "%s", []Frame(st)) + } +} + +// stack represents a stack of program counters. +type stack []uintptr + +func (s *stack) Format(st fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case st.Flag('+'): + for _, pc := range *s { + f := Frame(pc) + fmt.Fprintf(st, "\n%+v", f) + } + } + } +} + +func (s *stack) StackTrace() StackTrace { + f := make([]Frame, len(*s)) + for i := 0; i < len(f); i++ { + f[i] = Frame((*s)[i]) + } + return f +} + +func callers() *stack { + const depth = 32 + var pcs [depth]uintptr + n := runtime.Callers(3, pcs[:]) + var st stack = pcs[0:n] + return &st +} + +// funcname removes the path prefix component of a function's name reported by func.Name(). +func funcname(name string) string { + i := strings.LastIndex(name, "/") + name = name[i+1:] + i = strings.Index(name, ".") + return name[i+1:] +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/vendor.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/vendor.json new file mode 100644 index 000000000..9794848f1 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/abac/go/vendor/vendor.json @@ -0,0 +1,37 @@ +{ + "comment": "", + "ignore": "test", + "package": [ + { + "checksumSHA1": "GaJLoEuMGnP5ofXvuweAI4wx06U=", + "path": "github.com/golang/protobuf/proto", + "revision": "1918e1ff6ffd2be7bed0553df8650672c3bfe80d", + "revisionTime": "2018-10-30T15:47:21Z" + }, + { + "checksumSHA1": "XGpUl1X+7ly1ski4Pc+N9ozfVv8=", + "path": "github.com/hyperledger/fabric/core/chaincode/shim/ext/attrmgr", + "revision": "60f968db8e6e2ebcf439391610e22250993d0a85", + "revisionTime": "2018-09-12T02:19:31Z" + }, + { + "checksumSHA1": "vFuT7942CfsCcH9IG3zHmQ4d/oI=", + "path": "github.com/hyperledger/fabric/core/chaincode/shim/ext/cid", + "revision": "60f968db8e6e2ebcf439391610e22250993d0a85", + "revisionTime": "2018-09-12T02:19:31Z" + }, + { + "checksumSHA1": "ZzWCzHsWRI/LAxhZYUMqVcIAsZQ=", + "path": "github.com/hyperledger/fabric/protos/msp", + "revision": "60f968db8e6e2ebcf439391610e22250993d0a85", + "revisionTime": "2018-09-12T02:19:31Z" + }, + { + "checksumSHA1": "DTy0iJ2w5C+FDsN9EnzfhNmvS+o=", + "path": "github.com/pkg/errors", + "revision": "059132a15dd08d6704c67711dae0cf35ab991756", + "revisionTime": "2018-10-23T23:59:46Z" + } + ], + "rootPath": "github.com/hyperledger/fabric-samples/chaincode/abac/go" +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/.gitignore b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/.gitignore new file mode 100644 index 000000000..4fd7c46dd --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/.gitignore @@ -0,0 +1,4 @@ +bin/ +.classpath +.settings/ +.gradle \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/build.gradle b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/build.gradle new file mode 100644 index 000000000..5221272c1 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/build.gradle @@ -0,0 +1,34 @@ +/* + * Copyright IBM Corp. 2018 All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +plugins { + id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'java' +} + +group 'org.hyperledger.fabric-chaincode-java' +version '1.0-SNAPSHOT' + +sourceCompatibility = 1.8 + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.+' + testCompile group: 'junit', name: 'junit', version: '4.12' +} + +shadowJar { + baseName = 'chaincode' + version = null + classifier = null + + manifest { + attributes 'Main-Class': 'org.hyperledger.fabric.example.SimpleChaincode' + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/settings.gradle b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/settings.gradle new file mode 100644 index 000000000..9ce14a668 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/settings.gradle @@ -0,0 +1,7 @@ +/* + * Copyright IBM Corp. 2017 All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +rootProject.name = 'fabric-chaincode-example-gradle' + diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/src/main/java/org/hyperledger/fabric/example/SimpleChaincode.java b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/src/main/java/org/hyperledger/fabric/example/SimpleChaincode.java new file mode 100644 index 000000000..dd93a4e06 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/java/src/main/java/org/hyperledger/fabric/example/SimpleChaincode.java @@ -0,0 +1,142 @@ +/* +Copyright IBM Corp., DTCC All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ +package org.hyperledger.fabric.example; + +import java.util.List; + +import com.google.protobuf.ByteString; +import io.netty.handler.ssl.OpenSsl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hyperledger.fabric.shim.ChaincodeBase; +import org.hyperledger.fabric.shim.ChaincodeStub; + +import static java.nio.charset.StandardCharsets.UTF_8; + +public class SimpleChaincode extends ChaincodeBase { + + private static Log _logger = LogFactory.getLog(SimpleChaincode.class); + + @Override + public Response init(ChaincodeStub stub) { + try { + _logger.info("Init java simple chaincode"); + String func = stub.getFunction(); + if (!func.equals("init")) { + return newErrorResponse("function other than init is not supported"); + } + List args = stub.getParameters(); + if (args.size() != 4) { + newErrorResponse("Incorrect number of arguments. Expecting 4"); + } + // Initialize the chaincode + String account1Key = args.get(0); + int account1Value = Integer.parseInt(args.get(1)); + String account2Key = args.get(2); + int account2Value = Integer.parseInt(args.get(3)); + + _logger.info(String.format("account %s, value = %s; account %s, value %s", account1Key, account1Value, account2Key, account2Value)); + stub.putStringState(account1Key, args.get(1)); + stub.putStringState(account2Key, args.get(3)); + + return newSuccessResponse(); + } catch (Throwable e) { + return newErrorResponse(e); + } + } + + @Override + public Response invoke(ChaincodeStub stub) { + try { + _logger.info("Invoke java simple chaincode"); + String func = stub.getFunction(); + List params = stub.getParameters(); + if (func.equals("invoke")) { + return invoke(stub, params); + } + if (func.equals("delete")) { + return delete(stub, params); + } + if (func.equals("query")) { + return query(stub, params); + } + return newErrorResponse("Invalid invoke function name. Expecting one of: [\"invoke\", \"delete\", \"query\"]"); + } catch (Throwable e) { + return newErrorResponse(e); + } + } + + private Response invoke(ChaincodeStub stub, List args) { + if (args.size() != 3) { + return newErrorResponse("Incorrect number of arguments. Expecting 3"); + } + String accountFromKey = args.get(0); + String accountToKey = args.get(1); + + String accountFromValueStr = stub.getStringState(accountFromKey); + if (accountFromValueStr == null) { + return newErrorResponse(String.format("Entity %s not found", accountFromKey)); + } + int accountFromValue = Integer.parseInt(accountFromValueStr); + + String accountToValueStr = stub.getStringState(accountToKey); + if (accountToValueStr == null) { + return newErrorResponse(String.format("Entity %s not found", accountToKey)); + } + int accountToValue = Integer.parseInt(accountToValueStr); + + int amount = Integer.parseInt(args.get(2)); + + if (amount > accountFromValue) { + return newErrorResponse(String.format("not enough money in account %s", accountFromKey)); + } + + accountFromValue -= amount; + accountToValue += amount; + + _logger.info(String.format("new value of A: %s", accountFromValue)); + _logger.info(String.format("new value of B: %s", accountToValue)); + + stub.putStringState(accountFromKey, Integer.toString(accountFromValue)); + stub.putStringState(accountToKey, Integer.toString(accountToValue)); + + _logger.info("Transfer complete"); + + return newSuccessResponse("invoke finished successfully", ByteString.copyFrom(accountFromKey + ": " + accountFromValue + " " + accountToKey + ": " + accountToValue, UTF_8).toByteArray()); + } + + // Deletes an entity from state + private Response delete(ChaincodeStub stub, List args) { + if (args.size() != 1) { + return newErrorResponse("Incorrect number of arguments. Expecting 1"); + } + String key = args.get(0); + // Delete the key from the state in ledger + stub.delState(key); + return newSuccessResponse(); + } + + // query callback representing the query of a chaincode + private Response query(ChaincodeStub stub, List args) { + if (args.size() != 1) { + return newErrorResponse("Incorrect number of arguments. Expecting name of the person to query"); + } + String key = args.get(0); + //byte[] stateBytes + String val = stub.getStringState(key); + if (val == null) { + return newErrorResponse(String.format("Error: state for %s is null", key)); + } + _logger.info(String.format("Query Response:\nName: %s, Amount: %s\n", key, val)); + return newSuccessResponse(val, ByteString.copyFrom(val, UTF_8).toByteArray()); + } + + public static void main(String[] args) { + System.out.println("OpenSSL avaliable: " + OpenSsl.isAvailable()); + new SimpleChaincode().start(args); + } + +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/chaincode_example02.js b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/chaincode_example02.js new file mode 100644 index 000000000..545092aff --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/chaincode_example02.js @@ -0,0 +1,138 @@ +/* +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +*/ + +const shim = require('fabric-shim'); +const util = require('util'); + +var Chaincode = class { + + // Initialize the chaincode + async Init(stub) { + console.info('========= example02 Init ========='); + let ret = stub.getFunctionAndParameters(); + console.info(ret); + let args = ret.params; + // initialise only if 4 parameters passed. + if (args.length != 4) { + return shim.error('Incorrect number of arguments. Expecting 4'); + } + + let A = args[0]; + let B = args[2]; + let Aval = args[1]; + let Bval = args[3]; + + if (typeof parseInt(Aval) !== 'number' || typeof parseInt(Bval) !== 'number') { + return shim.error('Expecting integer value for asset holding'); + } + + try { + await stub.putState(A, Buffer.from(Aval)); + try { + await stub.putState(B, Buffer.from(Bval)); + return shim.success(); + } catch (err) { + return shim.error(err); + } + } catch (err) { + return shim.error(err); + } + } + + async Invoke(stub) { + let ret = stub.getFunctionAndParameters(); + console.info(ret); + let method = this[ret.fcn]; + if (!method) { + console.log('no method of name:' + ret.fcn + ' found'); + return shim.success(); + } + try { + let payload = await method(stub, ret.params); + return shim.success(payload); + } catch (err) { + console.log(err); + return shim.error(err); + } + } + + async invoke(stub, args) { + if (args.length != 3) { + throw new Error('Incorrect number of arguments. Expecting 3'); + } + + let A = args[0]; + let B = args[1]; + if (!A || !B) { + throw new Error('asset holding must not be empty'); + } + + // Get the state from the ledger + let Avalbytes = await stub.getState(A); + if (!Avalbytes) { + throw new Error('Failed to get state of asset holder A'); + } + let Aval = parseInt(Avalbytes.toString()); + + let Bvalbytes = await stub.getState(B); + if (!Bvalbytes) { + throw new Error('Failed to get state of asset holder B'); + } + + let Bval = parseInt(Bvalbytes.toString()); + // Perform the execution + let amount = parseInt(args[2]); + if (typeof amount !== 'number') { + throw new Error('Expecting integer value for amount to be transaferred'); + } + + Aval = Aval - amount; + Bval = Bval + amount; + console.info(util.format('Aval = %d, Bval = %d\n', Aval, Bval)); + + // Write the states back to the ledger + await stub.putState(A, Buffer.from(Aval.toString())); + await stub.putState(B, Buffer.from(Bval.toString())); + + } + + // Deletes an entity from state + async delete(stub, args) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting 1'); + } + + let A = args[0]; + + // Delete the key from the state in ledger + await stub.deleteState(A); + } + + // query callback representing the query of a chaincode + async query(stub, args) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting name of the person to query') + } + + let jsonResp = {}; + let A = args[0]; + + // Get the state from the ledger + let Avalbytes = await stub.getState(A); + if (!Avalbytes) { + jsonResp.error = 'Failed to get state for ' + A; + throw new Error(JSON.stringify(jsonResp)); + } + + jsonResp.name = A; + jsonResp.amount = Avalbytes.toString(); + console.info('Query Response:'); + console.info(jsonResp); + return Avalbytes; + } +}; + +shim.start(new Chaincode()); diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/package.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/package.json new file mode 100644 index 000000000..84e201d92 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/chaincode_example02/node/package.json @@ -0,0 +1,15 @@ +{ + "name": "chaincode_example02", + "version": "1.0.0", + "description": "chaincode_example02 chaincode implemented in node.js", + "engines": { + "node": ">=8.4.0", + "npm": ">=5.3.0" + }, + "scripts": { "start" : "node chaincode_example02.js" }, + "engine-strict": true, + "license": "Apache-2.0", + "dependencies": { + "fabric-shim": "~1.4.0" + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/go/fabcar.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/go/fabcar.go new file mode 100644 index 000000000..01792bf47 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/go/fabcar.go @@ -0,0 +1,204 @@ +/* + * 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. + */ + +/* + * The sample smart contract for documentation topic: + * Writing Your First Blockchain Application + */ + +package main + +/* Imports + * 4 utility libraries for formatting, handling bytes, reading and writing JSON, and string manipulation + * 2 specific Hyperledger Fabric specific libraries for Smart Contracts + */ +import ( + "bytes" + "encoding/json" + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + sc "github.com/hyperledger/fabric/protos/peer" +) + +// Define the Smart Contract structure +type SmartContract struct { +} + +// Define the car structure, with 4 properties. Structure tags are used by encoding/json library +type Car struct { + Make string `json:"make"` + Model string `json:"model"` + Colour string `json:"colour"` + Owner string `json:"owner"` +} + +/* + * The Init method is called when the Smart Contract "fabcar" is instantiated by the blockchain network + * Best practice is to have any Ledger initialization in separate function -- see initLedger() + */ +func (s *SmartContract) Init(APIstub shim.ChaincodeStubInterface) sc.Response { + return shim.Success(nil) +} + +/* + * The Invoke method is called as a result of an application request to run the Smart Contract "fabcar" + * The calling application program has also specified the particular smart contract function to be called, with arguments + */ +func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response { + + // Retrieve the requested Smart Contract function and arguments + function, args := APIstub.GetFunctionAndParameters() + // Route to the appropriate handler function to interact with the ledger appropriately + if function == "queryCar" { + return s.queryCar(APIstub, args) + } else if function == "initLedger" { + return s.initLedger(APIstub) + } else if function == "createCar" { + return s.createCar(APIstub, args) + } else if function == "queryAllCars" { + return s.queryAllCars(APIstub) + } else if function == "changeCarOwner" { + return s.changeCarOwner(APIstub, args) + } + + return shim.Error("Invalid Smart Contract function name.") +} + +func (s *SmartContract) queryCar(APIstub shim.ChaincodeStubInterface, args []string) sc.Response { + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + carAsBytes, _ := APIstub.GetState(args[0]) + return shim.Success(carAsBytes) +} + +func (s *SmartContract) initLedger(APIstub shim.ChaincodeStubInterface) sc.Response { + cars := []Car{ + Car{Make: "Toyota", Model: "Prius", Colour: "blue", Owner: "Tomoko"}, + Car{Make: "Ford", Model: "Mustang", Colour: "red", Owner: "Brad"}, + Car{Make: "Hyundai", Model: "Tucson", Colour: "green", Owner: "Jin Soo"}, + Car{Make: "Volkswagen", Model: "Passat", Colour: "yellow", Owner: "Max"}, + Car{Make: "Tesla", Model: "S", Colour: "black", Owner: "Adriana"}, + Car{Make: "Peugeot", Model: "205", Colour: "purple", Owner: "Michel"}, + Car{Make: "Chery", Model: "S22L", Colour: "white", Owner: "Aarav"}, + Car{Make: "Fiat", Model: "Punto", Colour: "violet", Owner: "Pari"}, + Car{Make: "Tata", Model: "Nano", Colour: "indigo", Owner: "Valeria"}, + Car{Make: "Holden", Model: "Barina", Colour: "brown", Owner: "Shotaro"}, + } + + i := 0 + for i < len(cars) { + fmt.Println("i is ", i) + carAsBytes, _ := json.Marshal(cars[i]) + APIstub.PutState("CAR"+strconv.Itoa(i), carAsBytes) + fmt.Println("Added", cars[i]) + i = i + 1 + } + + return shim.Success(nil) +} + +func (s *SmartContract) createCar(APIstub shim.ChaincodeStubInterface, args []string) sc.Response { + + if len(args) != 5 { + return shim.Error("Incorrect number of arguments. Expecting 5") + } + + var car = Car{Make: args[1], Model: args[2], Colour: args[3], Owner: args[4]} + + carAsBytes, _ := json.Marshal(car) + APIstub.PutState(args[0], carAsBytes) + + return shim.Success(nil) +} + +func (s *SmartContract) queryAllCars(APIstub shim.ChaincodeStubInterface) sc.Response { + + startKey := "CAR0" + endKey := "CAR999" + + resultsIterator, err := APIstub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryResults + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- queryAllCars:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} + +func (s *SmartContract) changeCarOwner(APIstub shim.ChaincodeStubInterface, args []string) sc.Response { + + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + carAsBytes, _ := APIstub.GetState(args[0]) + car := Car{} + + json.Unmarshal(carAsBytes, &car) + car.Owner = args[1] + + carAsBytes, _ = json.Marshal(car) + APIstub.PutState(args[0], carAsBytes) + + return shim.Success(nil) +} + +// The main function is only relevant in unit test mode. Only included here for completeness. +func main() { + + // Create a new Smart Contract + err := shim.Start(new(SmartContract)) + if err != nil { + fmt.Printf("Error creating new Smart Contract: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/.gitignore b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/.gitignore new file mode 100644 index 000000000..7005557f9 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/.gitignore @@ -0,0 +1,61 @@ + +# +# SPDX-License-Identifier: Apache-2.0 +# + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# Gradle +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +# Eclipse files +.project +.classpath +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders +.externalToolBuilders/ +*.launch diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/README.md b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/README.md new file mode 100644 index 000000000..581c0a4ce --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/README.md @@ -0,0 +1,14 @@ +# Java FabCar contract sample + +The directions for using this sample are documented in the Hyperledger Fabric +[Writing Your First Application](https://hyperledger-fabric.readthedocs.io/en/latest/write_first_app.html) tutorial. + +The tutorial is based on JavaScript, however the same concepts are applicable when using Java. + +To install and instantiate the Java version of `FabCar`, use the following command instead of the command shown in the [Launch the network](https://hyperledger-fabric.readthedocs.io/en/release-1.4/write_first_app.html#launch-the-network) section of the tutorial: + +``` +./startFabric.sh javascript +``` + +*NOTE:* After navigating to the documentation, choose the documentation version that matches your version of Fabric diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/build.gradle b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/build.gradle new file mode 100644 index 000000000..50e8f5243 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/build.gradle @@ -0,0 +1,81 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +plugins { + id 'checkstyle' + id 'com.github.johnrengelman.shadow' version '2.0.4' + id 'java-library' + id 'jacoco' +} + +group 'org.hyperledger.fabric.samples' +version '1.0-SNAPSHOT' + +dependencies { + implementation 'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:1.4.3' + implementation 'com.owlike:genson:1.5' + testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' + testImplementation 'org.assertj:assertj-core:3.11.1' + testImplementation 'org.mockito:mockito-core:2.+' +} + +repositories { + maven { + url "https://nexus.hyperledger.org/content/repositories/snapshots/" + } + jcenter() + maven { + url 'https://jitpack.io' + } +} + +checkstyle { + toolVersion '8.21' + configFile file("config/checkstyle/checkstyle.xml") +} + +checkstyleMain { + source ='src/main/java' +} + +checkstyleTest { + source ='src/test/java' +} + +shadowJar { + baseName = 'chaincode' + version = null + classifier = null + manifest { + attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' + } +} + +jacocoTestCoverageVerification { + afterEvaluate { + classDirectories = files(classDirectories.files.collect { + fileTree(dir: it, exclude: [ + 'org/hyperledger/fabric/samples/fabcar/Start.*' + ]) + }) + } + violationRules { + rule { + limit { + minimum = 1.0 + } + } + } + + finalizedBy jacocoTestReport +} + +test { + useJUnitPlatform() + testLogging { + events "passed", "skipped", "failed" + } +} + +check.dependsOn jacocoTestCoverageVerification diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/checkstyle.xml b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/checkstyle.xml new file mode 100644 index 000000000..94317559e --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/checkstyle.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/suppressions.xml b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/suppressions.xml new file mode 100644 index 000000000..8c44b0a03 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/config/checkstyle/suppressions.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradle/wrapper/gradle-wrapper.jar b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..29953ea141f55e3b8fc691d31b5ca8816d89fa87 GIT binary patch literal 56177 zcmagFV{~WVwk?_pE4FRhwr$(CRk3Z`c2coz+fFL^#m=jD_df5v|GoR1_hGCxKaAPt z?5)i;2YO!$(jcHHKtMl#0s#RD{xu*V;Q#dm0)qVemK9YIq?MEtqXz*}_=jUJ`nb5z zUkCNS_ILXK>nJNICn+YXtU@O%b}u_MDI-lwHxDaKOEoh!+oZ&>#JqQWH$^)pIW0R) zElKkO>LS!6^{7~jvK^hY^r+ZqY@j9c3=``N6W|1J`tiT5`FENBXLF!`$M#O<|Hr=m zzdq3a_Az%dG_f)LA6=3E>FVxe=-^=L^nXkt;*h0g0|Nr0hXMkk{m)Z`?Co8gUH;CO zHMF!-b}@8vF?FIdwlQ>ej#1NgUlc?5LYq`G68Sj-$su4QLEuKmR+5|=T>6WUWDgWe zxE!*C;%NhMOo?hz$E$blz1#Poh2GazA4f~>{M`DT`i=e#G$*Bc4?Fwhs9KG=iTU1_ znfp#3-rpN&56JH)Q82UMm6+B@cJwQOmm^!avj=B5n8}b6-%orx(1!3RBhL~LO~Q_) z08-2}(`c{;%({toq#^5eD&g&LhE&rdu6Xo6?HW)dn#nW17y(4VDNRo}2Tz*KZeOJ=Gqg{aO>;;JnlqFiMVA+byk#lYskJf)bJ=Q) z8Z9b3bI9$rE-t9r5=Uhh={6sj%B;jj)M&G`lVH9Y*O*|2Qx{g3u&tETV~m)LwKEm7 zT}U%CvR7RA&X0<;L?i24Vi<+zU^$IbDbi|324Qk)pPH={pEwumUun5Zs*asDRPM8b z5ubzmua81PTymsv=oD9C!wsc%ZNy20pg(ci)Tela^>YG-p}A()CDp}KyJLp7^&ZEd z**kfem_(nl!mG9(IbD|-i?9@BbLa{R>y-AA+MIlrS7eH44qYo%1exzFTa1p>+K&yc z<5=g{WTI8(vJWa!Sw-MdwH~r;vJRyX}8pFLp7fEWHIe2J+N;mJkW0t*{qs_wO51nKyo;a zyP|YZy5it}{-S^*v_4Sp4{INs`_%Apd&OFg^iaJ;-~2_VAN?f}sM9mX+cSn-j1HMPHM$PPC&s>99#34a9HUk3;Bwf6BZG%oLAS*cq*)yqNs=7}gqn^ZKvuW^kN+x2qym zM_7hv4BiTDMj#<>Ax_0g^rmq=`4NbKlG1@CWh%_u&rx`9Xrlr0lDw zf}|C`$ey5IS3?w^Y#iZ!*#khIx8Vm+0msFN>$B~cD~;%#iqV|mP#EHY@t_VV77_@I zK@x`ixdjvu=j^jTc%;iiW`jIptKpX09b9LV{(vPu1o0LcG)50H{Wg{1_)cPq9rH+d zP?lSPp;sh%n^>~=&T533yPxuXFcTNvT&eGl9NSt8qTD5{5Z`zt1|RV%1_>;odK2QV zT=PT^2>(9iMtVP==YMXX#=dxN{~Z>=I$ob}1m(es=ae^3`m5f}C~_YbB#3c1Bw&3lLRp(V)^ZestV)Xe{Yk3^ijWw@xM16StLG)O zvCxht23Raf)|5^E3Mjt+b+*U7O%RM$fX*bu|H5E{V^?l_z6bJ8jH^y2J@9{nu)yCK z$MXM!QNhXH!&A`J#lqCi#nRZ&#s1&1CPi7-9!U^|7bJPu)Y4J4enraGTDP)ssm_9d z4Aj_2NG8b&d9jRA#$ehl3??X9-{c^vXH5**{}=y+2ShoNl-71whx;GS=a~*?bN{cm zCy+j0p4J4h{?MSnkQ5ZV4UJ(fs7p#3tmo7i*sWH?FmuDj0o>4|CIYAj=g@ZbEmMgl z6J-XPr67r}Ke$)WkD)hVD2|tn{e!x-z)koN$iH!2AUD0#&3&3g8mHKMr%iUusrnOd>R?l~q-#lr2Ki zb)XkR$bT5#or!s~fN5(K@`VL)5=CrQDiLQE;KrxvC78a+BXkAL$!KCJ3m1g%n4o4Z z@+*qk1bK{*U#?bZ$>8-Syw@3dG~GF=)-`%bU56v^)3b7`EW+tkkrSA?osI4}*~X?i zWO^kL8*xM{x-Ix}u=$wq8=Nl5bzHhAT)N&dg{HA$_n!ys67s~R1r7)(4i^ZB@P9sF z|N4Y-G$9R8Rz1J`EL)hhVuCdsX)!cl)`ZIXF>D+$NazAcg3$y)N1g~`ibIxbdAOtE zb2!M7*~GEENaTc+x#hOFY_n0y3`1mnNGu&QTmNh~%X$^tdi_4%ZjQk{_O^$=mcm|! z%xAxO*?qsc`IPrL?xgPmHAvEdG5A>rJ{Lo;-uQf3`5I~EC(PPgq2@n1Wc}lV&2O~t z1{|U92JH6zB?#yX!M`}Ojw+L1Z8{Is0pe?^ZxzOe_ZQcPCXnEVCy;+Yugc`E!nA(I z%O%hk_^!(IZso}h@Qe3{Fwl3nztZ$&ipk?FSr2Mo@18#FM^=PCyaDZ35%7gPt-%35 z$P4|4J8DnNH{_l_z@JQPY07;`(!M-{9j2=y__fxmbp59aaV4d)Y=@N(iUgGm0K!28 zMp;Ig3KkNy9z>t5BvQWtMY82$c}}d6;1`IJ^~At0(2|*C(NG#SWoa2rs|hBM8+HW(P5TMki>=KRlE+dThLZkdG387dOSY2X zWHr}5+)x`9lO#fSD1v&fL&wqU@b&THBot8Z?V;E4ZA$y42=95pP3iW)%$=UW_xC3; zB6t^^vl~v5csW5=aiZLZt9JLP*ph4~Q*l96@9!R8?{~a#m)tdNxFzQaeCgYIBA1+o+4UMmZoUO9z?Owi@Z=9VeCI6_ z7DV)=*v<&VRY|hWLdn^Ps=+L2+#Yg9#5mHcf*s8xp4nbrtT-=ju6wO976JQ(L+r=)?sfT?!(-}k!y?)>5c}?GB-zU zS*r8)PVsD;^aVhf^57tq(S%&9a;}F}^{ir}y0W|0G_=U9#W6y2FV}8NTpXJX*ivt{ zwQLhX0sSB8J?bmh(eUKq#AVmTO{VudFZpsIn-|i-8WlsexQ<;@WNn)OF=UpDJ7BI= z%-95NYqOY#)S?LIW-+rfw84@6Me}ya4*ltE*R^fy&W7?rEggZBxN@BR6=0!WH%4x0 zXg7=Ws|9Em`0pAt8k0cyQlr+>htn8GYs)+o>)IIf)p+yR`>lvz>5xFt(ep7>no4?4 zA%SUJ=L2D=;wq*f8WFl|&57Apa1;cT?b?bfJc8h&vkBvm%#ypP{=`6RL#Tf-dCq`;$!eR%>29EqpIkV*9 zEZl_>P3&}hY7)~q6UYw?*cBCsuPi$TU zRe}A|5nl7L_#e`8W0Hcpd~NWjAaV#3ngl$CoE3dz!= z?$3`dPgn5I+Q8 z@Bk>MqB7;kQqnDK=buPc+DsEDP-S;8#I(_z!*u&%_%nqI3+srxxsf9-Qg6%$l$Rtl zK2Wn-OtsBE5<1d}1Hl!l-r8eqD+{%b5$jfxQZw`2%)f+_^HMfbWyW4@j!^9M({>e; zeqCfR5b?^xh7MhHfmDvoXm8Wq;Jl2RU;jY*+a&o*H02$`#5HsG9#HOR4{g9 z#2mgNt%ep|IWrmctj=e%3xV&o^@8%OrR6io()6^sr!nQ3WIyQ3)0Mn}w}p^&t*V0G z03mUjJXbSCUG!o#-x*;_v>N8n-`yh1%Dp(1P)vz$^`oevMVh?u3}mgh}Qr(jhy;-09o$EB6jjWR!2F&xz^66M!F z-g}JBWLcw=j&Vb>xW#PQ3vICRT_UZ@wllScxk@ZQe&h-y)4B5kUJptVO%U-Ff3Hka zEyLldFsaM5E5`k>m}||+u`11;)tG@FL6TGzoF`A{R}?RZ@Ba!AS(tqAf{a_wtnlv>p|+&EEs(x%d4eq*RQ;Pq;) za9*J(n&C2dmFcNXb`WJi&XPu>t+m)Qp}c;$^35-Fj6soilnd4=b;ZePF27IdjE6PZ zvx{|&5tApKU2=ItX*ilhDx-a2SqQVjcV40Yn})Kaz$=$+3ZK~XXtrzTlKbR7C9)?2 zJ<^|JKX!eG231Oo=94kd1jC49mqE6G0x!-Qd}UkEm)API zKEemM1b4u_4LRq9IGE3e8XJq0@;%BCr|;BYW_`3R2H86QfSzzDg8eA>L)|?UEAc$< zaHY&MN|V#{!8}cryR+ygu!HI#$^;fxT|rmDE0zx|;V!ER3yW@09`p#zt}4S?Eoqx8 zk3FxI12)>eTd+c0%38kZdNwB`{bXeqO;vNI>F-l3O%-{`<3pNVdCdwqYsvso!Fw($ z`@$1&U=XH|%FFs>nq#e0tnS_jHVZLaEmnK#Ci==~Q!%Vr?{K0b$dSu(S!2VjZ}316b_I5Uk*L!8cJd>6W67+#0>-1P0i{eI%`C(_FkwRC zm}5eHEb0v^w3Wkqv#biSHXBG4yPC=^E!@hV8J5*JYf73=BqO!Ps#sP0fx~&C9PMN= z+V%$50uI|KE4^LCUXI74-qw$aRG&3kN-aOzVpRS1AX(Ua;Ewy>SlDn@lV(<^W?t-x z%K2iVK+;lG_~XF&Glk7w4<=Z!@-qDLc7)$q!>H^AU{s6e7krRmr!AZLf?8~$rRuP) zc$@c*PhIA^Lsu;uR{^x2)9nvsm}-67I`+iFZkhfNASUD>*LqxD=sAtpn{zY0xMxFp z4@USzYjMULeKc1lBe*8vxJDGNiSTtq_b#zd+Vzdc%$~+xf0;s|LR{F$YKe7YJVR$U}jKOo6=D+|6vnryopFbmNXEo-~I z*nm(LHmEGwkB%h%tXF4r|5h2p%VnRLx5rRsFpPR|e)*)C`WG-Iz94xsO&>1k8g6W? zG6#40`>I=B^scgmt_6!uU}=b3HgE@Jhj-X3jP!w-y>81ZD*~9C6ZRN4vlAFJQwK&l zP9&CP4%l-eN@0>Ihb_UWtp2kcPnh+L(fFJfQLc0`qqFbCkzr`8y2%{@RNrQbx*;tj zKtW!BWJFR$9(9^!Y%I%@3p?0zX#;(G?}sRkL{U>2rH4Wc{3{0@MV+vEaFcD18KIy% z7OyQTp?-N_)i%g+O#h(eLt_3ZDo)2l4PwjVS#=FzUNVvW{kFijz-@Y9-66fQL=xoc zXfLAC8<-!nnpM87K#eT;D^sW^HL5kS))Qj`kxT`%OewTXS(FT^X~VlkkZJJ?3*R8J zR>c>6)9K+9lg_a7!#<`KC$oEk-!~2N)@V}eq4O2xP)~N-lc}vH8qSe7tmQ3p@$pPde;Xk30uHYJ+VXeA@=yordN?7_ zpGsTlLlI{(qgtjOIlbx8DI{Nczj!*I>_-3ahzG;Kt&~8G_4G8qqF6IDn&g+zo>^L< z@zeVTB`{B9S*@M2_7@_(iHTQMCdC3zDi3_pE2!Lsg`K)$SiZj2X>=b2U#h^?x0j$Y zYuRf9vtRT~dxvF2Onn>?FfYPan1uc&eKyfBOK(|g7}E)t7}?{4GI%_KoO#8;_{N6! zDAqx7%0J`PG@O{(_)9yAFF!7l zWy1|Utdlc)^&J3OKhPI+S|Fc3R7vMVdN?PgoiQzo200oGpcy;TjSQ^e$a}Kh&C~xm zsG!Pqpqt5T`1`X$yas7{1hk?-r(Um>%&@?P2#NMETeQYhvk~nZW#BApGOLS2hdH)d zn!sf)7DotO?tRXBE#UpfKk-s}6%TfS0|7#>Rgk z%Np7ln*SH#6tzufY<0|UT+M}zJ1)1ap_cE@;QZp)+e-;k24 z3lZG_EA?tM$Eg|x3CK3!k`T7!*0}{fh8#=t^2EJ>TTo`6!CUm(HFUl7fFIB9Zlt4a z!4=|s-ZSn!@6Yc&+r1w*?*2fxKX>Hz2(vBwgE*>E=`A?Y1W-;{d2$4B%$NFAI?v5e zmYT{blxWeHn2J(0Vbz%FDz9~baqE#)R2TMG24xMZjCLcPfc1mR?5H4L%GnMR7ua{B zCu=nN(vV)5dJ_B80WBCy`tJ#YH6GyltGBSQvsN#q0;6XU1&60$&PC$0r}FUdr@1I+ zINcU{Ow6t4Qzmyk=A6u*z_!A*$^hBXJeKQ96bnF2qD$46hN!?1C|io|<_u@g16@Wd z(Fg?1=p8)dkWz<^ml6Tj5gO$hpB1N5msV!#PB5pfwCOBu`cv__=7kQq*r#Tc7E@6z zdr}5qs*slXK39`Yn%?=rslQgOTH0x?@z|h%fI5Y7kQ{X00BcL#8Jae4Dc9M zR%ySU5qODGnM;n#&up^M+PIddhxizA9@V%@0QQMY#1n z%{E8NS=?1?d((9Bk_ZC|{^(juH!;Mih{pTo&tu<^$Twk1aF;#W$;gxw!3g-zy(iiM z^+8nFS<9DJfk4+}(_Nza@Ukw}!*svpqJ)Nkh^sd%oHva}7+y)|5_aZ=JOZ6jnoYHQ zE2$FAnQ2mILoK*+6&(O9=%_tfQCYO%#(4t_5xP~W%Yw7Y4wcK|Ynd#YB3`rxli+9(uIQcRuQW_2EFA@J_ae$<%!EbI9c5htL`8>3Myy)@^=J)4p@nB2*&sWCOmwH zwYi;-9HOboaw0ov-WBk89LqGY!{)>8KxU1g%%wMq9h@Aie^42!f9`?o32T4;!dly? z(N?67=yo%jNp;oIVu7;esQ$wG=Vr+`rqPB&RLzr@@v`H-KK6wTa=8b<;$yE1lQGy?A1;JX|2hSzg9`a{;-5oh|=bFSzv&b zst=xa%|xW;id+~(8Fj7hS5BPVD(@(`3t@HUu))Q{0ZrqE2Jg zm6Gv~A*$A7Q#MU25zXD)iEUbLML1b++l4fJvP^PYOSK~^;n$EzdTE(zW3F1OpKztF zharBT_Ym7Y%lt#=p2&$3gs=g4xkM8A%Cbm*xR)9BnI}5=Oxp4GEF*bjFF^87xkP4L z;StW)zkX!yzz5^Q4HfEicKi{8elkFQx|0TH5Mtzsln>TN2*5Nypl(7sj_UxoN|KSyOP0g{L+vTbHlOyIEJ@ zjfku4x;`_FLga2P{FJLrgpIt;A-ukDuPsuW4#ApWE7|&i85Frv()~gOM`v`YVsF0c zx|J0}YRtNo7DIl>N&+%c(o1^C?%>Zf5<-<(yVcj~p88d;@=(jtox_$Af#v4%=g4oD ziv4MKh%Uf}NHP$SqF6mZj>}_HfC-@2>S~<3qOIu*R^%7;`VGN{ay@0(xmKM^5g9H4 zaq4>^38z|jszHqa)d>j#7Ccxz$*DGEG9PtB(d31?a;2$u>bY`CigPsg$zpDTW?zKg z+Ye-wtTjYHi#Hs`5$aDA=5Gl4J>p1Xs3PJZWWgax9~(h;G{hDip2I=+bW1ng3BrMC za72TsJR+;*0fSYuVnHsA;BnH5x8yc5Z=Bno0CUc14%hAC=b4*&iEzgAB!L= z`hhC!k&WLZPFYJY4X1pELFsAnJ!}Y@cW6I~)S53UOve!$ECM^q8ZE{e{o}hoflqqy z1*ubPGaeqs1&92?_Z|pDIR*gw{Tf^KJV)G*JLdzktzF;w@W<(X2;}XY0Mlzs8J?$L z$HVp2*+(o8?*n6cqx3_k6 z_&05@yeYRSfWQk)=oa0v#3BHNBBd>{fP`)#O^*^0_#?tW5jf!vCBp<2W+WCTEYeSv z9x0#bu>tB9M0W%_p^S7&BHa{2hfNL5eUUq4dFsGvgW}38M#j+AdeC5Q0pg^g zVzX3vrRi^YI(~*BW_Jv^o?2;5SRY4UiQy4mO}td`T?9Cn>K+dHL)+V&T+H2e9cz36 z3w!e<82_a0Abraxx8?L{a%&###&w=O83@y6xz0Yz{8$Wp? zpRHDDFRKHe+@^Y7*&@z$+aA;ksdi7xdV}c(i1><3F00dIA(v8LW(^O*HX)5kc#IRw zqF;w9l3uQK5us~@YEWk+?*7*(7!*}^OBGk+&H=rcQ31wWiI7@}vU8P`@-3x85BGy25yPLiFcZ9Ix z&g>o*aIM5;Y#3A-9~8-WmTezK5V~98kP{j^ZZ|WDa{ZX{nzq*qy3?Lw?|D4hN>kzB|OT6-b>reho-)KPiAg^M6 z^V7T^-LL<$VK9OM_AsP21hWykSObS?gk4L=NQ@Wevk9nXUWk~lu4S>zqFX4H{cWCE z8{eF=%>j8Xll5o2)cdA;Gx}>chr}9ZPv2kT=8x~q=B4i_@+{8-#jh5lsK}aj>0zxd zIl8*E$!(}Vii%YIB_2V6>|Ove`W+f~dqsd+*K|~yHvkUoMukz^XnLgcXunf+E9#k| zU0yT>#IG*W)+6ue)vv=xfDT{9k$;BDL!duM&qpGVui6NbuaKa`h?7i(W~4YUu2O@t zV=FEUMaC0QAIZg2c%Yb_WFI$vZ0z*fj-GdWkVMt>lDy@w)qhCE7c^Vx0i34{@bnQJ zMhB3B>8stMqGsKyqUsN>cE5xczm}r!D&5+?zTtYl6!U!4nmiPv?E)Pe$l(A@E1T7dD)Px*$)#pB(Mccz%i%RKcuskizkH& zM^+m#S#sK2?f8;gH5BaXCfyI z=Mo5s;fHbBh@$hNB(!H7;BeU>q)!Z^jaCks!;!d2W7 zv{8hf2+z&R2zAS%9Tu1(dKX~*{rOT|yjLsg6Bx_1@bTy#0{R-?J}i!IObk@Tql*9w zzz?AV8Z)xiNz}%2zKEIZ6UoVuri+AT8vVZBot|VA=8|~z-!4-N@}@Bfq$~F4`^LO) z?K#tKQ7_DzB_Z%wfZ*v)GUASW0eOy}aw!V^?FkG?fcp7dg4lvM$f-%IEnIAQEx7dJ zjeQdmuCCRe*a?o*QD#kfEAsvNYaVL>s2?e^Vg|OK!_F0B;_5TuXF?H0Pn&9-qO85; zmDYsjdxHi?{3_Il0sibc3V2IAP74l2a#&X0f6EdwEb_ zCHuQC@Q$(2$$0W&FuxtPzZJ`{zM{%lcw)>^c&ZZe3{GU#x8ZmhC${E>XcP+}<0zKn z`!He406MT}e^f*=$WZoCHO>xt?AE)A6xB*54a+>4&{!W0*`Q93ibK&4*}N2!PdjOa z8?@WRHjyEXqa(1=JSuglKreLS>x>SiHMYiH7)EW4L&&HyJUh+>opC2p&vz)-)hLZx z$xgyMGH)3R3o|Ptu(n3@oM8uX^(hq+q=`-aC1BlQp2I$eKj1tJuqDUh( zDkDsZ^23iaH3;bn7U>k)AD&%$u4G55$I=scldY;vFs+SJmR6mE&8&=C%8}PL3Pz1e zQ8C!gVj0PV2ym8>BOJZh9EPGH7B0X&x$=hK?E>1-@+vYaj!Grfw5!*_$pLHotuVn@tVzDd6inT? zVRbufqa&mdvhz=1^!A^mshoYUOn2TjV3fhuz*2mdNqBX{nUrI%6StBzCpt&mPbl5F zvw_Cj$en(bhzY^UOim8~W)nxy)zWKuy$oSS;qRzt zGB#g+Xbic&C4Zo0-$ZvuXA7-ka&rf8*Kn)MO$ggardqZ=0LyU3(T};RwH9seBsgBc z$6-BI}BN*-yID>S62)&!|-r4rDIfw zn19#SN$JA4xngbeGE4txEV5qszS(EnvzvVfh08c;IO5>d^UpU#m~24P{^7AVO7JAS zXZ6RdAp5-_yL;j@AlsMp8N&HVwHV>9DfH4c81xmzCzVZ3fXAQ+=RnI0B<;YfHZuqa zH|&*09Aj{ZsDVS+5jB{XEkd)PR5JO&0q`JK;9>!6T7%b14rbcBtNiw}OPI9h?u#%^ z{#w3(2+S5shq7N4smmX#Ns_ayWl5jP^7M^2hVn&gl1y>C@BvQ$Ah*^_cgzF=iG z39Lr1x6KpDuS0W9tH%r}N=vnOgCk^E`0I|6X8%H)E5a1{r;Ooi{4RF@DssCC6!o~J zDpXb3^$sNds;bMqm6n#cJ8M2#j7A_?^(fYr0QA$GrTQV$n;9;Qkh~$WT|e1Yq}o;h zEk_Ww1Kf4%%?R!{!c91CSJ*2fr<8xHF)(7!_%EKZ*$KsDg&ALtP>P19z99^whu6ms z^F(P(PMjgfp#lXpZt(?04@z5J{`JHow@|N~KFN{8WLok3u$zxk=`cv$?EaF;?XU6*mT&GJ_`>Ma3MgI?U07^UN9N3Fe37d_Q@ z-K2Z>R)Wso&W%+APtaorr8H4bEP6FH4p7!F)=w=jfs{I20h3Vck4N=Y(~XC1-kIAd zy5x^LnlUYu)zXH(P}oXq?U#Bgp{4bf<(9x%vx;I>b+jS0&jtaYZ?(5Pfi=RUF`r58 zPQbIAX=tIC=*W@cR#+`*i)vPR-|p^(ORBp*UB+Ei6;0-CF@No`$y^MQ8{I(2`CNzye&0=Q^qYjw%}y zZk$+l#(MVftcugPvORxL+@7k(4XzR~ti3!@toSymCaI5}vo}ri9vdMZa)_TzEsCB^ zLAkET9Z0E*!fv>)%Z#tIxUhYw%QRE2;98~{O{W%9rXI<-_{I=y%%qwb%iNi=+!>Qf zK(HtaA|ze7afz`txb*_lkb0u$(ijK97^%;axfg0J0#7NIs61X5HEQ=zq4Zv>VMu>$ z2~v10H$A`~ZB}6dK%@F2UgC9sMoSgd@q}!<7mY~z+C3H5tBW}xeKN&KIXP_?N=ed~ zFv^}TDs}$Eb(JDOQ;H7ZUNrivfKib({Ix|*X$AZawRj(j{g<^=Frb3--rEyv z6xZd8uQqr-K=@KuDrN*E`gfQ`mxKf_5w*!nJcKf(S=suW%7rFjx+s2> zi#9ouh%>Rl2Ch+}ie_3lybm-tkHbTSJILVkcjl~h@Q}u~N~u`668%(zQ9>9i7C#5$ zx{s(#H|$tR^Isy#9Q9XsY<1MHT-F7OyLQJdGEvzDtP8S6C2h^jU=C=>>*UM{Ijd1dNe~wr z+2V*%W+RpfrPRjc)E0!+gT^{TN*3CN1C}}95a1F4XwxwLS9A^ttvzq%M4HJ+$y?4I z`yKD+?Z?h%Uf%Z`@?6k*M1Nf&Cz(V^NgBygk_J*oqqX3`NcK^Lkg7rqVHhw@z>zv- z%X}I!;8!nQ^_RTCBos2Bl+SVD9Fa##0@yip*+{E)wPQxv$$hRA!c&QWLoLFG2$U zYDR(@dUI1w4`Zyv?%zhHwZ){BfpG(vq}!Y;6q(jI@xnbko7P(N3{;tEgWTp9X{GP3 z8Eh9fNgec!7)M?OE!e8wyw>Gtn}5IO|5~^)!F(*STx1KCRz?o>7RZbDJd>Dg##z!; zo}rG4d{6=c-pIFA4k|&90#~oqAIhkOeb6poAgkn^-%j66XICvZs}RA0IXj6u*rG#zR07|(JUt8bvX^$La@O#!;a) ziCtKmEDwgAp}1=mhU`6(nvaz%KG1c@?X8FbZK*QU*6mn${cWs15OGLA-803ZO-?=7 zah4u9yUPx8iI^Q~Bc7;DSaf@k0S@+p?!2(*$4}3v|?Nx~swkjwTmia)C!dVfht zzo1E-1vmsM(nC);|(Kp4yaPusRKec@I0b0J(n9k*tg>E zC-M)?LH%OLASR6}G-`?oyQ%KJ3(+KfS;-Rndh?ku8frhoZdKm<$0bj0e4I_lCX`7S#zIYBZ*s)i1dsNx5wX6~IDx z(Oz=(Bo4-fnzObxxiw~v`H}FuI<4v9nlM*7QryonD7aNenD4Iivwde7(TYd34Y|)E zZ;|i*$m}OZEsYWN9Xn+cJ?tl$HcJt&tK#m5)0pE@XV}gwcJV80^2W;>rR>%lUXzzrnFRHk2?0nQST``j1g;Rr}E@4Bo##q3%WJ3kW9`oLwIq zA0vY(vUKK{!(xz~Aai`k?GLCg(L^>jk7c19wzM!kci)KXbo`HMF5|jVUqOh5zPHx~ z7u)Wv`L*($bdq$~K@z$=!D+{HF@qBwO~Iv@@Nxw?Fyp2O5_#Ys8J$}5^H>J%`@CS{ zt-hYIu7NOhv0I=tr-?4EH2w4i=#_UUmFjs z%A-veHM(n~V=b%q0^_6lN0yt~Pi!0-4-LyFFewUhvZI$BFGs7)rVm2-{L|9h^f~Z)eyKyr z7?*u`rR)t7ZJ=8!I1#4|5kHXDmljgsWr(i6WPJ0eCg9K=mNGR7`F@<9Y)ptr=d(G2 zyFZ6ui;z7lu4{L3aCARB69KtaMekNz59bzEC8)@)F`W`q&hnF!@hlaZlivmQh~9 z8R-`kyDt3>Is4#t4`YaCAl(Y_9rDyTs1KYE_5gKHl-~>Ih(L@+s?${L`>}yrDEr-q zaZJ6`3Uhb_efWr)4dESDe#xM2C-gvCth%+_s@(-6U(RvIlv?Ex6v_UD{5h)9b*>N7 zzip!Gp<%x}c#!@x5`?mLYygtk7JG(HNpnAPnU%2^Gmjs75I>IS^yb*`pyeYn!J7D^ z_Z#@1;rrh7(T48tPjx2LKtKflO``Iz@cr-po+gBW$}#TuxAUQHEQAn2AEUg92@)F; z3M`=n3n&Q;h^mjIUSbe7;14c|RaJ{dweE`QJlDm5psETI1Mo@!_NG-@iUZ5tf+VTP5naWV2+Jq7qEv=`|Y`Kg-zESx3Ez zQ)3pq8v?(5LV8cnz-rlKv&6J}4*g7EdUU6RwAv#hOEPPngAzg>(I@$3kIb+#Z%^>q zC6ClJv0EE@{7Gk%QkBdOEd0}w2A}A(xKmF(szcN4$yDCezH)ILk`wx*R!dqa012KxWj{K;{m4IE$*u6C-i^Xn@6TimgZXs~mpQrA%YziFDYm9%33^x>MsMr{K`bk4 zmTYOFO0uD{fWnFuXf{4lKEGfjCSAEiBcUh~-RK~vwagYh%d^zqS*rgiNnc4TX!3<4FL7tr3;DA>RcYrMt3 z7h~TlyR(x;>v|5s1e#?b~H|Pqc=q};~YvHmKp(4Zk9bYF9IcEMmW{Q;%denJT?l4 z70{bSJ{{dIb)jJC54M+j%am#jwFugdb8V~47)xgJ;{uA!=Zs?&88BQVhSI&P+}(>q_==| z7JnM15Q4kwb~Px<@LEs%cxdZlH`{A~E3?IKpfJGR2rv7%N}=c)V?JJ@W7AH|AkZUh zvi2w)>RY)$6mkHQRo9L;PYl3PPg~?S(CX$-5+P!2B}GqIGEw- z3&}?!>|j7^Vh!EMc2U!gsDhS&8#Pq)SlamRXJ#FxX`caWHH_RW3%~WsoF&WECP$2g z3vaHqsO>V7k2xZwX3!-T2cj>VPidn8C|_4c?CyU;gpnaO(?YGO=a)9=Sc(n>Zb)C_ z>8fRKP6=d9Wg?&2G&5nNVU7Xk_8F-TmDrM6uNLZNK!U|gEn(vb`sw~_Q7LRLhitWE zJ{DBl&v1l}uTVoMM*y8$1{W*UIP`Ju*BeYbo`gJO3-K_tZ&4g%BSpS&lGf9 zD<3|fTK@&&<9U(QZ?zOW4zHKQXw`?v;uSZJ3ZIAji)F;jrOD;GeX1VSR+>@*5?@>z zVUfy2G!UmbDU$F&S&~3{;e=EUs{9uU^x(oT)!;)yX4Es>NE-7X%5^brZcL7_$KhIv zr5CGYP6|tw9`3$Cz3Myl8 znbJvOI4#W@<>Cyg>1I0>WiZtflPr-GM&DAaVv>AI;InpOh-5usQbSpOmTKY9e3EKR z;Hno1gPK2lJj!r+UKn9Zp#3yQStL5eP+`n?y*fm?v zA84*u&xPM4%6OaA%lsEMxp<}G&L4b#3zXfT`Q&U=2$xO!&?4X~_EUw`E}jd$70B`D z%VO!*-NSxZ=hz=*vGi#2+0DPI?Nr{|cA-Xm?8(IBQT5razQXk&(-b@ZJgwDKQH#!m zNC}wPd|`LEdw{jkq}>P?kLv_l`1H;`3Ypo z<=~^h)h>9lcSp#~`+8{d*nkO{Q57=hcqST+<>@KCkjsY4-m!~JrSs!7e3YBf5+gie z@3YxN5s{0Nw97uJlOQ$kM!sMpu6~+PJ9*Ym^Ru?p*)mlo*nLP}tQcyY@^-0%KE==U z9_PrE;U|ZK{=rZX`6#d#514_!C+5->pSvmgNS}EpK($i?)6CZ!Huf)`&x;5Z1A(&Q z@DlP6YDZ(sbd(>nxM#=4mhsQA4E;<+v`Q%cvx`xmNiP4h>WvTUPJ22uWaL49LZe&$ zu1$oP!=mMt@SLsRR9nk&V1bN$rN33*%D|rhd|xC)oT5}P_9ccwLRy4*EnFy#-VG|7&>jsJ2#RpDz#r@68GuOAE*sQSmL#Re$ z8y$k2M}GP&w8RPob)Z+eZez0hGJ6;ig$hoS`OMO5oKKR#YtoGWNpHT|{A-<2v@r9k zdHaj`SnX5h4E^0M=!*2hM>m9i#hdJD+AEofPeP$bAN9B`?Qin)0|4sWhwTizniPlA$1E6xG?)-y`KbWVB#R7|wk*IeoeRw}# zv0XV|5pzw9*e0TCxIsLcdLNFOYX4Y^gpD&=N$!;WMK)%4;Wh80b>{oPy}ot6_RYmF zZFlk2_X|kWVuVY)O#Vf9iHpmhr1G2no4g{P?=gJ_UpU}HpD|jo+qJb=ynu~|cc+v- z;x`}SwQprny~&aqm;cD>#RsRo_#Tf(pEw{Z8_{2^g#CKVen}EUK}tsX@2GvX6kFB{ zz@BgZBarBKocTk%rxxP`3yE^XTF~#~>G?6S_kr*M-OA&x38`~(+>=FcD7CF1Zzp~R z`rhZwkz2j21wH7{BU2yzTYRZMGS+cNw5Qs<(MJzN+PcO{SFY&&dRNlj2{vylsOs_+ zxNOcD(t>RX?HVbjT||`Df>@!92R)`K$w3^9!FYA7Zh8->KU!x)e?ztv$;IVrH@|W@fd8 z7BiE@%*;%u*_qv$`FHN(BD$hGqB^>w>&yBw^JV6HC=#GpjX!WQ(zeKjLwM3%)TCMT z#xyLTD8e|^YTKwg=Vv1|?|13o6!&U$_A}W2wWMcD^#DSn@g(5GbsHO6W$I9JNSxoCmsH}pFn8j_Wxk~5^ zVhEXZ+s@i0YjOeagPLSQYoxR{i2biszj7RW*S<_0j2Dw-Ef7qqLN%~y`ZAHIINOP} zvmaSn7x|DlC&W$UxkMbbJ&xpGD97rRFi#}3H61(AYVcPN9YUF0n72Zo#a#jfh`6TX z7!Pw#0~N0S?BC*wDZ0l04tmB!J145jwS;Pci*%m~ID_r&x0H;>J>$x}okimL!WLb^ z%m!KzacfeEw#alud8ZbsYF& z1@a|GCQHDAcQ3iM5LfSbz{fwQEh%&k<8f6$Q`yJ~Y7aO&6=u1}-*Gqw6$crh2cZ*X zMJE4cPZcdI%GQ>e=U|%r7EWn5pWBsM{|l8thH#qb@2{EkxwMBgjvOdH_IVX`Hh3}l zHcZa5HIB;>NekQX)ukMQJ`DTqS}jZ#j|$iH=Y_~kA^2?d%gm$PmPGuA)POynhUyaK zegRG1n2fzKfWg9@a>C@^5M)xpFSicmIRz7$?!Cq3uh(hTvD(>sag!Yf5*aMvtv=^^ zleZUVg$1$=zDs9p6Q1CAH&);!jkC-ZJ{fW`hE2o0x^4F_jcyr4#!ggqbcMo}icm`y zQ_77P#ZDAzmQz~g1=4DW!t7IZa}Z7thh#dEqn7+`5Lf8=4OAj_>AZ3IGQlz5loU2V zh|Ok)*^>O^ITIz*6(a6LT46*2Z8qn|UEzXV(Cl(`t!NL2^RU)JQ5CwNXU<%q`gjnv zF8YRI{0Qs{HiYEeK^2%=T5HFvrq^)R3Z~s+&dp-ZNpWu25qg9QUYwJZRjYFp(D>*A=`$9U_~N!BjcnQhdaf0Wf4k~Wb-yz6v=9i4rRTbdv0 zO)%vr@`J~@XKn3Cmo;jazVHe{VYoA-^m4ZO7VwZ~TARsMO7PY(!ck&QGkAgY9Q9RJ zLr}6J8cX!W%WFefwo9}P-hOjJJd>||gfOKNQ$xEbxDL$!N<$66h}w{A$tdnEEUq5; zQB17>Yh#_2o^GIeLQ`D^c**S1E;}*EAjaUHZAmh>Q~WW`RrCigz!CK>NF|IY`w>Yt zHl!vK+Cf`LljiFI=u=(p3$f!)&jk0aE{~>@e!_NZAc2Omti-mkw)JiJbz_^F-VP%u zQ&y+sQ5}T;hcIKT?jPxfEv!MA!t{oa;sV+#hIQ7_qx8Lz5Sulr_iep}MwMTaYYHyE z;th6PF7kKkE$1mPSGQC0?W9DiI&FS zPw(Wqb7k(snDvn6ol!D7!#GhJjH2M&gJc}C(-vuZ?+cGXPm&H#hftWUx3POg66a6n zfN##yl=25{SXg!9w>RJsk>cLGe2X4*AU?QPz|qi6XRQfR&>EZ1ay72<=1iIAao!gl z=iXCdaqY-04x%}=Y(<*>tlU_^(VrHIH)W}5({50@Pf_Emkvmy1_vz}FN4%!arFz{@ zGv%Z<%-w_KloV$v=!Z~|Z<%S|Y2a7~>BkxgdN}R+5+GE`KL1&xvnC1ZF`O&)@+-)Gcq!xuuB9S0X>R-t2pteqfiBX18=s!G>_Y z1xdnN_B)8}I9o<`n6y`b6?TV^e{iJi5!y5A8#Yc0miLEe zI33k{;HS8^<|IEkcVzjj#3rzLtPbmdq8r6_xeOf+1flw@2u{ z7ph8+9FzeiT#-P8tS?i#BdQ^$h{Ww*F=6X>5d^;jC>JrKa`a2vZCP4F`(r%|qT)+p z8I(A**}QO~>w_{AcjCG6S2(!)!0Q0koYHOqp0J7jIN>?pqxj+UPbG(ZzH%R7XM90` zj$jS22XlLiS_ef1-*ioM!Q*00STA}&18-3EN|(Q&<%b4;8@@tEm^uU}c!LZu9o`^A zX?d0=!n9~@Op+U(i2*`#N{3pe!XtMPb%k4>*#6S)3<-sC5x+);@IFHe;)vLac7gVb+ zVy%FX+y_#;fY94b0?IYZkO^Ow#D_#PU~5k6IsF|@9#PExC0GDbVu*%(SN5nu45KYs zKy!crklZl|C;1xq4#gk_`Nhg`S}5lC++i0e&GcafLxzk_hVLkBG5d2y{94=Z+|x=1 z%axSnz&LR0GB_NUJ02Lc;Ywvu?Q4ScA)Ezcg)!G2B1)N>;~wK=y{3lDg{gpiV|7Qn z#pOEzcxTd{r1`A7Q=fO{Wkuq(Nu{edMD>fb`0?+_%wU!>D5zX;AqW)-;3!Ex0vhNX zU(=77+{)#g(yr-uoy1;VzA7=eqw-JnGPqHOS9eh-G-@b?^PL|t*sa0#ONj?=tb;`? zl3AWgQ;F`_s;d-UQw4ap81^{HPK`38^=*#j0=$C|aKZrRIa{?amtPS#3sAyjQNNE= zMb?g$oC)nJIPC#jz%sw{QK8};07-+BdV^4n4PcL?xNe2Unx(ja7Qv=z_StA;h(t@` z(NNC7C@e%oWn=;U?G`?^0-gqzf+ur;K~}LsU5XJOUlJ1+>uC@)ch>nl zTSAKzE;N|>ob6G}%w)1smx;CC>fI+tlBydTE74*M`xWyfEVkhU0|-YvvQ@BS*=1*E z51c1H+!>B81O@#;EpxFY;eQ!72d*%yDa90owz9bww$P3P!PL8B1NB1>hZm6;z}(0;}OlhLJezvWPX0@NORT*jtJ!^cR@vI;g*o2t`ZiJwUsBg)gff zZE|OPnxbToa;liDWvy7?*;dfZj1DP^FbC{!haAw0nvpCY1``va4NgJN+5Q4oFCb0h zt^a99;!%c9Qzhh3JiTHZ?tWHR5Wz2sk&=FEtvf)LAVL}ekqCQE?nH=)#wWLp>@1CT zsg*%F!$+?0Z2>!V;;{xXE<^&RS}z%8PcOkF{p!LGufDBPhMPC^ zG$q{wZ z#Ja4}W6245crq5zje}Y@*c9{lc@AzpQqmGuXJ~LY$*{`hg&Gf3P11|WiFee_O|b}! zVRY5AG_P@)S3`T7$B`vU`zoGU;5|1#4QY$XU%4+;XJ0S*Gf z^`C83$;j1G*u}-n&e+z>nM}^X#K>0cbBxQ`${65k4P9l~vmH4wj!dK9Ds-qvw$pf(6VOiY2 zE?B}k{2zUxzM&EhG6jZ^@X=))R&lRCJ#H4rUE-D}<&<(5y_%LK&nIcv={%BK0e!`un#9Tp#Xwr-Fflcti3K={AE}6#+kt{Qie|AZ6 z6*&nr;n(wh^uhJE3@XxoOU#BJE&q;S)ux&^y%En`f>||6x$_bSMn;dC71xBhpU~E{ z5f2v|P{1Cv^jl+$^NJs3E!XibZM8w%4kl>uy8yA#xpwUfn$HvbVs|_LMy>AUN(Ar4 z6ZtLFzwcQpxj;zF&-MnRPYxT3{|`I(dzBso9p=4TUAQ4of#Wd3q@H-0Gz8C6U2uxl#VXmC}x+B`>D)ffK;%ZXO>H zPVvNavG%b4+j~NPJ?rVff87JMOM5lOQOltlI~`eXFb2A)9UhlOiw3q{Ke>OF<`kMl zD=jNgN&(C4hl51!cB-wzNNv$JDl%R#CFx^wJ8zI;*wqhcfv8FGOLzgs8B8@F<^2`p z%)SN|zLITOn%{T>nk3;{6-GYt$(;vrEOutbF+({n^elu<|244j+ z86+n$mOkc15>j*V=xfd1B$*G_jnCJcV9-J8EZ4((lhmZiNJw`_M7fwG&8pHy-Ke_I zrkS&<(%!(i9Q}xb&7WPk`{_kfquVmahoIG>3~7f7S+RSV+E92f8X9;%>e3J=Cr>x0 z&~#wS|C19#Hq^JQmKY}+yCL3daSWFY*=wp%?jSI5|8X-huuF_swuyAM*laABQv<nM&9OUnkdus9i3(4|D}`eMP1@}Y5Bb1U(z#8*%%$T>s4~qFx5>;H zHo2s5PKg@JpAq1ZZ4ryNp{ihW>z)*VLmyu=cWSVjU!#O$Av&KhM`<{OsHeT4W^L$D z{FjnPLb}b$BGoEeF$aDxO-llzmVFo67b$7hXg_8Tqtl11I(W(^t~3EMSd=YsUc-tL zeLEb+dK9(xLL!m2ow1)kliqtx)H+c?rCAXtFh}k)h<{do_@=OvP_jjD3nLJIHX;cA zVfvn9=>eu_t@R0_vlV-GJm~znRBf*`LeMt24Wb(uH5ag1#POrx5gcU1N=^GbQA zX9vONEw_HE$REtCE;n>zdhek^PUnZ};@#Hm_lec6sYLgf#WB9v_nsZ5KeZMY7auW5 z_kJ*q9eK)**B@+THL8Vch#NR9ncS;4qP#j6})Vi(T4b#5_y$z z7?C9%S=An`M&>9nt=_&CMr#bKi5!PK%Oi^X!xk~)OE$*!pzhBbDl|3c_cJ?Jt|od% zuYTxQifMN~M*;jbwvtdar!}ipi6*ul!tJ)0=`QptvVjiLWO?Ld6ii1euZ#(56TeW0VKXYA zO;JSEAuLdOhiOC(zo^YHO>63rTdS-vZ#(9539=q3ZSysm;qjs%@UoRNo1fD+cYOcer$pT%eNH6nAI) zF#HH}KZtL)Sp+0rH3lrc-tc*6T!UfgJ4jfcO4jby`$s!NkCaEoshYG5Jo6~Z904c_ zN@%e>N*~A}l2(TI*J0P&&ek!u&;b12$=W|DWJ0HN04;s(4eX5ydQQ`7)_VOrV%JU| zAsp{6!;B$uFYtT>M{r;b#P62;8PhsNPB~ zDoO@&p=doKv4mZP-D#zF_D~qc8PYJQJ|xuo%cr(3q7)B2GZMPwDGIJ&zZi;fUEyQ^ zlcs~)j^o>q<<~(~Ioj!$ZboT%dYqkYXq&vL*WDjLt_ESAA*A_+)v9X4Z~1?D*Gu@I zNYE?q&aC%8EUc1@Gw-PszuMQ!Erq`S#kHQj5KwM@PRZ4NlK(ROXVva0&c~E!#qtJ0ujV8(>y;aKR3G#1Mf43 zs*c3YkGCB~5XCJWkhOHBOJ@*-bm(s=s<7LjkA==WAdsxiSCN_HG*VRQs+ZOv^y!x- z2C;A|nMuaXAm|6=uTAFdv78xK6bw>VseGo>i1Y#EWJOx3B56}m<5I*`T}qD9x%_qM z>9{{znOJ%GMVUDWcqR9C$0bwpMbQjd+S2r_HA|s-X~_nZcDoQ?DCv38rI(hSCE_ZV zbvPUoTrAj=%zqNQ7P^-Fp>bqVgI}m6*^!WlyGKv+92^oWZlrs7 zLP%PeYC`}14V}Z>{6=9~EdATJEHiIgFI)OD3;bRds~f#P3rA87s!!-^uI1br2CapZ z`1v@|yHda{pTH)AkuX@Swr8a=g6N?>VNRM z7dRL!$B(sDymlKemGkMDPE2d*y(`$P4}_OZoiG2^U!|m)OKnsrH$J?=XL-5>htARqAgN!n1k0v0x4yHek#IorCFRo7^?-1;kV#W$fYQ!QZ- zomxY^(n$ZyZEU3bRd(Qmx=%pGu6}>mQ28S?VS|^mSzr&Wfbtc!fa(?ZZ>1~p-zrz^ zzm3k-e4;KOo(bR9U`{KmT>prvOF+)a;9Ml_ou|vL{IM=Wwe`oeC6zehu8qmGfVHua z1Y$@hbgk2??zN>r8?u<}nJOl7GDqOU+A)^>wkuZ=$Y+0?aq+`izt9p#hof!8mlE^O zf~Gi`+8)>#I!~O!_k0@}6j5)Cw87lr9N9gq4%B4BC9m4se#V(Ln8hzIpyRB}YGS^g zuNz)bukTc4-C-cH9TGtxvp~CV=`XTDd&4S2E=a~QX zH34ta32)bdsH=6WJ#2@#8V6}tbI48DGdKfUvU_^LA8y+nb4GUQkR}LPxm+CNd1|r_ z1{{kl@@K!{B?`H_fqa2bMp=P_xGQl3^UVQO)zE&*>6|fd0-ij2&(}+rzuIf z5BCVJgPeH`_W2=)_-9p+r-e~Ku;noOyq)`Rpluve)JTNOUH0EkxO#^Pz8g7A>2|Gu zo_MJ?scrYD45&6ToEltGJj8>3)|>Uy;dJZ@3c-Eg_+sB9D&U1|zG;L97$k}{!5VLm zZTG>$Pkz}N1Z_+lLxbHRQ6so1{TgU- zNgLZjHZh}%$P)p3^Gekk&O5Tieo9&&cDwA6`Vp6H4v$08e1lb0n7X`!_x6ZQd5Ncr z-1or8K7tmVoT%EEwQD=~7Pr?K#Q{0Fu|sSC$>>4Wb1Msgv(Z1Z(3m7U zMO0y=!H*S-W8oYSQ1PnB#xO?}$Q)^p(#SI7QlV{J=a2?GYE5VN`98&>h?oe*R}ep{ zozpe2vsQT@R#sltkEM-?rp}MoSIFEzNh`e`A6Ph1sa~lqf`_P8wdR(|ad7+8L@kAF z;vhFm@833@Jipi6uq3Pp_bF!`={6RZ)_q3e&#G#EWcSA-dg~O=vK_0rWH@i|&I%f1 zoygC}jg8DWcewP#zZ&O+CV8OUQ)Dm2p4Bjk$?oZgE_%JhAOFZW({kXYL>TpT;Lzz_ zI|FZMvT5ZIj4~Y)tmhAPt~%q0DYhX1((N?ZWM}JC*I_>20dJ=5-SmxUPm+W65rj^`Sjpw$s`^3 zE*(gDcZAiVe8og}D*eTK{{60Jzb!|N-s5|xL@(8VWewvmO-}3iw=6G!_s9I7pXH&* zrdXkqzmYytJaFoVEQefFHzj&&L-8Ck-zIBhH1+A6Dx7TbAE^RAhyx%HXL5skx89S4{#ET7{&c zmPoAZzn~8EGBAIa)Vb6MJ!#GZi5MYbm5C>b(F_nXi)XRA1togzy^M087T#tVYDd`x z;*c=}(IpnMfRND&nI{v8vJ54n?8f4lN`3K^%b)}oat1TifJuxO&ZZTXv5pUhub0Va z0wwYURnZ6}Gm9@r5z`F%e3zeTCje1FB69h@e{T5iwyiaFBF^|31@L?}B2xY5NZ=o~ zE$(4v0{AEMu;!Eh>^}AfO&zIZILKE}6cHN{5EEVqDy8a~1SAO{o{UWYu(Q(T`PAts5V>@5aLwuP6?A4V6(t8AZ*csoO|B$?XQ9mzToari6>M0&(#_q-@sf0G2g@us?RlnK?i5>!_})FfdEnul&4?fFyZ!m znCK()B;nqc9yH<3(+;1HNFSx>BO2|cmH9_>Fz+Q=1y^syP5ZMgbdJd#BU7(9as%Ha z^HX%VEDCVvM$S*Chwpb+?xd6lMjE*fvLWo&C>YLzd&w85R^HGrZ7(kpVPCu?l0Gs1 z>hIk~pj+7mBThy96}uG6s>OMG6mD=@i)9C}#fhwl)Jyp^xn=OVCWhssK}rg8=eT@_ z#MM-!#b3{H*Xr$FEUim5yRH+?cP*`J{c|f&rbWvFlCDFuH4#)*;lNUt$}#2XSF&9v zrQcdn7C`A`pBI)gGu9`(w@al@TAb`ex0c_we6RkY{rql>Q9pi>PGM8b2KT7qFnaxV5b zmoEvhO^tU`ABvOe!>+KynhALJ%$E>t)0)=h(O|==6SCC1QdZFZD5R7X(TTm*Q7_hO z7=l`B@tJOngSoFD`AxA6D{dmf-hq?o<*Jej1-3o?L1`s6?+mT&LguymtaBrJyuUnZ z?rVkLYMuzew?h6~WR}&&rjgWu%Ol0zRpK~!e`c9{nSB|I6c>-U%w~d<3Pru2oslnD z!7N9~Pvko?^+^eupC}q1Sey*kNzo2lD|DB`-Rbj%!6@17B|U@DbT%ss`OK13)V3c zBwneSClO9vQ^N*Z%RXYO`Wr~pe)sPVHe|_LFY!-A<-IfJFyW4DQ`-%WQ$+9`xjvG( zpQ|w~wLPi9e&l?tir%<7e!wa+NTIeV($?_M8K9Ok9K|eg(1Gw$>)_r!@~1mMWch?I zlu47XEEFQ?B*b6E2Mn(`k^R%I5MNchehcs$@A>Qon=44fmd(0d!g;b+#n@O=a#iwYWb+LEvPA@*#Kw4&DzJnYfh;LQnC6!87g zdeW^0s%^91PAO0q`>$Mb==p<41NxthJ-IB>>x%WSPot3rFI* zMf_9_Wl1cS$EV%`sC?Jhn@_2EIcHtJ_h7LBu5E^=&na;`bMz8S&E_6(zjFs3RZeiQ zuRTJN2!tO#0FHtOBj@_b2Se=SHmzr0Tt=WHWsm zPs9+a0tP&xdv8i{VnZqpkkTa`J-)KLAX(5g`{CFP0HkK9R?;p};94=j88#urqEf@h zNp86`#tPiH=peJZ1GkQ~j!|~G>DtG7jQ3c|>9GN9;LJVY1=w~3+AxFB$^Eo!vtkY< z^lHsv3=oH=6dYkZUJB8!gnGuu>Mpma_%KKAHQD%Qw+A~YE zE7L`H=rT?lQtq`I0KgG}wsC>BEIza!{njtF{Q`O>%)n&}o3jSMpQUFP%j1UC+HN<| z%(W?wu*JQbLVt+3ZDuiiDA#YyF+Ybg*l!h`SyN{^k0hQeu)8@TkKFQCrJXjud)K0> zE{25F{XD-Q59a5JYP&@17qn_&5_&P?3hqsnwKyDL`c}1=5ZJU0UskWz3a|b_9B++G zN)j91j2Rf7HbdQc&*p52&{LV;l9GveK^#X>?Yyoup(pf4w|r>&$=OG@Y_VMwA6hl! zIwQFIwy79_k(kp+&XQW7iS%nnfT|GF1~u@KPe&}8SiTJ;%RF2cz}~XJ6NDb<=rK#j zVHko2=aA8x+I!P%vZ!O9)e9UMJ0?eeR#JpbX0d512u#wxBlv;hf62v?LqwumZ%wcg zHVp25KY-e>DBPKKKy-JtDgj!RZ(S-1&dd=Xfl&QQQBJ6^qysCBFAbkG_9f#dv+)s1 z-L3APDR&JQ*PJ&s9> zB@&43RN*^1zQA-|GKN~I4qBYTZiMEPc`j3U596%W1rSO;yzSV-svR6&RH9>mD7B=u z8}eph-j#vh0v4B6McTDb$}TryMb+$sTV5 zi}_AlY6U+=R!x+it_{Fws^cQRi&m1^#pnUclQP{S=|M!jX6e!UuBpP(5qVg`=VuE5 zSpDtgx;0OGi1AVvVZScV;hZR4>PKLNj0j~Daguy8P6p8aJ#Wk2&=#n`iu={^&Cuoy z-OsacXUkkO&0G=_vb3pgg0D+_3b#{KW7s4b3?1@R)oPF<|d zG_ke%UusA5tAf>hpXrV2XKnZ|oQZ$?y0G!zbdF41MIG$yJ~1FUD|@rgG{@}|75Z;9 zC`IibDim;0C(9(jCO=WZUxP;=Hp0PKO>Q?1=4@jTW27?wUSwYJ5=htt-^akbm08Acywa z?nLL@sHAx-9N~vRRHk5`7W$g&)+fS=7KXruHCEE+=h`IRE~j?$(+$Nuv|ud;8rc|h zjdgESU_~0ZjvT}PN$$DBE25Xd!H!-qq-$f;-@rXwG-;l9#g7}!%cbSj%7`g-jyxA_ z0$^z@B zu8A=6hEd*PVO0if!FvNKOXTxHr=b0u@#o{$PVZQee5{z+S>bCizS`MmieM)ykX4gZhRpUGL6F zOkE$%^Gm`Lbd9qfXKCCp+^1dWmdg-NcoY+kwC`Rb+&@P{ix_T1_FL9HZn=tICT|&< z$H{Fd^@RXGa-_mGD1nN-V{GI0VrHfZ-iIa5NBVY7d=2t7+GO%A8@~x-5WU&2kH3_D zqk`_7tUqx{tWQlZ-v4d6|80u@L?!?4Mp>n?rirVL^s#1|6k-NPhJuub9zPdcC}t;X zlSfrFHxP;_4{1f~)}Y-ZvKZ5b3;!(mc+UO%q3O5S6&}Cuz2Hp2pO&BT6t;!bgS)$a zV_9(B5LMlN&4d5ZT`tN%!FUkZm!{_`EP1t|i5H*9W6l-hV^L zx!qJXeRAxC%aOh`>VU)L$Lc!pX&4TJA|Y^ok|g zGfQh;Rq}&N2EcF_JpyGSyGxM67#h+Ah=vdzPjUHZ_san!2g91j89&82?co8PbaI{{V*nJH-6oY-Z7TN1S54VidmMQ1IuCPAZY34*eyYOy*dkm= zWBmKt^*?yxjMko^(;OB+>mxwSTDg_&Nl3kTd_i5(x1YIH)T#2#9z=oU?&C~X&VJh* zC&dao)x@Os%2go&Td7bn6)YQM?7DCgOVd$hW<_kcf^{WhDRMGkvZ{&qjlF;(tv{(W z7$>A%gQ_qOYF&LitAX_s zomK?d5dU)Ok%o9z@e`X9dtYzo3)In;lfq*F;iGLslrQFTj^L#bFN^{P8Tk8zAsf z#keSh$;y9iM*Sqr_l1wz=EFXba$=NjYTWp-_yIAkN(S$eb$CC-PN#PoowN+o!DMey z#1(8Z4#=6dGYIRbLJMW+NVx09_`a_oo2N5P6Z`Tkkoz#_$XUhstzb@kZOA5N-Y!&% zw`TU0oGR(@E?u*=*M7z>?Wu^u7Z1R*c26GLw>%x<^sLJa@s8Z>F+cnGE%Ai`xC$d^wpgSo<>ze4WIAUE6Lvdxh;telK?xt9P)*x!)dTu6T=j*xL zkiLe*hoAV9l5hLoLxsK<7T_|lg=&wrp z*p>*BX3Uskrs5!gzfdod;X7^vSzcbzyR-0=!S>ltmUOBo(|z6E{s8j`iup7Rq~vE7 zRnWHm0f!Stlaf!zjvNbv9ylRrAYS{z{=tAs9k;ZNLce>*n4SX8jOywN_%rLNaG}t~ z3h7z*K+BU_xjdJ`t2JLTP$_d_le(Q74H##t9LWR}SnS@N19=Bkcl~6^qYRq5j{F_{(HdqNhjv^v)WoRlgkB#D!dh)d)H`V7AzDMv^$;{C4^ z(Dq~@#uN*gj+&HwR7MHYDiPnX`kXeGWIfJ9eqj8bvQ2arlrH)hxXo0QSh5|MBTKeE zn5cG-Uw&+L!y!~bvoll=Czr{~1HZ_c!tHx2zp8bUQBFMx795^CHcZ}?I3aiRZ8Jt@ z_{Hn+8>RJw9-4C{0#Rp|wR+54)ebE0`@9tpTE5X1Xwi_`zv5^+*X5_|WJ80m%iU#! zT$4bGhj}sl7l<6Z0^tq*6CTg}-@Q72iy{Bz{wn^9sb^_OyU%K%z3+0RnnaOdp-_&A zQpL(UuCU2T_aYTHVh0pT!zd})&LdL+6U;(qJd1Bq<=yFVF^WpMKADb6Dj1$ITTdnr zkEq|WD~GPtoLj?PH)h*5-p)HVd?zkG0du&3gDZJxTqlEp5F{V2jX(sCDo9KxX{~aP zv9JUY9(aVBC`pL{5iA~t(Polf=)9)gCaTKHT4&*1Q6EEeIM(pMN8<=dWxi^di<509 z(Sc7PN2z!hPuWQ`IF#i9hKhwb)9IO*-DGnF8Ot9ttlIN585zN6DTZM(vZCYWiK?k( z7OX+Nw@PZPs(N$ve{RS5vNXIEVz8|9x=3v*9zwT!STp~?Qmg(NmI|Nik%c~5QgbqB zYEC2?PcR%9L%(TgZ6eC+%rKl7BV#Sj;Ak`*nMxvU=@)1JNif^6T!`Pdk1J#2sVZBR znwpA)HPg__PDhM$6HM5|rkcgs*u9Po^PZrmgIYu~Cg$X1z*^GJDa@6o5`#TI*T1|3 zznkgm;}!R_d3@?ilQRYNV-;l9{Kma&PfC-Er}SYZ{KO0|#PQyAu1iHR9Xr5GZ+xX1 z$YVe3p(Ocvf+RYOR}K zqi8EWh=!!)B@I*IE%9u;V<-m1N_NcrdL8g z?a`g{d?N z(w+7w)4f1)n_7Zi9{9NXYDO>am#{o);@PlG(P+lnkeTc2M^U1R`+n3=5-SaTeBM0) z%kNRG@}o6-%AToQ(590ntVT?F6@U)=&6Isy2)}N*L1f4m5LPgamROcTYv*(iPyZ7c z#oWFCg`-d6eUw=UClhNO#vmqk7d}WW7zq;B057V=1_yWz^`sQ|iCPKK-*76K4e|ht!@`_yeX!1BAATkU7xFeYV z1PZo?&s`Us8+@fNYnk8(bz&7v_8NI9_DcEqlA8O-SC!D9g9; ze)c@z0tWx5DPDXxE&%#5N?4|>b4aw8>yRvSSEiX0?vLOiRHB=2|NhsXiZGo^5&B@< zeI31A+X0#Tx|c~iFv?`0v!=blr=KbwgLb78Gt8U_OIAAE2z9eNK&!s5F3F0>=8W!r zKT;oYg44jC_`bW%@*i!jZbKwGRx%8gdl9{Hbb1jDI`x3IjAJZW5Ei6(S>l@9E&B&0 zB3*=O@#A7@kk#)a|5-MdEKD-rCeGj6t~5#M&W2oS;K0izF)(Eg#omlB(Rx#OB)aoT z#GwXoK_5A|4xhFvu3CMq($#~xb8~18q6z}|Mk(d{j*7ZYQanRcz1UwW+(Xbs<`luO zHb8f`LI0u?3T)Otb_0X6$!xt|`V&k)`37wFO)&S%>7x!C60RXywvpkR*hEEuATHLB zx@Mc;`Zkyu+td&XI? zbu%d4p@UVsAW5iTL@C%3XR+Bptl=TbDEL_lvW3tV3l)rQ*yEL9_5{2}*ri^pn2SG} zR+-zw0QeD)q(v=8w55$|>$m^`e=SRmAT^m5fBNae&*Lv;slWJ>PpPj@Hs}8)xC)6D z{+kM@_=jba4xHOwYq(92K^_%!WFTeunUd}dMB?$5o(Bjbd2zGrme0Pwz*zf#={HE= zk-#G(=Qp%0W&TPr?xACqCk52iu;mm2Y}17p~)Pp;4!j)g8pxkGAfftTfDxEj~L%JS-YlQ79DmS zN^OP@{~`ohPv?81{MqY#@>z!a4@vL8_|AX)S7Gx{=taWH*~L{AVEm8Me{X*6*Emr? zRYrPOpr*5hLko^{?~9y*>xc*tZ&YiM%KMfA@nN^p#E|?c8W35t>GBAcZmA?4{UPUr zmeY-OaEd_%oDz|Gb=lAS!M&m9W`6(rdUJ;x06jy(gJfSoPLhvmgsi*@_=ffX5ej3s65C6K;Qq$m8<98QKQ&(2=PnxU-p zy1o$8j9+3oDY6_(6~00AZvJDQX{iOaWATzEh(B-7G*n?ii^k5}^sObC8mWZ$GqLO` zFQk3dGhc3LgXh1}46U4`@|u=PV=ro6Gk-U&3KzERYKq8iQ&`M{ z66z)|kDF*;2!t0`h2%3jtiMmCM!^ZbbEazf%%%b%rN^OWL#s=lwAd}0e;=qX?usTA z9(Zn-UmlKH6$@~yBkPop@gA+{^6&}OC$4EF1IHAN{w%|uvsCbY>|1Y3+n*y}m=gfM_MD2y2ybg5Ee#G4-0q!EQiw8pk8 zajMzrRw<+V4n|~tR*qNe&{ACV!QlqG+Tu_laOhYoqD#AJ;#RB7epfO@XP3?5L=4w| zHUPUmS;`H7X9qE!R2UvMsm6A;@=1O#5XSU1sWSQI@4a zZGFgOeXx}tmJs?=@*}5@_Cw*EWqjMYiP;ArX6+xYip?F}`38=k++5@zfoItr7BvNp zF4AQz;o;d5e2Pd(OFTD+j|Q|942$uF+L(@u_{M20MhtWi8oj``eZXbdJ;tUMbs@T5 z2y5LW6wZ&jO#>UCoMKMSy6g6DP)D&BF@YE9UtKg?xrubeFm**3WxIPdoUuJm6|>fa+?m%l%uRVj9gvr3LL<9h zzwJCHAAzE&-HEze3O~GobD}0Q8+EwwOWusWqu$p8zx0Xc)rsjG`nO_2#mkonxKUW8 zdT^tvODb;w?|v&f4=o3rG4P^EMVhblocIjZ`>hvC`9QX&{`gG;d5Q(*;i-d2Xpw&Q z(C@{o(K1N_^R@FKtK=F!$oRG`ANJ|~1L!u@kE-(fHSnoz^B9DTIMV%qFHDsLJLx;a z{kiDL9o$beEYbKDFhRicb1(FhJbGP|=3Wa8j344(w4YiN#2MMp;ozg{ZV|3@nlHrC zW^uW#Wd@qdwly%Kn#Y-3@(E1S1%~fg$8y?v55Ejv(DaH8Mi2lDLbwD&5!bxl1li;o z(LdPNVw+uqJe!`sO+I-1;BEVZO!%Dz_O@S66!?*QN}cGHJ0w6VOK24*rD{2LcnT6} z?;~uSqXzkQdoCHMAs~sk5Ds?W8B0!Ldi>wV}UtY5jdD4LGbGekgSgCxr;tWYlL{X}jf-~Z+7*=_Z1Km-EIkFnc0w}d*@k;T?0~RO(X-cMt?gUsdi*&sn>-7~!6{jts1NIoIy~YrX86%dgI}?$~|o75S{0+o3V$9hED;=AC2cw%Uuz zn%c_kE}cfHoSWej)Zc!aoh-n&ZK3_#(~$eJS8R2BuOn~A=IX3_35k7z6YhpHcdy?T zKih&CDm+TZQ+|d2B7GxKmyr)L^LpH%>r{7P+NA>@T2c_uw_wh}K= z{~#_+Nj<<2q>=ewjhBlt2DB&B#;NNHLLb&fj9u06uW|Ud5K!YyMi_OJ%*>q>C92EM z;>IlY(CJs-@UI?NF>1~-TU(XGwu|5~DS1{Lf9-8?OV3s@sIuccBOP*vKf>i@a+@$VGIzJD@${J?%^ zbWR$Kh@|3gAi3o+$wOkin1d7AoX>tYxR^ft5(7R*bJfR)v>mbg6-;nitLx>KfB0b0 z^R~_tVhPem2#B0P>L0Ca+st1MG&OmIKG0GA=mB{yop&crMUe&u{f>E@M9R(+e8Ni% z*kG=uijDODHo=eQsQfCP4ijs#+ve{s^Ck58tsW-rT2IDABK( zeZdFd?BB}%F6P((0YEmP3v&Vnlj%yt>UUG<0=6c-yY4qn()-Z5_dBePVW5rSoXDv6 zv8I!H;5&?F&m}_q9}C63GW9WD8U(lJ|8ioI7FNCX;8Vp}8QfcR?|g8Q>Enk2oF z%&lWU`bbvMjQq9e!|U7LrSj=juRk{#iT|GsM%2i~OxoVX%-+Sy^;6eO^>gme-r_S3 zb~O5Iyma_Si+Yi&yu<7#aChR<4D%Ji3O83tM<(wnUtt6^PYoRjhFS$ys_g$z_7+fi zC0Q3J1h?Ss?(QDk-3jjQuEE{i-Q6L$JA~kF!GaT9-`9W7yzXXt`pv7g?&7i*wd+#% zRNYfm=j`pVNwQiy*i_M^bg6a^-)2XN1Tm228%TlQ(5#}Y2#Ex7J~7qh&TQN9^zalC z1H^Vo0E6t>kUAp;eRo}NlV8|xjI4spihPIp{qy&vUN)h8%} zz?D7T5Tc;y#e*q4HO2E?Jtj9&@8CVOJCW6!pyTmRco8Kv0Xe@6$Aa0@irX*O@&*?;0Xf=JVLq>VInqATRQrg0KFw6m) zYg7;|g=VSrv)PxGi8one{g1!M%v@sL?hdjIV?Y@vbPGfEogW)9_IE1kkDEfOO9HE> zYwdcQW>QETgH6=aL}R#kOEDiOF+E%)Fg#=%8_Y}-im<;Z@9{>u{=gWSNna4S1xp!i zAp$Z{_|iqq(#N5J$R*J%UzJ5r*LjUrR#bPJU>Hs&SnMxaTLXxHH(F*_2V~o8hA|nc zp3>%Gs8VfFxr5*6ZDUmI(nJcX0m( zYBNX@GlF#qx-^JPA^N33M@fAMI*Z(nd!S}V)@;#^^kg&FUafSD$R=LIXP^A9zF-U( zH$4Wx4}3%f0^fE3yj8TPNFT;nA0(Zw3*4 zrB&9mN&Yb5^O_1&=JFLH13`qCvwlv+Q_`9U>}z+ZaViQ51E_P&%67bG!@m8FJg-oA z(H`d$B-%*g$70WK@hf+v7$rs^YtUhvm zHNWOcwjm+ukW6e!ptxSP#z>z}0xX0Yz%+@Algwn)EqKbBhT=UeQ#cuNu`WYx%-Bnl zt29^>_UO?mZfPJheZdvvf?K5wkq2;ys>AL{1du4}apz}9PKeB>gLKFs8-Lt6Bk{L$ z6_P1=jn$8sIE!1$aC+3U=C6J{O}hRGCFHD#Mp>QK-1+@Uwp=uSp5GOs!tv3$z4&y3 z{EkQOEa__=H|_`ig#*(ZW0Wi69Q?y&zvXY_2!~9&feRWFNHTC%-zzibWhC+w#U@hI zPn2l0y1fm)%pjF&8K(9JAIvA3Rgav1vQg+`Gs4PJC1TCRjP9AgS>CotwJrypkL;^-V)FCwm@eg^K46Nze^kOIrx>Xm8;V1!@~5 zjePDRBu#2!$$GR&S@dX{ss-0edeZ{El>0Y0=SODhhkB;oX$+_ui6vV77$DHsXMPfE zpR*zx19U6vU42UUQy!XKeNK4v%ToprR+MHPX5+y|OJ~`bF`8_&k6Do)wI~fqtGDKL z{2q{jPaA2Ru{ZfTn&gIx)Cmg^tC&`5m5aL?rH34}hzcMS{Dx+q5~oU3J{zXzfQ~<( z?vtESZ-7w3vlkP#kfY<$ZR{|F~eYQaL!%@WRn^)=9Suhl8TN zY)-M#liNT`Tnt;$%w(1( zg}2^JS8f-j6fSZtO&|A5Gw6M zYKO*RxVR%@k##Du;j)qW1$B2tW+d5e%ZiNjk+~9>xOq3Pbf*7D8PDDd&M9 z{!%^(kHTc$I_nSki$=X~yO&{Vq0%Nb4HI))Tv@YL8z`rpSTGZ5f&_?C*bE^|NvfX3 zwMCad0|fcQ`mPfyF!t6C%~Ym3r?Se{+nAksT#IeQYvRYvw7-mxkF^GUjR#v(Fh8Jr zTnQ4)2a?$yLPQB1#DMN6M^NVv&PPNE$q*$7$`C_<;SDb$IjIQ4L_m1M7!}bdpV_h~lgB{l{?ze1J5!l0w-9X3U zGyVmIb>DbJScwTXf=NEc-JS0U+GF7EKz<#3I)kF(Jx)UwuESdYv3k?^F;{QYK(j_* z;Le43=8!W~vmPBsWDrleZqHsB`lL4#S-mw|pYQ2VnS7rKVF!7K3tGhMCss1ANZ0nU zwoV>GTsCu8lS_IU<>BWi2ILHb;)FaX5dqz}t>FN2dc{E6-B)bGb_nMLt(z~EV^Bs= zzW8EIrp^ij$lM_t>IEE&+E%bQl0vl{xQV1~0Zg(GqH?nwQ-%$wjU2jL*jfnIR(K+l z+rFvcKjtjLmwaD+YVNR18KQj~A*&|TsN58f?N z`sBJk#VpbL3`tzVbfI_ekY8p*s6phlB-CGkhdUCw=pot+$OIls^wlm-E)yp{;YHQ{ zvOn$l)r#42pH>%Ie~Pjoe#jk!1actbgIwzI}$(lrU6Co)9xQL(kItc^-ug$3N+ zN)toZeqHnQ(ill$2%O4%yV~Y1LUIV#M`5&emYxdJwM}HOB1(RpS}(zpFc=NJ*nq0z z)Jzl-ea6fF%bWXhv}Ne7YPtg2fMEJL#9LbfE;mTtdt!+AFU!-vZNJkH0I@(B28pvLecY{H*DArFRNkf%@R`Pa}@rm?Qm zZlL8~M%iA^0(N482GD(g_!BSJnkRszhLXunIa>~%rwmsBVQVko3=ycfP$*6$3exc` zRdX3!im3{wq@+o^sZqOV0sB^-$;3OUh8P~(qW?EyPRz80IZ54jFgA+9}W-3;&y@QUu8Qnb3`fPU#*+ymcX zqURlh7>E(hjLDVwT-mLb4{!7;te)HK;$drFN%uKLHbuLbg&+i%WY4j#~h|Vxt1INLW8So(L_McXXgO7AHCm2>eK`_a_wgl+^ zMCpgZ%Bo%K$Nm1|XS-Sqtu%Gh!SHo6Jgb}iE*?>$2Eadh8obE?;t(Mgun@J&I3 zf$2cf`-~vn#gk`p^&#{;hvUtgRhBktk9~HNoIsR(L^wB@LWC_5V)}=fBL}Ro}t*KOD{~mH*p@^f^;qsG_zZ znn3sJWi+zt(UXit*ZmSoD9e(j;lFv-%tifK%7%L;XNUeG0-ptuHU76ChapF)-ndDW zFkO!`&V#mTM~~^Y(`nsJUmywt)?khymcv#;wOuS;0Qp$#Z0vAhI3*kvG?fXe3Ckmf86&t4znPfK40DOkk2q9Y>{k6doM4N=0G z@nYkzu9$cx0o%P-$f)4PlhsOfP?$?rE#<*(LlrXNu!$#FwyLcRMduKx8gxQGN24uQ z7RKn%yEK>g==N^l#+e2*6S$)VT7!D1m^;%BwG(Jxn=N9=*Fa$V<(sd=yZ3|0TCjrZ zsiiCGSS~XOCq#tM){+X7mllexaghdMP}^4`=vsGnjc;f3n_p7T-N=7L`KdOq=9^Sz zTn#8{gU%`{i+zy5HD#$Tl!;Mf^tgGDpSUTzGH(1$W2UlkUJxtqD;ghak ztEOJQZkWo2dC(iD0DmK^=CEd(%5VG`lk9EJO{J3Ii$0Ir3Uk8-iV^(6nKu$i<`Di9r@K zFQ!;FXBGi`FBD|75XU1tFz*`bYRQEMc1qG@Y5 zVvZ@gH(q(_QzV1JO`P#2f_umu-yH4HD69&ecgz5v!RM|D@9Pa!3yXL^8N#t*Zl?&b zuOhm4TvaN8LwIH4$VPM2Tmdjfj>@8$ulxr|2)I^wizpB1V}|JnjP(s9Ok!xGhqiwm z3e4s^PrZPlPz4wY?ElN!>-VAXev2UK--BRbMu82ZX3R^#ehfO2=@UXY`W^~>E;c`Y4<6|DZq~W?QzYtE)dOD zkUxtF%5{VozKQV!Wh_HYZYUUL1XD5!$sk{tF(&ngSK*=ZNLEZPq3N&Y8L!|%JT+%b z;-scI%&^MR8Mf@$o@?HQCmMyAelx#@(; ztyb4)HG&W91!+`qTB_%@4L5f*Cz)9L*kC<%1Kq7#@mw8KI4RiM7FHB;)gGuJKgjW7 zxKT?n4Jd?ciIyc1750xn;*Tz0nVGNst; zRbA|!Qy@zaJb;pCFgVf_mU_|3OMd(o5$o6n;h7UNgVJi7b8=(Pg~3WRmp*$vT9r8aMf`?_kijY9*qyhS?hiFHQmAhqx4k zWTMe7LXER#MdLvO*OUhM5~2F3*}Q_IUHXAPl!1CEYy`E0EEEo({YH=)>83LYe87)r zxkYx6J*Eh4r(H@H3Ykd;yIL6NvOaNkg)YQ!Ao>n7Jo!=HHlR9F>U}JLK0>o;VbU1F zjSoBkSsMg>ke%s0iz6{^rf7fCccC^S)F~`6otj~ndP6RZuHi7?f=ov2))KFmw4|wo zKi0{q1G0-V{{Vj(dO}3+H!WmcHQOq1OfpXs^}*d(f=<4Y#2k7ql*Zcu+AZ?r-KfZh zx!NxU#JCmzCvVo@pHBUk&4?sL?caE_cpEetj>v{c=Eb|M=1>YkD|R9ZA=%_LAvMJ> z^K280mSmSE#!d?F(VscJsjhng@%%{VRv!e222OY~xm~AuQ#{Ys_@BE$>>}m(n3gWK z4f=&9`^kiE8W9b3_L%3NJB9m;|k zUY9SQ0b_4C<$S0gLHJfUt#9bsb*-epuUg281#OJc#j*nO8Ulf+rvHsmv%I#g)_@UZ zA6u@t+-Se15m7})tPc_%;M**jPb~6TtjKV%hrr&X)Rrlb;~iz+Q=KZ7GiQQu>jO)T zc$6~Z(04%xf1fKFKl^lTHu55(Ww4aa4=rSkH(E7=?4sXIgTsy7_H%}ofFz=>@eY1U z7aHe>V*JeuS`7tVB-BM6Y-=N1qEh9Sb9jZiRGq~y(s3_lM1E2yvYiw6%b%$XXmSND zZYjx~au4{Wyc8*UzYyIQhoSYu?6MGw)`@S=2L)%H^LZG=HL5;&!u7@O3TB(wp+0q+qbWt(23#?l3&o1 zdu)^dCgS(B6leE^YS)++mSC*+R?77Tl(TwZdpiYkMz<*piGX(~65AxVH>ir2dH4 zw!4eGy*tK=6W}CKV6qad6P!YA&$_h0&g zCdw1q=PKJc`EAprZSd~;!o5J>Qzd_uE_ZPLB(0ds0}nCsyIg7>zItBRcMgg1Fv{7q z_%0m}M{gtR_@vy1VGhB*RIX3oQ~7{aQ_5bLXeG`QUI~kH6G&tAC17KHS!DYOs(}@e zjZ^1@34@$gL>r_jto3H@gN^8%L!;?2UV)u|L7MBk#OKV|L!MFxN7H|u(mGM_5p?*8 zpe~)nbB)n5x(n`2l^E7SW%GS-1PVAo7BQ9SW8Qg|6FTuxNvtBHqN)?$g0xP-R|!8W zX&HQhW&VulO{VowAzAQzgAPsvRCi8b!b?(yFr9%LzR{&q_LdS=}sc%(-pEdt>W z`Q(=fEI0z`M?D~qeEY%h z%M|A(CwGf(SLYj~9%2R8W87@sxR8*JkU~hf*j4JH-k4=P43;Do8fN@)vtyNSeN?d7f@_Ht)J~b(8)&nLa!yS6wtuvge+wlA38{lW$mYA|j@a zO+xlW(qgSL%%aKdybn}^ZVJuuMw?)*9mztFA9?sma6BLS32e*p!iOrzcUospllr(l zLsW@rTs^N;;G|$fFLy+P zQ@)8@UQ9V)`f<6HE-w);J%yLot%V^850q`D3`0W2E1`#Q`w+krMzhG!{}j8+CFunu z#e<5d86DvQDRGKsBSz9<7s4X@Bbgz%J&`%We2rL!6b>beg>6|4gNEt=`D#6a_F9udtCDAgC| zxg}dx+7r~enD`(xecQC#)^=YIuAe!c0jYMi&p)76BQn}mY1YB-7|<@aq;nBqU(~ zohC}+GxO*aO3n#t4h>#jd?BywPK$lU9vPFDVt=@~qbQuKhD}{y!W+zA%_n zRyKgcE&l(-tW<0)|KVt>Q$X`bTscPqxp5f~6#Q9Zu8N*PgS#zBahO zJ)Lp`xv!}r^tbwdly>??MLto;ptM6!qld+;pcS=)6`*z7S|Y|cjNm)4UVl~{1{Cnv z)9mcJyt7xYW0IxkA8 zwU&O6-Yg(?*+-bHe^1dctyH;7E^gG@C}SHZAct>iCHqb1GR-;oqF$+R=c~w=MNwl} zd(1;|Q3N_Cm`#=ABFYm1#%*>w$@d=Qr?%6MMtmFhV#7C5Qy9`r(BcDE%&)FFDJfb7 zir=kc=44FSC{C6Vw>|woBNy*OGwWMuv?G_`z!^Fo z;o+>ZdH2{gRB|Pe4CsX0j_c#(R*GYqlH|qX)A`Hw-4N8%a&_ zRT2d`|4<_nrg|zKT|@ES`7}E;wAPldMw1uL4Rgwn;nV(y!pc+Pt9{6OPh9nCKl)fE zl?xpABa#bv{LFH)IUSPS{5K-9A?{p_LL7S$!Bx^G7sM5@#7wV|Qb@F0Wc%BS>O$e9 zB(Cof#Zkt?@I5Zk$~V2k)5?w(DuZ^U-#CM30K|shyQU11F1d;ICrrol z6P_7Fc2a||(B4uTIAm0Gh++aUGBmW{seRw&UXPFpwH6@(0Vz=Z2Wjo!F2a8Iyt6di z^%Ccs-m)gHWV*bp{D2B*5RpbDfd~cFL4?61fCBW?2M8a;!GqH{m=SlPrL-;b7K*?u zEzMcyEsjNj3YMs~MN$+-cFd?Ic-CR2+u}j1O5s$#@P~MM#DRKH6jMuni=T>o7{E?l8wu zw*{w?1xx83{0~A~n!#sP1YEsY&rzNcgl~nRQ%RgU;E)DUJ~RK)*?ACjm9MQn_DhKDok6 zvF6(5V$|ZsGm6kshJ~^>Wt1VhFitFY!Xh3?XyM_9gYlvV@@L}!EbZ+Cvc0URVypPc zVyif6?|K#UzF)0liC?UKNi=9$F%F=8(yM|DIX$eGCqQd3^slQ}-R%``WyFIE{+uG> z(gcz3=SE^N;?n!W*e|t{2&bXHPLIbeYCT7s;rq7ifhB5WH%|vM&N8kG+9GH^Blijh z{D8I4O6zWssRj(RsBzi`Aw?;){=M((#5~y4v^>F@<{o5fHx-g~l|>Y|rl5<8BZYcWt+fh+75CVbu5enxhdg;B zS8uzR^?19KPi)^m@aEX-Xkls><`b9u(!vjYSQTW;I@Cshh1iV%t&abG^Wm;uJfiCQ zKo$_<-rT`ELLBtNtYxI0o+g;5}Z<-WB!e^q9=7I@Z$hA?}Ge1+_0ZljRpD2ub4x14Mz zs7Ucar1@!l0-|Inr6`w7SahQ)8VqQJOGT!OSVFam+PtvKaYH{a>oG$`3y zMAJ%f@crm8;m;>#Ov{-XMY^7I8`aY!oXkuz-73AQipx#2XCxh3$dJxF9p~rK3ahQi?VPCCNpUK2z1|1{~C=jNsdCcTxe&jfy znt}=LFkqw81hQfG1W>h*HB$a0cs!;;7-FeND(S0Zg{h~A^|Pd|JNignb+El_m__!fl2 z+Qw*S$5TPf&5|o`e&)}J&&5L|e%}Qz7H62tuNO0047f6u>LP-m;Vi|uj6G@jQE^pE zs+;gc`@mH?One2m(?J@N*!T*;K~PHjQ0x_vq=|N~EO4bd1Y8rb!UnI-;27$xy7?sR zey1?cV&Oet0hoR>`7Z=2HnkmW~*tApcum_s%BG zL$t$I!c`*aW)eB?1o9`Y8=s}7ufvcbp1 zubAR>eS(8}qlihCh7CeFgkq>KjA$_CO-KS&tOy1&D|HdB#^pLDa6eLYII1|W^%^3fZmmW+cU%|O@fZhQHglOrY=~QiDD-A{L(!joMUy?i{di-Wt%SbW;usj$Zw~C=kWj*P8Pxo1jB;w z?hT2c^q$5xJ#WiHHom=Wt45b`{O9oFWS4o7dKpbGzyj9KlYedl;Jw^q#TsRn!yZUo$%Vf7B9h4YgHnTY9M-UJZk?{K6;Cm;FVxW{htB)QqiR?#>r-XUN-w1j26pdz zXWR&lUJRIwjXnm9MiTP0K6$$`_-~_m#(225n}3IP&ZMr-FtNCpF{e;ZKQ-e!-f$0F zrEn?pi1q;C5(>lCFwQCZSb(9+6YqhNVx;2jR)K5EJ6qCqG$%;-c{`EaDCG05HJ9|! zmk#k(LL^zdEpeGNmIB$M0}GXJ4nECG<7i8C8xyeE3uc7{-a_)H2|3v}KZ*Ur8_Wa9 zor#E^{6w!7W-WDWRI#DGq3aoVrLkf?{9?w$bq^APuNED+7jWRnx{I4CO5WCJ$lzz7 zHnLnwM1O31N8AAK!N!EMe_b!>7Bs`cZ_z#X%D8Yi6b||2oOh0!<b_~5R!$;2kxcsIITT^RU^G~Pi_}lxBBYK07*XZ|rS1TJ z(vpT}U!Vhh2s)6hUe5BLdlX{4$%OYEc$@wFT^ToS-9N>m)nd3`@kFusikCNrb)~j< zLdT88w&;%iN{%2qLgIc!?sw#z+9?7#ZVhQgj@WMlzt-d6@r2ShY>v0w0V`6w!z>@v zPSaBJLldlq?gIUU>qZmf|kw*@C@A4IGmWgF}&U99xR~zeB_**D8O)qcgXP2 zV@u+V$ut~6#_@9o?f>b?&{0QiXUjx~)=?z-|3h@J%bqw7Lzrd0w$w!WT z2q(7WIs4h)CX)9{952RVq53ep(`bL@t?OxNJ?=Xt@zHJ&N(byV@RpI)i$7&mzNfHaRwbVn9q9~{9 zE<`zqXl+D6&&!owK6tN}@_g~?rZ=Zk>0P(*@CYd3Y9UZ-tNe+u|DEbp(FJuOHH~O8 zP@I|6!K2^0?fblEK1@VeL}5jS`nlkxo(Cn768>^za5XbCRXbzDjyWzNRd%)r*lH8T zv~X&;=$rwr>W)M6F=7w+$pGr1FtSabXmLN;(7FjvIISC=+7850IQ}lxb9f@Y9`)4(v? z!S}$knJ+s0`b!vwKe=w7nD5Hw1s2Sz_b&9rDb1adpk*0p`S|~GknJ1S*X-i1bxzzh zbRz_ob>t{u=%;YR53Z<$mz0LXe=-|-W#M5$GJ!O02#*COIx7f$Y6xA5!0R{+jg?%n zv9oCq%qC7%(cO@D?^ro4zeRC_UJFT`1IyN6-3T{w(TNp8HaXDix5hK+c|sj#5c?*7 z)Pp#rLiVjxQ(swxo$lo4OKBy2dC5h`r|$d11PS3D%##ZDa7#>5Y`34-m|&8dlRTFa zkt7FNGW&f}!t&_bUqOc@4u&XDeg(qM^feW_rG5SiHH~~z*4`LM@@QkiM{#|_=&I9O zaV>pSnU#i|sbI>BdZrV8gXK2aa}2(rNA0vaOuzYa=-3!78~1Uffqfbw`}Kb7vgTVAvYk_m!c|woPx# z;oQ(i_jORr9?CTjnmTc5F|NcIKQOL49@)mXdXpzuN;}*KoLFpKq9SoplDj4xt7@Hu zRnp89#SH~T6<5T&Da5`|9Sgj^u|!>!njWVgYqFZ1zlF%R>WNfq;fEqjl>d-TWr4si zs`y(iStaPun&V&W9HQ<_BN=N@VIK|8c_SC8vn2+9Hbs6yAa@8u@yQpav^PLAG=-ZX z>S| z)1UD@yv2xpBl*QmOs7BQhfD|cIRasV_#;8`u60mEYuZw^0e6Zge{{D#4))p$Uq=8w zQ#8LIqL1)bturpfbBk!!xuS@Tt95VQfeRWzl$T_CRnUzJ(n@5P9QH_`!hl&F%Uw2$$5xrg|YA zAosxu7#3bR#C%EMK#k#&!LD5T*(U<44bA!HHPYV27@tg5jX)6p z>Ciag6<4-9GJlimunzNDg>_>XX=7Ka%pR9-uC6Y0MY(qB8S+h5?uk=&&7~6Y738hV z-j?(=g1k!JhSDc$(<~yHf$z3x(NvW4ZM@QGrJ&{^ddk^m=f{PkTtLePkwez+_qS-5+mGxLRRa|BEPyr-P zFB_TBc1Tu^Di@A;CFSM@}5c4wSMEw4G-a+7F*HY$+#?UTn zn)I$BNL75_P*bFGgjn(6b4!N4sVNAuo);3_Bcz!e2{yvyfVOypHm z7h7+0Q%0}IwAdq=vu|+;Sr5CF+~Wu?#kPDByvr6h&~{U1Cx=6_8;oakt=iN27Cwg* zF1!%!=a>7+oQ|oq^DAQ4&$Xm|qY3Fh=*<=x`26KNg^tz7UoE;Q3r-AA4jN(_&h>oZ z22V}8Lo%~YYMe7#qhD?^@rPf*Z`td+!;brxHz$1PpFXc~wkEw;7j|d89Ei7QcHDoq zJ$rkXwcbE;2J-^gA~pnUc9H$(Hu3+RH5mOXIsG@zz<(Vvs~zj&sA2k;&`;D$L(0?n zksXok)ze6QBUu5WO!_tu2n0}XBAGu7%%Vx4<2G_d6S9=~T%~#LDpR#s?iQ9l2P%1a zE92{P_qqEfN8a}VEXUErWyv@MynCYKVB(4Iz&q#8!R5{U{Ina0Ba~lc#vcqdCz9w( zkOhgo%Af&?zUgJA8&A!Sl7ccfH~rk!Y^!Pj`enRZN97JP6(6<;E?WLln3}}}r9crpBED>xpqWg3=UtWLP&^z{^p_ahC7Rw7tz3 z#oRE2>Atgt5NCPdD7rDSGNsz}d?C?aJl4O*%?BZwo5^TOi$Mury3lHIaJ{Ydl|jtQ zW-e(fG7UiI*JW-Ab5dSlvd|cU(l{W6BD*Xq+nve?-abtU8Kq7ssYMbo-zONfJcx*IkSvFubJA6=28~V^^CZY%cW9YEg#0diCV% zB%99)q36QH)1m5?l3G)EBl{y`VQyPy@ZbXxs+iYx%*G~fTrzG#Gv6;7OL@V%RF!Ap zLAk7CMTWzaN^60LKvAoTCHSaIn{FI)HRxn(SW~5fWXh{8U2LCZ6?b$E=fDnenci&r zC1_1**l5%V=`n;fwaI5F=9H3T2OW|PdY+sQ`%7EG3U*GbXk9vL(?1^!W>^QQS-&1B ztyi9*?Q4|aN+3@LH$;exFStpl#Hgo5G7@W`FK{!fdQ7M@FzFz(KT%VQ-}@}(`+B}i zU&FsVljVocSa(nUoDKH&n!PZmSdc%uKdM|>Bl?2tK}Cu32L@nwz3~6lnf@r! zM}L2~(GB$)W5;TGg*JU$iXqN-c+JXXj_SZX1f?YHw-0>}(q|4QcEODFRp7e>FaLP- z;w4G>YHuC4>P84<|CjasMtO#liCo^ zY0hJ5iYOr{NgbclRCT*cfpb#4DVupU+s_a1gH9%D-amPx3;7@vEJaD2_(gTPVZv{t z4%{>Q;zxhqApxmZh!A58q|*9?j@KV@FJ=@U+Rq`{p|BIPWgq+snVqN$;{O3>80wQG zK3TZGQX*?tR+fTf31tg$qila}I3wyV71L1e8L?5sD^Y@xe^#_h=M1fyN^ zN8)cDSm_n7k;zAT{;;LgORSu@NCr_T{eqE@m$Z!=i46W9hZ}{04>{&{xo{8yrYB8f z&#BI`w1u!6F1FmvMn>m8iC@q-+Nq1%eC+eo5n@@c^~Cfnj)(Kyt6p)a=y z;Q~%c9@P;65}#?~e@buO&}@*wDoe7Y1FtK_;bdt3vc3gJ&pr7=Em0G@Z9}elWz+~= z14WFybXGKEz%T#YQ0LOs^USHgr>K4ho!dOc9!XxqEgs( z_T?66y$W0I6}Nri8{_&n%=n^B;&M+gZC{!2K4{5BY@-Rv+iHOar1k71n_-+DBy`*% z3r;9uF^ED-L<-lLL9!ny<8BMa^>R!wfg--vXT{PI>_OUYDnQ^5mEC{i-WXlSDj-;=LKdg zesdllPgSy-wnyTZbJf{Wag0hCkI44)osR$e#Q^-p!%qR#tP-7 z_rOGa?0RZn0!uwbd8#s&=!f@ zROV>B9%OFObFdYv=r{!myU8WFC3b95T(L&Olx@D3QZ@|i%Ab-uRbuH@;Y#{)phjJ` zaE=m?B!u8SP@S@Bwe4`4X(=rag=GO6D=4s8PTFiTHVg?gm-pYFpzrD^h=C^6tk3po zSI2E@X|qiiTsFFK66$Aa!$Yu47%Fo4rOEdnH2bfG*MA5UOO?fZnw@T@n!mvKg@s0v zH}i&lPMMf=BcnqIzbY3Kd=^RV^5Hz$yl8t&frec-C^xY(`g@NiII2%VS4E$8`Fy9f zR-P|~6h8)>^jGn7IxdlKQ5>hE4x04xMjsVcfR}gp5_brRET2MsL{1uVyyH|Kbp5Fe zlxM}bX-9@hub=KgT5$|c1J!2-Z9~uVPZ7eJGQY%SNP)xqiOgU3 z+ifY+PuCOD=v*DDn?sUkfuHg{@=A9{wNC`RjKW++>4ZPR%6{a{N|+3izHZdT2IAw` z_=kls__3-{xFmH!7-TC7Lobqy3;?eXxy@RPVK50-PM4e<1iLw~`&;tCeeERN`4y{5 zXIG%zOE%aEWKAfy)t5Yo%_H)F)X z*237(>3^X^&We|k>-&TfGz|tS?8PtNpMTN=nvUVTORNw{olk;sC&Zo1XdMCz0`(@T zMn?CW4DK#UIpdP>F3s6dCg1s&0BjCvG(kmvO6v57Q2( zVh%|crSI2B6Ok9dqmeG7gQ9V$LUhAQ_d5A+7DBlwh(dV$Rss!tCFi4Vq0n)wtCqr@ zu1t<~sHE;%=W(Gon~LGoRW>fLR6B7a3)ajT@ECnZEaCckeLqIoaRg+!LTJ`)aws#H zp7CR0%3tdjPi3T8Cq_=4@&;s22tk7>H6T0U!W5&G02f3cdqIseYQ=0{YyPwcr}Y+^ z)jgE_ke)3v9(HK)Aw5lm8mjccmAvfcofJ3pGzaf*@AMfk_i_H`JAJRa_opS)J8IIb z_;JbpPbk6DOBL2l%?lRuB5SOI$npb0=&@+%iuCeFKIwR~aU{rOvw|CvYW^_zJt0Ws z<_Kj10~(pkzoy?NGut|RJGy{-fUQyp;G>AFQ1UbaCqG!B=86#bj`5I9Lm90+#(ruZ z9~RGDF~!@EUPlb~%X5~5OPksYYato_oXkOQ;Y2!_jTrumT>LZ4u!6M0RH z5EESc?CTu1ScFR(yAn}2@&{IIV*_Yg@6lGV+?j=^7$;Gg5RYcgSbz8C`eq+>PYOy$ zJ83<3W4c;UDODP{du4UE(fsh6?nDz|Fy&kzkq?Dpxi|yz!)hpgyTFpx)n-2RRYUkJ zoC2p7ZdFY)wQyClj{Ro06L6+;Y56t?9M8k7Wvkk`bfSJJbMf7dwGf;)TMFYJ!lv?f z>ao(Okdqvr=s#tvm_kWX?Hks8G)AR%3>c$k?1G*LJtMIz?z(RL!q%OaM(;!mHc6Au zU1kRONtdq)UCw8DqWSiYT^9bWUk#w21O!+L|DU@0zxezC0U!U&<-hly!5@fLjA+b1NfS2V+BHb33O$s{%;TQcX=v|Dv9hk)*9>ondDA#{2;gkpcl}`P7z# z2B`VlW64Vae?a-|?oa3dEBoDMjsUu1pKiY;Q9^rk3tE! z{eP>;2*^r^iYO`5$%wv3_^rmj8wLa|{;6aE?thah_@^2G{-HmW-hb8jm$1P;Ww3A6od` zUwaSd?kAm}2Y?v^T)&ZI|526!=Kc?Gfaf)JFm`m52B^Io+x%OA;ypa2M`3>lpew^* zf6s;Z1AY|qZ{YzH+*Zzx04^C(b1P#3Lqk9dGWs_9rvI&htlLpg4?u?p13LUSMZiDG z0>R%lAm*SCP)}6>Fjb1%S{qB-+FCl>{e9PvZ4aY80Bo)U&=G(bvOkp!fUW#Z*ZdBx z1~5E;QtNNF_xHGuI~e=r0JK%WMf4|BAfPq6zr~gKx7GbU9``Cak1xQw*b(024blHS zo{giEzLnK~v*BOHH&%3jX~l>d2#DY>&ldzp@%x+q8^8ec8{XeP-9eLe z{$J28rT!L8+Sc^HzU@GBexQ25pjQQWVH|$}%aZ+DFnNG>i-4n}v9$p}F_%Qz)==L{ z7+|mt<_6Ax@Vvh_+V^tze>7Ai|Nq^}-*>}%o!>t&fzO6ZBt23g4r?*WLL8)z|!gQsH?I_!|Jg%KoqXrnK`% z*#H3k$!LFz{d`~fz3$E*mEkP@qw>F{PyV|*_#XbfmdYRSsaF3L{(o6Yyl?2e;=vyc zeYXFPhW_;Y|3&}cJ^Xv>{y*R^9sUXaowxiR_B~_$AFv8e{{;KzZHV`n?^%ogz|8ab zC(PdyGydDm_?{p5|Ec8cRTBuJD7=ktkw-{nV;#0k5o;S?!9D>&LLkM0AP6Feg`f{0 zDQpB`k<`JrvB<<-J;OKd%+1!z`DQP}{M_XnsTQvW)#kKd4xjO+0(FK~P*t8f?34gT zNeb{dG5{jMk|Z%xPNd?)Kr$uFk;z0bG4oFYGnNlV6q8Vd`WhQhkz5p#m^vZSc48n^ z)8XlE1_e=c^$WG1no(|j8Tc`PgwP}{$Z2MV1V$=SXvP)gXKtqW)?5PUcJu&?e*#h! zqs>gH(jDQk$9cz8;-w$cc*dE1}qLepfsBCXA@(bAJ66ft0aCq$Wrcq)WXX{0nm+#w=uBj1o9rLyA i;x|p)^~-yfPOPa3(|vBayXKz \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradlew.bat b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradlew.bat new file mode 100644 index 000000000..e95643d6a --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/settings.gradle b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/settings.gradle new file mode 100644 index 000000000..4d04f71e0 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/settings.gradle @@ -0,0 +1,5 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +rootProject.name = 'java-chaincode-bootstrap' diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/Car.java b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/Car.java new file mode 100644 index 000000000..a67204a74 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/Car.java @@ -0,0 +1,79 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.hyperledger.fabric.samples.fabcar; + +import java.util.Objects; + +import org.hyperledger.fabric.contract.annotation.DataType; +import org.hyperledger.fabric.contract.annotation.Property; + +import com.owlike.genson.annotation.JsonProperty; + +@DataType() +public final class Car { + + @Property() + private final String make; + + @Property() + private final String model; + + @Property() + private final String color; + + @Property() + private final String owner; + + public String getMake() { + return make; + } + + public String getModel() { + return model; + } + + public String getColor() { + return color; + } + + public String getOwner() { + return owner; + } + + public Car(@JsonProperty("make") final String make, @JsonProperty("model") final String model, + @JsonProperty("color") final String color, @JsonProperty("owner") final String owner) { + this.make = make; + this.model = model; + this.color = color; + this.owner = owner; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + + if ((obj == null) || (getClass() != obj.getClass())) { + return false; + } + + Car other = (Car) obj; + + return Objects.deepEquals(new String[] {getMake(), getModel(), getColor(), getOwner()}, + new String[] {other.getMake(), other.getModel(), other.getColor(), other.getOwner()}); + } + + @Override + public int hashCode() { + return Objects.hash(getMake(), getModel(), getColor(), getOwner()); + } + + @Override + public String toString() { + return this.getClass().getSimpleName() + "@" + Integer.toHexString(hashCode()) + " [make=" + make + ", model=" + + model + ", color=" + color + ", owner=" + owner + "]"; + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java new file mode 100644 index 000000000..a4e8b3539 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/main/java/org/hyperledger/fabric/samples/fabcar/FabCar.java @@ -0,0 +1,190 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.hyperledger.fabric.samples.fabcar; + +import java.util.ArrayList; +import java.util.List; + +import org.hyperledger.fabric.contract.Context; +import org.hyperledger.fabric.contract.ContractInterface; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +import org.hyperledger.fabric.contract.annotation.Default; +import org.hyperledger.fabric.contract.annotation.Info; +import org.hyperledger.fabric.contract.annotation.License; +import org.hyperledger.fabric.contract.annotation.Transaction; +import org.hyperledger.fabric.shim.ChaincodeException; +import org.hyperledger.fabric.shim.ChaincodeStub; +import org.hyperledger.fabric.shim.ledger.KeyValue; +import org.hyperledger.fabric.shim.ledger.QueryResultsIterator; + +import com.owlike.genson.Genson; + +/** + * Java implementation of the Fabric Car Contract described in the Writing Your + * First Application tutorial + */ +@Contract( + name = "FabCar", + info = @Info( + title = "FabCar contract", + description = "The hyperlegendary car contract", + version = "0.0.1-SNAPSHOT", + license = @License( + name = "Apache 2.0 License", + url = "http://www.apache.org/licenses/LICENSE-2.0.html"), + contact = @Contact( + email = "f.carr@example.com", + name = "F Carr", + url = "https://hyperledger.example.com"))) +@Default +public final class FabCar implements ContractInterface { + + private final Genson genson = new Genson(); + + private enum FabCarErrors { + CAR_NOT_FOUND, + CAR_ALREADY_EXISTS + } + + /** + * Retrieves a car with the specified key from the ledger. + * + * @param ctx the transaction context + * @param key the key + * @return the Car found on the ledger if there was one + */ + @Transaction() + public Car queryCar(final Context ctx, final String key) { + ChaincodeStub stub = ctx.getStub(); + String carState = stub.getStringState(key); + + if (carState.isEmpty()) { + String errorMessage = String.format("Car %s does not exist", key); + System.out.println(errorMessage); + throw new ChaincodeException(errorMessage, FabCarErrors.CAR_NOT_FOUND.toString()); + } + + Car car = genson.deserialize(carState, Car.class); + + return car; + } + + /** + * Creates some initial Cars on the ledger. + * + * @param ctx the transaction context + */ + @Transaction() + public void initLedger(final Context ctx) { + ChaincodeStub stub = ctx.getStub(); + + String[] carData = { + "{ \"make\": \"Toyota\", \"model\": \"Prius\", \"color\": \"blue\", \"owner\": \"Tomoko\" }", + "{ \"make\": \"Ford\", \"model\": \"Mustang\", \"color\": \"red\", \"owner\": \"Brad\" }", + "{ \"make\": \"Hyundai\", \"model\": \"Tucson\", \"color\": \"green\", \"owner\": \"Jin Soo\" }", + "{ \"make\": \"Volkswagen\", \"model\": \"Passat\", \"color\": \"yellow\", \"owner\": \"Max\" }", + "{ \"make\": \"Tesla\", \"model\": \"S\", \"color\": \"black\", \"owner\": \"Adrian\" }", + "{ \"make\": \"Peugeot\", \"model\": \"205\", \"color\": \"purple\", \"owner\": \"Michel\" }", + "{ \"make\": \"Chery\", \"model\": \"S22L\", \"color\": \"white\", \"owner\": \"Aarav\" }", + "{ \"make\": \"Fiat\", \"model\": \"Punto\", \"color\": \"violet\", \"owner\": \"Pari\" }", + "{ \"make\": \"Tata\", \"model\": \"nano\", \"color\": \"indigo\", \"owner\": \"Valeria\" }", + "{ \"make\": \"Holden\", \"model\": \"Barina\", \"color\": \"brown\", \"owner\": \"Shotaro\" }" + }; + + for (int i = 0; i < carData.length; i++) { + String key = String.format("CAR%03d", i); + + Car car = genson.deserialize(carData[i], Car.class); + String carState = genson.serialize(car); + stub.putStringState(key, carState); + } + } + + /** + * Creates a new car on the ledger. + * + * @param ctx the transaction context + * @param key the key for the new car + * @param make the make of the new car + * @param model the model of the new car + * @param color the color of the new car + * @param owner the owner of the new car + * @return the created Car + */ + @Transaction() + public Car createCar(final Context ctx, final String key, final String make, final String model, + final String color, final String owner) { + ChaincodeStub stub = ctx.getStub(); + + String carState = stub.getStringState(key); + if (!carState.isEmpty()) { + String errorMessage = String.format("Car %s already exists", key); + System.out.println(errorMessage); + throw new ChaincodeException(errorMessage, FabCarErrors.CAR_ALREADY_EXISTS.toString()); + } + + Car car = new Car(make, model, color, owner); + carState = genson.serialize(car); + stub.putStringState(key, carState); + + return car; + } + + /** + * Retrieves every car between CAR0 and CAR999 from the ledger. + * + * @param ctx the transaction context + * @return array of Cars found on the ledger + */ + @Transaction() + public Car[] queryAllCars(final Context ctx) { + ChaincodeStub stub = ctx.getStub(); + + final String startKey = "CAR0"; + final String endKey = "CAR999"; + List cars = new ArrayList(); + + QueryResultsIterator results = stub.getStateByRange(startKey, endKey); + + for (KeyValue result: results) { + Car car = genson.deserialize(result.getStringValue(), Car.class); + cars.add(car); + } + + Car[] response = cars.toArray(new Car[cars.size()]); + + return response; + } + + /** + * Changes the owner of a car on the ledger. + * + * @param ctx the transaction context + * @param key the key + * @param newOwner the new owner + * @return the updated Car + */ + @Transaction() + public Car changeCarOwner(final Context ctx, final String key, final String newOwner) { + ChaincodeStub stub = ctx.getStub(); + + String carState = stub.getStringState(key); + + if (carState.isEmpty()) { + String errorMessage = String.format("Car %s does not exist", key); + System.out.println(errorMessage); + throw new ChaincodeException(errorMessage, FabCarErrors.CAR_NOT_FOUND.toString()); + } + + Car car = genson.deserialize(carState, Car.class); + + Car newCar = new Car(car.getMake(), car.getModel(), car.getColor(), newOwner); + String newCarState = genson.serialize(newCar); + stub.putStringState(key, newCarState); + + return newCar; + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/CarTest.java b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/CarTest.java new file mode 100644 index 000000000..5c7b4fcff --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/CarTest.java @@ -0,0 +1,74 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.hyperledger.fabric.samples.fabcar; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +public final class CarTest { + + @Nested + class Equality { + + @Test + public void isReflexive() { + Car car = new Car("Toyota", "Prius", "blue", "Tomoko"); + + assertThat(car).isEqualTo(car); + } + + @Test + public void isSymmetric() { + Car carA = new Car("Toyota", "Prius", "blue", "Tomoko"); + Car carB = new Car("Toyota", "Prius", "blue", "Tomoko"); + + assertThat(carA).isEqualTo(carB); + assertThat(carB).isEqualTo(carA); + } + + @Test + public void isTransitive() { + Car carA = new Car("Toyota", "Prius", "blue", "Tomoko"); + Car carB = new Car("Toyota", "Prius", "blue", "Tomoko"); + Car carC = new Car("Toyota", "Prius", "blue", "Tomoko"); + + assertThat(carA).isEqualTo(carB); + assertThat(carB).isEqualTo(carC); + assertThat(carA).isEqualTo(carC); + } + + @Test + public void handlesInequality() { + Car carA = new Car("Toyota", "Prius", "blue", "Tomoko"); + Car carB = new Car("Ford", "Mustang", "red", "Brad"); + + assertThat(carA).isNotEqualTo(carB); + } + + @Test + public void handlesOtherObjects() { + Car carA = new Car("Toyota", "Prius", "blue", "Tomoko"); + String carB = "not a car"; + + assertThat(carA).isNotEqualTo(carB); + } + + @Test + public void handlesNull() { + Car car = new Car("Toyota", "Prius", "blue", "Tomoko"); + + assertThat(car).isNotEqualTo(null); + } + } + + @Test + public void toStringIdentifiesCar() { + Car car = new Car("Toyota", "Prius", "blue", "Tomoko"); + + assertThat(car.toString()).isEqualTo("Car@61a77e4f [make=Toyota, model=Prius, color=blue, owner=Tomoko]"); + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java new file mode 100644 index 000000000..0579a5380 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/java/src/test/java/org/hyperledger/fabric/samples/fabcar/FabCarTest.java @@ -0,0 +1,262 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.hyperledger.fabric.samples.fabcar; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.ThrowableAssert.catchThrowable; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.hyperledger.fabric.contract.Context; +import org.hyperledger.fabric.shim.ChaincodeException; +import org.hyperledger.fabric.shim.ChaincodeStub; +import org.hyperledger.fabric.shim.ledger.KeyValue; +import org.hyperledger.fabric.shim.ledger.QueryResultsIterator; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InOrder; + +public final class FabCarTest { + + private final class MockKeyValue implements KeyValue { + + private final String key; + private final String value; + + MockKeyValue(final String key, final String value) { + super(); + this.key = key; + this.value = value; + } + + @Override + public String getKey() { + return this.key; + } + + @Override + public String getStringValue() { + return this.value; + } + + @Override + public byte[] getValue() { + return this.value.getBytes(); + } + + } + + private final class MockCarResultsIterator implements QueryResultsIterator { + + private final List carList; + + MockCarResultsIterator() { + super(); + + carList = new ArrayList(); + + carList.add(new MockKeyValue("CAR000", + "{\"color\":\"blue\",\"make\":\"Toyota\",\"model\":\"Prius\",\"owner\":\"Tomoko\"}")); + carList.add(new MockKeyValue("CAR001", + "{\"color\":\"red\",\"make\":\"Ford\",\"model\":\"Mustang\",\"owner\":\"Brad\"}")); + carList.add(new MockKeyValue("CAR002", + "{\"color\":\"green\",\"make\":\"Hyundai\",\"model\":\"Tucson\",\"owner\":\"Jin Soo\"}")); + carList.add(new MockKeyValue("CAR007", + "{\"color\":\"violet\",\"make\":\"Fiat\",\"model\":\"Punto\",\"owner\":\"Pari\"}")); + carList.add(new MockKeyValue("CAR009", + "{\"color\":\"brown\",\"make\":\"Holden\",\"model\":\"Barina\",\"owner\":\"Shotaro\"}")); + } + + @Override + public Iterator iterator() { + return carList.iterator(); + } + + @Override + public void close() throws Exception { + // do nothing + } + + } + + @Test + public void invokeUnknownTransaction() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + + Throwable thrown = catchThrowable(() -> { + contract.unknownTransaction(ctx); + }); + + assertThat(thrown).isInstanceOf(ChaincodeException.class).hasNoCause() + .hasMessage("Undefined contract method called"); + assertThat(((ChaincodeException) thrown).getPayload()).isEqualTo(null); + + verifyZeroInteractions(ctx); + } + + @Nested + class InvokeQueryCarTransaction { + + @Test + public void whenCarExists() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + when(stub.getStringState("CAR000")) + .thenReturn("{\"color\":\"blue\",\"make\":\"Toyota\",\"model\":\"Prius\",\"owner\":\"Tomoko\"}"); + + Car car = contract.queryCar(ctx, "CAR000"); + + assertThat(car).isEqualTo(new Car("Toyota", "Prius", "blue", "Tomoko")); + } + + @Test + public void whenCarDoesNotExist() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + when(stub.getStringState("CAR000")).thenReturn(""); + + Throwable thrown = catchThrowable(() -> { + contract.queryCar(ctx, "CAR000"); + }); + + assertThat(thrown).isInstanceOf(ChaincodeException.class).hasNoCause() + .hasMessage("Car CAR000 does not exist"); + assertThat(((ChaincodeException) thrown).getPayload()).isEqualTo("CAR_NOT_FOUND".getBytes()); + } + } + + @Test + void invokeInitLedgerTransaction() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + + contract.initLedger(ctx); + + InOrder inOrder = inOrder(stub); + inOrder.verify(stub).putStringState("CAR000", + "{\"color\":\"blue\",\"make\":\"Toyota\",\"model\":\"Prius\",\"owner\":\"Tomoko\"}"); + inOrder.verify(stub).putStringState("CAR001", + "{\"color\":\"red\",\"make\":\"Ford\",\"model\":\"Mustang\",\"owner\":\"Brad\"}"); + inOrder.verify(stub).putStringState("CAR002", + "{\"color\":\"green\",\"make\":\"Hyundai\",\"model\":\"Tucson\",\"owner\":\"Jin Soo\"}"); + inOrder.verify(stub).putStringState("CAR003", + "{\"color\":\"yellow\",\"make\":\"Volkswagen\",\"model\":\"Passat\",\"owner\":\"Max\"}"); + inOrder.verify(stub).putStringState("CAR004", + "{\"color\":\"black\",\"make\":\"Tesla\",\"model\":\"S\",\"owner\":\"Adrian\"}"); + inOrder.verify(stub).putStringState("CAR005", + "{\"color\":\"purple\",\"make\":\"Peugeot\",\"model\":\"205\",\"owner\":\"Michel\"}"); + inOrder.verify(stub).putStringState("CAR006", + "{\"color\":\"white\",\"make\":\"Chery\",\"model\":\"S22L\",\"owner\":\"Aarav\"}"); + inOrder.verify(stub).putStringState("CAR007", + "{\"color\":\"violet\",\"make\":\"Fiat\",\"model\":\"Punto\",\"owner\":\"Pari\"}"); + inOrder.verify(stub).putStringState("CAR008", + "{\"color\":\"indigo\",\"make\":\"Tata\",\"model\":\"nano\",\"owner\":\"Valeria\"}"); + inOrder.verify(stub).putStringState("CAR009", + "{\"color\":\"brown\",\"make\":\"Holden\",\"model\":\"Barina\",\"owner\":\"Shotaro\"}"); + } + + @Nested + class InvokeCreateCarTransaction { + + @Test + public void whenCarExists() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + when(stub.getStringState("CAR000")) + .thenReturn("{\"color\":\"blue\",\"make\":\"Toyota\",\"model\":\"Prius\",\"owner\":\"Tomoko\"}"); + + Throwable thrown = catchThrowable(() -> { + contract.createCar(ctx, "CAR000", "Nissan", "Leaf", "green", "Siobhán"); + }); + + assertThat(thrown).isInstanceOf(ChaincodeException.class).hasNoCause() + .hasMessage("Car CAR000 already exists"); + assertThat(((ChaincodeException) thrown).getPayload()).isEqualTo("CAR_ALREADY_EXISTS".getBytes()); + } + + @Test + public void whenCarDoesNotExist() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + when(stub.getStringState("CAR000")).thenReturn(""); + + Car car = contract.createCar(ctx, "CAR000", "Nissan", "Leaf", "green", "Siobhán"); + + assertThat(car).isEqualTo(new Car("Nissan", "Leaf", "green", "Siobhán")); + } + } + + @Test + void invokeQueryAllCarsTransaction() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + when(stub.getStateByRange("CAR0", "CAR999")).thenReturn(new MockCarResultsIterator()); + + Car[] cars = contract.queryAllCars(ctx); + + final List expectedCars = new ArrayList(); + expectedCars.add(new Car("Toyota", "Prius", "blue", "Tomoko")); + expectedCars.add(new Car("Ford", "Mustang", "red", "Brad")); + expectedCars.add(new Car("Hyundai", "Tucson", "green", "Jin Soo")); + expectedCars.add(new Car("Fiat", "Punto", "violet", "Pari")); + expectedCars.add(new Car("Holden", "Barina", "brown", "Shotaro")); + + assertThat(cars).containsExactlyElementsOf(expectedCars); + } + + @Nested + class ChangeCarOwnerTransaction { + + @Test + public void whenCarExists() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + when(stub.getStringState("CAR000")) + .thenReturn("{\"color\":\"blue\",\"make\":\"Toyota\",\"model\":\"Prius\",\"owner\":\"Tomoko\"}"); + + Car car = contract.changeCarOwner(ctx, "CAR000", "Dr Evil"); + + assertThat(car).isEqualTo(new Car("Toyota", "Prius", "blue", "Dr Evil")); + } + + @Test + public void whenCarDoesNotExist() { + FabCar contract = new FabCar(); + Context ctx = mock(Context.class); + ChaincodeStub stub = mock(ChaincodeStub.class); + when(ctx.getStub()).thenReturn(stub); + when(stub.getStringState("CAR000")).thenReturn(""); + + Throwable thrown = catchThrowable(() -> { + contract.changeCarOwner(ctx, "CAR000", "Dr Evil"); + }); + + assertThat(thrown).isInstanceOf(ChaincodeException.class).hasNoCause() + .hasMessage("Car CAR000 does not exist"); + assertThat(((ChaincodeException) thrown).getPayload()).isEqualTo("CAR_NOT_FOUND".getBytes()); + } + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript-low-level/fabcar.js b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript-low-level/fabcar.js new file mode 100644 index 000000000..c8473c371 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript-low-level/fabcar.js @@ -0,0 +1,193 @@ +/* +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +*/ + +'use strict'; +const shim = require('fabric-shim'); +const util = require('util'); + +let Chaincode = class { + + // The Init method is called when the Smart Contract 'fabcar' is instantiated by the blockchain network + // Best practice is to have any Ledger initialization in separate function -- see initLedger() + async Init(stub) { + console.info('=========== Instantiated fabcar chaincode ==========='); + return shim.success(); + } + + // The Invoke method is called as a result of an application request to run the Smart Contract + // 'fabcar'. The calling application program has also specified the particular smart contract + // function to be called, with arguments + async Invoke(stub) { + let ret = stub.getFunctionAndParameters(); + console.info(ret); + + let method = this[ret.fcn]; + if (!method) { + console.error('no function of name:' + ret.fcn + ' found'); + throw new Error('Received unknown function ' + ret.fcn + ' invocation'); + } + try { + let payload = await method(stub, ret.params); + return shim.success(payload); + } catch (err) { + console.log(err); + return shim.error(err); + } + } + + async queryCar(stub, args) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting CarNumber ex: CAR01'); + } + let carNumber = args[0]; + + let carAsBytes = await stub.getState(carNumber); //get the car from chaincode state + if (!carAsBytes || carAsBytes.toString().length <= 0) { + throw new Error(carNumber + ' does not exist: '); + } + console.log(carAsBytes.toString()); + return carAsBytes; + } + + async initLedger(stub, args) { + console.info('============= START : Initialize Ledger ==========='); + let cars = []; + cars.push({ + make: 'Toyota', + model: 'Prius', + color: 'blue', + owner: 'Tomoko' + }); + cars.push({ + make: 'Ford', + model: 'Mustang', + color: 'red', + owner: 'Brad' + }); + cars.push({ + make: 'Hyundai', + model: 'Tucson', + color: 'green', + owner: 'Jin Soo' + }); + cars.push({ + make: 'Volkswagen', + model: 'Passat', + color: 'yellow', + owner: 'Max' + }); + cars.push({ + make: 'Tesla', + model: 'S', + color: 'black', + owner: 'Adriana' + }); + cars.push({ + make: 'Peugeot', + model: '205', + color: 'purple', + owner: 'Michel' + }); + cars.push({ + make: 'Chery', + model: 'S22L', + color: 'white', + owner: 'Aarav' + }); + cars.push({ + make: 'Fiat', + model: 'Punto', + color: 'violet', + owner: 'Pari' + }); + cars.push({ + make: 'Tata', + model: 'Nano', + color: 'indigo', + owner: 'Valeria' + }); + cars.push({ + make: 'Holden', + model: 'Barina', + color: 'brown', + owner: 'Shotaro' + }); + + for (let i = 0; i < cars.length; i++) { + cars[i].docType = 'car'; + await stub.putState('CAR' + i, Buffer.from(JSON.stringify(cars[i]))); + console.info('Added <--> ', cars[i]); + } + console.info('============= END : Initialize Ledger ==========='); + } + + async createCar(stub, args) { + console.info('============= START : Create Car ==========='); + if (args.length != 5) { + throw new Error('Incorrect number of arguments. Expecting 5'); + } + + var car = { + docType: 'car', + make: args[1], + model: args[2], + color: args[3], + owner: args[4] + }; + + await stub.putState(args[0], Buffer.from(JSON.stringify(car))); + console.info('============= END : Create Car ==========='); + } + + async queryAllCars(stub, args) { + + let startKey = 'CAR0'; + let endKey = 'CAR999'; + + let iterator = await stub.getStateByRange(startKey, endKey); + + let allResults = []; + while (true) { + let res = await iterator.next(); + + if (res.value && res.value.value.toString()) { + let jsonRes = {}; + console.log(res.value.value.toString('utf8')); + + jsonRes.Key = res.value.key; + try { + jsonRes.Record = JSON.parse(res.value.value.toString('utf8')); + } catch (err) { + console.log(err); + jsonRes.Record = res.value.value.toString('utf8'); + } + allResults.push(jsonRes); + } + if (res.done) { + console.log('end of data'); + await iterator.close(); + console.info(allResults); + return Buffer.from(JSON.stringify(allResults)); + } + } + } + + async changeCarOwner(stub, args) { + console.info('============= START : changeCarOwner ==========='); + if (args.length != 2) { + throw new Error('Incorrect number of arguments. Expecting 2'); + } + + let carAsBytes = await stub.getState(args[0]); + let car = JSON.parse(carAsBytes); + car.owner = args[1]; + + await stub.putState(args[0], Buffer.from(JSON.stringify(car))); + console.info('============= END : changeCarOwner ==========='); + } +}; + +shim.start(new Chaincode()); diff --git a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/node/package.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript-low-level/package.json similarity index 62% rename from app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/node/package.json rename to app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript-low-level/package.json index 23da453b2..9ab05de60 100644 --- a/app/platform/fabric/e2e-test/fabric-samples/balance-transfer/artifacts/src/github.com/example_cc/node/package.json +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript-low-level/package.json @@ -1,13 +1,13 @@ { - "name": "example_cc", + "name": "fabcar", "version": "1.0.0", - "description": "node-js version of example_02.go chaincode", + "description": "fabcar chaincode implemented in node.js", "engines": { "node": ">=8.4.0", "npm": ">=5.3.0" }, "scripts": { - "start": "node example_cc.js" + "start": "node fabcar.js" }, "engine-strict": true, "license": "Apache-2.0", diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.editorconfig b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.editorconfig new file mode 100755 index 000000000..75a13be20 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.editorconfig @@ -0,0 +1,16 @@ +# +# SPDX-License-Identifier: Apache-2.0 +# + +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintignore b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintignore new file mode 100644 index 000000000..159584701 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintignore @@ -0,0 +1,5 @@ +# +# SPDX-License-Identifier: Apache-2.0 +# + +coverage diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintrc.js b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintrc.js new file mode 100644 index 000000000..6d5751a5d --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.eslintrc.js @@ -0,0 +1,38 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +module.exports = { + env: { + node: true, + mocha: true + }, + parserOptions: { + ecmaVersion: 8, + sourceType: 'script' + }, + extends: "eslint:recommended", + rules: { + indent: ['error', 4], + 'linebreak-style': ['error', 'unix'], + quotes: ['error', 'single'], + semi: ['error', 'always'], + 'no-unused-vars': ['error', { args: 'none' }], + 'no-console': 'off', + curly: 'error', + eqeqeq: 'error', + 'no-throw-literal': 'error', + strict: 'error', + 'no-var': 'error', + 'dot-notation': 'error', + 'no-tabs': 'error', + 'no-trailing-spaces': 'error', + 'no-use-before-define': 'error', + 'no-useless-call': 'error', + 'no-with': 'error', + 'operator-linebreak': 'error', + yoda: 'error', + 'quote-props': ['error', 'as-needed'], + 'no-constant-condition': ["error", { "checkLoops": false }] + } +}; diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.gitignore b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.gitignore new file mode 100644 index 000000000..a00ca9415 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/.gitignore @@ -0,0 +1,77 @@ +# +# SPDX-License-Identifier: Apache-2.0 +# + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/index.js b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/index.js new file mode 100644 index 000000000..f5911c8c0 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/index.js @@ -0,0 +1,10 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +'use strict'; + +const FabCar = require('./lib/fabcar'); + +module.exports.FabCar = FabCar; +module.exports.contracts = [ FabCar ]; diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/lib/fabcar.js b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/lib/fabcar.js new file mode 100644 index 000000000..53f2faefa --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/lib/fabcar.js @@ -0,0 +1,156 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +'use strict'; + +const { Contract } = require('fabric-contract-api'); + +class FabCar extends Contract { + + async initLedger(ctx) { + console.info('============= START : Initialize Ledger ==========='); + const cars = [ + { + color: 'blue', + make: 'Toyota', + model: 'Prius', + owner: 'Tomoko', + }, + { + color: 'red', + make: 'Ford', + model: 'Mustang', + owner: 'Brad', + }, + { + color: 'green', + make: 'Hyundai', + model: 'Tucson', + owner: 'Jin Soo', + }, + { + color: 'yellow', + make: 'Volkswagen', + model: 'Passat', + owner: 'Max', + }, + { + color: 'black', + make: 'Tesla', + model: 'S', + owner: 'Adriana', + }, + { + color: 'purple', + make: 'Peugeot', + model: '205', + owner: 'Michel', + }, + { + color: 'white', + make: 'Chery', + model: 'S22L', + owner: 'Aarav', + }, + { + color: 'violet', + make: 'Fiat', + model: 'Punto', + owner: 'Pari', + }, + { + color: 'indigo', + make: 'Tata', + model: 'Nano', + owner: 'Valeria', + }, + { + color: 'brown', + make: 'Holden', + model: 'Barina', + owner: 'Shotaro', + }, + ]; + + for (let i = 0; i < cars.length; i++) { + cars[i].docType = 'car'; + await ctx.stub.putState('CAR' + i, Buffer.from(JSON.stringify(cars[i]))); + console.info('Added <--> ', cars[i]); + } + console.info('============= END : Initialize Ledger ==========='); + } + + async queryCar(ctx, carNumber) { + const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state + if (!carAsBytes || carAsBytes.length === 0) { + throw new Error(`${carNumber} does not exist`); + } + console.log(carAsBytes.toString()); + return carAsBytes.toString(); + } + + async createCar(ctx, carNumber, make, model, color, owner) { + console.info('============= START : Create Car ==========='); + + const car = { + color, + docType: 'car', + make, + model, + owner, + }; + + await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car))); + console.info('============= END : Create Car ==========='); + } + + async queryAllCars(ctx) { + const startKey = 'CAR0'; + const endKey = 'CAR999'; + + const iterator = await ctx.stub.getStateByRange(startKey, endKey); + + const allResults = []; + while (true) { + const res = await iterator.next(); + + if (res.value && res.value.value.toString()) { + console.log(res.value.value.toString('utf8')); + + const Key = res.value.key; + let Record; + try { + Record = JSON.parse(res.value.value.toString('utf8')); + } catch (err) { + console.log(err); + Record = res.value.value.toString('utf8'); + } + allResults.push({ Key, Record }); + } + if (res.done) { + console.log('end of data'); + await iterator.close(); + console.info(allResults); + return JSON.stringify(allResults); + } + } + } + + async changeCarOwner(ctx, carNumber, newOwner) { + console.info('============= START : changeCarOwner ==========='); + + const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state + if (!carAsBytes || carAsBytes.length === 0) { + throw new Error(`${carNumber} does not exist`); + } + const car = JSON.parse(carAsBytes.toString()); + car.owner = newOwner; + + await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car))); + console.info('============= END : changeCarOwner ==========='); + } + +} + +module.exports = FabCar; diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/package.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/package.json new file mode 100644 index 000000000..abe745587 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/javascript/package.json @@ -0,0 +1,47 @@ +{ + "name": "fabcar", + "version": "1.0.0", + "description": "FabCar contract implemented in JavaScript", + "main": "index.js", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "scripts": { + "lint": "eslint .", + "pretest": "npm run lint", + "test": "nyc mocha --recursive", + "start": "fabric-chaincode-node start" + }, + "engineStrict": true, + "author": "Hyperledger", + "license": "Apache-2.0", + "dependencies": { + "fabric-contract-api": "~1.4.0", + "fabric-shim": "~1.4.0" + }, + "devDependencies": { + "chai": "^4.1.2", + "eslint": "^4.19.1", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "sinon": "^6.0.0", + "sinon-chai": "^3.2.0" + }, + "nyc": { + "exclude": [ + "coverage/**", + "test/**" + ], + "reporter": [ + "text-summary", + "html" + ], + "all": true, + "check-coverage": true, + "statements": 100, + "branches": 100, + "functions": 100, + "lines": 100 + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.editorconfig b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.editorconfig new file mode 100755 index 000000000..75a13be20 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.editorconfig @@ -0,0 +1,16 @@ +# +# SPDX-License-Identifier: Apache-2.0 +# + +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.gitignore b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.gitignore new file mode 100644 index 000000000..69d6a33bb --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/.gitignore @@ -0,0 +1,81 @@ +# +# SPDX-License-Identifier: Apache-2.0 +# + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +# Compiled TypeScript files +dist + diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/package.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/package.json new file mode 100644 index 000000000..ba2d5753d --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/package.json @@ -0,0 +1,62 @@ +{ + "name": "fabcar", + "version": "1.0.0", + "description": "FabCar contract implemented in TypeScript", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "scripts": { + "lint": "tslint -c tslint.json 'src/**/*.ts'", + "pretest": "npm run lint", + "test": "nyc mocha -r ts-node/register src/**/*.spec.ts", + "start": "fabric-chaincode-node start", + "build": "tsc", + "build:watch": "tsc -w", + "prepublishOnly": "npm run build" + }, + "engineStrict": true, + "author": "Hyperledger", + "license": "Apache-2.0", + "dependencies": { + "fabric-contract-api": "~1.4.0", + "fabric-shim": "~1.4.0" + }, + "devDependencies": { + "@types/chai": "^4.1.7", + "@types/mocha": "^5.2.5", + "@types/node": "^10.12.10", + "@types/sinon": "^5.0.7", + "@types/sinon-chai": "^3.2.1", + "chai": "^4.2.0", + "mocha": "^5.2.0", + "nyc": "^13.1.0", + "sinon": "^7.1.1", + "sinon-chai": "^3.3.0", + "ts-node": "^7.0.1", + "tslint": "^5.11.0", + "typescript": "^3.1.6" + }, + "nyc": { + "extension": [ + ".ts", + ".tsx" + ], + "exclude": [ + "coverage/**", + "dist/**" + ], + "reporter": [ + "text-summary", + "html" + ], + "all": true, + "check-coverage": true, + "statements": 100, + "branches": 100, + "functions": 100, + "lines": 100 + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/car.ts b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/car.ts new file mode 100644 index 000000000..ba1016253 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/car.ts @@ -0,0 +1,11 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +export class Car { + public docType?: string; + public color: string; + public make: string; + public model: string; + public owner: string; +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/fabcar.ts b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/fabcar.ts new file mode 100644 index 000000000..de72b0394 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/fabcar.ts @@ -0,0 +1,153 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +import { Context, Contract } from 'fabric-contract-api'; +import { Car } from './car'; + +export class FabCar extends Contract { + + public async initLedger(ctx: Context) { + console.info('============= START : Initialize Ledger ==========='); + const cars: Car[] = [ + { + color: 'blue', + make: 'Toyota', + model: 'Prius', + owner: 'Tomoko', + }, + { + color: 'red', + make: 'Ford', + model: 'Mustang', + owner: 'Brad', + }, + { + color: 'green', + make: 'Hyundai', + model: 'Tucson', + owner: 'Jin Soo', + }, + { + color: 'yellow', + make: 'Volkswagen', + model: 'Passat', + owner: 'Max', + }, + { + color: 'black', + make: 'Tesla', + model: 'S', + owner: 'Adriana', + }, + { + color: 'purple', + make: 'Peugeot', + model: '205', + owner: 'Michel', + }, + { + color: 'white', + make: 'Chery', + model: 'S22L', + owner: 'Aarav', + }, + { + color: 'violet', + make: 'Fiat', + model: 'Punto', + owner: 'Pari', + }, + { + color: 'indigo', + make: 'Tata', + model: 'Nano', + owner: 'Valeria', + }, + { + color: 'brown', + make: 'Holden', + model: 'Barina', + owner: 'Shotaro', + }, + ]; + + for (let i = 0; i < cars.length; i++) { + cars[i].docType = 'car'; + await ctx.stub.putState('CAR' + i, Buffer.from(JSON.stringify(cars[i]))); + console.info('Added <--> ', cars[i]); + } + console.info('============= END : Initialize Ledger ==========='); + } + + public async queryCar(ctx: Context, carNumber: string): Promise { + const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state + if (!carAsBytes || carAsBytes.length === 0) { + throw new Error(`${carNumber} does not exist`); + } + console.log(carAsBytes.toString()); + return carAsBytes.toString(); + } + + public async createCar(ctx: Context, carNumber: string, make: string, model: string, color: string, owner: string) { + console.info('============= START : Create Car ==========='); + + const car: Car = { + color, + docType: 'car', + make, + model, + owner, + }; + + await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car))); + console.info('============= END : Create Car ==========='); + } + + public async queryAllCars(ctx: Context): Promise { + const startKey = 'CAR0'; + const endKey = 'CAR999'; + + const iterator = await ctx.stub.getStateByRange(startKey, endKey); + + const allResults = []; + while (true) { + const res = await iterator.next(); + + if (res.value && res.value.value.toString()) { + console.log(res.value.value.toString('utf8')); + + const Key = res.value.key; + let Record; + try { + Record = JSON.parse(res.value.value.toString('utf8')); + } catch (err) { + console.log(err); + Record = res.value.value.toString('utf8'); + } + allResults.push({ Key, Record }); + } + if (res.done) { + console.log('end of data'); + await iterator.close(); + console.info(allResults); + return JSON.stringify(allResults); + } + } + } + + public async changeCarOwner(ctx: Context, carNumber: string, newOwner: string) { + console.info('============= START : changeCarOwner ==========='); + + const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state + if (!carAsBytes || carAsBytes.length === 0) { + throw new Error(`${carNumber} does not exist`); + } + const car: Car = JSON.parse(carAsBytes.toString()); + car.owner = newOwner; + + await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car))); + console.info('============= END : changeCarOwner ==========='); + } + +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/index.ts b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/index.ts new file mode 100644 index 000000000..c0a2fcf67 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/src/index.ts @@ -0,0 +1,8 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +import { FabCar } from './fabcar'; +export { FabCar } from './fabcar'; + +export const contracts: any[] = [ FabCar ]; diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tsconfig.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tsconfig.json new file mode 100644 index 000000000..8c96ea071 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "outDir": "dist", + "target": "es2017", + "moduleResolution": "node", + "module": "commonjs", + "declaration": true, + "sourceMap": true + }, + "include": [ + "./src/**/*" + ], + "exclude": [ + "./src/**/*.spec.ts" + ] +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tslint.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tslint.json new file mode 100644 index 000000000..33ccbf3c6 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/fabcar/typescript/tslint.json @@ -0,0 +1,21 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "indent": [true, "spaces", 4], + "linebreak-style": [true, "LF"], + "quotemark": [true, "single"], + "semicolon": [true, "always"], + "no-console": false, + "curly": true, + "triple-equals": true, + "no-string-throw": true, + "no-var-keyword": true, + "no-trailing-whitespace": true, + "object-literal-key-quotes": [true, "as-needed"] + }, + "rulesDirectory": [] +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/META-INF/statedb/couchdb/indexes/indexOwner.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/META-INF/statedb/couchdb/indexes/indexOwner.json new file mode 100644 index 000000000..305f09044 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/META-INF/statedb/couchdb/indexes/indexOwner.json @@ -0,0 +1 @@ +{"index":{"fields":["docType","owner"]},"ddoc":"indexOwnerDoc", "name":"indexOwner","type":"json"} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/marbles_chaincode.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/marbles_chaincode.go new file mode 100644 index 000000000..2ed3efd67 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/go/marbles_chaincode.go @@ -0,0 +1,755 @@ +/* + SPDX-License-Identifier: Apache-2.0 +*/ + +// ====CHAINCODE EXECUTION SAMPLES (CLI) ================== + +// ==== Invoke marbles ==== +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble2","red","50","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble3","blue","70","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarble","marble2","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarblesBasedOnColor","blue","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["delete","marble1"]}' + +// ==== Query marbles ==== +// peer chaincode query -C myc1 -n marbles -c '{"Args":["readMarble","marble1"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getMarblesByRange","marble1","marble3"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getHistoryForMarble","marble1"]}' + +// Rich Query (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesByOwner","tom"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +// Rich Query with Pagination (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesWithPagination","{\"selector\":{\"owner\":\"tom\"}}","3",""]}' + +// INDEXES TO SUPPORT COUCHDB RICH QUERIES +// +// Indexes in CouchDB are required in order to make JSON queries efficient and are required for +// any JSON query with a sort. As of Hyperledger Fabric 1.1, indexes may be packaged alongside +// chaincode in a META-INF/statedb/couchdb/indexes directory. Each index must be defined in its own +// text file with extension *.json with the index definition formatted in JSON following the +// CouchDB index JSON syntax as documented at: +// http://docs.couchdb.org/en/2.1.1/api/database/find.html#db-index +// +// This marbles02 example chaincode demonstrates a packaged +// index which you can find in META-INF/statedb/couchdb/indexes/indexOwner.json. +// For deployment of chaincode to production environments, it is recommended +// to define any indexes alongside chaincode so that the chaincode and supporting indexes +// are deployed automatically as a unit, once the chaincode has been installed on a peer and +// instantiated on a channel. See Hyperledger Fabric documentation for more details. +// +// If you have access to the your peer's CouchDB state database in a development environment, +// you may want to iteratively test various indexes in support of your chaincode queries. You +// can use the CouchDB Fauxton interface or a command line curl utility to create and update +// indexes. Then once you finalize an index, include the index definition alongside your +// chaincode in the META-INF/statedb/couchdb/indexes directory, for packaging and deployment +// to managed environments. +// +// In the examples below you can find index definitions that support marbles02 +// chaincode queries, along with the syntax that you can use in development environments +// to create the indexes in the CouchDB Fauxton interface or a curl command line utility. +// + +//Example hostname:port configurations to access CouchDB. +// +//To access CouchDB docker container from within another docker container or from vagrant environments: +// http://couchdb:5984/ +// +//Inside couchdb docker container +// http://127.0.0.1:5984/ + +// Index for docType, owner. +// +// Example curl command line to define index in the CouchDB channel_chaincode database +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[\"docType\",\"owner\"]},\"name\":\"indexOwner\",\"ddoc\":\"indexOwnerDoc\",\"type\":\"json\"}" http://hostname:port/myc1_marbles/_index +// + +// Index for docType, owner, size (descending order). +// +// Example curl command line to define index in the CouchDB channel_chaincode database +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[{\"size\":\"desc\"},{\"docType\":\"desc\"},{\"owner\":\"desc\"}]},\"ddoc\":\"indexSizeSortDoc\", \"name\":\"indexSizeSortDesc\",\"type\":\"json\"}" http://hostname:port/myc1_marbles/_index + +// Rich Query with index design doc and index name specified (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":\"marble\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}"]}' + +// Rich Query with index design doc specified only (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":{\"$eq\":\"marble\"},\"owner\":{\"$eq\":\"tom\"},\"size\":{\"$gt\":0}},\"fields\":[\"docType\",\"owner\",\"size\"],\"sort\":[{\"size\":\"desc\"}],\"use_index\":\"_design/indexSizeSortDoc\"}"]}' + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "strconv" + "strings" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +type marble struct { + ObjectType string `json:"docType"` //docType is used to distinguish the various types of objects in state database + Name string `json:"name"` //the fieldtags are needed to keep case from bouncing around + Color string `json:"color"` + Size int `json:"size"` + Owner string `json:"owner"` +} + +// =================================================================================== +// Main +// =================================================================================== +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} + +// Init initializes chaincode +// =========================== +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke - Our entry point for Invocations +// ======================================== +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + fmt.Println("invoke is running " + function) + + // Handle different functions + if function == "initMarble" { //create a new marble + return t.initMarble(stub, args) + } else if function == "transferMarble" { //change owner of a specific marble + return t.transferMarble(stub, args) + } else if function == "transferMarblesBasedOnColor" { //transfer all marbles of a certain color + return t.transferMarblesBasedOnColor(stub, args) + } else if function == "delete" { //delete a marble + return t.delete(stub, args) + } else if function == "readMarble" { //read a marble + return t.readMarble(stub, args) + } else if function == "queryMarblesByOwner" { //find marbles for owner X using rich query + return t.queryMarblesByOwner(stub, args) + } else if function == "queryMarbles" { //find marbles based on an ad hoc rich query + return t.queryMarbles(stub, args) + } else if function == "getHistoryForMarble" { //get history of values for a marble + return t.getHistoryForMarble(stub, args) + } else if function == "getMarblesByRange" { //get marbles based on range query + return t.getMarblesByRange(stub, args) + } else if function == "getMarblesByRangeWithPagination" { + return t.getMarblesByRangeWithPagination(stub, args) + } else if function == "queryMarblesWithPagination" { + return t.queryMarblesWithPagination(stub, args) + } + + fmt.Println("invoke did not find func: " + function) //error + return shim.Error("Received unknown function invocation") +} + +// ============================================================ +// initMarble - create a new marble, store into chaincode state +// ============================================================ +func (t *SimpleChaincode) initMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var err error + + // 0 1 2 3 + // "asdf", "blue", "35", "bob" + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // ==== Input sanitation ==== + fmt.Println("- start init marble") + if len(args[0]) <= 0 { + return shim.Error("1st argument must be a non-empty string") + } + if len(args[1]) <= 0 { + return shim.Error("2nd argument must be a non-empty string") + } + if len(args[2]) <= 0 { + return shim.Error("3rd argument must be a non-empty string") + } + if len(args[3]) <= 0 { + return shim.Error("4th argument must be a non-empty string") + } + marbleName := args[0] + color := strings.ToLower(args[1]) + owner := strings.ToLower(args[3]) + size, err := strconv.Atoi(args[2]) + if err != nil { + return shim.Error("3rd argument must be a numeric string") + } + + // ==== Check if marble already exists ==== + marbleAsBytes, err := stub.GetState(marbleName) + if err != nil { + return shim.Error("Failed to get marble: " + err.Error()) + } else if marbleAsBytes != nil { + fmt.Println("This marble already exists: " + marbleName) + return shim.Error("This marble already exists: " + marbleName) + } + + // ==== Create marble object and marshal to JSON ==== + objectType := "marble" + marble := &marble{objectType, marbleName, color, size, owner} + marbleJSONasBytes, err := json.Marshal(marble) + if err != nil { + return shim.Error(err.Error()) + } + //Alternatively, build the marble json string manually if you don't want to use struct marshalling + //marbleJSONasString := `{"docType":"Marble", "name": "` + marbleName + `", "color": "` + color + `", "size": ` + strconv.Itoa(size) + `, "owner": "` + owner + `"}` + //marbleJSONasBytes := []byte(str) + + // === Save marble to state === + err = stub.PutState(marbleName, marbleJSONasBytes) + if err != nil { + return shim.Error(err.Error()) + } + + // ==== Index the marble to enable color-based range queries, e.g. return all blue marbles ==== + // An 'index' is a normal key/value entry in state. + // The key is a composite key, with the elements that you want to range query on listed first. + // In our case, the composite key is based on indexName~color~name. + // This will enable very efficient state range queries based on composite keys matching indexName~color~* + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marble.Color, marble.Name}) + if err != nil { + return shim.Error(err.Error()) + } + // Save index entry to state. Only the key name is needed, no need to store a duplicate copy of the marble. + // Note - passing a 'nil' value will effectively delete the key from state, therefore we pass null character as value + value := []byte{0x00} + stub.PutState(colorNameIndexKey, value) + + // ==== Marble saved and indexed. Return success ==== + fmt.Println("- end init marble") + return shim.Success(nil) +} + +// =============================================== +// readMarble - read a marble from chaincode state +// =============================================== +func (t *SimpleChaincode) readMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var name, jsonResp string + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the marble to query") + } + + name = args[0] + valAsbytes, err := stub.GetState(name) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + name + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + name + "\"}" + return shim.Error(jsonResp) + } + + return shim.Success(valAsbytes) +} + +// ================================================== +// delete - remove a marble key/value pair from state +// ================================================== +func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var jsonResp string + var marbleJSON marble + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + marbleName := args[0] + + // to maintain the color~name index, we need to read the marble first and get its color + valAsbytes, err := stub.GetState(marbleName) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + marbleName + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = json.Unmarshal([]byte(valAsbytes), &marbleJSON) + if err != nil { + jsonResp = "{\"Error\":\"Failed to decode JSON of: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = stub.DelState(marbleName) //remove the marble from chaincode state + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + + // maintain the index + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marbleJSON.Color, marbleJSON.Name}) + if err != nil { + return shim.Error(err.Error()) + } + + // Delete index entry to state. + err = stub.DelState(colorNameIndexKey) + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + return shim.Success(nil) +} + +// =========================================================== +// transfer a marble by setting a new owner name on the marble +// =========================================================== +func (t *SimpleChaincode) transferMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "name", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + marbleName := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarble ", marbleName, newOwner) + + marbleAsBytes, err := stub.GetState(marbleName) + if err != nil { + return shim.Error("Failed to get marble:" + err.Error()) + } else if marbleAsBytes == nil { + return shim.Error("Marble does not exist") + } + + marbleToTransfer := marble{} + err = json.Unmarshal(marbleAsBytes, &marbleToTransfer) //unmarshal it aka JSON.parse() + if err != nil { + return shim.Error(err.Error()) + } + marbleToTransfer.Owner = newOwner //change the owner + + marbleJSONasBytes, _ := json.Marshal(marbleToTransfer) + err = stub.PutState(marbleName, marbleJSONasBytes) //rewrite the marble + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Println("- end transferMarble (success)") + return shim.Success(nil) +} + +// =========================================================================================== +// constructQueryResponseFromIterator constructs a JSON array containing query results from +// a given result iterator +// =========================================================================================== +func constructQueryResponseFromIterator(resultsIterator shim.StateQueryIteratorInterface) (*bytes.Buffer, error) { + // buffer is a JSON array containing QueryResults + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return nil, err + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + return &buffer, nil +} + +// =========================================================================================== +// addPaginationMetadataToQueryResults adds QueryResponseMetadata, which contains pagination +// info, to the constructed query results +// =========================================================================================== +func addPaginationMetadataToQueryResults(buffer *bytes.Buffer, responseMetadata *pb.QueryResponseMetadata) *bytes.Buffer { + + buffer.WriteString("[{\"ResponseMetadata\":{\"RecordsCount\":") + buffer.WriteString("\"") + buffer.WriteString(fmt.Sprintf("%v", responseMetadata.FetchedRecordsCount)) + buffer.WriteString("\"") + buffer.WriteString(", \"Bookmark\":") + buffer.WriteString("\"") + buffer.WriteString(responseMetadata.Bookmark) + buffer.WriteString("\"}}]") + + return buffer +} + +// =========================================================================================== +// getMarblesByRange performs a range query based on the start and end keys provided. + +// Read-only function results are not typically submitted to ordering. If the read-only +// results are submitted to ordering, or if the query is used in an update transaction +// and submitted to ordering, then the committing peers will re-execute to guarantee that +// result sets are stable between endorsement time and commit time. The transaction is +// invalidated by the committing peers if the result set has changed between endorsement +// time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) getMarblesByRange(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + startKey := args[0] + endKey := args[1] + + resultsIterator, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Printf("- getMarblesByRange queryResult:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} + +// ==== Example: GetStateByPartialCompositeKey/RangeQuery ========================================= +// transferMarblesBasedOnColor will transfer marbles of a given color to a certain new owner. +// Uses a GetStateByPartialCompositeKey (range query) against color~name 'index'. +// Committing peers will re-execute range queries to guarantee that result sets are stable +// between endorsement time and commit time. The transaction is invalidated by the +// committing peers if the result set has changed between endorsement time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) transferMarblesBasedOnColor(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "color", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + color := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarblesBasedOnColor ", color, newOwner) + + // Query the color~name index by color + // This will execute a key range query on all keys starting with 'color' + coloredMarbleResultsIterator, err := stub.GetStateByPartialCompositeKey("color~name", []string{color}) + if err != nil { + return shim.Error(err.Error()) + } + defer coloredMarbleResultsIterator.Close() + + // Iterate through result set and for each marble found, transfer to newOwner + var i int + for i = 0; coloredMarbleResultsIterator.HasNext(); i++ { + // Note that we don't get the value (2nd return variable), we'll just get the marble name from the composite key + responseRange, err := coloredMarbleResultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + + // get the color and name from color~name composite key + objectType, compositeKeyParts, err := stub.SplitCompositeKey(responseRange.Key) + if err != nil { + return shim.Error(err.Error()) + } + returnedColor := compositeKeyParts[0] + returnedMarbleName := compositeKeyParts[1] + fmt.Printf("- found a marble from index:%s color:%s name:%s\n", objectType, returnedColor, returnedMarbleName) + + // Now call the transfer function for the found marble. + // Re-use the same function that is used to transfer individual marbles + response := t.transferMarble(stub, []string{returnedMarbleName, newOwner}) + // if the transfer failed break out of loop and return error + if response.Status != shim.OK { + return shim.Error("Transfer failed: " + response.Message) + } + } + + responsePayload := fmt.Sprintf("Transferred %d %s marbles to %s", i, color, newOwner) + fmt.Println("- end transferMarblesBasedOnColor: " + responsePayload) + return shim.Success([]byte(responsePayload)) +} + +// =======Rich queries ========================================================================= +// Two examples of rich queries are provided below (parameterized query and ad hoc query). +// Rich queries pass a query string to the state database. +// Rich queries are only supported by state database implementations +// that support rich query (e.g. CouchDB). +// The query string is in the syntax of the underlying state database. +// With rich queries there is no guarantee that the result set hasn't changed between +// endorsement time and commit time, aka 'phantom reads'. +// Therefore, rich queries should not be used in update transactions, unless the +// application handles the possibility of result set changes between endorsement and commit time. +// Rich queries can be used for point-in-time queries against a peer. +// ============================================================================================ + +// ===== Example: Parameterized rich query ================================================= +// queryMarblesByOwner queries for marbles based on a passed in owner. +// This is an example of a parameterized query where the query logic is baked into the chaincode, +// and accepting a single query parameter (owner). +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarblesByOwner(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "bob" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + owner := strings.ToLower(args[0]) + + queryString := fmt.Sprintf("{\"selector\":{\"docType\":\"marble\",\"owner\":\"%s\"}}", owner) + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ===== Example: Ad hoc rich query ======================================================== +// queryMarbles uses a query string to perform a query for marbles. +// Query string matching state database syntax is passed in and executed as is. +// Supports ad hoc queries that can be defined at runtime by the client. +// If this is not desired, follow the queryMarblesForOwner example for parameterized queries. +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarbles(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "queryString" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + queryString := args[0] + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ========================================================================================= +// getQueryResultForQueryString executes the passed in query string. +// Result set is built and returned as a byte array containing the JSON results. +// ========================================================================================= +func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) { + + fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, err := stub.GetQueryResult(queryString) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return nil, err + } + + fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String()) + + return buffer.Bytes(), nil +} + +// ====== Pagination ========================================================================= +// Pagination provides a method to retrieve records with a defined pagesize and +// start point (bookmark). An empty string bookmark defines the first "page" of a query +// result. Paginated queries return a bookmark that can be used in +// the next query to retrieve the next page of results. Paginated queries extend +// rich queries and range queries to include a pagesize and bookmark. +// +// Two examples are provided in this example. The first is getMarblesByRangeWithPagination +// which executes a paginated range query. +// The second example is a paginated query for rich ad-hoc queries. +// ========================================================================================= + +// ====== Example: Pagination with Range Query =============================================== +// getMarblesByRangeWithPagination performs a range query based on the start & end key, +// page size and a bookmark. + +// The number of fetched records will be equal to or lesser than the page size. +// Paginated range queries are only valid for read only transactions. +// =========================================================================================== +func (t *SimpleChaincode) getMarblesByRangeWithPagination(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + startKey := args[0] + endKey := args[1] + //return type of ParseInt is int64 + pageSize, err := strconv.ParseInt(args[2], 10, 32) + if err != nil { + return shim.Error(err.Error()) + } + bookmark := args[3] + + resultsIterator, responseMetadata, err := stub.GetStateByRangeWithPagination(startKey, endKey, int32(pageSize), bookmark) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return shim.Error(err.Error()) + } + + bufferWithPaginationInfo := addPaginationMetadataToQueryResults(buffer, responseMetadata) + + fmt.Printf("- getMarblesByRange queryResult:\n%s\n", bufferWithPaginationInfo.String()) + + return shim.Success(buffer.Bytes()) +} + +// ===== Example: Pagination with Ad hoc Rich Query ======================================================== +// queryMarblesWithPagination uses a query string, page size and a bookmark to perform a query +// for marbles. Query string matching state database syntax is passed in and executed as is. +// The number of fetched records would be equal to or lesser than the specified page size. +// Supports ad hoc queries that can be defined at runtime by the client. +// If this is not desired, follow the queryMarblesForOwner example for parameterized queries. +// Only available on state databases that support rich query (e.g. CouchDB) +// Paginated queries are only valid for read only transactions. +// ========================================================================================= +func (t *SimpleChaincode) queryMarblesWithPagination(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "queryString" + if len(args) < 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + queryString := args[0] + //return type of ParseInt is int64 + pageSize, err := strconv.ParseInt(args[1], 10, 32) + if err != nil { + return shim.Error(err.Error()) + } + bookmark := args[2] + + queryResults, err := getQueryResultForQueryStringWithPagination(stub, queryString, int32(pageSize), bookmark) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ========================================================================================= +// getQueryResultForQueryStringWithPagination executes the passed in query string with +// pagination info. Result set is built and returned as a byte array containing the JSON results. +// ========================================================================================= +func getQueryResultForQueryStringWithPagination(stub shim.ChaincodeStubInterface, queryString string, pageSize int32, bookmark string) ([]byte, error) { + + fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, responseMetadata, err := stub.GetQueryResultWithPagination(queryString, pageSize, bookmark) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return nil, err + } + + bufferWithPaginationInfo := addPaginationMetadataToQueryResults(buffer, responseMetadata) + + fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", bufferWithPaginationInfo.String()) + + return buffer.Bytes(), nil +} + +func (t *SimpleChaincode) getHistoryForMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + marbleName := args[0] + + fmt.Printf("- start getHistoryForMarble: %s\n", marbleName) + + resultsIterator, err := stub.GetHistoryForKey(marbleName) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing historic values for the marble + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + response, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"TxId\":") + buffer.WriteString("\"") + buffer.WriteString(response.TxId) + buffer.WriteString("\"") + + buffer.WriteString(", \"Value\":") + // if it was a delete operation on given key, then we need to set the + //corresponding value null. Else, we will write the response.Value + //as-is (as the Value itself a JSON marble) + if response.IsDelete { + buffer.WriteString("null") + } else { + buffer.WriteString(string(response.Value)) + } + + buffer.WriteString(", \"Timestamp\":") + buffer.WriteString("\"") + buffer.WriteString(time.Unix(response.Timestamp.Seconds, int64(response.Timestamp.Nanos)).String()) + buffer.WriteString("\"") + + buffer.WriteString(", \"IsDelete\":") + buffer.WriteString("\"") + buffer.WriteString(strconv.FormatBool(response.IsDelete)) + buffer.WriteString("\"") + + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getHistoryForMarble returning:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/META-INF/statedb/couchdb/indexes/indexOwner.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/META-INF/statedb/couchdb/indexes/indexOwner.json new file mode 100644 index 000000000..305f09044 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/META-INF/statedb/couchdb/indexes/indexOwner.json @@ -0,0 +1 @@ +{"index":{"fields":["docType","owner"]},"ddoc":"indexOwnerDoc", "name":"indexOwner","type":"json"} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/marbles_chaincode.js b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/marbles_chaincode.js new file mode 100644 index 000000000..7536178c8 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/marbles_chaincode.js @@ -0,0 +1,481 @@ +/* +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +*/ + +// ====CHAINCODE EXECUTION SAMPLES (CLI) ================== + +// ==== Invoke marbles ==== +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble2","red","50","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble3","blue","70","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarble","marble2","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarblesBasedOnColor","blue","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["delete","marble1"]}' + +// ==== Query marbles ==== +// peer chaincode query -C myc1 -n marbles -c '{"Args":["readMarble","marble1"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getMarblesByRange","marble1","marble3"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getHistoryForMarble","marble1"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getMarblesByRangeWithPagination","marble1","marble3","3",""]}' + +// Rich Query (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesByOwner","tom"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +// Rich Query with Pagination (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesWithPagination","{\"selector\":{\"owner\":\"tom\"}}","3",""]}' + +'use strict'; +const shim = require('fabric-shim'); +const util = require('util'); + +let Chaincode = class { + async Init(stub) { + let ret = stub.getFunctionAndParameters(); + console.info(ret); + console.info('=========== Instantiated Marbles Chaincode ==========='); + return shim.success(); + } + + async Invoke(stub) { + console.info('Transaction ID: ' + stub.getTxID()); + console.info(util.format('Args: %j', stub.getArgs())); + + let ret = stub.getFunctionAndParameters(); + console.info(ret); + + let method = this[ret.fcn]; + if (!method) { + console.log('no function of name:' + ret.fcn + ' found'); + throw new Error('Received unknown function ' + ret.fcn + ' invocation'); + } + try { + let payload = await method(stub, ret.params, this); + return shim.success(payload); + } catch (err) { + console.log(err); + return shim.error(err); + } + } + + // =============================================== + // initMarble - create a new marble + // =============================================== + async initMarble(stub, args, thisClass) { + if (args.length != 4) { + throw new Error('Incorrect number of arguments. Expecting 4'); + } + // ==== Input sanitation ==== + console.info('--- start init marble ---') + if (args[0].lenth <= 0) { + throw new Error('1st argument must be a non-empty string'); + } + if (args[1].lenth <= 0) { + throw new Error('2nd argument must be a non-empty string'); + } + if (args[2].lenth <= 0) { + throw new Error('3rd argument must be a non-empty string'); + } + if (args[3].lenth <= 0) { + throw new Error('4th argument must be a non-empty string'); + } + let marbleName = args[0]; + let color = args[1].toLowerCase(); + let owner = args[3].toLowerCase(); + let size = parseInt(args[2]); + if (typeof size !== 'number') { + throw new Error('3rd argument must be a numeric string'); + } + + // ==== Check if marble already exists ==== + let marbleState = await stub.getState(marbleName); + if (marbleState.toString()) { + throw new Error('This marble already exists: ' + marbleName); + } + + // ==== Create marble object and marshal to JSON ==== + let marble = {}; + marble.docType = 'marble'; + marble.name = marbleName; + marble.color = color; + marble.size = size; + marble.owner = owner; + + // === Save marble to state === + await stub.putState(marbleName, Buffer.from(JSON.stringify(marble))); + let indexName = 'color~name' + let colorNameIndexKey = await stub.createCompositeKey(indexName, [marble.color, marble.name]); + console.info(colorNameIndexKey); + // Save index entry to state. Only the key name is needed, no need to store a duplicate copy of the marble. + // Note - passing a 'nil' value will effectively delete the key from state, therefore we pass null character as value + await stub.putState(colorNameIndexKey, Buffer.from('\u0000')); + // ==== Marble saved and indexed. Return success ==== + console.info('- end init marble'); + } + + // =============================================== + // readMarble - read a marble from chaincode state + // =============================================== + async readMarble(stub, args, thisClass) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting name of the marble to query'); + } + + let name = args[0]; + if (!name) { + throw new Error(' marble name must not be empty'); + } + let marbleAsbytes = await stub.getState(name); //get the marble from chaincode state + if (!marbleAsbytes.toString()) { + let jsonResp = {}; + jsonResp.Error = 'Marble does not exist: ' + name; + throw new Error(JSON.stringify(jsonResp)); + } + console.info('======================================='); + console.log(marbleAsbytes.toString()); + console.info('======================================='); + return marbleAsbytes; + } + + // ================================================== + // delete - remove a marble key/value pair from state + // ================================================== + async delete(stub, args, thisClass) { + if (args.length != 1) { + throw new Error('Incorrect number of arguments. Expecting name of the marble to delete'); + } + let marbleName = args[0]; + if (!marbleName) { + throw new Error('marble name must not be empty'); + } + // to maintain the color~name index, we need to read the marble first and get its color + let valAsbytes = await stub.getState(marbleName); //get the marble from chaincode state + let jsonResp = {}; + if (!valAsbytes) { + jsonResp.error = 'marble does not exist: ' + name; + throw new Error(jsonResp); + } + let marbleJSON = {}; + try { + marbleJSON = JSON.parse(valAsbytes.toString()); + } catch (err) { + jsonResp = {}; + jsonResp.error = 'Failed to decode JSON of: ' + marbleName; + throw new Error(jsonResp); + } + + await stub.deleteState(marbleName); //remove the marble from chaincode state + + // delete the index + let indexName = 'color~name'; + let colorNameIndexKey = stub.createCompositeKey(indexName, [marbleJSON.color, marbleJSON.name]); + if (!colorNameIndexKey) { + throw new Error(' Failed to create the createCompositeKey'); + } + // Delete index entry to state. + await stub.deleteState(colorNameIndexKey); + } + + // =========================================================== + // transfer a marble by setting a new owner name on the marble + // =========================================================== + async transferMarble(stub, args, thisClass) { + // 0 1 + // 'name', 'bob' + if (args.length < 2) { + throw new Error('Incorrect number of arguments. Expecting marblename and owner') + } + + let marbleName = args[0]; + let newOwner = args[1].toLowerCase(); + console.info('- start transferMarble ', marbleName, newOwner); + + let marbleAsBytes = await stub.getState(marbleName); + if (!marbleAsBytes || !marbleAsBytes.toString()) { + throw new Error('marble does not exist'); + } + let marbleToTransfer = {}; + try { + marbleToTransfer = JSON.parse(marbleAsBytes.toString()); //unmarshal + } catch (err) { + let jsonResp = {}; + jsonResp.error = 'Failed to decode JSON of: ' + marbleName; + throw new Error(jsonResp); + } + console.info(marbleToTransfer); + marbleToTransfer.owner = newOwner; //change the owner + + let marbleJSONasBytes = Buffer.from(JSON.stringify(marbleToTransfer)); + await stub.putState(marbleName, marbleJSONasBytes); //rewrite the marble + + console.info('- end transferMarble (success)'); + } + + // =========================================================================================== + // getMarblesByRange performs a range query based on the start and end keys provided. + + // Read-only function results are not typically submitted to ordering. If the read-only + // results are submitted to ordering, or if the query is used in an update transaction + // and submitted to ordering, then the committing peers will re-execute to guarantee that + // result sets are stable between endorsement time and commit time. The transaction is + // invalidated by the committing peers if the result set has changed between endorsement + // time and commit time. + // Therefore, range queries are a safe option for performing update transactions based on query results. + // =========================================================================================== + async getMarblesByRange(stub, args, thisClass) { + + if (args.length < 2) { + throw new Error('Incorrect number of arguments. Expecting 2'); + } + + let startKey = args[0]; + let endKey = args[1]; + + let resultsIterator = await stub.getStateByRange(startKey, endKey); + let method = thisClass['getAllResults']; + let results = await method(resultsIterator, false); + + return Buffer.from(JSON.stringify(results)); + } + + // ==== Example: GetStateByPartialCompositeKey/RangeQuery ========================================= + // transferMarblesBasedOnColor will transfer marbles of a given color to a certain new owner. + // Uses a GetStateByPartialCompositeKey (range query) against color~name 'index'. + // Committing peers will re-execute range queries to guarantee that result sets are stable + // between endorsement time and commit time. The transaction is invalidated by the + // committing peers if the result set has changed between endorsement time and commit time. + // Therefore, range queries are a safe option for performing update transactions based on query results. + // =========================================================================================== + async transferMarblesBasedOnColor(stub, args, thisClass) { + + // 0 1 + // 'color', 'bob' + if (args.length < 2) { + throw new Error('Incorrect number of arguments. Expecting color and owner'); + } + + let color = args[0]; + let newOwner = args[1].toLowerCase(); + console.info('- start transferMarblesBasedOnColor ', color, newOwner); + + // Query the color~name index by color + // This will execute a key range query on all keys starting with 'color' + let coloredMarbleResultsIterator = await stub.getStateByPartialCompositeKey('color~name', [color]); + + let method = thisClass['transferMarble']; + // Iterate through result set and for each marble found, transfer to newOwner + while (true) { + let responseRange = await coloredMarbleResultsIterator.next(); + if (!responseRange || !responseRange.value || !responseRange.value.key) { + return; + } + console.log(responseRange.value.key); + + // let value = res.value.value.toString('utf8'); + let objectType; + let attributes; + ({ + objectType, + attributes + } = await stub.splitCompositeKey(responseRange.value.key)); + + let returnedColor = attributes[0]; + let returnedMarbleName = attributes[1]; + console.info(util.format('- found a marble from index:%s color:%s name:%s\n', objectType, returnedColor, returnedMarbleName)); + + // Now call the transfer function for the found marble. + // Re-use the same function that is used to transfer individual marbles + let response = await method(stub, [returnedMarbleName, newOwner]); + } + + let responsePayload = util.format('Transferred %s marbles to %s', color, newOwner); + console.info('- end transferMarblesBasedOnColor: ' + responsePayload); + } + + + // ===== Example: Parameterized rich query ================================================= + // queryMarblesByOwner queries for marbles based on a passed in owner. + // This is an example of a parameterized query where the query logic is baked into the chaincode, + // and accepting a single query parameter (owner). + // Only available on state databases that support rich query (e.g. CouchDB) + // ========================================================================================= + async queryMarblesByOwner(stub, args, thisClass) { + // 0 + // 'bob' + if (args.length < 1) { + throw new Error('Incorrect number of arguments. Expecting owner name.') + } + + let owner = args[0].toLowerCase(); + let queryString = {}; + queryString.selector = {}; + queryString.selector.docType = 'marble'; + queryString.selector.owner = owner; + let method = thisClass['getQueryResultForQueryString']; + let queryResults = await method(stub, JSON.stringify(queryString), thisClass); + return queryResults; //shim.success(queryResults); + } + + // ===== Example: Ad hoc rich query ======================================================== + // queryMarbles uses a query string to perform a query for marbles. + // Query string matching state database syntax is passed in and executed as is. + // Supports ad hoc queries that can be defined at runtime by the client. + // If this is not desired, follow the queryMarblesForOwner example for parameterized queries. + // Only available on state databases that support rich query (e.g. CouchDB) + // ========================================================================================= + async queryMarbles(stub, args, thisClass) { + // 0 + // 'queryString' + if (args.length < 1) { + throw new Error('Incorrect number of arguments. Expecting queryString'); + } + let queryString = args[0]; + if (!queryString) { + throw new Error('queryString must not be empty'); + } + let method = thisClass['getQueryResultForQueryString']; + let queryResults = await method(stub, queryString, thisClass); + return queryResults; + } + + async getAllResults(iterator, isHistory) { + let allResults = []; + while (true) { + let res = await iterator.next(); + + if (res.value && res.value.value.toString()) { + let jsonRes = {}; + console.log(res.value.value.toString('utf8')); + + if (isHistory && isHistory === true) { + jsonRes.TxId = res.value.tx_id; + jsonRes.Timestamp = res.value.timestamp; + jsonRes.IsDelete = res.value.is_delete.toString(); + try { + jsonRes.Value = JSON.parse(res.value.value.toString('utf8')); + } catch (err) { + console.log(err); + jsonRes.Value = res.value.value.toString('utf8'); + } + } else { + jsonRes.Key = res.value.key; + try { + jsonRes.Record = JSON.parse(res.value.value.toString('utf8')); + } catch (err) { + console.log(err); + jsonRes.Record = res.value.value.toString('utf8'); + } + } + allResults.push(jsonRes); + } + if (res.done) { + console.log('end of data'); + await iterator.close(); + console.info(allResults); + return allResults; + } + } + } + + // ========================================================================================= + // getQueryResultForQueryString executes the passed in query string. + // Result set is built and returned as a byte array containing the JSON results. + // ========================================================================================= + async getQueryResultForQueryString(stub, queryString, thisClass) { + + console.info('- getQueryResultForQueryString queryString:\n' + queryString) + let resultsIterator = await stub.getQueryResult(queryString); + let method = thisClass['getAllResults']; + + let results = await method(resultsIterator, false); + + return Buffer.from(JSON.stringify(results)); + } + + async getHistoryForMarble(stub, args, thisClass) { + + if (args.length < 1) { + throw new Error('Incorrect number of arguments. Expecting 1') + } + let marbleName = args[0]; + console.info('- start getHistoryForMarble: %s\n', marbleName); + + let resultsIterator = await stub.getHistoryForKey(marbleName); + let method = thisClass['getAllResults']; + let results = await method(resultsIterator, true); + + return Buffer.from(JSON.stringify(results)); + } + + // ====== Pagination ========================================================================= + // Pagination provides a method to retrieve records with a defined pagesize and + // start point (bookmark). An empty string bookmark defines the first "page" of a query + // result. Paginated queries return a bookmark that can be used in + // the next query to retrieve the next page of results. Paginated queries extend + // rich queries and range queries to include a pagesize and bookmark. + // + // Two examples are provided in this example. The first is getMarblesByRangeWithPagination + // which executes a paginated range query. + // The second example is a paginated query for rich ad-hoc queries. + // ========================================================================================= + + // ====== Example: Pagination with Range Query =============================================== + // getMarblesByRangeWithPagination performs a range query based on the start & end key, + // page size and a bookmark. + // + // The number of fetched records will be equal to or lesser than the page size. + // Paginated range queries are only valid for read only transactions. + // =========================================================================================== + async getMarblesByRangeWithPagination(stub, args, thisClass) { + if (args.length < 2) { + throw new Error('Incorrect number of arguments. Expecting 2'); + } + const startKey = args[0]; + const endKey = args[1]; + + const pageSize = parseInt(args[2], 10); + const bookmark = args[3]; + + const { iterator, metadata } = await stub.getStateByRangeWithPagination(startKey, endKey, pageSize, bookmark); + const getAllResults = thisClass['getAllResults']; + const results = await getAllResults(iterator, false); + // use RecordsCount and Bookmark to keep consistency with the go sample + results.ResponseMetadata = { + RecordsCount: metadata.fetched_records_count, + Bookmark: metadata.bookmark, + }; + return Buffer.from(JSON.stringify(results)); + } + + // ========================================================================================= + // getQueryResultForQueryStringWithPagination executes the passed in query string with + // pagination info. Result set is built and returned as a byte array containing the JSON results. + // ========================================================================================= + async queryMarblesWithPagination(stub, args, thisClass) { + + // 0 + // "queryString" + if (args.length < 3) { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + const queryString = args[0]; + const pageSize = parseInt(args[1], 10); + const bookmark = args[2]; + + const { iterator, metadata } = await stub.getQueryResultWithPagination(queryString, pageSize, bookmark); + const getAllResults = thisClass['getAllResults']; + const results = await getAllResults(iterator, false); + // use RecordsCount and Bookmark to keep consistency with the go sample + results.ResponseMetadata = { + RecordsCount: metadata.fetched_records_count, + Bookmark: metadata.bookmark, + }; + + return Buffer.from(JSON.stringify(results)); + } +}; + +shim.start(new Chaincode()); diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/package.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/package.json new file mode 100644 index 000000000..8be2caf30 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02/node/package.json @@ -0,0 +1,15 @@ +{ + "name": "marbles", + "version": "1.0.0", + "description": "marbles chaincode implemented in node.js", + "engines": { + "node": ">=8.4.0", + "npm": ">=5.3.0" + }, + "scripts": { "start" : "node marbles_chaincode.js" }, + "engine-strict": true, + "license": "Apache-2.0", + "dependencies": { + "fabric-shim": "~1.4.0" + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/collections_config.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/collections_config.json new file mode 100644 index 000000000..82af88dba --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/collections_config.json @@ -0,0 +1,18 @@ +[ + { + "name": "collectionMarbles", + "policy": "OR('Org1MSP.member', 'Org2MSP.member')", + "requiredPeerCount": 0, + "maxPeerCount": 3, + "blockToLive":1000000, + "memberOnlyRead": true +}, + { + "name": "collectionMarblePrivateDetails", + "policy": "OR('Org1MSP.member')", + "requiredPeerCount": 0, + "maxPeerCount": 3, + "blockToLive":3, + "memberOnlyRead": true + } +] diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/META-INF/statedb/couchdb/collections/collectionMarbles/indexes/indexOwner.json b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/META-INF/statedb/couchdb/collections/collectionMarbles/indexes/indexOwner.json new file mode 100644 index 000000000..305f09044 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/META-INF/statedb/couchdb/collections/collectionMarbles/indexes/indexOwner.json @@ -0,0 +1 @@ +{"index":{"fields":["docType","owner"]},"ddoc":"indexOwnerDoc", "name":"indexOwner","type":"json"} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/marbles_chaincode_private.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/marbles_chaincode_private.go new file mode 100644 index 000000000..b5bafb8da --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/marbles02_private/go/marbles_chaincode_private.go @@ -0,0 +1,650 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +// ====CHAINCODE EXECUTION SAMPLES (CLI) ================== + +// ==== Invoke marbles, pass private data as base64 encoded bytes in transient map ==== +// +// export MARBLE=$(echo -n "{\"name\":\"marble1\",\"color\":\"blue\",\"size\":35,\"owner\":\"tom\",\"price\":99}" | base64 | tr -d \\n) +// peer chaincode invoke -C mychannel -n marblesp -c '{"Args":["initMarble"]}' --transient "{\"marble\":\"$MARBLE\"}" +// +// export MARBLE=$(echo -n "{\"name\":\"marble2\",\"color\":\"red\",\"size\":50,\"owner\":\"tom\",\"price\":102}" | base64 | tr -d \\n) +// peer chaincode invoke -C mychannel -n marblesp -c '{"Args":["initMarble"]}' --transient "{\"marble\":\"$MARBLE\"}" +// +// export MARBLE=$(echo -n "{\"name\":\"marble3\",\"color\":\"blue\",\"size\":70,\"owner\":\"tom\",\"price\":103}" | base64 | tr -d \\n) +// peer chaincode invoke -C mychannel -n marblesp -c '{"Args":["initMarble"]}' --transient "{\"marble\":\"$MARBLE\"}" +// +// export MARBLE_OWNER=$(echo -n "{\"name\":\"marble2\",\"owner\":\"jerry\"}" | base64 | tr -d \\n) +// peer chaincode invoke -C mychannel -n marblesp -c '{"Args":["transferMarble"]}' --transient "{\"marble_owner\":\"$MARBLE_OWNER\"}" +// +// export MARBLE_DELETE=$(echo -n "{\"name\":\"marble1\"}" | base64 | tr -d \\n) +// peer chaincode invoke -C mychannel -n marblesp -c '{"Args":["delete"]}' --transient "{\"marble_delete\":\"$MARBLE_DELETE\"}" + +// ==== Query marbles, since queries are not recorded on chain we don't need to hide private data in transient map ==== +// peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}' +// peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}' +// peer chaincode query -C mychannel -n marblesp -c '{"Args":["getMarblesByRange","marble1","marble4"]}' +// +// Rich Query (Only supported if CouchDB is used as state database): +// peer chaincode query -C mychannel -n marblesp -c '{"Args":["queryMarblesByOwner","tom"]}' +// peer chaincode query -C mychannel -n marblesp -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +// INDEXES TO SUPPORT COUCHDB RICH QUERIES +// +// Indexes in CouchDB are required in order to make JSON queries efficient and are required for +// any JSON query with a sort. As of Hyperledger Fabric 1.1, indexes may be packaged alongside +// chaincode in a META-INF/statedb/couchdb/indexes directory. Or for indexes on private data +// collections, in a META-INF/statedb/couchdb/collections//indexes directory. +// Each index must be defined in its own text file with extension *.json with the index +// definition formatted in JSON following the CouchDB index JSON syntax as documented at: +// http://docs.couchdb.org/en/2.1.1/api/database/find.html#db-index +// +// This marbles02_private example chaincode demonstrates a packaged index which you +// can find in META-INF/statedb/couchdb/collection/collectionMarbles/indexes/indexOwner.json. +// For deployment of chaincode to production environments, it is recommended +// to define any indexes alongside chaincode so that the chaincode and supporting indexes +// are deployed automatically as a unit, once the chaincode has been installed on a peer and +// instantiated on a channel. See Hyperledger Fabric documentation for more details. +// +// If you have access to the your peer's CouchDB state database in a development environment, +// you may want to iteratively test various indexes in support of your chaincode queries. You +// can use the CouchDB Fauxton interface or a command line curl utility to create and update +// indexes. Then once you finalize an index, include the index definition alongside your +// chaincode in the META-INF/statedb/couchdb/indexes directory or +// META-INF/statedb/couchdb/collections//indexes directory, for packaging +// and deployment to managed environments. +// +// In the examples below you can find index definitions that support marbles02_private +// chaincode queries, along with the syntax that you can use in development environments +// to create the indexes in the CouchDB Fauxton interface. +// + +//Example hostname:port configurations to access CouchDB. +// +//To access CouchDB docker container from within another docker container or from vagrant environments: +// http://couchdb:5984/ +// +//Inside couchdb docker container +// http://127.0.0.1:5984/ + +// Index for docType, owner. +// Note that docType and owner fields must be prefixed with the "data" wrapper +// +// Index definition for use with Fauxton interface +// {"index":{"fields":["data.docType","data.owner"]},"ddoc":"indexOwnerDoc", "name":"indexOwner","type":"json"} + +// Index for docType, owner, size (descending order). +// Note that docType, owner and size fields must be prefixed with the "data" wrapper +// +// Index definition for use with Fauxton interface +// {"index":{"fields":[{"data.size":"desc"},{"data.docType":"desc"},{"data.owner":"desc"}]},"ddoc":"indexSizeSortDoc", "name":"indexSizeSortDesc","type":"json"} + +// Rich Query with index design doc and index name specified (Only supported if CouchDB is used as state database): +// peer chaincode query -C mychannel -n marblesp -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":\"marble\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}"]}' + +// Rich Query with index design doc specified only (Only supported if CouchDB is used as state database): +// peer chaincode query -C mychannel -n marblesp -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":{\"$eq\":\"marble\"},\"owner\":{\"$eq\":\"tom\"},\"size\":{\"$gt\":0}},\"fields\":[\"docType\",\"owner\",\"size\"],\"sort\":[{\"size\":\"desc\"}],\"use_index\":\"_design/indexSizeSortDoc\"}"]}' + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "strings" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +type marble struct { + ObjectType string `json:"docType"` //docType is used to distinguish the various types of objects in state database + Name string `json:"name"` //the fieldtags are needed to keep case from bouncing around + Color string `json:"color"` + Size int `json:"size"` + Owner string `json:"owner"` +} + +type marblePrivateDetails struct { + ObjectType string `json:"docType"` //docType is used to distinguish the various types of objects in state database + Name string `json:"name"` //the fieldtags are needed to keep case from bouncing around + Price int `json:"price"` +} + +// =================================================================================== +// Main +// =================================================================================== +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} + +// Init initializes chaincode +// =========================== +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke - Our entry point for Invocations +// ======================================== +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + fmt.Println("invoke is running " + function) + + // Handle different functions + switch function { + case "initMarble": + //create a new marble + return t.initMarble(stub, args) + case "readMarble": + //read a marble + return t.readMarble(stub, args) + case "readMarblePrivateDetails": + //read a marble private details + return t.readMarblePrivateDetails(stub, args) + case "transferMarble": + //change owner of a specific marble + return t.transferMarble(stub, args) + case "delete": + //delete a marble + return t.delete(stub, args) + case "queryMarblesByOwner": + //find marbles for owner X using rich query + return t.queryMarblesByOwner(stub, args) + case "queryMarbles": + //find marbles based on an ad hoc rich query + return t.queryMarbles(stub, args) + case "getMarblesByRange": + //get marbles based on range query + return t.getMarblesByRange(stub, args) + default: + //error + fmt.Println("invoke did not find func: " + function) + return shim.Error("Received unknown function invocation") + } +} + +// ============================================================ +// initMarble - create a new marble, store into chaincode state +// ============================================================ +func (t *SimpleChaincode) initMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var err error + + type marbleTransientInput struct { + Name string `json:"name"` //the fieldtags are needed to keep case from bouncing around + Color string `json:"color"` + Size int `json:"size"` + Owner string `json:"owner"` + Price int `json:"price"` + } + + // ==== Input sanitation ==== + fmt.Println("- start init marble") + + if len(args) != 0 { + return shim.Error("Incorrect number of arguments. Private marble data must be passed in transient map.") + } + + transMap, err := stub.GetTransient() + if err != nil { + return shim.Error("Error getting transient: " + err.Error()) + } + + if _, ok := transMap["marble"]; !ok { + return shim.Error("marble must be a key in the transient map") + } + + if len(transMap["marble"]) == 0 { + return shim.Error("marble value in the transient map must be a non-empty JSON string") + } + + var marbleInput marbleTransientInput + err = json.Unmarshal(transMap["marble"], &marbleInput) + if err != nil { + return shim.Error("Failed to decode JSON of: " + string(transMap["marble"])) + } + + if len(marbleInput.Name) == 0 { + return shim.Error("name field must be a non-empty string") + } + if len(marbleInput.Color) == 0 { + return shim.Error("color field must be a non-empty string") + } + if marbleInput.Size <= 0 { + return shim.Error("size field must be a positive integer") + } + if len(marbleInput.Owner) == 0 { + return shim.Error("owner field must be a non-empty string") + } + if marbleInput.Price <= 0 { + return shim.Error("price field must be a positive integer") + } + + // ==== Check if marble already exists ==== + marbleAsBytes, err := stub.GetPrivateData("collectionMarbles", marbleInput.Name) + if err != nil { + return shim.Error("Failed to get marble: " + err.Error()) + } else if marbleAsBytes != nil { + fmt.Println("This marble already exists: " + marbleInput.Name) + return shim.Error("This marble already exists: " + marbleInput.Name) + } + + // ==== Create marble object, marshal to JSON, and save to state ==== + marble := &marble{ + ObjectType: "marble", + Name: marbleInput.Name, + Color: marbleInput.Color, + Size: marbleInput.Size, + Owner: marbleInput.Owner, + } + marbleJSONasBytes, err := json.Marshal(marble) + if err != nil { + return shim.Error(err.Error()) + } + + // === Save marble to state === + err = stub.PutPrivateData("collectionMarbles", marbleInput.Name, marbleJSONasBytes) + if err != nil { + return shim.Error(err.Error()) + } + + // ==== Create marble private details object with price, marshal to JSON, and save to state ==== + marblePrivateDetails := &marblePrivateDetails{ + ObjectType: "marblePrivateDetails", + Name: marbleInput.Name, + Price: marbleInput.Price, + } + marblePrivateDetailsBytes, err := json.Marshal(marblePrivateDetails) + if err != nil { + return shim.Error(err.Error()) + } + err = stub.PutPrivateData("collectionMarblePrivateDetails", marbleInput.Name, marblePrivateDetailsBytes) + if err != nil { + return shim.Error(err.Error()) + } + + // ==== Index the marble to enable color-based range queries, e.g. return all blue marbles ==== + // An 'index' is a normal key/value entry in state. + // The key is a composite key, with the elements that you want to range query on listed first. + // In our case, the composite key is based on indexName~color~name. + // This will enable very efficient state range queries based on composite keys matching indexName~color~* + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marble.Color, marble.Name}) + if err != nil { + return shim.Error(err.Error()) + } + // Save index entry to state. Only the key name is needed, no need to store a duplicate copy of the marble. + // Note - passing a 'nil' value will effectively delete the key from state, therefore we pass null character as value + value := []byte{0x00} + stub.PutPrivateData("collectionMarbles", colorNameIndexKey, value) + + // ==== Marble saved and indexed. Return success ==== + fmt.Println("- end init marble") + return shim.Success(nil) +} + +// =============================================== +// readMarble - read a marble from chaincode state +// =============================================== +func (t *SimpleChaincode) readMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var name, jsonResp string + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the marble to query") + } + + name = args[0] + valAsbytes, err := stub.GetPrivateData("collectionMarbles", name) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + name + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + name + "\"}" + return shim.Error(jsonResp) + } + + return shim.Success(valAsbytes) +} + +// =============================================== +// readMarblereadMarblePrivateDetails - read a marble private details from chaincode state +// =============================================== +func (t *SimpleChaincode) readMarblePrivateDetails(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var name, jsonResp string + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the marble to query") + } + + name = args[0] + valAsbytes, err := stub.GetPrivateData("collectionMarblePrivateDetails", name) //get the marble private details from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get private details for " + name + ": " + err.Error() + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble private details does not exist: " + name + "\"}" + return shim.Error(jsonResp) + } + + return shim.Success(valAsbytes) +} + +// ================================================== +// delete - remove a marble key/value pair from state +// ================================================== +func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { + fmt.Println("- start delete marble") + + type marbleDeleteTransientInput struct { + Name string `json:"name"` + } + + if len(args) != 0 { + return shim.Error("Incorrect number of arguments. Private marble name must be passed in transient map.") + } + + transMap, err := stub.GetTransient() + if err != nil { + return shim.Error("Error getting transient: " + err.Error()) + } + + if _, ok := transMap["marble_delete"]; !ok { + return shim.Error("marble_delete must be a key in the transient map") + } + + if len(transMap["marble_delete"]) == 0 { + return shim.Error("marble_delete value in the transient map must be a non-empty JSON string") + } + + var marbleDeleteInput marbleDeleteTransientInput + err = json.Unmarshal(transMap["marble_delete"], &marbleDeleteInput) + if err != nil { + return shim.Error("Failed to decode JSON of: " + string(transMap["marble_delete"])) + } + + if len(marbleDeleteInput.Name) == 0 { + return shim.Error("name field must be a non-empty string") + } + + // to maintain the color~name index, we need to read the marble first and get its color + valAsbytes, err := stub.GetPrivateData("collectionMarbles", marbleDeleteInput.Name) //get the marble from chaincode state + if err != nil { + return shim.Error("Failed to get state for " + marbleDeleteInput.Name) + } else if valAsbytes == nil { + return shim.Error("Marble does not exist: " + marbleDeleteInput.Name) + } + + var marbleToDelete marble + err = json.Unmarshal([]byte(valAsbytes), &marbleToDelete) + if err != nil { + return shim.Error("Failed to decode JSON of: " + string(valAsbytes)) + } + + // delete the marble from state + err = stub.DelPrivateData("collectionMarbles", marbleDeleteInput.Name) + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + + // Also delete the marble from the color~name index + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marbleToDelete.Color, marbleToDelete.Name}) + if err != nil { + return shim.Error(err.Error()) + } + err = stub.DelPrivateData("collectionMarbles", colorNameIndexKey) + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + + // Finally, delete private details of marble + err = stub.DelPrivateData("collectionMarblePrivateDetails", marbleDeleteInput.Name) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// =========================================================== +// transfer a marble by setting a new owner name on the marble +// =========================================================== +func (t *SimpleChaincode) transferMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + fmt.Println("- start transfer marble") + + type marbleTransferTransientInput struct { + Name string `json:"name"` + Owner string `json:"owner"` + } + + if len(args) != 0 { + return shim.Error("Incorrect number of arguments. Private marble data must be passed in transient map.") + } + + transMap, err := stub.GetTransient() + if err != nil { + return shim.Error("Error getting transient: " + err.Error()) + } + + if _, ok := transMap["marble_owner"]; !ok { + return shim.Error("marble_owner must be a key in the transient map") + } + + if len(transMap["marble_owner"]) == 0 { + return shim.Error("marble_owner value in the transient map must be a non-empty JSON string") + } + + var marbleTransferInput marbleTransferTransientInput + err = json.Unmarshal(transMap["marble_owner"], &marbleTransferInput) + if err != nil { + return shim.Error("Failed to decode JSON of: " + string(transMap["marble_owner"])) + } + + if len(marbleTransferInput.Name) == 0 { + return shim.Error("name field must be a non-empty string") + } + if len(marbleTransferInput.Owner) == 0 { + return shim.Error("owner field must be a non-empty string") + } + + marbleAsBytes, err := stub.GetPrivateData("collectionMarbles", marbleTransferInput.Name) + if err != nil { + return shim.Error("Failed to get marble:" + err.Error()) + } else if marbleAsBytes == nil { + return shim.Error("Marble does not exist: " + marbleTransferInput.Name) + } + + marbleToTransfer := marble{} + err = json.Unmarshal(marbleAsBytes, &marbleToTransfer) //unmarshal it aka JSON.parse() + if err != nil { + return shim.Error(err.Error()) + } + marbleToTransfer.Owner = marbleTransferInput.Owner //change the owner + + marbleJSONasBytes, _ := json.Marshal(marbleToTransfer) + err = stub.PutPrivateData("collectionMarbles", marbleToTransfer.Name, marbleJSONasBytes) //rewrite the marble + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Println("- end transferMarble (success)") + return shim.Success(nil) +} + +// =========================================================================================== +// getMarblesByRange performs a range query based on the start and end keys provided. + +// Read-only function results are not typically submitted to ordering. If the read-only +// results are submitted to ordering, or if the query is used in an update transaction +// and submitted to ordering, then the committing peers will re-execute to guarantee that +// result sets are stable between endorsement time and commit time. The transaction is +// invalidated by the committing peers if the result set has changed between endorsement +// time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) getMarblesByRange(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + startKey := args[0] + endKey := args[1] + + resultsIterator, err := stub.GetPrivateDataByRange("collectionMarbles", startKey, endKey) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryResults + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getMarblesByRange queryResult:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} + +// =======Rich queries ========================================================================= +// Two examples of rich queries are provided below (parameterized query and ad hoc query). +// Rich queries pass a query string to the state database. +// Rich queries are only supported by state database implementations +// that support rich query (e.g. CouchDB). +// The query string is in the syntax of the underlying state database. +// With rich queries there is no guarantee that the result set hasn't changed between +// endorsement time and commit time, aka 'phantom reads'. +// Therefore, rich queries should not be used in update transactions, unless the +// application handles the possibility of result set changes between endorsement and commit time. +// Rich queries can be used for point-in-time queries against a peer. +// ============================================================================================ + +// ===== Example: Parameterized rich query ================================================= +// queryMarblesByOwner queries for marbles based on a passed in owner. +// This is an example of a parameterized query where the query logic is baked into the chaincode, +// and accepting a single query parameter (owner). +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarblesByOwner(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "bob" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + owner := strings.ToLower(args[0]) + + queryString := fmt.Sprintf("{\"selector\":{\"docType\":\"marble\",\"owner\":\"%s\"}}", owner) + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ===== Example: Ad hoc rich query ======================================================== +// queryMarbles uses a query string to perform a query for marbles. +// Query string matching state database syntax is passed in and executed as is. +// Supports ad hoc queries that can be defined at runtime by the client. +// If this is not desired, follow the queryMarblesForOwner example for parameterized queries. +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarbles(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "queryString" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + queryString := args[0] + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ========================================================================================= +// getQueryResultForQueryString executes the passed in query string. +// Result set is built and returned as a byte array containing the JSON results. +// ========================================================================================= +func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) { + + fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, err := stub.GetPrivateDataQueryResult("collectionMarbles", queryString) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryRecords + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return nil, err + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String()) + + return buffer.Bytes(), nil +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/chaincode/sacc/sacc.go b/app/platform/fabric/e2e-test/fabric-samples/chaincode/sacc/sacc.go new file mode 100644 index 000000000..4bfb165b5 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric-samples/chaincode/sacc/sacc.go @@ -0,0 +1,97 @@ +/* + * Copyright IBM Corp All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + */ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleAsset implements a simple chaincode to manage an asset +type SimpleAsset struct { +} + +// Init is called during chaincode instantiation to initialize any +// data. Note that chaincode upgrade also calls this function to reset +// or to migrate data. +func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response { + // Get the args from the transaction proposal + args := stub.GetStringArgs() + if len(args) != 2 { + return shim.Error("Incorrect arguments. Expecting a key and a value") + } + + // Set up any variables or assets here by calling stub.PutState() + + // We store the key and the value on the ledger + err := stub.PutState(args[0], []byte(args[1])) + if err != nil { + return shim.Error(fmt.Sprintf("Failed to create asset: %s", args[0])) + } + return shim.Success(nil) +} + +// Invoke is called per transaction on the chaincode. Each transaction is +// either a 'get' or a 'set' on the asset created by Init function. The Set +// method may create a new asset by specifying a new key-value pair. +func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response { + // Extract the function and args from the transaction proposal + fn, args := stub.GetFunctionAndParameters() + + var result string + var err error + if fn == "set" { + result, err = set(stub, args) + } else { // assume 'get' even if fn is nil + result, err = get(stub, args) + } + if err != nil { + return shim.Error(err.Error()) + } + + // Return the result as success payload + return shim.Success([]byte(result)) +} + +// Set stores the asset (both key and value) on the ledger. If the key exists, +// it will override the value with the new one +func set(stub shim.ChaincodeStubInterface, args []string) (string, error) { + if len(args) != 2 { + return "", fmt.Errorf("Incorrect arguments. Expecting a key and a value") + } + + err := stub.PutState(args[0], []byte(args[1])) + if err != nil { + return "", fmt.Errorf("Failed to set asset: %s", args[0]) + } + return args[1], nil +} + +// Get returns the value of the specified asset key +func get(stub shim.ChaincodeStubInterface, args []string) (string, error) { + if len(args) != 1 { + return "", fmt.Errorf("Incorrect arguments. Expecting a key") + } + + value, err := stub.GetState(args[0]) + if err != nil { + return "", fmt.Errorf("Failed to get asset: %s with error: %s", args[0], err) + } + if value == nil { + return "", fmt.Errorf("Asset not found: %s", args[0]) + } + return string(value), nil +} + +// main function starts up the chaincode in the container during instantiate +func main() { + if err := shim.Start(new(SimpleAsset)); err != nil { + fmt.Printf("Error starting SimpleAsset chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/.env b/app/platform/fabric/e2e-test/fabric-samples/first-network/.env deleted file mode 100644 index 431f11469..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/.env +++ /dev/null @@ -1,3 +0,0 @@ -COMPOSE_PROJECT_NAME=net -IMAGE_TAG=latest -SYS_CHANNEL=byfn-sys-channel diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/.gitignore b/app/platform/fabric/e2e-test/fabric-samples/first-network/.gitignore deleted file mode 100644 index 4888c4c23..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/channel-artifacts/*.tx -/channel-artifacts/*.block -/crypto-config/* -/docker-compose-e2e.yaml -/ledgers -/ledgers-backup -/channel-artifacts/*.json -/org3-artifacts/crypto-config/* \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/README.md b/app/platform/fabric/e2e-test/fabric-samples/first-network/README.md deleted file mode 100644 index 6d9e2543a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Build Your First Network (BYFN) - -The directions for using this are documented in the Hyperledger Fabric -["Build Your First Network"](http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html) tutorial. - -*NOTE:* After navigating to the documentation, choose the documentation version that matches your version of Fabric - diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/base/docker-compose-base.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/base/docker-compose-base.yaml deleted file mode 100644 index 4c55ff961..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/base/docker-compose-base.yaml +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -services: - - orderer.example.com: - container_name: orderer.example.com - extends: - file: peer-base.yaml - service: orderer-base - volumes: - - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp - - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls - - orderer.example.com:/var/hyperledger/production/orderer - ports: - - 7050:7050 - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org1.example.com - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:7051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org1.example.com:/var/hyperledger/production - ports: - - 7051:7051 - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org1.example.com - - CORE_PEER_ADDRESS=peer1.org1.example.com:8051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:8051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org1.example.com:8052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:8051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org1.example.com:/var/hyperledger/production - - ports: - - 8051:8051 - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org2.example.com - - CORE_PEER_ADDRESS=peer0.org2.example.com:9051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:9051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org2.example.com:9052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:9052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:9051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:10051 - - CORE_PEER_LOCALMSPID=Org2MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org2.example.com:/var/hyperledger/production - ports: - - 9051:9051 - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org2.example.com - - CORE_PEER_ADDRESS=peer1.org2.example.com:10051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:10051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org2.example.com:10052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:10052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:10051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:9051 - - CORE_PEER_LOCALMSPID=Org2MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org2.example.com:/var/hyperledger/production - ports: - - 10051:10051 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/base/peer-base.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/base/peer-base.yaml deleted file mode 100644 index 6f6dd3e12..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/base/peer-base.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -services: - peer-base: - image: hyperledger/fabric-peer:$IMAGE_TAG - environment: - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - # the following setting starts chaincode containers on the same - # bridge network as the peers - # https://docs.docker.com/compose/networking/ - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn - - FABRIC_LOGGING_SPEC=INFO - #- FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_GOSSIP_USELEADERELECTION=true - - CORE_PEER_GOSSIP_ORGLEADER=false - - CORE_PEER_PROFILE_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: peer node start - - orderer-base: - image: hyperledger/fabric-orderer:$IMAGE_TAG - environment: - - FABRIC_LOGGING_SPEC=INFO - - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - - ORDERER_GENERAL_GENESISMETHOD=file - - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block - - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp - # enabled TLS - - ORDERER_GENERAL_TLS_ENABLED=true - - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key - - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt - - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1 - - ORDERER_KAFKA_VERBOSE=true - - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt - - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key - - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: orderer - diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/byfn.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/byfn.sh deleted file mode 100755 index a13b552cb..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/byfn.sh +++ /dev/null @@ -1,608 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script will orchestrate a sample end-to-end execution of the Hyperledger -# Fabric network. -# -# The end-to-end verification provisions a sample Fabric network consisting of -# two organizations, each maintaining two peers, and a “solo” ordering service. -# -# This verification makes use of two fundamental tools, which are necessary to -# create a functioning transactional network with digital signature validation -# and access control: -# -# * cryptogen - generates the x509 certificates used to identify and -# authenticate the various components in the network. -# * configtxgen - generates the requisite configuration artifacts for orderer -# bootstrap and channel creation. -# -# Each tool consumes a configuration yaml file, within which we specify the topology -# of our network (cryptogen) and the location of our certificates for various -# configuration operations (configtxgen). Once the tools have been successfully run, -# we are able to launch our network. More detail on the tools and the structure of -# the network will be provided later in this document. For now, let's get going... - -# prepending $PWD/../bin to PATH to ensure we are picking up the correct binaries -# this may be commented out to resolve installed version of tools if desired -export PATH=${PWD}/../bin:${PWD}:$PATH -export FABRIC_CFG_PATH=${PWD} -export VERBOSE=false - -# Print the usage message -function printHelp() { - echo "Usage: " - echo " byfn.sh [-c ] [-t ] [-d ] [-f ] [-s ] [-l ] [-o ] [-i ] [-a] [-n] [-v]" - echo " - one of 'up', 'down', 'restart', 'generate' or 'upgrade'" - echo " - 'up' - bring up the network with docker-compose up" - echo " - 'down' - clear the network with docker-compose down" - echo " - 'restart' - restart the network" - echo " - 'generate' - generate required certificates and genesis block" - echo " - 'upgrade' - upgrade the network from version 1.3.x to 1.4.0" - echo " -c - channel name to use (defaults to \"mychannel\")" - echo " -t - CLI timeout duration in seconds (defaults to 10)" - echo " -d - delay duration in seconds (defaults to 3)" - echo " -f - specify which docker-compose file use (defaults to docker-compose-cli.yaml)" - echo " -s - the database backend to use: goleveldb (default) or couchdb" - echo " -l - the chaincode language: golang (default) or node" - echo " -o - the consensus-type of the ordering service: solo (default), kafka, or etcdraft" - echo " -i - the tag to be used to launch the network (defaults to \"latest\")" - echo " -a - launch certificate authorities (no certificate authorities are launched by default)" - echo " -n - do not deploy chaincode (abstore chaincode is deployed by default)" - echo " -v - verbose mode" - echo " byfn.sh -h (print this message)" - echo - echo "Typically, one would first generate the required certificates and " - echo "genesis block, then bring up the network. e.g.:" - echo - echo " byfn.sh generate -c mychannel" - echo " byfn.sh up -c mychannel -s couchdb" - echo " byfn.sh up -c mychannel -s couchdb -i 1.4.0" - echo " byfn.sh up -l node" - echo " byfn.sh down -c mychannel" - echo " byfn.sh upgrade -c mychannel" - echo - echo "Taking all defaults:" - echo " byfn.sh generate" - echo " byfn.sh up" - echo " byfn.sh down" -} - -# Ask user for confirmation to proceed -function askProceed() { - read -p "Continue? [Y/n] " ans - case "$ans" in - y | Y | "") - echo "proceeding ..." - ;; - n | N) - echo "exiting..." - exit 1 - ;; - *) - echo "invalid response" - askProceed - ;; - esac -} - -# Obtain CONTAINER_IDS and remove them -# TODO Might want to make this optional - could clear other containers -function clearContainers() { - CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /dev-peer.*.mycc.*/) {print $1}') - if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then - echo "---- No containers available for deletion ----" - else - docker rm -f $CONTAINER_IDS - fi -} - -# Delete any images that were generated as a part of this setup -# specifically the following images are often left behind: -# TODO list generated image naming patterns -function removeUnwantedImages() { - DOCKER_IMAGE_IDS=$(docker images | awk '($1 ~ /dev-peer.*.mycc.*/) {print $3}') - if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then - echo "---- No images available for deletion ----" - else - docker rmi -f $DOCKER_IMAGE_IDS - fi -} - -# Versions of fabric known not to work with this release of first-network -BLACKLISTED_VERSIONS="^1\.0\. ^1\.1\.0-preview ^1\.1\.0-alpha" - -# Do some basic sanity checking to make sure that the appropriate versions of fabric -# binaries/images are available. In the future, additional checking for the presence -# of go or other items could be added. -function checkPrereqs() { - # Note, we check configtxlator externally because it does not require a config file, and peer in the - # docker image because of FAB-8551 that makes configtxlator return 'development version' in docker - LOCAL_VERSION=$(configtxlator version | sed -ne 's/ Version: //p') - DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-tools:$IMAGETAG peer version | sed -ne 's/ Version: //p' | head -1) - - echo "LOCAL_VERSION=$LOCAL_VERSION" - echo "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" - - if [ "$LOCAL_VERSION" != "$DOCKER_IMAGE_VERSION" ]; then - echo "=================== WARNING ===================" - echo " Local fabric binaries and docker images are " - echo " out of sync. This may cause problems. " - echo "===============================================" - fi - - for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do - echo "$LOCAL_VERSION" | grep -q $UNSUPPORTED_VERSION - if [ $? -eq 0 ]; then - echo "ERROR! Local Fabric binary version of $LOCAL_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." - exit 1 - fi - - echo "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION - if [ $? -eq 0 ]; then - echo "ERROR! Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." - exit 1 - fi - done -} - -# Generate the needed certificates, the genesis block and start the network. -function networkUp() { - checkPrereqs - # generate artifacts if they don't exist - if [ ! -d "crypto-config" ]; then - generateCerts - replacePrivateKey - generateChannelArtifacts - fi - COMPOSE_FILES="-f ${COMPOSE_FILE}" - if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}" - export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk) - export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk) - fi - if [ "${CONSENSUS_TYPE}" == "kafka" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_KAFKA}" - elif [ "${CONSENSUS_TYPE}" == "etcdraft" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_RAFT2}" - fi - if [ "${IF_COUCHDB}" == "couchdb" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}" - fi - IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1 - docker ps -a - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to start network" - exit 1 - fi - - if [ "$CONSENSUS_TYPE" == "kafka" ]; then - sleep 1 - echo "Sleeping 10s to allow $CONSENSUS_TYPE cluster to complete booting" - sleep 9 - fi - - if [ "$CONSENSUS_TYPE" == "etcdraft" ]; then - sleep 1 - echo "Sleeping 15s to allow $CONSENSUS_TYPE cluster to complete booting" - sleep 14 - fi - - # now run the end to end script - docker exec cli scripts/script.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE $NO_CHAINCODE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Test failed" - exit 1 - fi -} - -# Upgrade the network components which are at version 1.3.x to 1.4.x -# Stop the orderer and peers, backup the ledger for orderer and peers, cleanup chaincode containers and images -# and relaunch the orderer and peers with latest tag -function upgradeNetwork() { - if [[ "$IMAGETAG" == *"1.4"* ]] || [[ $IMAGETAG == "latest" ]]; then - docker inspect -f '{{.Config.Volumes}}' orderer.example.com | grep -q '/var/hyperledger/production/orderer' - if [ $? -ne 0 ]; then - echo "ERROR !!!! This network does not appear to start with fabric-samples >= v1.3.x?" - exit 1 - fi - - LEDGERS_BACKUP=./ledgers-backup - - # create ledger-backup directory - mkdir -p $LEDGERS_BACKUP - - export IMAGE_TAG=$IMAGETAG - COMPOSE_FILES="-f ${COMPOSE_FILE}" - if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}" - export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk) - export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk) - fi - if [ "${CONSENSUS_TYPE}" == "kafka" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_KAFKA}" - elif [ "${CONSENSUS_TYPE}" == "etcdraft" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_RAFT2}" - fi - if [ "${IF_COUCHDB}" == "couchdb" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}" - fi - - # removing the cli container - docker-compose $COMPOSE_FILES stop cli - docker-compose $COMPOSE_FILES up -d --no-deps cli - - echo "Upgrading orderer" - docker-compose $COMPOSE_FILES stop orderer.example.com - docker cp -a orderer.example.com:/var/hyperledger/production/orderer $LEDGERS_BACKUP/orderer.example.com - docker-compose $COMPOSE_FILES up -d --no-deps orderer.example.com - - for PEER in peer0.org1.example.com peer1.org1.example.com peer0.org2.example.com peer1.org2.example.com; do - echo "Upgrading peer $PEER" - - # Stop the peer and backup its ledger - docker-compose $COMPOSE_FILES stop $PEER - docker cp -a $PEER:/var/hyperledger/production $LEDGERS_BACKUP/$PEER/ - - # Remove any old containers and images for this peer - CC_CONTAINERS=$(docker ps | grep dev-$PEER | awk '{print $1}') - if [ -n "$CC_CONTAINERS" ]; then - docker rm -f $CC_CONTAINERS - fi - CC_IMAGES=$(docker images | grep dev-$PEER | awk '{print $1}') - if [ -n "$CC_IMAGES" ]; then - docker rmi -f $CC_IMAGES - fi - - # Start the peer again - docker-compose $COMPOSE_FILES up -d --no-deps $PEER - done - - docker exec cli scripts/upgrade_to_v14.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Test failed" - exit 1 - fi - else - echo "ERROR !!!! Pass the v1.4.x image tag" - fi -} - -# Tear down running network -function networkDown() { - # stop org3 containers also in addition to org1 and org2, in case we were running sample to add org3 - # stop kafka and zookeeper containers in case we're running with kafka consensus-type - docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH -f $COMPOSE_FILE_KAFKA -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_CA -f $COMPOSE_FILE_ORG3 down --volumes --remove-orphans - - # Don't remove the generated artifacts -- note, the ledgers are always removed - if [ "$MODE" != "restart" ]; then - # Bring down the network, deleting the volumes - #Delete any ledger backups - docker run -v $PWD:/tmp/first-network --rm hyperledger/fabric-tools:$IMAGETAG rm -Rf /tmp/first-network/ledgers-backup - #Cleanup the chaincode containers - clearContainers - #Cleanup images - removeUnwantedImages - # remove orderer block and other channel configuration transactions and certs - rm -rf channel-artifacts/*.block channel-artifacts/*.tx crypto-config ./org3-artifacts/crypto-config/ channel-artifacts/org3.json - # remove the docker-compose yaml file that was customized to the example - rm -f docker-compose-e2e.yaml - fi -} - -# Using docker-compose-e2e-template.yaml, replace constants with private key file names -# generated by the cryptogen tool and output a docker-compose.yaml specific to this -# configuration -function replacePrivateKey() { - # sed on MacOSX does not support -i flag with a null extension. We will use - # 't' for our back-up's extension and delete it at the end of the function - ARCH=$(uname -s | grep Darwin) - if [ "$ARCH" == "Darwin" ]; then - OPTS="-it" - else - OPTS="-i" - fi - - # Copy the template to the file that will be modified to add the private key - cp docker-compose-e2e-template.yaml docker-compose-e2e.yaml - - # The next steps will replace the template's contents with the - # actual values of the private key file names for the two CAs. - CURRENT_DIR=$PWD - cd crypto-config/peerOrganizations/org1.example.com/ca/ - PRIV_KEY=$(ls *_sk) - cd "$CURRENT_DIR" - sed $OPTS "s/CA1_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-e2e.yaml - cd crypto-config/peerOrganizations/org2.example.com/ca/ - PRIV_KEY=$(ls *_sk) - cd "$CURRENT_DIR" - sed $OPTS "s/CA2_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-e2e.yaml - # If MacOSX, remove the temporary backup of the docker-compose file - if [ "$ARCH" == "Darwin" ]; then - rm docker-compose-e2e.yamlt - fi -} - -# We will use the cryptogen tool to generate the cryptographic material (x509 certs) -# for our various network entities. The certificates are based on a standard PKI -# implementation where validation is achieved by reaching a common trust anchor. -# -# Cryptogen consumes a file - ``crypto-config.yaml`` - that contains the network -# topology and allows us to generate a library of certificates for both the -# Organizations and the components that belong to those Organizations. Each -# Organization is provisioned a unique root certificate (``ca-cert``), that binds -# specific components (peers and orderers) to that Org. Transactions and communications -# within Fabric are signed by an entity's private key (``keystore``), and then verified -# by means of a public key (``signcerts``). You will notice a "count" variable within -# this file. We use this to specify the number of peers per Organization; in our -# case it's two peers per Org. The rest of this template is extremely -# self-explanatory. -# -# After we run the tool, the certs will be parked in a folder titled ``crypto-config``. - -# Generates Org certs using cryptogen tool -function generateCerts() { - which cryptogen - if [ "$?" -ne 0 ]; then - echo "cryptogen tool not found. exiting" - exit 1 - fi - echo - echo "##########################################################" - echo "##### Generate certificates using cryptogen tool #########" - echo "##########################################################" - - if [ -d "crypto-config" ]; then - rm -Rf crypto-config - fi - set -x - cryptogen generate --config=./crypto-config.yaml - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate certificates..." - exit 1 - fi - echo -} - -# The `configtxgen tool is used to create four artifacts: orderer **bootstrap -# block**, fabric **channel configuration transaction**, and two **anchor -# peer transactions** - one for each Peer Org. -# -# The orderer block is the genesis block for the ordering service, and the -# channel transaction file is broadcast to the orderer at channel creation -# time. The anchor peer transactions, as the name might suggest, specify each -# Org's anchor peer on this channel. -# -# Configtxgen consumes a file - ``configtx.yaml`` - that contains the definitions -# for the sample network. There are three members - one Orderer Org (``OrdererOrg``) -# and two Peer Orgs (``Org1`` & ``Org2``) each managing and maintaining two peer nodes. -# This file also specifies a consortium - ``SampleConsortium`` - consisting of our -# two Peer Orgs. Pay specific attention to the "Profiles" section at the top of -# this file. You will notice that we have two unique headers. One for the orderer genesis -# block - ``TwoOrgsOrdererGenesis`` - and one for our channel - ``TwoOrgsChannel``. -# These headers are important, as we will pass them in as arguments when we create -# our artifacts. This file also contains two additional specifications that are worth -# noting. Firstly, we specify the anchor peers for each Peer Org -# (``peer0.org1.example.com`` & ``peer0.org2.example.com``). Secondly, we point to -# the location of the MSP directory for each member, in turn allowing us to store the -# root certificates for each Org in the orderer genesis block. This is a critical -# concept. Now any network entity communicating with the ordering service can have -# its digital signature verified. -# -# This function will generate the crypto material and our four configuration -# artifacts, and subsequently output these files into the ``channel-artifacts`` -# folder. -# -# If you receive the following warning, it can be safely ignored: -# -# [bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP. -# -# You can ignore the logs regarding intermediate certs, we are not using them in -# this crypto implementation. - -# Generate orderer genesis block, channel configuration transaction and -# anchor peer update transactions -function generateChannelArtifacts() { - which configtxgen - if [ "$?" -ne 0 ]; then - echo "configtxgen tool not found. exiting" - exit 1 - fi - - echo "##########################################################" - echo "######### Generating Orderer Genesis block ##############" - echo "##########################################################" - # Note: For some unknown reason (at least for now) the block file can't be - # named orderer.genesis.block or the orderer will fail to launch! - echo "CONSENSUS_TYPE="$CONSENSUS_TYPE - set -x - if [ "$CONSENSUS_TYPE" == "solo" ]; then - configtxgen -profile TwoOrgsOrdererGenesis -channelID $SYS_CHANNEL -outputBlock ./channel-artifacts/genesis.block - elif [ "$CONSENSUS_TYPE" == "kafka" ]; then - configtxgen -profile SampleDevModeKafka -channelID $SYS_CHANNEL -outputBlock ./channel-artifacts/genesis.block - elif [ "$CONSENSUS_TYPE" == "etcdraft" ]; then - configtxgen -profile SampleMultiNodeEtcdRaft -channelID $SYS_CHANNEL -outputBlock ./channel-artifacts/genesis.block - else - set +x - echo "unrecognized CONSESUS_TYPE='$CONSENSUS_TYPE'. exiting" - exit 1 - fi - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate orderer genesis block..." - exit 1 - fi - echo - echo "#################################################################" - echo "### Generating channel configuration transaction 'channel.tx' ###" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate channel configuration transaction..." - exit 1 - fi - - echo - echo "#################################################################" - echo "####### Generating anchor peer update for Org1MSP ##########" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate anchor peer update for Org1MSP..." - exit 1 - fi - - echo - echo "#################################################################" - echo "####### Generating anchor peer update for Org2MSP ##########" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate \ - ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate anchor peer update for Org2MSP..." - exit 1 - fi - echo -} - -# Obtain the OS and Architecture string that will be used to select the correct -# native binaries for your platform, e.g., darwin-amd64 or linux-amd64 -OS_ARCH=$(echo "$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}') -# timeout duration - the duration the CLI should wait for a response from -# another container before giving up -CLI_TIMEOUT=10 -# default for delay between commands -CLI_DELAY=3 -# system channel name defaults to "byfn-sys-channel" -SYS_CHANNEL="byfn-sys-channel" -# channel name defaults to "mychannel" -CHANNEL_NAME="mychannel" -# use this as the default docker-compose yaml definition -COMPOSE_FILE=docker-compose-cli.yaml -# -COMPOSE_FILE_COUCH=docker-compose-couch.yaml -# org3 docker compose file -COMPOSE_FILE_ORG3=docker-compose-org3.yaml -# kafka and zookeeper compose file -COMPOSE_FILE_KAFKA=docker-compose-kafka.yaml -# two additional etcd/raft orderers -COMPOSE_FILE_RAFT2="docker-compose-etcdraft2.yaml -f docker-compose-etcdraft2-behave.yaml" -# certificate authorities compose file -COMPOSE_FILE_CA=docker-compose-ca.yaml -# -# use golang as the default language for chaincode -LANGUAGE=golang -# default image tag -IMAGETAG="latest" -# default consensus type -CONSENSUS_TYPE="solo" -# Parse commandline args -if [ "$1" = "-m" ]; then # supports old usage, muscle memory is powerful! - shift -fi -MODE=$1 -shift -# Determine whether starting, stopping, restarting, generating or upgrading -if [ "$MODE" == "up" ]; then - EXPMODE="Starting" -elif [ "$MODE" == "down" ]; then - EXPMODE="Stopping" -elif [ "$MODE" == "restart" ]; then - EXPMODE="Restarting" -elif [ "$MODE" == "generate" ]; then - EXPMODE="Generating certs and genesis block" -elif [ "$MODE" == "upgrade" ]; then - EXPMODE="Upgrading the network" -else - printHelp - exit 1 -fi - -while getopts "h?c:t:d:f:s:l:i:o:anv" opt; do - case "$opt" in - h | \?) - printHelp - exit 0 - ;; - c) - CHANNEL_NAME=$OPTARG - ;; - t) - CLI_TIMEOUT=$OPTARG - ;; - d) - CLI_DELAY=$OPTARG - ;; - f) - COMPOSE_FILE=$OPTARG - ;; - s) - IF_COUCHDB=$OPTARG - ;; - l) - LANGUAGE=$OPTARG - ;; - i) - IMAGETAG=$(go env GOARCH)"-"$OPTARG - ;; - o) - CONSENSUS_TYPE=$OPTARG - ;; - a) - CERTIFICATE_AUTHORITIES=true - ;; - n) - NO_CHAINCODE=true - ;; - v) - VERBOSE=true - ;; - esac -done - - -# Announce what was requested - -if [ "${IF_COUCHDB}" == "couchdb" ]; then - echo - echo "${EXPMODE} for channel '${CHANNEL_NAME}' with CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds and using database '${IF_COUCHDB}'" -else - echo "${EXPMODE} for channel '${CHANNEL_NAME}' with CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds" -fi -# ask for confirmation to proceed -yes | askProceed - -#Create the network using docker compose -if [ "${MODE}" == "up" ]; then - networkUp -elif [ "${MODE}" == "down" ]; then ## Clear the network - networkDown -elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts - generateCerts - # replacePrivateKey - generateChannelArtifacts - find -iregex '.*_sk$' | xargs -I{} bash -c 'pushd $(dirname {}); ln -s $(basename {}) sk; popd' > /dev/null -elif [ "${MODE}" == "restart" ]; then ## Restart the network - networkDown - networkUp -elif [ "${MODE}" == "upgrade" ]; then ## Upgrade the network from version 1.2.x to 1.3.x - upgradeNetwork -else - printHelp - exit 1 -fi diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/channel-artifacts/.gitkeep b/app/platform/fabric/e2e-test/fabric-samples/first-network/channel-artifacts/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/configtx.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/configtx.yaml deleted file mode 100644 index ad8d746b3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/configtx.yaml +++ /dev/null @@ -1,402 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# Section: Organizations -# -# - This section defines the different organizational identities which will -# be referenced later in the configuration. -# -################################################################################ -Organizations: - - # SampleOrg defines an MSP using the sampleconfig. It should never be used - # in production but may be used as a template for other definitions - - &OrdererOrg - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: OrdererOrg - - # ID to load the MSP definition as - ID: OrdererMSP - - # MSPDir is the filesystem path which contains the MSP configuration - MSPDir: crypto-config/ordererOrganizations/example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('OrdererMSP.member')" - Writers: - Type: Signature - Rule: "OR('OrdererMSP.member')" - Admins: - Type: Signature - Rule: "OR('OrdererMSP.admin')" - - - &Org1 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org1MSP - - # ID to load the MSP definition as - ID: Org1MSP - - MSPDir: crypto-config/peerOrganizations/org1.example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org1MSP.admin', 'Org1MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org1MSP.admin')" - - # leave this flag set to true. - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org1.example.com - Port: 7051 - - - &Org2 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org2MSP - - # ID to load the MSP definition as - ID: Org2MSP - - MSPDir: crypto-config/peerOrganizations/org2.example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org2MSP.admin', 'Org2MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org2MSP.admin')" - - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org2.example.com - Port: 9051 - -################################################################################ -# -# SECTION: Capabilities -# -# - This section defines the capabilities of fabric network. This is a new -# concept as of v1.1.0 and should not be utilized in mixed networks with -# v1.0.x peers and orderers. Capabilities define features which must be -# present in a fabric binary for that binary to safely participate in the -# fabric network. For instance, if a new MSP type is added, newer binaries -# might recognize and validate the signatures from this type, while older -# binaries without this support would be unable to validate those -# transactions. This could lead to different versions of the fabric binaries -# having different world states. Instead, defining a capability for a channel -# informs those binaries without this capability that they must cease -# processing transactions until they have been upgraded. For v1.0.x if any -# capabilities are defined (including a map with all capabilities turned off) -# then the v1.0.x peer will deliberately crash. -# -################################################################################ -Capabilities: - # Channel capabilities apply to both the orderers and the peers and must be - # supported by both. - # Set the value of the capability to true to require it. - Channel: &ChannelCapabilities - # V1.4.2 for Channel is a catchall flag for behavior which has been - # determined to be desired for all orderers and peers running at the v1.4.2 - # level, but which would be incompatible with orderers and peers from - # prior releases. - # Prior to enabling V1.4.2 channel capabilities, ensure that all - # orderers and peers on a channel are at v1.4.2 or later. - V1_4_2: true - - # Orderer capabilities apply only to the orderers, and may be safely - # used with prior release peers. - # Set the value of the capability to true to require it. - Orderer: &OrdererCapabilities - # V1.4.2 for Orderer is a catchall flag for behavior which has been - # determined to be desired for all orderers running at the v1.4.2 - # level, but which would be incompatible with orderers from prior releases. - # Prior to enabling V1.4.2 orderer capabilities, ensure that all - # orderers on a channel are at v1.4.2 or later. - V1_4_2: true - - # Application capabilities apply only to the peer network, and may be safely - # used with prior release orderers. - # Set the value of the capability to true to require it. - Application: &ApplicationCapabilities - # V1.4.2 for Application enables the new non-backwards compatible - # features and fixes of fabric v1.4.2. - V1_4_2: true - # V1.3 for Application enables the new non-backwards compatible - # features and fixes of fabric v1.3. - V1_3: false - # V1.2 for Application enables the new non-backwards compatible - # features and fixes of fabric v1.2 (note, this need not be set if - # later version capabilities are set) - V1_2: false - # V1.1 for Application enables the new non-backwards compatible - # features and fixes of fabric v1.1 (note, this need not be set if - # later version capabilities are set). - V1_1: false - -################################################################################ -# -# SECTION: Application -# -# - This section defines the values to encode into a config transaction or -# genesis block for application related parameters -# -################################################################################ -Application: &ApplicationDefaults - - # Organizations is the list of orgs which are defined as participants on - # the application side of the network - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Application policies, their canonical path is - # /Channel/Application/ - Policies: - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - - Capabilities: - <<: *ApplicationCapabilities -################################################################################ -# -# SECTION: Orderer -# -# - This section defines the values to encode into a config transaction or -# genesis block for orderer related parameters -# -################################################################################ -Orderer: &OrdererDefaults - - # Orderer Type: The orderer implementation to start - # Available types are "solo" and "kafka" - OrdererType: solo - - Addresses: - - orderer.example.com:7050 - - # Batch Timeout: The amount of time to wait before creating a batch - BatchTimeout: 2s - - # Batch Size: Controls the number of messages batched into a block - BatchSize: - - # Max Message Count: The maximum number of messages to permit in a batch - MaxMessageCount: 10 - - # Absolute Max Bytes: The absolute maximum number of bytes allowed for - # the serialized messages in a batch. - AbsoluteMaxBytes: 99 MB - - # Preferred Max Bytes: The preferred maximum number of bytes allowed for - # the serialized messages in a batch. A message larger than the preferred - # max bytes will result in a batch larger than preferred max bytes. - PreferredMaxBytes: 512 KB - - Kafka: - # Brokers: A list of Kafka brokers to which the orderer connects - # NOTE: Use IP:port notation - Brokers: - - 127.0.0.1:9092 - - # Organizations is the list of orgs which are defined as participants on - # the orderer side of the network - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Orderer policies, their canonical path is - # /Channel/Orderer/ - Policies: - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - # BlockValidation specifies what signatures must be included in the block - # from the orderer for the peer to validate it. - BlockValidation: - Type: ImplicitMeta - Rule: "ANY Writers" - -################################################################################ -# -# CHANNEL -# -# This section defines the values to encode into a config transaction or -# genesis block for channel related parameters. -# -################################################################################ -Channel: &ChannelDefaults - # Policies defines the set of policies at this level of the config tree - # For Channel policies, their canonical path is - # /Channel/ - Policies: - # Who may invoke the 'Deliver' API - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - # Who may invoke the 'Broadcast' API - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - # By default, who may modify elements at this config level - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - - # Capabilities describes the channel level capabilities, see the - # dedicated Capabilities section elsewhere in this file for a full - # description - Capabilities: - <<: *ChannelCapabilities - -################################################################################ -# -# Profile -# -# - Different configuration profiles may be encoded here to be specified -# as parameters to the configtxgen tool -# -################################################################################ -Profiles: - - TwoOrgsOrdererGenesis: - <<: *ChannelDefaults - Orderer: - <<: *OrdererDefaults - Organizations: - - *OrdererOrg - Capabilities: - <<: *OrdererCapabilities - Consortiums: - SampleConsortium: - Organizations: - - *Org1 - - *Org2 - TwoOrgsChannel: - Consortium: SampleConsortium - <<: *ChannelDefaults - Application: - <<: *ApplicationDefaults - Organizations: - - *Org1 - - *Org2 - Capabilities: - <<: *ApplicationCapabilities - - SampleDevModeKafka: - <<: *ChannelDefaults - Capabilities: - <<: *ChannelCapabilities - Orderer: - <<: *OrdererDefaults - OrdererType: kafka - Kafka: - Brokers: - - kafka.example.com:9092 - - Organizations: - - *OrdererOrg - Capabilities: - <<: *OrdererCapabilities - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *OrdererOrg - Consortiums: - SampleConsortium: - Organizations: - - *Org1 - - *Org2 - - SampleMultiNodeEtcdRaft: - <<: *ChannelDefaults - Capabilities: - <<: *ChannelCapabilities - Orderer: - <<: *OrdererDefaults - OrdererType: etcdraft - EtcdRaft: - Consenters: - - Host: orderer.example.com - Port: 7050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt - - Host: orderer2.example.com - Port: 7050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt - - Host: orderer3.example.com - Port: 7050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt - - Host: orderer4.example.com - Port: 7050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt - - Host: orderer5.example.com - Port: 7050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt - Addresses: - - orderer.example.com:7050 - - orderer2.example.com:7050 - - orderer3.example.com:7050 - - orderer4.example.com:7050 - - orderer5.example.com:7050 - - Organizations: - - *OrdererOrg - Capabilities: - <<: *OrdererCapabilities - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *OrdererOrg - Consortiums: - SampleConsortium: - Organizations: - - *Org1 - - *Org2 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.json b/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.json deleted file mode 100644 index 172c9f4e8..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "first-network-org1", - "version": "1.0.0", - "client": { - "organization": "Org1", - "connection": { - "timeout": { - "peer": { - "endorser": "300" - } - } - } - }, - "organizations": { - "Org1": { - "mspid": "Org1MSP", - "peers": ["peer0.org1.example.com", "peer1.org1.example.com"], - "certificateAuthorities": ["ca.org1.example.com"] - } - }, - "peers": { - "peer0.org1.example.com": { - "url": "grpcs://localhost:7051", - "tlsCACerts": { - "path": "crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem" - }, - "grpcOptions": { - "ssl-target-name-override": "peer0.org1.example.com" - } - }, - "peer1.org1.example.com": { - "url": "grpcs://localhost:8051", - "tlsCACerts": { - "path": "crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem" - }, - "grpcOptions": { - "ssl-target-name-override": "peer1.org1.example.com" - } - } - }, - "certificateAuthorities": { - "ca.org1.example.com": { - "url": "https://localhost:7054", - "caName": "ca-org1", - "tlsCACerts": { - "path": "crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem" - }, - "httpOptions": { - "verify": false - } - } - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.yaml deleted file mode 100644 index daa9ad642..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org1.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: first-network-org1 -version: 1.0.0 -client: - organization: Org1 - connection: - timeout: - peer: - endorser: '300' -organizations: - Org1: - mspid: Org1MSP - peers: - - peer0.org1.example.com - - peer1.org1.example.com - certificateAuthorities: - - ca.org1.example.com -peers: - peer0.org1.example.com: - url: grpcs://localhost:7051 - tlsCACerts: - path: crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem - grpcOptions: - ssl-target-name-override: peer0.org1.example.com - peer1.org1.example.com: - url: grpcs://localhost:8051 - tlsCACerts: - path: crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem - grpcOptions: - ssl-target-name-override: peer1.org1.example.com -certificateAuthorities: - ca.org1.example.com: - url: https://localhost:7054 - caName: ca-org1 - tlsCACerts: - path: crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem - httpOptions: - verify: false diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.json b/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.json deleted file mode 100644 index aa4c4acae..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "first-network-org2", - "version": "1.0.0", - "client": { - "organization": "Org2", - "connection": { - "timeout": { - "peer": { - "endorser": "300" - } - } - } - }, - "organizations": { - "Org2": { - "mspid": "Org2MSP", - "peers": ["peer0.org2.example.com", "peer1.org2.example.com"], - "certificateAuthorities": ["ca.org2.example.com"] - } - }, - "peers": { - "peer0.org2.example.com": { - "url": "grpcs://localhost:9051", - "tlsCACerts": { - "path": "crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem" - }, - "grpcOptions": { - "ssl-target-name-override": "peer0.org2.example.com" - } - }, - "peer1.org2.example.com": { - "url": "grpcs://localhost:10051", - "tlsCACerts": { - "path": "crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem" - }, - "grpcOptions": { - "ssl-target-name-override": "peer1.org2.example.com" - } - } - }, - "certificateAuthorities": { - "ca.org2.example.com": { - "url": "https://localhost:8054", - "caName": "ca-org2", - "tlsCACerts": { - "path": "crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem" - }, - "httpOptions": { - "verify": false - } - } - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.yaml deleted file mode 100644 index b21c879fd..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org2.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: first-network-org2 -version: 1.0.0 -client: - organization: Org2 - connection: - timeout: - peer: - endorser: '300' -organizations: - Org2: - mspid: Org2MSP - peers: - - peer0.org2.example.com - - peer1.org2.example.com - certificateAuthorities: - - ca.org2.example.com -peers: - peer0.org2.example.com: - url: grpcs://localhost:9051 - tlsCACerts: - path: crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem - grpcOptions: - ssl-target-name-override: peer0.org2.example.com - peer1.org2.example.com: - url: grpcs://localhost:10051 - tlsCACerts: - path: crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem - grpcOptions: - ssl-target-name-override: peer1.org2.example.com -certificateAuthorities: - ca.org2.example.com: - url: https://localhost:8054 - caName: ca-org2 - tlsCACerts: - path: crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem - httpOptions: - verify: false diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.json b/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.json deleted file mode 100644 index 1ad25381b..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "first-network-org3", - "version": "1.0.0", - "client": { - "organization": "Org3", - "connection": { - "timeout": { - "peer": { - "endorser": "300" - } - } - } - }, - "organizations": { - "Org3": { - "mspid": "Org3MSP", - "peers": ["peer0.org3.example.com", "peer1.org3.example.com"] - } - }, - "peers": { - "peer0.org3.example.com": { - "url": "grpcs://localhost:11051", - "tlsCACerts": { - "path": "org3-artifacts/crypto-config/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem" - }, - "grpcOptions": { - "ssl-target-name-override": "peer0.org3.example.com" - } - }, - "peer1.org3.example.com": { - "url": "grpcs://localhost:12051", - "tlsCACerts": { - "path": "org3-artifacts/crypto-config/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem" - }, - "grpcOptions": { - "ssl-target-name-override": "peer1.org3.example.com" - } - } - } -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.yaml deleted file mode 100644 index ebdc983d3..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/connection-org3.yaml +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: first-network-org3 -version: 1.0.0 -client: - organization: Org3 - connection: - timeout: - peer: - endorser: '300' -organizations: - Org3: - mspid: Org3MSP - peers: - - peer0.org3.example.com - - peer1.org3.example.com -peers: - peer0.org3.example.com: - url: grpcs://localhost:11051 - tlsCACerts: - path: org3-artifacts/crypto-config/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem - grpcOptions: - ssl-target-name-override: peer0.org3.example.com - peer1.org3.example.com: - url: grpcs://localhost:12051 - tlsCACerts: - path: org3-artifacts/crypto-config/peerOrganizations/org3.example.com/tlsca/tlsca.org3.example.com-cert.pem - grpcOptions: - ssl-target-name-override: peer1.org3.example.com diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/crypto-config.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/crypto-config.yaml deleted file mode 100644 index a38299b59..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/crypto-config.yaml +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# --------------------------------------------------------------------------- -# "OrdererOrgs" - Definition of organizations managing orderer nodes -# --------------------------------------------------------------------------- -OrdererOrgs: - # --------------------------------------------------------------------------- - # Orderer - # --------------------------------------------------------------------------- - - Name: Orderer - Domain: example.com - # --------------------------------------------------------------------------- - # "Specs" - See PeerOrgs below for complete description - # --------------------------------------------------------------------------- - Specs: - - Hostname: orderer - - Hostname: orderer2 - - Hostname: orderer3 - - Hostname: orderer4 - - Hostname: orderer5 - -# --------------------------------------------------------------------------- -# "PeerOrgs" - Definition of organizations managing peer nodes -# --------------------------------------------------------------------------- -PeerOrgs: - # --------------------------------------------------------------------------- - # Org1 - # --------------------------------------------------------------------------- - - Name: Org1 - Domain: org1.example.com - EnableNodeOUs: true - # --------------------------------------------------------------------------- - # "Specs" - # --------------------------------------------------------------------------- - # Uncomment this section to enable the explicit definition of hosts in your - # configuration. Most users will want to use Template, below - # - # Specs is an array of Spec entries. Each Spec entry consists of two fields: - # - Hostname: (Required) The desired hostname, sans the domain. - # - CommonName: (Optional) Specifies the template or explicit override for - # the CN. By default, this is the template: - # - # "{{.Hostname}}.{{.Domain}}" - # - # which obtains its values from the Spec.Hostname and - # Org.Domain, respectively. - # --------------------------------------------------------------------------- - # Specs: - # - Hostname: foo # implicitly "foo.org1.example.com" - # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above - # - Hostname: bar - # - Hostname: baz - # --------------------------------------------------------------------------- - # "Template" - # --------------------------------------------------------------------------- - # Allows for the definition of 1 or more hosts that are created sequentially - # from a template. By default, this looks like "peer%d" from 0 to Count-1. - # You may override the number of nodes (Count), the starting index (Start) - # or the template used to construct the name (Hostname). - # - # Note: Template and Specs are not mutually exclusive. You may define both - # sections and the aggregate nodes will be created for you. Take care with - # name collisions - # --------------------------------------------------------------------------- - Template: - Count: 2 - # Start: 5 - # Hostname: {{.Prefix}}{{.Index}} # default - # --------------------------------------------------------------------------- - # "Users" - # --------------------------------------------------------------------------- - # Count: The number of user accounts _in addition_ to Admin - # --------------------------------------------------------------------------- - Users: - Count: 1 - # --------------------------------------------------------------------------- - # Org2: See "Org1" for full specification - # --------------------------------------------------------------------------- - - Name: Org2 - Domain: org2.example.com - EnableNodeOUs: true - Template: - Count: 2 - Users: - Count: 1 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-ca.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-ca.yaml deleted file mode 100644 index 7f019606e..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-ca.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - ca0: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org1 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/${BYFN_CA1_PRIVATE_KEY} - - FABRIC_CA_SERVER_PORT=7054 - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${BYFN_CA1_PRIVATE_KEY} -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - networks: - - byfn - - ca1: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org2 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/${BYFN_CA2_PRIVATE_KEY} - - FABRIC_CA_SERVER_PORT=8054 - ports: - - "8054:8054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${BYFN_CA2_PRIVATE_KEY} -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - networks: - - byfn \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-cli.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-cli.yaml deleted file mode 100644 index a7aa3f4b9..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-cli.yaml +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer.example.com: - peer0.org1.example.com: - peer1.org1.example.com: - peer0.org2.example.com: - peer1.org2.example.com: - -networks: - byfn: - -services: - - orderer.example.com: - extends: - file: base/docker-compose-base.yaml - service: orderer.example.com - container_name: orderer.example.com - networks: - - byfn - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org1.example.com - networks: - - byfn - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org1.example.com - networks: - - byfn - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org2.example.com - networks: - - byfn - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org2.example.com - networks: - - byfn - - cli: - container_name: cli - image: hyperledger/fabric-tools:$IMAGE_TAG - tty: true - stdin_open: true - environment: - - SYS_CHANNEL=$SYS_CHANNEL - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - #- FABRIC_LOGGING_SPEC=DEBUG - - FABRIC_LOGGING_SPEC=INFO - - CORE_PEER_ID=cli - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash - volumes: - - /var/run/:/host/var/run/ - - ./../chaincode/:/opt/gopath/src/github.com/chaincode - - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts - depends_on: - - orderer.example.com - - peer0.org1.example.com - - peer1.org1.example.com - - peer0.org2.example.com - - peer1.org2.example.com - networks: - - byfn diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch-org3.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch-org3.yaml deleted file mode 100644 index 4e98ad943..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch-org3.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - couchdb4: - container_name: couchdb4 - image: hyperledger/fabric-couchdb - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "9984:5984" - networks: - - byfn - - peer0.org3.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb4:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb4 - - couchdb5: - container_name: couchdb5 - image: hyperledger/fabric-couchdb - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "10984:5984" - networks: - - byfn - - peer1.org3.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb5:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb5 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch.yaml deleted file mode 100644 index b14c7f5ca..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-couch.yaml +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - couchdb0: - container_name: couchdb0 - image: hyperledger/fabric-couchdb - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "5984:5984" - networks: - - byfn - - peer0.org1.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb0 - - couchdb1: - container_name: couchdb1 - image: hyperledger/fabric-couchdb - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "6984:5984" - networks: - - byfn - - peer1.org1.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb1 - - couchdb2: - container_name: couchdb2 - image: hyperledger/fabric-couchdb - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "7984:5984" - networks: - - byfn - - peer0.org2.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb2 - - couchdb3: - container_name: couchdb3 - image: hyperledger/fabric-couchdb - # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password - # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. - environment: - - COUCHDB_USER= - - COUCHDB_PASSWORD= - # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, - # for example map it to utilize Fauxton User Interface in dev environments. - ports: - - "8984:5984" - networks: - - byfn - - peer1.org2.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984 - # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD - # provide the credentials for ledger to connect to CouchDB. The username and password must - # match the username and password set for the associated CouchDB. - - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= - - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= - depends_on: - - couchdb3 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-e2e-template.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-e2e-template.yaml deleted file mode 100644 index bd8740287..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-e2e-template.yaml +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer.example.com: - peer0.org1.example.com: - peer1.org1.example.com: - peer0.org2.example.com: - peer1.org2.example.com: - -networks: - byfn: -services: - ca0: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org1 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/CA1_PRIVATE_KEY - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/CA1_PRIVATE_KEY -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - networks: - - byfn - - ca1: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org2 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/CA2_PRIVATE_KEY - ports: - - "8054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/CA2_PRIVATE_KEY -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - networks: - - byfn - - orderer.example.com: - extends: - file: base/docker-compose-base.yaml - service: orderer.example.com - container_name: orderer.example.com - networks: - - byfn - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org1.example.com - networks: - - byfn - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org1.example.com - networks: - - byfn - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org2.example.com - networks: - - byfn - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org2.example.com - networks: - - byfn diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2-behave.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2-behave.yaml deleted file mode 100644 index fbddd42a0..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2-behave.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - behave: - -services: - - orderer2.example.com: - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - orderer3.example.com: - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - orderer4.example.com: - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - orderer5.example.com: - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2.yaml deleted file mode 100644 index 1e525ee2b..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-etcdraft2.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer2.example.com: - orderer3.example.com: - orderer4.example.com: - orderer5.example.com: - -networks: - byfn: - -services: - - orderer2.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - container_name: orderer2.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/var/hyperledger/orderer/tls - - orderer2.example.com:/var/hyperledger/production/orderer - ports: - - 8050:7050 - - orderer3.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - container_name: orderer3.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/:/var/hyperledger/orderer/tls - - orderer3.example.com:/var/hyperledger/production/orderer - ports: - - 9050:7050 - - orderer4.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - container_name: orderer4.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/:/var/hyperledger/orderer/tls - - orderer4.example.com:/var/hyperledger/production/orderer - ports: - - 10050:7050 - - orderer5.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - container_name: orderer5.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/:/var/hyperledger/orderer/tls - - orderer5.example.com:/var/hyperledger/production/orderer - ports: - - 11050:7050 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-explorer.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-explorer.yaml deleted file mode 100644 index 4883e77da..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-explorer.yaml +++ /dev/null @@ -1,109 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer.example.com: - peer0.org1.example.com: - peer1.org1.example.com: - peer0.org2.example.com: - peer1.org2.example.com: - -networks: - behave: - byfn: - -services: - - orderer.example.com: - extends: - file: ./docker-compose-cli.yaml - service: orderer.example.com - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer0.org1.example.com: - extends: - file: ./docker-compose-cli.yaml - service: peer0.org1.example.com - environment: - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_behave - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer1.org1.example.com: - extends: - file: ./docker-compose-cli.yaml - service: peer1.org1.example.com - environment: - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_behave - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer0.org2.example.com: - extends: - file: ./docker-compose-cli.yaml - service: peer0.org2.example.com - environment: - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_behave - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - peer1.org2.example.com: - extends: - file: ./docker-compose-cli.yaml - service: peer1.org2.example.com - environment: - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_behave - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} - - cli: - container_name: cli - image: hyperledger/fabric-tools:$IMAGE_TAG - tty: true - stdin_open: true - environment: - - SYS_CHANNEL=$SYS_CHANNEL - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - #- FABRIC_LOGGING_SPEC=DEBUG - - FABRIC_LOGGING_SPEC=INFO - - CORE_PEER_ID=cli - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - volumes: - - /var/run/:/host/var/run/ - - ./../chaincode/:/opt/gopath/src/github.com/chaincode - - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts - depends_on: - - orderer.example.com - - peer0.org1.example.com - - peer1.org1.example.com - - peer0.org2.example.com - - peer1.org2.example.com - networks: - behave: - aliases: - - ${CORE_PEER_NETWORKID} diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-kafka.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-kafka.yaml deleted file mode 100644 index 06deac851..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-kafka.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - - -# NOTE: This is not the way a Kafka cluster would normally be deployed in production, as it is not secure -# and is not fault tolerant. This example is a toy deployment that is only meant to exercise the Kafka code path -# of the ordering service. - -version: '2' - -networks: - byfn: - -services: - zookeeper.example.com: - container_name: zookeeper.example.com - image: hyperledger/fabric-zookeeper:$IMAGE_TAG - environment: - ZOOKEEPER_CLIENT_PORT: 32181 - ZOOKEEPER_TICK_TIME: 2000 - networks: - - byfn - - kafka.example.com: - container_name: kafka.example.com - image: hyperledger/fabric-kafka:$IMAGE_TAG - depends_on: - - zookeeper.example.com - environment: - - KAFKA_BROKER_ID=1 - - KAFKA_ZOOKEEPER_CONNECT=zookeeper.example.com:2181 - - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka.example.com:9092 - - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 - - KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B - - KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B - - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false - - KAFKA_LOG_RETENTION_MS=-1 - - KAFKA_MIN_INSYNC_REPLICAS=1 - - KAFKA_DEFAULT_REPLICATION_FACTOR=1 - networks: - - byfn diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-org3.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-org3.yaml deleted file mode 100644 index 2ee41e3c6..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/docker-compose-org3.yaml +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - peer0.org3.example.com: - peer1.org3.example.com: - -networks: - byfn: - -services: - - peer0.org3.example.com: - container_name: peer0.org3.example.com - extends: - file: base/peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org3.example.com - - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:11051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org3.example.com:11052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:11052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org3.example.com:12051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org3.example.com:11051 - - CORE_PEER_LOCALMSPID=Org3MSP - volumes: - - /var/run/:/host/var/run/ - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/msp:/etc/hyperledger/fabric/msp - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org3.example.com:/var/hyperledger/production - ports: - - 11051:11051 - networks: - - byfn - - peer1.org3.example.com: - container_name: peer1.org3.example.com - extends: - file: base/peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org3.example.com - - CORE_PEER_ADDRESS=peer1.org3.example.com:12051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:12051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org3.example.com:12052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:12052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org3.example.com:11051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org3.example.com:12051 - - CORE_PEER_LOCALMSPID=Org3MSP - volumes: - - /var/run/:/host/var/run/ - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/msp:/etc/hyperledger/fabric/msp - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org3.example.com:/var/hyperledger/production - ports: - - 12051:12051 - networks: - - byfn - - - Org3cli: - container_name: Org3cli - image: hyperledger/fabric-tools:$IMAGE_TAG - tty: true - stdin_open: true - environment: - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - FABRIC_LOGGING_SPEC=INFO - #- FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_ID=Org3cli - - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - - CORE_PEER_LOCALMSPID=Org3MSP - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt - - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash - volumes: - - /var/run/:/host/var/run/ - - ./../chaincode/:/opt/gopath/src/github.com/chaincode - - ./org3-artifacts/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - - ./crypto-config/peerOrganizations/org1.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com - - ./crypto-config/peerOrganizations/org2.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com - - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - depends_on: - - peer0.org3.example.com - - peer1.org3.example.com - networks: - - byfn diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/eyfn.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/eyfn.sh deleted file mode 100755 index ad2c37693..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/eyfn.sh +++ /dev/null @@ -1,326 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script extends the Hyperledger Fabric By Your First Network by -# adding a third organization to the network previously setup in the -# BYFN tutorial. -# - -# prepending $PWD/../bin to PATH to ensure we are picking up the correct binaries -# this may be commented out to resolve installed version of tools if desired -export PATH=${PWD}/../bin:${PWD}:$PATH -export FABRIC_CFG_PATH=${PWD} -export VERBOSE=false - -# Print the usage message -function printHelp () { - echo "Usage: " - echo " eyfn.sh up|down|restart|generate [-c ] [-t ] [-d ] [-f ] [-s ]" - echo " eyfn.sh -h|--help (print this message)" - echo " - one of 'up', 'down', 'restart' or 'generate'" - echo " - 'up' - bring up the network with docker-compose up" - echo " - 'down' - clear the network with docker-compose down" - echo " - 'restart' - restart the network" - echo " - 'generate' - generate required certificates and genesis block" - echo " -c - channel name to use (defaults to \"mychannel\")" - echo " -t - CLI timeout duration in seconds (defaults to 10)" - echo " -d - delay duration in seconds (defaults to 3)" - echo " -f - specify which docker-compose file use (defaults to docker-compose-cli.yaml)" - echo " -s - the database backend to use: goleveldb (default) or couchdb" - echo " -l - the chaincode language: golang (default) or node" - echo " -i - the tag to be used to launch the network (defaults to \"latest\")" - echo " -v - verbose mode" - echo - echo "Typically, one would first generate the required certificates and " - echo "genesis block, then bring up the network. e.g.:" - echo - echo " eyfn.sh generate -c mychannel" - echo " eyfn.sh up -c mychannel -s couchdb" - echo " eyfn.sh up -l node" - echo " eyfn.sh down -c mychannel" - echo - echo "Taking all defaults:" - echo " eyfn.sh generate" - echo " eyfn.sh up" - echo " eyfn.sh down" -} - -# Ask user for confirmation to proceed -function askProceed () { - read -p "Continue? [Y/n] " ans - case "$ans" in - y|Y|"" ) - echo "proceeding ..." - ;; - n|N ) - echo "exiting..." - exit 1 - ;; - * ) - echo "invalid response" - askProceed - ;; - esac -} - -# Obtain CONTAINER_IDS and remove them -# TODO Might want to make this optional - could clear other containers -function clearContainers () { - CONTAINER_IDS=$(docker ps -aq) - if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then - echo "---- No containers available for deletion ----" - else - docker rm -f $CONTAINER_IDS - fi -} - -# Delete any images that were generated as a part of this setup -# specifically the following images are often left behind: -# TODO list generated image naming patterns -function removeUnwantedImages() { - DOCKER_IMAGE_IDS=$(docker images|awk '($1 ~ /dev-peer.*.mycc.*/) {print $3}') - if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then - echo "---- No images available for deletion ----" - else - docker rmi -f $DOCKER_IMAGE_IDS - fi -} - -# Generate the needed certificates, the genesis block and start the network. -function networkUp () { - # generate artifacts if they don't exist - if [ ! -d "org3-artifacts/crypto-config" ]; then - generateCerts - generateChannelArtifacts - createConfigTx - fi - # start org3 peers - if [ "${IF_COUCHDB}" == "couchdb" ]; then - IMAGE_TAG=${IMAGETAG} docker-compose -f $COMPOSE_FILE_ORG3 -f $COMPOSE_FILE_COUCH_ORG3 up -d 2>&1 - else - IMAGE_TAG=$IMAGETAG docker-compose -f $COMPOSE_FILE_ORG3 up -d 2>&1 - fi - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to start Org3 network" - exit 1 - fi - echo - echo "###############################################################" - echo "############### Have Org3 peers join network ##################" - echo "###############################################################" - docker exec Org3cli ./scripts/step2org3.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to have Org3 peers join network" - exit 1 - fi - echo - echo "###############################################################" - echo "##### Upgrade chaincode to have Org3 peers on the network #####" - echo "###############################################################" - docker exec cli ./scripts/step3org3.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to add Org3 peers on network" - exit 1 - fi - # finish by running the test - docker exec Org3cli ./scripts/testorg3.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to run test" - exit 1 - fi -} - -# Tear down running network -function networkDown () { - docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_KAFKA -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_ORG3 -f $COMPOSE_FILE_COUCH down --volumes --remove-orphans - # Don't remove containers, images, etc if restarting - if [ "$MODE" != "restart" ]; then - #Cleanup the chaincode containers - clearContainers - #Cleanup images - removeUnwantedImages - # remove orderer block and other channel configuration transactions and certs - rm -rf channel-artifacts/*.block channel-artifacts/*.tx crypto-config ./org3-artifacts/crypto-config/ channel-artifacts/org3.json - # remove the docker-compose yaml file that was customized to the example - rm -f docker-compose-e2e.yaml - fi -} - -# Use the CLI container to create the configuration transaction needed to add -# Org3 to the network -function createConfigTx () { - echo - echo "###############################################################" - echo "####### Generate and submit config tx to add Org3 #############" - echo "###############################################################" - docker exec cli scripts/step1org3.sh $CHANNEL_NAME $CLI_DELAY $LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to create config tx" - exit 1 - fi -} - -# We use the cryptogen tool to generate the cryptographic material -# (x509 certs) for the new org. After we run the tool, the certs will -# be parked in the BYFN folder titled ``crypto-config``. - -# Generates Org3 certs using cryptogen tool -function generateCerts (){ - which cryptogen - if [ "$?" -ne 0 ]; then - echo "cryptogen tool not found. exiting" - exit 1 - fi - echo - echo "###############################################################" - echo "##### Generate Org3 certificates using cryptogen tool #########" - echo "###############################################################" - - (cd org3-artifacts - set -x - cryptogen generate --config=./org3-crypto.yaml - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate certificates..." - exit 1 - fi - ) - echo -} - -# Generate channel configuration transaction -function generateChannelArtifacts() { - which configtxgen - if [ "$?" -ne 0 ]; then - echo "configtxgen tool not found. exiting" - exit 1 - fi - echo "##########################################################" - echo "######### Generating Org3 config material ###############" - echo "##########################################################" - (cd org3-artifacts - export FABRIC_CFG_PATH=$PWD - set -x - configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate Org3 config material..." - exit 1 - fi - ) - cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/ - echo -} - - -# If BYFN wasn't run abort -if [ ! -d crypto-config ]; then - echo - echo "ERROR: Please, run byfn.sh first." - echo - exit 1 -fi - -# Obtain the OS and Architecture string that will be used to select the correct -# native binaries for your platform -OS_ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}') -# timeout duration - the duration the CLI should wait for a response from -# another container before giving up -CLI_TIMEOUT=10 -#default for delay -CLI_DELAY=3 -# channel name defaults to "mychannel" -CHANNEL_NAME="mychannel" -# use this as the default docker-compose yaml definition -COMPOSE_FILE=docker-compose-cli.yaml -# -COMPOSE_FILE_COUCH=docker-compose-couch.yaml -# use this as the default docker-compose yaml definition -COMPOSE_FILE_ORG3=docker-compose-org3.yaml -# -COMPOSE_FILE_COUCH_ORG3=docker-compose-couch-org3.yaml -# kafka and zookeeper compose file -COMPOSE_FILE_KAFKA=docker-compose-kafka.yaml -# two additional etcd/raft orderers -COMPOSE_FILE_RAFT2=docker-compose-etcdraft2.yaml -# use golang as the default language for chaincode -LANGUAGE=golang -# default image tag -IMAGETAG="latest" - -# Parse commandline args -if [ "$1" = "-m" ];then # supports old usage, muscle memory is powerful! - shift -fi -MODE=$1;shift -# Determine whether starting, stopping, restarting or generating for announce -if [ "$MODE" == "up" ]; then - EXPMODE="Starting" -elif [ "$MODE" == "down" ]; then - EXPMODE="Stopping" -elif [ "$MODE" == "restart" ]; then - EXPMODE="Restarting" -elif [ "$MODE" == "generate" ]; then - EXPMODE="Generating certs and genesis block for" -else - printHelp - exit 1 -fi -while getopts "h?c:t:d:f:s:l:i:v" opt; do - case "$opt" in - h|\?) - printHelp - exit 0 - ;; - c) CHANNEL_NAME=$OPTARG - ;; - t) CLI_TIMEOUT=$OPTARG - ;; - d) CLI_DELAY=$OPTARG - ;; - f) COMPOSE_FILE=$OPTARG - ;; - s) IF_COUCHDB=$OPTARG - ;; - l) LANGUAGE=$OPTARG - ;; - i) IMAGETAG=$OPTARG - ;; - v) VERBOSE=true - ;; - esac -done - -# Announce what was requested - - if [ "${IF_COUCHDB}" == "couchdb" ]; then - echo - echo "${EXPMODE} with channel '${CHANNEL_NAME}' and CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds and using database '${IF_COUCHDB}'" - else - echo "${EXPMODE} with channel '${CHANNEL_NAME}' and CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds" - fi -# ask for confirmation to proceed -askProceed - -#Create the network using docker compose -if [ "${MODE}" == "up" ]; then - networkUp -elif [ "${MODE}" == "down" ]; then ## Clear the network - networkDown -elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts - generateCerts - generateChannelArtifacts - createConfigTx -elif [ "${MODE}" == "restart" ]; then ## Restart the network - networkDown - networkUp -else - printHelp - exit 1 -fi diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/configtx.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/configtx.yaml deleted file mode 100644 index ab3c81a7a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/configtx.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# Section: Organizations -# -# - This section defines the different organizational identities which will -# be referenced later in the configuration. -# -################################################################################ -Organizations: - - &Org3 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org3MSP - - # ID to load the MSP definition as - ID: Org3MSP - - MSPDir: crypto-config/peerOrganizations/org3.example.com/msp - - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org3.example.com - Port: 11051 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/org3-crypto.yaml b/app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/org3-crypto.yaml deleted file mode 100644 index 4711620d7..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/org3-artifacts/org3-crypto.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# --------------------------------------------------------------------------- -# "PeerOrgs" - Definition of organizations managing peer nodes -# --------------------------------------------------------------------------- -PeerOrgs: - # --------------------------------------------------------------------------- - # Org3 - # --------------------------------------------------------------------------- - - Name: Org3 - Domain: org3.example.com - EnableNodeOUs: true - Template: - Count: 2 - Users: - Count: 1 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/capabilities.json b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/capabilities.json deleted file mode 100644 index 8cc10954a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/capabilities.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "mod_policy": "Admins", - "value": { - "capabilities": { - "V1_4_2": {} - } - }, - "version": "0" -} diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/script.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/script.sh deleted file mode 100755 index 04bdea5f9..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/script.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Build your first network (BYFN) end-to-end test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -NO_CHAINCODE="$6" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${LANGUAGE:="golang"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -: ${NO_CHAINCODE:="false"} -LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=10 - -CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" -if [ "$LANGUAGE" = "node" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/" -fi - -if [ "$LANGUAGE" = "java" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/java/" -fi - -echo "Channel name : "$CHANNEL_NAME - -# import utils -. scripts/utils.sh - -createChannel() { - setGlobals 0 1 - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx >&log.txt - res=$? - set +x - else - set -x - peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Channel creation failed" - echo "===================== Channel '$CHANNEL_NAME' created ===================== " - echo -} - -joinChannel () { - for org in 1 2; do - for peer in 0 1; do - joinChannelWithRetry $peer $org - echo "===================== peer${peer}.org${org} joined channel '$CHANNEL_NAME' ===================== " - sleep $DELAY - echo - done - done -} - -## Create channel -echo "Creating channel..." -createChannel - -## Join all the peers to the channel -echo "Having all peers join the channel..." -joinChannel - -## Set the anchor peers for each org in the channel -echo "Updating anchor peers for org1..." -updateAnchorPeers 0 1 -echo "Updating anchor peers for org2..." -updateAnchorPeers 0 2 - -if [ "${NO_CHAINCODE}" != "true" ]; then - - ## Install chaincode on peer0.org1 and peer0.org2 - echo "Installing chaincode on peer0.org1..." - installChaincode 0 1 - echo "Install chaincode on peer0.org2..." - installChaincode 0 2 - - # Instantiate chaincode on peer0.org2 - echo "Instantiating chaincode on peer0.org2..." - instantiateChaincode 0 2 - - # Query chaincode on peer0.org1 - echo "Querying chaincode on peer0.org1..." - chaincodeQuery 0 1 100 - - # Invoke chaincode on peer0.org1 and peer0.org2 - echo "Sending invoke transaction on peer0.org1 peer0.org2..." - chaincodeInvoke 0 1 0 2 - - ## Install chaincode on peer1.org2 - echo "Installing chaincode on peer1.org2..." - installChaincode 1 2 - - # Query on chaincode on peer1.org2, check if the result is 90 - echo "Querying chaincode on peer1.org2..." - chaincodeQuery 1 2 90 - -fi - -echo -echo "========= All GOOD, BYFN execution completed =========== " -echo - -echo -echo " _____ _ _ ____ " -echo "| ____| | \ | | | _ \ " -echo "| _| | \| | | | | | " -echo "| |___ | |\ | | |_| | " -echo "|_____| |_| \_| |____/ " -echo - -exit 0 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step1org3.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step1org3.sh deleted file mode 100755 index bff4d6a04..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step1org3.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# first step of the EYFN tutorial. It creates and submits a -# configuration transaction to add org3 to the network previously -# setup in the BYFN tutorial. -# - -CHANNEL_NAME="$1" -DELAY="$2" -LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${LANGUAGE:="golang"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" -if [ "$LANGUAGE" = "node" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/" -fi - -# import utils -. scripts/utils.sh - -echo -echo "========= Creating config transaction to add org3 to network =========== " -echo - -echo "Installing jq" -apt-get -y update && apt-get -y install jq - -# Fetch the config for the channel, writing it to config.json -fetchChannelConfig ${CHANNEL_NAME} config.json - -# Modify the configuration to append the new org -set -x -jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json -set +x - -# Compute a config update, based on the differences between config.json and modified_config.json, write it as a transaction to org3_update_in_envelope.pb -createConfigUpdate ${CHANNEL_NAME} config.json modified_config.json org3_update_in_envelope.pb - -echo -echo "========= Config transaction to add org3 to network created ===== " -echo - -echo "Signing config transaction" -echo -signConfigtxAsPeerOrg 1 org3_update_in_envelope.pb - -echo -echo "========= Submitting transaction from a different peer (peer0.org2) which also signs it ========= " -echo -setGlobals 0 2 -set -x -peer channel update -f org3_update_in_envelope.pb -c ${CHANNEL_NAME} -o orderer.example.com:7050 --tls --cafile ${ORDERER_CA} -set +x - -echo -echo "========= Config transaction to add org3 to network submitted! =========== " -echo - -exit 0 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step2org3.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step2org3.sh deleted file mode 100755 index 75745ef93..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step2org3.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# second step of the EYFN tutorial. It joins the org3 peers to the -# channel previously setup in the BYFN tutorial and install the -# chaincode as version 2.0 on peer0.org3. -# - -echo -echo "========= Getting Org3 on to your first network ========= " -echo -CHANNEL_NAME="$1" -DELAY="$2" -LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${LANGUAGE:="golang"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" -if [ "$LANGUAGE" = "node" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/" -fi - -# import utils -. scripts/utils.sh - -echo "Fetching channel config block from orderer..." -set -x -peer channel fetch 0 $CHANNEL_NAME.block -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA >&log.txt -res=$? -set +x -cat log.txt -verifyResult $res "Fetching config block from orderer has Failed" - -joinChannelWithRetry 0 3 -echo "===================== peer0.org3 joined channel '$CHANNEL_NAME' ===================== " -joinChannelWithRetry 1 3 -echo "===================== peer1.org3 joined channel '$CHANNEL_NAME' ===================== " -echo "Installing chaincode 2.0 on peer0.org3..." -installChaincode 0 3 2.0 - -echo -echo "========= Org3 is now halfway onto your first network ========= " -echo - -exit 0 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step3org3.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step3org3.sh deleted file mode 100755 index 9588a8b8a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/step3org3.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the cli container as the third -# step of the EYFN tutorial. It installs the chaincode as version 2.0 -# on peer0.org1 and peer0.org2, and uprage the chaincode on the -# channel to version 2.0, thus completing the addition of org3 to the -# network previously setup in the BYFN tutorial. -# - -echo -echo "========= Finish adding Org3 to your first network ========= " -echo -CHANNEL_NAME="$1" -DELAY="$2" -LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${LANGUAGE:="golang"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" -if [ "$LANGUAGE" = "node" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/" -fi - -# import utils -. scripts/utils.sh - -echo "===================== Installing chaincode 2.0 on peer0.org1 ===================== " -installChaincode 0 1 2.0 -echo "===================== Installing chaincode 2.0 on peer0.org2 ===================== " -installChaincode 0 2 2.0 - -echo "===================== Upgrading chaincode on peer0.org1 ===================== " -upgradeChaincode 0 1 - -echo -echo "========= Finished adding Org3 to your first network! ========= " -echo - -exit 0 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/testorg3.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/testorg3.sh deleted file mode 100755 index 6d1930cd0..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/testorg3.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# final step of the EYFN tutorial. It simply issues a couple of -# chaincode requests through the org3 peers to check that org3 was -# properly added to the network previously setup in the BYFN tutorial. -# - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Extend your first network (EYFN) test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${TIMEOUT:="10"} -: ${LANGUAGE:="golang"} -: ${VERBOSE:="false"} -LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" -if [ "$LANGUAGE" = "node" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/" -fi - -echo "Channel name : "$CHANNEL_NAME - -# import functions -. scripts/utils.sh - -# Query chaincode on peer0.org3, check if the result is 90 -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 90 - -# Invoke chaincode on peer0.org1, peer0.org2, and peer0.org3 -echo "Sending invoke transaction on peer0.org1 peer0.org2 peer0.org3..." -chaincodeInvoke 0 1 0 2 0 3 - -# Query on chaincode on peer0.org3, peer0.org2, peer0.org1 check if the result is 80 -# We query a peer in each organization, to ensure peers from all organizations are in sync -# and there is no state fork between organizations. -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 80 - -echo "Querying chaincode on peer0.org2..." -chaincodeQuery 0 2 80 - -echo "Querying chaincode on peer0.org1..." -chaincodeQuery 0 1 80 - - -echo -echo "========= All GOOD, EYFN test execution completed =========== " -echo - -echo -echo " _____ _ _ ____ " -echo "| ____| | \ | | | _ \ " -echo "| _| | \| | | | | | " -echo "| |___ | |\ | | |_| | " -echo "|_____| |_| \_| |____/ " -echo - -exit 0 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/upgrade_to_v14.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/upgrade_to_v14.sh deleted file mode 100755 index f46217e0a..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/upgrade_to_v14.sh +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/bash - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Upgrade your first network (BYFN) from v1.3.x to v1.4.x end-to-end test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="5"} -: ${LANGUAGE:="golang"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -LANGUAGE=$(echo "$LANGUAGE" | tr [:upper:] [:lower:]) -COUNTER=1 -MAX_RETRY=5 -SYS_CHANNEL=$SYS_CHANNEL - -CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" -if [ "$LANGUAGE" = "node" ]; then - CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/" -fi - -echo "System channel name : "$SYS_CHANNEL -echo "Channel name : "$CHANNEL_NAME - -# import utils -. scripts/utils.sh - -# addCapabilityToChannel -# This function pulls the current channel config, modifies it with capabilities -# for the specified group, computes the config update, signs, and submits it. -addCapabilityToChannel() { - CH_NAME=$1 - GROUP=$2 - - setOrdererGlobals - - # Get the current channel config, decode and write it to config.json - fetchChannelConfig $CH_NAME config.json - - # Modify the correct section of the config based on capabilities group - if [ $GROUP == "orderer" ]; then - jq -s '.[0] * {"channel_group":{"groups":{"Orderer": {"values": {"Capabilities": .[1]}}}}}' config.json ./scripts/capabilities.json > modified_config.json - elif [ $GROUP == "channel" ]; then - jq -s '.[0] * {"channel_group":{"values": {"Capabilities": .[1]}}}' config.json ./scripts/capabilities.json > modified_config.json - elif [ $GROUP == "application" ]; then - jq -s '.[0] * {"channel_group":{"groups":{"Application": {"values": {"Capabilities": .[1]}}}}}' config.json ./scripts/capabilities.json > modified_config.json - fi - - # Create a config updated for this channel based on the differences between config.json and modified_config.json - # write the output to config_update_in_envelope.pb - createConfigUpdate "$CH_NAME" config.json modified_config.json config_update_in_envelope.pb - - # Sign, and set the correct identity for submission. - if [ $CH_NAME != $SYS_CHANNEL ] ; then - if [ $GROUP == "orderer" ]; then - # Modifying the orderer group requires only the Orderer admin to sign. - # Prepare to sign the update as the OrdererOrg.Admin - setOrdererGlobals - elif [ $GROUP == "channel" ]; then - # Modifying the channel group requires a majority of application admins and the orderer admin to sign. - # Sign with PeerOrg1.Admin - signConfigtxAsPeerOrg 1 config_update_in_envelope.pb - # Sign with PeerOrg2.Admin - signConfigtxAsPeerOrg 2 config_update_in_envelope.pb - # Prepare to sign the update as the OrdererOrg.Admin - setOrdererGlobals - elif [ $GROUP == "application" ]; then - # Modifying the application group requires a majority of application admins to sign. - # Sign with PeerOrg1.Admin - signConfigtxAsPeerOrg 1 config_update_in_envelope.pb - # Prepare to sign the update as the PeerOrg2.Admin - setGlobals 0 2 - fi - else - # For the orderer system channel, only the orderer admin needs sign - # which will be attached during the update - setOrdererGlobals - fi - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel update -f config_update_in_envelope.pb -c $CH_NAME -o orderer.example.com:7050 --cafile $ORDERER_CA - res=$? - set +x - else - set -x - peer channel update -f config_update_in_envelope.pb -c $CH_NAME -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA - res=$? - set +x - fi - verifyResult $res "Config update for \"$GROUP\" on \"$CH_NAME\" failed" - echo "===================== Config update for \"$GROUP\" on \"$CH_NAME\" is completed ===================== " - -} - -sleep $DELAY - -#Config update for /Channel on $SYS_CHANNEL -echo "Config update for /Channel on \"$SYS_CHANNEL\"" -addCapabilityToChannel $SYS_CHANNEL channel - -sleep $DELAY - -#Config update for /Channel/Orderer on $SYS_CHANNEL -echo "Config update for /Channel/Orderer on \"$SYS_CHANNEL\"" -addCapabilityToChannel $SYS_CHANNEL orderer - -sleep $DELAY - -#Config update for /Channel on $CHANNEL_NAME -echo "Config update for /Channel on \"$CHANNEL_NAME\"" -addCapabilityToChannel $CHANNEL_NAME channel - -sleep $DELAY - -#Config update for /Channel/Orderer -echo "Config update for /Channel/Orderer on \"$CHANNEL_NAME\"" -addCapabilityToChannel $CHANNEL_NAME orderer - -sleep $DELAY - -#Config update for /Channel/Application -echo "Config update for /Channel/Application on \"$CHANNEL_NAME\"" -addCapabilityToChannel $CHANNEL_NAME application - -sleep $DELAY - -#Query on chaincode on Peer0/Org1 -echo "Querying chaincode on org1/peer0..." -chaincodeQuery 0 1 90 - -sleep $DELAY - -#Invoke on chaincode on Peer0/Org1 -echo "Sending invoke transaction on org1/peer0..." -chaincodeInvoke 0 1 0 2 - -sleep $DELAY - -#Query on chaincode on Peer0/Org1 -echo "Querying chaincode on org1/peer0..." -chaincodeQuery 0 1 80 - -echo -echo "===================== All GOOD, End-2-End UPGRADE Scenario execution completed ===================== " -echo - -echo -echo " _____ _ _ ____ _____ ____ _____ " -echo "| ____| | \ | | | _ \ | ____| |___ \ | ____|" -echo "| _| | \| | | | | | _____ | _| __) | | _| " -echo "| |___ | |\ | | |_| | |_____| | |___ / __/ | |___ " -echo "|_____| |_| \_| |____/ |_____| |_____| |_____|" -echo - -exit 0 diff --git a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/utils.sh b/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/utils.sh deleted file mode 100755 index a6c533235..000000000 --- a/app/platform/fabric/e2e-test/fabric-samples/first-network/scripts/utils.sh +++ /dev/null @@ -1,321 +0,0 @@ -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This is a collection of bash functions used by different scripts - -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -PEER0_ORG1_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -PEER0_ORG2_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -PEER0_ORG3_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt - -# verify the result of the end-to-end test -verifyResult() { - if [ $1 -ne 0 ]; then - echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!" - echo "========= ERROR !!! FAILED to execute End-2-End Scenario ===========" - echo - exit 1 - fi -} - -# Set OrdererOrg.Admin globals -setOrdererGlobals() { - CORE_PEER_LOCALMSPID="OrdererMSP" - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp -} - -setGlobals() { - PEER=$1 - ORG=$2 - if [ $ORG -eq 1 ]; then - CORE_PEER_LOCALMSPID="Org1MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - else - CORE_PEER_ADDRESS=peer1.org1.example.com:8051 - fi - elif [ $ORG -eq 2 ]; then - CORE_PEER_LOCALMSPID="Org2MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org2.example.com:9051 - else - CORE_PEER_ADDRESS=peer1.org2.example.com:10051 - fi - - elif [ $ORG -eq 3 ]; then - CORE_PEER_LOCALMSPID="Org3MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - else - CORE_PEER_ADDRESS=peer1.org3.example.com:12051 - fi - else - echo "================== ERROR !!! ORG Unknown ==================" - fi - - if [ "$VERBOSE" == "true" ]; then - env | grep CORE - fi -} - -updateAnchorPeers() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx >&log.txt - res=$? - set +x - else - set -x - peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Anchor peer update failed" - echo "===================== Anchor peers updated for org '$CORE_PEER_LOCALMSPID' on channel '$CHANNEL_NAME' ===================== " - sleep $DELAY - echo -} - -## Sometimes Join takes time hence RETRY at least 5 times -joinChannelWithRetry() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - - set -x - peer channel join -b $CHANNEL_NAME.block >&log.txt - res=$? - set +x - cat log.txt - if [ $res -ne 0 -a $COUNTER -lt $MAX_RETRY ]; then - COUNTER=$(expr $COUNTER + 1) - echo "peer${PEER}.org${ORG} failed to join the channel, Retry after $DELAY seconds" - sleep $DELAY - joinChannelWithRetry $PEER $ORG - else - COUNTER=1 - fi - verifyResult $res "After $MAX_RETRY attempts, peer${PEER}.org${ORG} has failed to join channel '$CHANNEL_NAME' " -} - -installChaincode() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - VERSION=${3:-1.0} - set -x - peer chaincode install -n mycc -v ${VERSION} -l ${LANGUAGE} -p ${CC_SRC_PATH} >&log.txt - res=$? - set +x - cat log.txt - verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has failed" - echo "===================== Chaincode is installed on peer${PEER}.org${ORG} ===================== " - echo -} - -instantiateChaincode() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - VERSION=${3:-1.0} - - # while 'peer chaincode' command can get the orderer endpoint from the peer - # (if join was successful), let's supply it directly as we know it using - # the "-o" option - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer chaincode instantiate -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc -l ${LANGUAGE} -v ${VERSION} -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')" >&log.txt - res=$? - set +x - else - set -x - peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -l ${LANGUAGE} -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')" >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Chaincode instantiation on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' failed" - echo "===================== Chaincode is instantiated on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - echo -} - -upgradeChaincode() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - - set -x - peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')" - res=$? - set +x - cat log.txt - verifyResult $res "Chaincode upgrade on peer${PEER}.org${ORG} has failed" - echo "===================== Chaincode is upgraded on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - echo -} - -chaincodeQuery() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - EXPECTED_RESULT=$3 - echo "===================== Querying on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME'... ===================== " - local rc=1 - local starttime=$(date +%s) - - # continue to poll - # we either get a successful response, or reach TIMEOUT - while - test "$(($(date +%s) - starttime))" -lt "$TIMEOUT" -a $rc -ne 0 - do - sleep $DELAY - echo "Attempting to Query peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs" - set -x - peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >&log.txt - res=$? - set +x - test $res -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - # removed the string "Query Result" from peer chaincode query command - # result. as a result, have to support both options until the change - # is merged. - test $rc -ne 0 && VALUE=$(cat log.txt | egrep '^[0-9]+$') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Query successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo "!!!!!!!!!!!!!!! Query result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" - echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" - echo - exit 1 - fi -} - -# fetchChannelConfig -# Writes the current channel config for a given channel to a JSON file -fetchChannelConfig() { - CHANNEL=$1 - OUTPUT=$2 - - setOrdererGlobals - - echo "Fetching the most recent configuration block for the channel" - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL --cafile $ORDERER_CA - set +x - else - set -x - peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL --tls --cafile $ORDERER_CA - set +x - fi - - echo "Decoding config block to JSON and isolating config to ${OUTPUT}" - set -x - configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config >"${OUTPUT}" - set +x -} - -# signConfigtxAsPeerOrg -# Set the peerOrg admin of an org and signing the config update -signConfigtxAsPeerOrg() { - PEERORG=$1 - TX=$2 - setGlobals 0 $PEERORG - set -x - peer channel signconfigtx -f "${TX}" - set +x -} - -# createConfigUpdate -# Takes an original and modified config, and produces the config update tx -# which transitions between the two -createConfigUpdate() { - CHANNEL=$1 - ORIGINAL=$2 - MODIFIED=$3 - OUTPUT=$4 - - set -x - configtxlator proto_encode --input "${ORIGINAL}" --type common.Config >original_config.pb - configtxlator proto_encode --input "${MODIFIED}" --type common.Config >modified_config.pb - configtxlator compute_update --channel_id "${CHANNEL}" --original original_config.pb --updated modified_config.pb >config_update.pb - configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate >config_update.json - echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL'", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . >config_update_in_envelope.json - configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope >"${OUTPUT}" - set +x -} - -# parsePeerConnectionParameters $@ -# Helper function that takes the parameters from a chaincode operation -# (e.g. invoke, query, instantiate) and checks for an even number of -# peers and associated org, then sets $PEER_CONN_PARMS and $PEERS -parsePeerConnectionParameters() { - # check for uneven number of peer and org parameters - if [ $(($# % 2)) -ne 0 ]; then - exit 1 - fi - - PEER_CONN_PARMS="" - PEERS="" - while [ "$#" -gt 0 ]; do - setGlobals $1 $2 - PEER="peer$1.org$2" - PEERS="$PEERS $PEER" - PEER_CONN_PARMS="$PEER_CONN_PARMS --peerAddresses $CORE_PEER_ADDRESS" - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "true" ]; then - TLSINFO=$(eval echo "--tlsRootCertFiles \$PEER$1_ORG$2_CA") - PEER_CONN_PARMS="$PEER_CONN_PARMS $TLSINFO" - fi - # shift by two to get the next pair of peer/org parameters - shift - shift - done - # remove leading space for output - PEERS="$(echo -e "$PEERS" | sed -e 's/^[[:space:]]*//')" -} - -# chaincodeInvoke ... -# Accepts as many peer/org pairs as desired and requests endorsement from each -chaincodeInvoke() { - parsePeerConnectionParameters $@ - res=$? - verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters " - - # while 'peer chaincode' command can get the orderer endpoint from the - # peer (if join was successful), let's supply it directly as we know - # it using the "-o" option - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS -c '{"Args":["invoke","a","b","10"]}' >&log.txt - res=$? - set +x - else - set -x - peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS -c '{"Args":["invoke","a","b","10"]}' >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Invoke execution on $PEERS failed " - echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== " - echo -} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/README.md b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/README.md new file mode 100644 index 000000000..84b85b921 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/README.md @@ -0,0 +1,80 @@ +# Using EncCC + +To test `EncCC` you need to first generate an AES 256 bit key as a base64 +encoded string so that it can be passed as JSON to the peer chaincode +invoke's transient parameter. + +Note: Before getting started you must use govendor to add external dependencies. Please issue the following commands inside the "enccc_example" folder: +``` +govendor init +govendor add +external +``` + +Let's generate the encryption and decryption keys. The example will simulate a shared key so the key is used for both encryption and decryption. +``` +ENCKEY=`openssl rand 32 -base64` && DECKEY=$ENCKEY +``` + +At this point, you can invoke the chaincode to encrypt key-value pairs as +follows: + +Note: the following assumes the env is initialized and peer has joined channel "my-ch". +``` +peer chaincode invoke -n enccc -C my-ch -c '{"Args":["ENCRYPT","key1","value1"]}' --transient "{\"ENCKEY\":\"$ENCKEY\"}" +``` + +This call will encrypt using a random IV. This may be undesirable for +instance if the chaincode invocation needs to be endorsed by multiple +peers since it would cause the endorsement of conflicting read/write sets. +It is possible to encrypt deterministically by specifying the IV, as +follows: at first the IV must be created + +``` +IV=`openssl rand 16 -base64` +``` + +Then, the IV may be specified in the transient field + +``` +peer chaincode invoke -n enccc -C my-ch -c '{"Args":["ENCRYPT","key2","value2"]}' --transient "{\"ENCKEY\":\"$ENCKEY\",\"IV\":\"$IV\"}" +``` + +Two such invocations will produce equal KVS writes, which can be endorsed by multiple nodes. + +The value can be retrieved back as follows + +``` +peer chaincode query -n enccc -C my-ch -c '{"Args":["DECRYPT","key1"]}' --transient "{\"DECKEY\":\"$DECKEY\"}" +``` +``` +peer chaincode query -n enccc -C my-ch -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"$DECKEY\"}" +``` +Note that in this case we use a chaincode query operation; while the use of the +transient field guarantees that the content will not be written to the ledger, +the chaincode decrypts the message and puts it in the proposal response. An +invocation would persist the result in the ledger for all channel readers to +see whereas a query can be discarded and so the result remains confidential. + +To test signing and verifying, you also need to generate an ECDSA key for the appropriate +curve, as follows. + +``` +On Intel: +SIGKEY=`openssl ecparam -name prime256v1 -genkey | tail -n5 | base64 -w0` && VERKEY=$SIGKEY + +On Mac: +SIGKEY=`openssl ecparam -name prime256v1 -genkey | tail -n5 | base64` && VERKEY=$SIGKEY +``` + +At this point, you can invoke the chaincode to sign and then encrypt key-value +pairs as follows + +``` +peer chaincode invoke -n enccc -C my-ch -c '{"Args":["ENCRYPTSIGN","key3","value3"]}' --transient "{\"ENCKEY\":\"$ENCKEY\",\"SIGKEY\":\"$SIGKEY\"}" +``` + +And similarly to retrieve them using a query + +``` +peer chaincode query -n enccc -C my-ch -c '{"Args":["DECRYPTVERIFY","key3"]}' --transient "{\"DECKEY\":\"$DECKEY\",\"VERKEY\":\"$VERKEY\"}" +``` diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_example.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_example.go new file mode 100644 index 000000000..284695d33 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_example.go @@ -0,0 +1,223 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/bccsp" + "github.com/hyperledger/fabric/bccsp/factory" + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/core/chaincode/shim/ext/entities" + pb "github.com/hyperledger/fabric/protos/peer" +) + +const DECKEY = "DECKEY" +const VERKEY = "VERKEY" +const ENCKEY = "ENCKEY" +const SIGKEY = "SIGKEY" +const IV = "IV" + +// EncCC example simple Chaincode implementation of a chaincode that uses encryption/signatures +type EncCC struct { + bccspInst bccsp.BCCSP +} + +// Init does nothing for this cc +func (t *EncCC) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Encrypter exposes how to write state to the ledger after having +// encrypted it with an AES 256 bit key that has been provided to the chaincode through the +// transient field +func (t *EncCC) Encrypter(stub shim.ChaincodeStubInterface, args []string, encKey, IV []byte) pb.Response { + // create the encrypter entity - we give it an ID, the bccsp instance, the key and (optionally) the IV + ent, err := entities.NewAES256EncrypterEntity("ID", t.bccspInst, encKey, IV) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + if len(args) != 2 { + return shim.Error("Expected 2 parameters to function Encrypter") + } + + key := args[0] + cleartextValue := []byte(args[1]) + + // here, we encrypt cleartextValue and assign it to key + err = encryptAndPutState(stub, ent, key, cleartextValue) + if err != nil { + return shim.Error(fmt.Sprintf("encryptAndPutState failed, err %+v", err)) + } + return shim.Success(nil) +} + +// Decrypter exposes how to read from the ledger and decrypt using an AES 256 +// bit key that has been provided to the chaincode through the transient field. +func (t *EncCC) Decrypter(stub shim.ChaincodeStubInterface, args []string, decKey, IV []byte) pb.Response { + // create the encrypter entity - we give it an ID, the bccsp instance, the key and (optionally) the IV + ent, err := entities.NewAES256EncrypterEntity("ID", t.bccspInst, decKey, IV) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + if len(args) != 1 { + return shim.Error("Expected 1 parameters to function Decrypter") + } + + key := args[0] + + // here we decrypt the state associated to key + cleartextValue, err := getStateAndDecrypt(stub, ent, key) + if err != nil { + return shim.Error(fmt.Sprintf("getStateAndDecrypt failed, err %+v", err)) + } + + // here we return the decrypted value as a result + return shim.Success(cleartextValue) +} + +// EncrypterSigner exposes how to write state to the ledger after having received keys for +// encrypting (AES 256 bit key) and signing (X9.62/SECG curve over a 256 bit prime field) that has been provided to the chaincode through the +// transient field +func (t *EncCC) EncrypterSigner(stub shim.ChaincodeStubInterface, args []string, encKey, sigKey []byte) pb.Response { + // create the encrypter/signer entity - we give it an ID, the bccsp instance and the keys + ent, err := entities.NewAES256EncrypterECDSASignerEntity("ID", t.bccspInst, encKey, sigKey) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + if len(args) != 2 { + return shim.Error("Expected 2 parameters to function EncrypterSigner") + } + + key := args[0] + cleartextValue := []byte(args[1]) + + // here, we sign cleartextValue, encrypt it and assign it to key + err = signEncryptAndPutState(stub, ent, key, cleartextValue) + if err != nil { + return shim.Error(fmt.Sprintf("signEncryptAndPutState failed, err %+v", err)) + } + + return shim.Success(nil) +} + +// DecrypterVerify exposes how to get state to the ledger after having received keys for +// decrypting (AES 256 bit key) and verifying (X9.62/SECG curve over a 256 bit prime field) that has been provided to the chaincode through the +// transient field +func (t *EncCC) DecrypterVerify(stub shim.ChaincodeStubInterface, args []string, decKey, verKey []byte) pb.Response { + // create the decrypter/verify entity - we give it an ID, the bccsp instance and the keys + ent, err := entities.NewAES256EncrypterECDSASignerEntity("ID", t.bccspInst, decKey, verKey) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256DecrypterEntity failed, err %s", err)) + } + + if len(args) != 1 { + return shim.Error("Expected 1 parameters to function DecrypterVerify") + } + key := args[0] + + // here we decrypt the state associated to key and verify it + cleartextValue, err := getStateDecryptAndVerify(stub, ent, key) + if err != nil { + return shim.Error(fmt.Sprintf("getStateDecryptAndVerify failed, err %+v", err)) + } + + // here we return the decrypted and verified value as a result + return shim.Success(cleartextValue) +} + +// RangeDecrypter shows how range queries may be satisfied by using the decrypter +// entity directly to decrypt previously encrypted key-value pairs +func (t *EncCC) RangeDecrypter(stub shim.ChaincodeStubInterface, decKey []byte) pb.Response { + // create the encrypter entity - we give it an ID, the bccsp instance and the key + ent, err := entities.NewAES256EncrypterEntity("ID", t.bccspInst, decKey, nil) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + bytes, err := getStateByRangeAndDecrypt(stub, ent, "", "") + if err != nil { + return shim.Error(fmt.Sprintf("getStateByRangeAndDecrypt failed, err %+v", err)) + } + + return shim.Success(bytes) +} + +// Invoke for this chaincode exposes functions to ENCRYPT, DECRYPT transactional +// data. It also supports an example to ENCRYPT and SIGN and DECRYPT and +// VERIFY. The Initialization Vector (IV) can be passed in as a parm to +// ensure peers have deterministic data. +func (t *EncCC) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + // get arguments and transient + f, args := stub.GetFunctionAndParameters() + tMap, err := stub.GetTransient() + if err != nil { + return shim.Error(fmt.Sprintf("Could not retrieve transient, err %s", err)) + } + + switch f { + case "ENCRYPT": + // make sure there's a key in transient - the assumption is that + // it's associated to the string "ENCKEY" + if _, in := tMap[ENCKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient encryption key %s", ENCKEY)) + } + + return t.Encrypter(stub, args[0:], tMap[ENCKEY], tMap[IV]) + case "DECRYPT": + + // make sure there's a key in transient - the assumption is that + // it's associated to the string "DECKEY" + if _, in := tMap[DECKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient decryption key %s", DECKEY)) + } + + return t.Decrypter(stub, args[0:], tMap[DECKEY], tMap[IV]) + case "ENCRYPTSIGN": + // make sure keys are there in the transient map - the assumption is that they + // are associated to the string "ENCKEY" and "SIGKEY" + if _, in := tMap[ENCKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", ENCKEY)) + } else if _, in := tMap[SIGKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", SIGKEY)) + } + + return t.EncrypterSigner(stub, args[0:], tMap[ENCKEY], tMap[SIGKEY]) + case "DECRYPTVERIFY": + // make sure keys are there in the transient map - the assumption is that they + // are associated to the string "DECKEY" and "VERKEY" + if _, in := tMap[DECKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", DECKEY)) + } else if _, in := tMap[VERKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", VERKEY)) + } + + return t.DecrypterVerify(stub, args[0:], tMap[DECKEY], tMap[VERKEY]) + case "RANGEQUERY": + // make sure there's a key in transient - the assumption is that + // it's associated to the string "ENCKEY" + if _, in := tMap[DECKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", DECKEY)) + } + + return t.RangeDecrypter(stub, tMap[DECKEY]) + default: + return shim.Error(fmt.Sprintf("Unsupported function %s", f)) + } +} + +func main() { + factory.InitFactories(nil) + + err := shim.Start(&EncCC{factory.GetDefault()}) + if err != nil { + fmt.Printf("Error starting EncCC chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_test.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_test.go new file mode 100644 index 000000000..7daf28135 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/enccc_test.go @@ -0,0 +1,234 @@ +package main + +import ( + "bytes" + "encoding/json" + "testing" + + "github.com/hyperledger/fabric/bccsp/factory" + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/stretchr/testify/assert" +) + +const ( + AESKEY1 = "01234567890123456789012345678901" + AESKEY2 = "01234567890123456789012345678902" + ECDSAKEY1 = `-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIH4Uv66F9kZMdOQxwNegkGm8c3AB3nGPOtxNKi6wb/ZooAoGCCqGSM49 +AwEHoUQDQgAEEPE+VLOh+e4NpwIjI/b/fKYHi4weU7r9OTEYPiAJiJBQY6TZnvF5 +oRMvwO4MCYxFtpIRO4UxIgcZBj4NCBxKqQ== +-----END EC PRIVATE KEY-----` + ECDSAKEY2 = `-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIE8Seyc9TXx+yQfnGPuzjkuEfMbkq203IYdfyvMd0r3OoAoGCCqGSM49 +AwEHoUQDQgAE4dcGMMroH2LagI/s5i/Bx4t4ggGDoJPNVkKBDBlIaMYjJFYD1obk +JOWqAZxKKsBxBC5Ssu+fS26VPfdNWxDsFQ== +-----END EC PRIVATE KEY-----` + IV1 = "0123456789012345" +) + +func TestInit(t *testing.T) { + factory.InitFactories(nil) + + scc := new(EncCC) + stub := shim.NewMockStub("enccc", scc) + stub.MockTransactionStart("a") + res := scc.Init(stub) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) +} + +// unfortunately we can't tese this cc though invoke since the +// mock shim doesn't support transient. We test failure scenarios +// and the tests below focus on the functionality by invoking +// functions as opposed to cc +func TestInvoke(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + res := stub.MockInvoke("tx", [][]byte{[]byte("barf")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) + res = stub.MockInvoke("tx", [][]byte{[]byte("ENC")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) + res = stub.MockInvoke("tx", [][]byte{[]byte("SIG")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) + res = stub.MockInvoke("tx", [][]byte{[]byte("RANGE")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) +} + +func TestEnc(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + // success + stub.MockTransactionStart("a") + res := scc.Encrypter(stub, []string{"key", "value"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // fail - bad key + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key", "value"}, []byte("badkey"), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - not enough args + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // success + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{"key"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + assert.True(t, bytes.Equal(res.Payload, []byte("value"))) + + // fail - not enough args + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad kvs key + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{"badkey"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad key + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{"key"}, []byte(AESKEY2), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) +} + +func TestSig(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + // success + stub.MockTransactionStart("a") + res := scc.EncrypterSigner(stub, []string{"key", "value"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // fail - bad key + stub.MockTransactionStart("a") + res = scc.EncrypterSigner(stub, []string{"key", "value"}, []byte(AESKEY1), []byte("barf")) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad args + stub.MockTransactionStart("a") + res = scc.EncrypterSigner(stub, []string{"key"}, []byte(AESKEY1), []byte("barf")) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad signing key + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{"key"}, []byte(AESKEY1), []byte(ECDSAKEY2)) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad args + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad kvs key + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{"badkey"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // success + stub.MockTransactionStart("a") + res = scc.EncrypterSigner(stub, []string{"key", "value"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // success + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{"key"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + assert.True(t, bytes.Equal(res.Payload, []byte("value"))) +} + +func TestEncCC_RangeDecrypter(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + stub.MockTransactionStart("a") + res := scc.Encrypter(stub, []string{"key1", "value1"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key2", "value2"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key3", "value3"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // failed range query + res = scc.RangeDecrypter(stub, nil) + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // success range query + stub.MockTransactionStart("a") + res = scc.RangeDecrypter(stub, []byte(AESKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + keys := []keyValuePair{} + err := json.Unmarshal(res.Payload, &keys) + assert.NoError(t, err) + assert.Equal(t, keys[0].Key, "key1") + assert.Equal(t, string(keys[0].Value), "value1") + assert.Equal(t, keys[1].Key, "key2") + assert.Equal(t, string(keys[1].Value), "value2") + assert.Equal(t, keys[2].Key, "key3") + assert.Equal(t, string(keys[2].Value), "value3") + + _, err = getStateByRangeAndDecrypt(stub, nil, string([]byte{0}), string([]byte{0})) + assert.Error(t, err) +} + +func TestDeterministicEncryption(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + stub.MockTransactionStart("a") + res := scc.Encrypter(stub, []string{"key1", "value1"}, []byte(AESKEY1), []byte(IV1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + c1, err := stub.GetState("key1") + assert.NoError(t, err) + assert.NotNil(t, c1) + + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key1", "value1"}, []byte(AESKEY1), []byte(IV1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + c2, err := stub.GetState("key1") + assert.NoError(t, err) + assert.NotNil(t, c1) + assert.True(t, bytes.Equal(c1, c2)) +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/utils.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/utils.go new file mode 100644 index 000000000..9af6e6fa1 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/enccc_example/utils.go @@ -0,0 +1,147 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/core/chaincode/shim/ext/entities" + "github.com/pkg/errors" +) + +// the functions below show some best practices on how +// to use entities to perform cryptographic operations +// over the ledger state + +// getStateAndDecrypt retrieves the value associated to key, +// decrypts it with the supplied entity and returns the result +// of the decryption +func getStateAndDecrypt(stub shim.ChaincodeStubInterface, ent entities.Encrypter, key string) ([]byte, error) { + // at first we retrieve the ciphertext from the ledger + ciphertext, err := stub.GetState(key) + if err != nil { + return nil, err + } + + // GetState will return a nil slice if the key does not exist. + // Note that the chaincode logic may want to distinguish between + // nil slice (key doesn't exist in state db) and empty slice + // (key found in state db but value is empty). We do not + // distinguish the case here + if len(ciphertext) == 0 { + return nil, errors.New("no ciphertext to decrypt") + } + + return ent.Decrypt(ciphertext) +} + +// encryptAndPutState encrypts the supplied value using the +// supplied entity and puts it to the ledger associated to +// the supplied KVS key +func encryptAndPutState(stub shim.ChaincodeStubInterface, ent entities.Encrypter, key string, value []byte) error { + // at first we use the supplied entity to encrypt the value + ciphertext, err := ent.Encrypt(value) + if err != nil { + return err + } + + return stub.PutState(key, ciphertext) +} + +// getStateDecryptAndVerify retrieves the value associated to key, +// decrypts it with the supplied entity, verifies the signature +// over it and returns the result of the decryption in case of +// success +func getStateDecryptAndVerify(stub shim.ChaincodeStubInterface, ent entities.EncrypterSignerEntity, key string) ([]byte, error) { + // here we retrieve and decrypt the state associated to key + val, err := getStateAndDecrypt(stub, ent, key) + if err != nil { + return nil, err + } + + // we unmarshal a SignedMessage from the decrypted state + msg := &entities.SignedMessage{} + err = msg.FromBytes(val) + if err != nil { + return nil, err + } + + // we verify the signature + ok, err := msg.Verify(ent) + if err != nil { + return nil, err + } else if !ok { + return nil, errors.New("invalid signature") + } + + return msg.Payload, nil +} + +// signEncryptAndPutState signs the supplied value, encrypts +// the supplied value together with its signature using the +// supplied entity and puts it to the ledger associated to +// the supplied KVS key +func signEncryptAndPutState(stub shim.ChaincodeStubInterface, ent entities.EncrypterSignerEntity, key string, value []byte) error { + // here we create a SignedMessage, set its payload + // to value and the ID of the entity and + // sign it with the entity + msg := &entities.SignedMessage{Payload: value, ID: []byte(ent.ID())} + err := msg.Sign(ent) + if err != nil { + return err + } + + // here we serialize the SignedMessage + b, err := msg.ToBytes() + if err != nil { + return err + } + + // here we encrypt the serialized version associated to args[0] + return encryptAndPutState(stub, ent, key, b) +} + +type keyValuePair struct { + Key string `json:"key"` + Value string `json:"value"` +} + +// getStateByRangeAndDecrypt retrieves a range of KVS pairs from the +// ledger and decrypts each value with the supplied entity; it returns +// a json-marshalled slice of keyValuePair +func getStateByRangeAndDecrypt(stub shim.ChaincodeStubInterface, ent entities.Encrypter, startKey, endKey string) ([]byte, error) { + // we call get state by range to go through the entire range + iterator, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return nil, err + } + defer iterator.Close() + + // we decrypt each entry - the assumption is that they have all been encrypted with the same key + keyvalueset := []keyValuePair{} + for iterator.HasNext() { + el, err := iterator.Next() + if err != nil { + return nil, err + } + + v, err := ent.Decrypt(el.Value) + if err != nil { + return nil, err + } + + keyvalueset = append(keyvalueset, keyValuePair{el.Key, string(v)}) + } + + bytes, err := json.Marshal(keyvalueset) + if err != nil { + return nil, err + } + + return bytes, nil +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/eventsender/eventsender.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/eventsender/eventsender.go new file mode 100644 index 000000000..456062521 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/eventsender/eventsender.go @@ -0,0 +1,92 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// EventSender example simple Chaincode implementation +type EventSender struct { +} + +// Init function +func (t *EventSender) Init(stub shim.ChaincodeStubInterface) pb.Response { + err := stub.PutState("noevents", []byte("0")) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke function +func (t *EventSender) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + b, err := stub.GetState("noevents") + if err != nil { + return shim.Error("Failed to get state") + } + noevts, _ := strconv.Atoi(string(b)) + + tosend := "Event " + string(b) + for _, s := range args { + tosend = tosend + "," + s + } + + err = stub.PutState("noevents", []byte(strconv.Itoa(noevts+1))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.SetEvent("evtsender", []byte(tosend)) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(nil) +} + +// Query function +func (t *EventSender) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + b, err := stub.GetState("noevents") + if err != nil { + return shim.Error("Failed to get state") + } + jsonResp := "{\"NoEvents\":\"" + string(b) + "\"}" + return shim.Success([]byte(jsonResp)) +} + +func (t *EventSender) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } else if function == "query" { + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"query\"") +} + +func main() { + err := shim.Start(new(EventSender)) + if err != nil { + fmt.Printf("Error starting EventSender chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/chaincode.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/chaincode.go new file mode 100644 index 000000000..f2d9f1d6b --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/chaincode.go @@ -0,0 +1,73 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example01 + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct{} + +var A, B string +var Aval, Bval, X int + +// Init callback representing the invocation of a chaincode +// This chaincode will manage two accounts A and B and will transfer X units from A to B upon invoke +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + B = args[2] + Bval, err = strconv.Atoi(args[3]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + return shim.Success(nil) +} + +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // Transaction makes payment of X units from A to B + X, err := strconv.Atoi(args[0]) + if err != nil { + fmt.Printf("Error convert %s to integer: %s", args[0], err) + return shim.Error(fmt.Sprintf("Error convert %s to integer: %s", args[0], err)) + } + Aval = Aval - X + Bval = Bval + X + ts, err2 := stub.GetTxTimestamp() + if err2 != nil { + fmt.Printf("Error getting transaction timestamp: %s", err2) + return shim.Error(fmt.Sprintf("Error getting transaction timestamp: %s", err2)) + } + fmt.Printf("Transaction Time: %v,Aval = %d, Bval = %d\n", ts, Aval, Bval) + return shim.Success(nil) +} + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\"") +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/cmd/main.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/cmd/main.go new file mode 100644 index 000000000..96e6db659 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example01/cmd/main.go @@ -0,0 +1,21 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/example01" +) + +func main() { + err := shim.Start(new(example01.SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode.go new file mode 100644 index 000000000..87629f406 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode.go @@ -0,0 +1,176 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example02 + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Println("ex02 Init") + _, args := stub.GetFunctionAndParameters() + var A, B string // Entities + var Aval, Bval int // Asset holdings + var err error + + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + B = args[2] + Bval, err = strconv.Atoi(args[3]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Println("ex02 Invoke") + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + // Make payment of X units from A to B + return t.invoke(stub, args) + } else if function == "delete" { + // Deletes an entity from its state + return t.delete(stub, args) + } else if function == "query" { + // the old "Query" is now implemtned in invoke + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"delete\" \"query\"") +} + +// Transaction makes payment of X units from A to B +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var A, B string // Entities + var Aval, Bval int // Asset holdings + var X int // Transaction value + var err error + + if len(args) != 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + A = args[0] + B = args[1] + + // Get the state from the ledger + // TODO: will be nice to have a GetAllState call to ledger + Avalbytes, err := stub.GetState(A) + if err != nil { + return shim.Error("Failed to get state") + } + if Avalbytes == nil { + return shim.Error("Entity not found") + } + Aval, _ = strconv.Atoi(string(Avalbytes)) + + Bvalbytes, err := stub.GetState(B) + if err != nil { + return shim.Error("Failed to get state") + } + if Bvalbytes == nil { + return shim.Error("Entity not found") + } + Bval, _ = strconv.Atoi(string(Bvalbytes)) + + // Perform the execution + X, err = strconv.Atoi(args[2]) + if err != nil { + return shim.Error("Invalid transaction amount, expecting a integer value") + } + Aval = Aval - X + Bval = Bval + X + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state back to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Deletes an entity from state +func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + A := args[0] + + // Delete the key from the state in ledger + err := stub.DelState(A) + if err != nil { + return shim.Error("Failed to delete state") + } + + return shim.Success(nil) +} + +// query callback representing the query of a chaincode +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var A string // Entities + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the person to query") + } + + A = args[0] + + // Get the state from the ledger + Avalbytes, err := stub.GetState(A) + if err != nil { + jsonResp := "{\"Error\":\"Failed to get state for " + A + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + jsonResp := "{\"Error\":\"Nil amount for " + A + "\"}" + return shim.Error(jsonResp) + } + + jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}" + fmt.Printf("Query Response:%s\n", jsonResp) + return shim.Success(Avalbytes) +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode_test.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode_test.go new file mode 100644 index 000000000..72345d765 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/chaincode_test.go @@ -0,0 +1,103 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example02 + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" +) + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkQuery(t *testing.T, stub *shim.MockStub, name string, value string) { + res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)}) + if res.Status != shim.OK { + fmt.Println("Query", name, "failed", string(res.Message)) + t.FailNow() + } + if res.Payload == nil { + fmt.Println("Query", name, "failed to get value") + t.FailNow() + } + if string(res.Payload) != value { + fmt.Println("Query value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample02_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123"), []byte("B"), []byte("234")}) + + checkState(t, stub, "A", "123") + checkState(t, stub, "B", "234") +} + +func TestExample02_Query(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=345 B=456 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("345"), []byte("B"), []byte("456")}) + + // Query A + checkQuery(t, stub, "A", "345") + + // Query B + checkQuery(t, stub, "B", "456") +} + +func TestExample02_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=567 B=678 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("567"), []byte("B"), []byte("678")}) + + // Invoke A->B for 123 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("A"), []byte("B"), []byte("123")}) + checkQuery(t, stub, "A", "444") + checkQuery(t, stub, "B", "801") + + // Invoke B->A for 234 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("B"), []byte("A"), []byte("234")}) + checkQuery(t, stub, "A", "678") + checkQuery(t, stub, "B", "567") + checkQuery(t, stub, "A", "678") + checkQuery(t, stub, "B", "567") +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/cmd/main.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/cmd/main.go new file mode 100644 index 000000000..ab27c8529 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example02/cmd/main.go @@ -0,0 +1,21 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/example02" +) + +func main() { + err := shim.Start(new(example02.SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode.go new file mode 100644 index 000000000..fe627d8c7 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode.go @@ -0,0 +1,82 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +// This program is an erroneous chaincode program that attempts to put state in query context - query should return error +package example03 + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct{} + +// Init takes a string and int. These are stored as a key/value pair in the state +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var A string // Entity + var Aval int // Asset holding + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d\n", Aval) + + // Write the state to the ledger - this put is legal within Run + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke is a no-op +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "query" { + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"query\"") +} + +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var A string // Entity + var Aval int // Asset holding + var err error + + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d\n", Aval) + + // Write the state to the ledger - this put is illegal within Run + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + jsonResp := "{\"Error\":\"Cannot put state within chaincode query\"}" + return shim.Error(jsonResp) + } + + return shim.Success(nil) +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode_test.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode_test.go new file mode 100644 index 000000000..a65c87a9e --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/chaincode_test.go @@ -0,0 +1,63 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example03 + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" +) + +func checkInit(t *testing.T, scc *SimpleChaincode, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", res.Message) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, scc *SimpleChaincode, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Query failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample03_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex03", scc) + + // Init A=123 B=234 + checkInit(t, scc, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123")}) + + checkState(t, stub, "A", "123") +} + +func TestExample03_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex03", scc) + + // Init A=345 B=456 + checkInit(t, scc, stub, [][]byte{[]byte("init"), []byte("A"), []byte("345")}) + + // Invoke "query" + checkInvoke(t, scc, stub, [][]byte{[]byte("query"), []byte("A"), []byte("345")}) +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/cmd/main.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/cmd/main.go new file mode 100644 index 000000000..cb4569715 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example03/cmd/main.go @@ -0,0 +1,21 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/example03" +) + +func main() { + err := shim.Start(new(example03.SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode.go new file mode 100644 index 000000000..dd3d5d585 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode.go @@ -0,0 +1,156 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example04 + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode is a test for chaincode invoking another chaincode - invokes chaincode_example02 + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct{} + +func toChaincodeArgs(args ...string) [][]byte { + bargs := make([][]byte, len(args)) + for i, arg := range args { + bargs[i] = []byte(arg) + } + return bargs +} + +// Init takes two arguments, a string and int. These are stored in the key/value pair in the state +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var event string // Indicates whether event has happened. Initially 0 + var eventVal int // State of event + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // Initialize the chaincode + event = args[0] + eventVal, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for event status") + } + fmt.Printf("eventVal = %d\n", eventVal) + + err = stub.PutState(event, []byte(strconv.Itoa(eventVal))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke invokes another chaincode - chaincode_example02, upon receipt of an event and changes event state +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var event string // Event entity + var eventVal int // State of event + var err error + + if len(args) != 3 && len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 3 or 4") + } + + chainCodeToCall := args[0] + event = args[1] + eventVal, err = strconv.Atoi(args[2]) + if err != nil { + return shim.Error("Expected integer value for event state change") + } + channelID := "" + if len(args) == 4 { + channelID = args[3] + } + + if eventVal != 1 { + fmt.Printf("Unexpected event. Doing nothing\n") + return shim.Success(nil) + } + + f := "invoke" + invokeArgs := toChaincodeArgs(f, "a", "b", "10") + response := stub.InvokeChaincode(chainCodeToCall, invokeArgs, channelID) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to invoke chaincode. Got error: %s", string(response.Payload)) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + fmt.Printf("Invoke chaincode successful. Got response %s", string(response.Payload)) + + // Write the event state back to the ledger + err = stub.PutState(event, []byte(strconv.Itoa(eventVal))) + if err != nil { + return shim.Error(err.Error()) + } + + return response +} + +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var event string // Event entity + var err error + + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting entity to query") + } + + event = args[0] + var jsonResp string + + // Get the state from the ledger + eventValbytes, err := stub.GetState(event) + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + event + "\"}" + return shim.Error(jsonResp) + } + + if eventValbytes == nil { + jsonResp = "{\"Error\":\"Nil value for " + event + "\"}" + return shim.Error(jsonResp) + } + + if len(args) > 3 { + chainCodeToCall := args[1] + queryKey := args[2] + channel := args[3] + f := "query" + invokeArgs := toChaincodeArgs(f, queryKey) + response := stub.InvokeChaincode(chainCodeToCall, invokeArgs, channel) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to invoke chaincode. Got error: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + jsonResp = string(response.Payload) + } else { + jsonResp = "{\"Name\":\"" + event + "\",\"Amount\":\"" + string(eventValbytes) + "\"}" + } + fmt.Printf("Query Response: %s\n", jsonResp) + + return shim.Success([]byte(jsonResp)) +} + +// Invoke is called by fabric to execute a transaction +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } else if function == "query" { + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"query\"") +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode_test.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode_test.go new file mode 100644 index 000000000..dfb3df465 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/chaincode_test.go @@ -0,0 +1,110 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example04 + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/example02" +) + +// this is the response to any successful Invoke() on chaincode_example04 +var eventResponse = "{\"Name\":\"Event\",\"Amount\":\"1\"}" + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkQuery(t *testing.T, stub *shim.MockStub, name string, value string) { + res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)}) + if res.Status != shim.OK { + fmt.Println("Query", name, "failed", string(res.Message)) + t.FailNow() + } + if res.Payload == nil { + fmt.Println("Query", name, "failed to get value") + t.FailNow() + } + if string(res.Payload) != value { + fmt.Println("Query value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample04_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex04", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("Event"), []byte("123")}) + + checkState(t, stub, "Event", "123") +} + +func TestExample04_Query(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex04", scc) + + // Init A=345 B=456 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("Event"), []byte("1")}) + + // Query A + checkQuery(t, stub, "Event", eventResponse) +} + +func TestExample04_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex04", scc) + + chaincodeToInvoke := "ex02" + + ccEx2 := new(example02.SimpleChaincode) + stubEx2 := shim.NewMockStub(chaincodeToInvoke, ccEx2) + checkInit(t, stubEx2, [][]byte{[]byte("init"), []byte("a"), []byte("111"), []byte("b"), []byte("222")}) + stub.MockPeerChaincode(chaincodeToInvoke, stubEx2) + + // Init A=567 B=678 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("Event"), []byte("1")}) + + // Invoke A->B for 10 via Example04's chaincode + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeToInvoke), []byte("Event"), []byte("1")}) + checkQuery(t, stub, "Event", eventResponse) + checkQuery(t, stubEx2, "a", "101") + checkQuery(t, stubEx2, "b", "232") + + // Invoke A->B for 10 via Example04's chaincode + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeToInvoke), []byte("Event"), []byte("1")}) + checkQuery(t, stub, "Event", eventResponse) + checkQuery(t, stubEx2, "a", "91") + checkQuery(t, stubEx2, "b", "242") +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/cmd/main.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/cmd/main.go new file mode 100644 index 000000000..46857a6af --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example04/cmd/main.go @@ -0,0 +1,21 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/example04" +) + +func main() { + err := shim.Start(new(example04.SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode.go new file mode 100644 index 000000000..45909dd46 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode.go @@ -0,0 +1,197 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example05 + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode is a test for chaincode querying another chaincode - invokes chaincode_example02 and computes the sum of a and b and stores it as state + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct{} + +func toChaincodeArgs(args ...string) [][]byte { + bargs := make([][]byte, len(args)) + for i, arg := range args { + bargs[i] = []byte(arg) + } + return bargs +} + +// Init takes two arguments, a string and int. The string will be a key with +// the int as a value. +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var sum string // Sum of asset holdings across accounts. Initially 0 + var sumVal int // Sum of holdings + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // Initialize the chaincode + sum = args[0] + sumVal, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for sum") + } + fmt.Printf("sumVal = %d\n", sumVal) + + // Write the state to the ledger + err = stub.PutState(sum, []byte(strconv.Itoa(sumVal))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke queries another chaincode and updates its own state +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var sum, channelName string // Sum entity + var Aval, Bval, sumVal int // value of sum entity - to be computed + var err error + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting atleast 2") + } + + chaincodeName := args[0] // Expecting name of the chaincode you would like to call, this name would be given during chaincode install time + sum = args[1] + + if len(args) > 2 { + channelName = args[2] + } else { + channelName = "" + } + + // Query chaincode_example02 + f := "query" + queryArgs := toChaincodeArgs(f, "a") + + // if chaincode being invoked is on the same channel, + // then channel defaults to the current channel and args[2] can be "". + // If the chaincode being called is on a different channel, + // then you must specify the channel name in args[2] + + response := stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Aval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + queryArgs = toChaincodeArgs(f, "b") + response = stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Bval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + // Compute sum + sumVal = Aval + Bval + + // Write sumVal back to the ledger + err = stub.PutState(sum, []byte(strconv.Itoa(sumVal))) + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Printf("Invoke chaincode successful. Got sum %d\n", sumVal) + return shim.Success([]byte(strconv.Itoa(sumVal))) +} + +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var sum, channelName string // Sum entity + var Aval, Bval, sumVal int // value of sum entity - to be computed + var err error + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting atleast 2") + } + + chaincodeName := args[0] // Expecting name of the chaincode you would like to call, this name would be given during chaincode install time + sum = args[1] + + if len(args) > 2 { + channelName = args[2] + } else { + channelName = "" + } + + // Query chaincode_example02 + f := "query" + queryArgs := toChaincodeArgs(f, "a") + + // if chaincode being invoked is on the same channel, + // then channel defaults to the current channel and args[2] can be "". + // If the chaincode being called is on a different channel, + // then you must specify the channel name in args[2] + response := stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Aval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + queryArgs = toChaincodeArgs(f, "b") + response = stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Bval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + // Compute sum + sumVal = Aval + Bval + + fmt.Printf("Query chaincode successful. Got sum %d\n", sumVal) + jsonResp := "{\"Name\":\"" + sum + "\",\"Value\":\"" + strconv.Itoa(sumVal) + "\"}" + fmt.Printf("Query Response:%s\n", jsonResp) + return shim.Success([]byte(strconv.Itoa(sumVal))) +} + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } else if function == "query" { + return t.query(stub, args) + } + + return shim.Success([]byte("Invalid invoke function name. Expecting \"invoke\" \"query\"")) +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode_test.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode_test.go new file mode 100644 index 000000000..a9a827735 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/chaincode_test.go @@ -0,0 +1,119 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package example05 + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/example02" +) + +var chaincodeName = "ex02" + +// chaincode_example05 looks like it wanted to return a JSON response to Query() +// it doesn't actually do this though, it just returns the sum value +func jsonResponse(name string, value string) string { + return fmt.Sprintf("jsonResponse = \"{\"Name\":\"%v\",\"Value\":\"%v\"}", name, value) +} + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, expect string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != expect { + fmt.Println("State value", name, "was not", expect, "as expected") + t.FailNow() + } +} + +func checkQuery(t *testing.T, stub *shim.MockStub, args [][]byte, expect string) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Query", args, "failed", string(res.Message)) + t.FailNow() + } + if res.Payload == nil { + fmt.Println("Query", args, "failed to get result") + t.FailNow() + } + if string(res.Payload) != expect { + fmt.Println("Query result ", string(res.Payload), "was not", expect, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample05_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex05", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("sumStoreName"), []byte("432")}) + + checkState(t, stub, "sumStoreName", "432") +} + +func TestExample05_Query(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex05", scc) + + ccEx2 := new(example02.SimpleChaincode) + stubEx2 := shim.NewMockStub(chaincodeName, ccEx2) + checkInit(t, stubEx2, [][]byte{[]byte("init"), []byte("a"), []byte("111"), []byte("b"), []byte("222")}) + stub.MockPeerChaincode(chaincodeName, stubEx2) + + checkInit(t, stub, [][]byte{[]byte("init"), []byte("sumStoreName"), []byte("0")}) + + // a + b = 111 + 222 = 333 + checkQuery(t, stub, [][]byte{[]byte("query"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}, "333") // example05 doesn't return JSON? +} + +func TestExample05_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex05", scc) + + ccEx2 := new(example02.SimpleChaincode) + stubEx2 := shim.NewMockStub(chaincodeName, ccEx2) + checkInit(t, stubEx2, [][]byte{[]byte("init"), []byte("a"), []byte("222"), []byte("b"), []byte("333")}) + stub.MockPeerChaincode(chaincodeName, stubEx2) + + checkInit(t, stub, [][]byte{[]byte("init"), []byte("sumStoreName"), []byte("0")}) + + // a + b = 222 + 333 = 555 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}) + checkQuery(t, stub, [][]byte{[]byte("query"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}, "555") // example05 doesn't return JSON? + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("a")}, "222") + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("b")}, "333") + + // update A-=10 and B+=10 + checkInvoke(t, stubEx2, [][]byte{[]byte("invoke"), []byte("a"), []byte("b"), []byte("10")}) + + // a + b = 212 + 343 = 555 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}) + checkQuery(t, stub, [][]byte{[]byte("query"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}, "555") // example05 doesn't return JSON? + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("a")}, "212") + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("b")}, "343") +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/cmd/main.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/cmd/main.go new file mode 100644 index 000000000..ee0449658 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/example05/cmd/main.go @@ -0,0 +1,21 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/example05" +) + +func main() { + err := shim.Start(new(example05.SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go new file mode 100644 index 000000000..78d4ec619 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go @@ -0,0 +1,133 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init method of chaincode +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + _, args := stub.GetFunctionAndParameters() + var A, B string // Entities + var Aval, Bval int // Asset holdings + var err error + + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + B = args[2] + Bval, err = strconv.Atoi(args[3]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success([]byte("OK")) +} + +// Invoke transaction makes payment of X units from A to B +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + _, args := stub.GetFunctionAndParameters() + + var A, B string // Entities + var Aval, Bval int // Asset holdings + var X int // Transaction value + var err error + + if len(args) != 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + A = args[0] + B = args[1] + + // Get the state from the ledger + // TODO: will be nice to have a GetAllState call to ledger + Avalbytes, err := stub.GetState(A) + if err != nil { + return shim.Error("Failed to get state") + } + if Avalbytes == nil { + return shim.Error("Entity not found") + } + Aval, _ = strconv.Atoi(string(Avalbytes)) + + Bvalbytes, err := stub.GetState(B) + if err != nil { + return shim.Error("Failed to get state") + } + if Bvalbytes == nil { + return shim.Error("Entity not found") + } + Bval, _ = strconv.Atoi(string(Bvalbytes)) + + // Perform the execution + X, err = strconv.Atoi(args[2]) + if err != nil { + return shim.Error("Invalid transaction amount, expecting a integer value") + } + Aval = Aval - X + Bval = Bval + X + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state back to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success([]byte(fmt.Sprintf("{%d,%d}", Aval, Bval))) +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go new file mode 100644 index 000000000..1d9d1e1f9 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go @@ -0,0 +1,97 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package main + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" +) + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte, retval []byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } + if retval != nil { + if res.Payload == nil { + fmt.Printf("Init returned nil, expected %s", string(retval)) + t.FailNow() + } + if string(res.Payload) != string(retval) { + fmt.Printf("Init returned %s, expected %s", string(res.Payload), string(retval)) + t.FailNow() + } + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte, retval []byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } + + if retval != nil { + if res.Payload == nil { + fmt.Printf("Invoke returned nil, expected %s", string(retval)) + t.FailNow() + } + if string(res.Payload) != string(retval) { + fmt.Printf("Invoke returned %s, expected %s", string(res.Payload), string(retval)) + t.FailNow() + } + } +} + +func Test_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123"), []byte("B"), []byte("234")}, []byte("OK")) + + checkState(t, stub, "A", "123") + checkState(t, stub, "B", "234") +} + +func Test_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=567 B=678 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("567"), []byte("B"), []byte("678")}, []byte("OK")) + + // Invoke A->B for 123 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("A"), []byte("B"), []byte("123")}, []byte("{444,801}")) + + // Invoke B->A for 234 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("B"), []byte("A"), []byte("234")}, []byte("{567,678}")) +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/map/map.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/map/map.go new file mode 100644 index 000000000..2f7e2287f --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/map/map.go @@ -0,0 +1,465 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + "fmt" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode implements a simple map that is stored in the state. +// The following operations are available. + +// Invoke operations +// put - requires two arguments, a key and value +// remove - requires a key +// get - requires one argument, a key, and returns a value +// keys - requires no arguments, returns all keys + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +type PageResponse struct { + Bookmark string `json:"bookmark"` + Keys []string `json:"keys"` +} + +// Init is a no-op +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke has two functions +// put - takes two arguments, a key and value, and stores them in the state +// remove - takes one argument, a key, and removes if from the state +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + switch function { + + case "putPrivate": + return t.putPrivate(stub, args) + + case "removePrivate": + return t.removePrivate(stub, args) + + case "getPrivate": + return t.getPrivate(stub, args) + + case "keysPrivate": + return t.keysPrivate(stub, args) + + case "queryPrivate": + return t.queryPrivate(stub, args) + + case "put": + return t.put(stub, args) + + case "remove": + return t.remove(stub, args) + + case "get": + return t.get(stub, args) + + case "keys": + return t.keys(stub, args) + + case "keysByPage": + return t.keysByPage(stub, args) + + case "query": + return t.query(stub, args) + + case "queryByPage": + return t.queryByPage(stub, args) + + case "history": + return t.history(stub, args) + + case "getPut": + return t.getPut(stub, args) + + case "getPutPrivate": + return t.getPutPrivate(stub, args) + + default: + return shim.Error("Unsupported operation") + } +} + +func (t *SimpleChaincode) putPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 3 { + return shim.Error("put operation on private data must include three arguments: [collection, key, value]") + } + collection := args[0] + key := args[1] + value := args[2] + + if err := stub.PutPrivateData(collection, key, []byte(value)); err != nil { + fmt.Printf("Error putting private data%s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + + return shim.Success(nil) +} +func (t *SimpleChaincode) removePrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 2 { + return shim.Error("remove operation on private data must include two arguments: [collection, key]") + } + collection := args[0] + key := args[1] + + err := stub.DelPrivateData(collection, key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation on private data failed. Error updating state: %s", err)) + } + return shim.Success(nil) +} +func (t *SimpleChaincode) getPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 2 { + return shim.Error("get operation on private data must include two arguments: [collection, key]") + } + collection := args[0] + key := args[1] + value, err := stub.GetPrivateData(collection, key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation on private data failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) + +} +func (t *SimpleChaincode) keysPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 3 { + return shim.Error("range query operation on private data must include three arguments, a collection, key and value") + } + collection := args[0] + startKey := args[1] + endKey := args[2] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 3 { + stime, _ = strconv.Atoi(args[3]) + } + + keysIter, err := stub.GetPrivateDataByRange(collection, startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed on private data. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation on private data failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation on private data failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) +} + +func (t *SimpleChaincode) queryPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + collection := args[0] + query := args[1] + keysIter, err := stub.GetPrivateDataQueryResult(collection, query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) +} +func (t *SimpleChaincode) put(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 2 { + return shim.Error("put operation must include two arguments: [key, value]") + } + key := args[0] + value := args[1] + + if err := stub.PutState(key, []byte(value)); err != nil { + fmt.Printf("Error putting state %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + + indexName := "compositeKeyTest" + compositeKeyTestIndex, err := stub.CreateCompositeKey(indexName, []string{key}) + if err != nil { + return shim.Error(err.Error()) + } + + valueByte := []byte{0x00} + if err := stub.PutState(compositeKeyTestIndex, valueByte); err != nil { + fmt.Printf("Error putting state with compositeKey %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state with compositeKey: %s", err)) + } + + return shim.Success(nil) +} +func (t *SimpleChaincode) remove(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 1 { + return shim.Error("remove operation must include one argument: [key]") + } + key := args[0] + + err := stub.DelState(key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation failed. Error updating state: %s", err)) + } + return shim.Success(nil) +} +func (t *SimpleChaincode) get(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 1 { + return shim.Error("get operation must include one argument, a key") + } + key := args[0] + value, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) +} +func (t *SimpleChaincode) keys(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 2 { + return shim.Error("keys operation must include two arguments, a key and value") + } + startKey := args[0] + endKey := args[1] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 2 { + stime, _ = strconv.Atoi(args[2]) + } + + keysIter, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) +} + +func (t *SimpleChaincode) keysByPage(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) < 4 { + return shim.Error("paginated range query operation must include four arguments, a key, value, pageSize and a bookmark") + } + startKey := args[0] + endKey := args[1] + pageSize, parserr := strconv.ParseInt(args[2], 10, 32) + if parserr != nil { + return shim.Error(fmt.Sprintf("error parsing range pagesize: %s", parserr)) + } + bookmark := args[3] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 4 { + stime, _ = strconv.Atoi(args[4]) + } + + keysIter, resp, err := stub.GetStateByRangeWithPagination(startKey, endKey, int32(pageSize), bookmark) + if err != nil { + return shim.Error(fmt.Sprintf("keysByPage operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keysByPage operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for index, value := range keys { + fmt.Printf("key %d contains %s\n", index, value) + } + + jsonResp := PageResponse{ + Bookmark: resp.Bookmark, + Keys: keys, + } + + queryResp, err := json.Marshal(jsonResp) + if err != nil { + return shim.Error(fmt.Sprintf("keysByPage operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(queryResp) +} +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + query := args[0] + keysIter, err := stub.GetQueryResult(query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) +} +func (t *SimpleChaincode) queryByPage(stub shim.ChaincodeStubInterface, args []string) pb.Response { + query := args[0] + pageSize, parserr := strconv.ParseInt(args[1], 10, 32) + if parserr != nil { + return shim.Error(fmt.Sprintf("error parsing query pagesize: %s", parserr)) + } + bookmark := args[2] + + keysIter, resp, err := stub.GetQueryResultWithPagination(query, int32(pageSize), bookmark) + if err != nil { + return shim.Error(fmt.Sprintf("queryByPage operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("queryByPage operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonResp := PageResponse{ + Bookmark: resp.Bookmark, + Keys: keys, + } + + queryResp, err := json.Marshal(jsonResp) + if err != nil { + return shim.Error(fmt.Sprintf("queryByPage operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(queryResp) +} +func (t *SimpleChaincode) history(stub shim.ChaincodeStubInterface, args []string) pb.Response { + key := args[0] + keysIter, err := stub.GetHistoryForKey(key) + if err != nil { + return shim.Error(fmt.Sprintf("get history operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("get history operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.TxId) + } + + for key, txID := range keys { + fmt.Printf("key %d contains %s\n", key, txID) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("get history operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) +} +func (t *SimpleChaincode) getPut(stub shim.ChaincodeStubInterface, args []string) pb.Response { + _ = t.get(stub, args) + return t.put(stub, args) +} +func (t *SimpleChaincode) getPutPrivate(stub shim.ChaincodeStubInterface, args []string) pb.Response { + _ = t.getPrivate(stub, args) + return t.putPrivate(stub, args) +} +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/META-INF/statedb/couchdb/indexes/indexOwner.json b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/META-INF/statedb/couchdb/indexes/indexOwner.json new file mode 100644 index 000000000..0cf070623 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/META-INF/statedb/couchdb/indexes/indexOwner.json @@ -0,0 +1,6 @@ +{ + "index": { "fields": ["docType", "owner"] }, + "ddoc": "indexOwnerDoc", + "name": "indexOwner", + "type": "json" +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/marbles_chaincode.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/marbles_chaincode.go new file mode 100644 index 000000000..2ed3efd67 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/marbles02/marbles_chaincode.go @@ -0,0 +1,755 @@ +/* + SPDX-License-Identifier: Apache-2.0 +*/ + +// ====CHAINCODE EXECUTION SAMPLES (CLI) ================== + +// ==== Invoke marbles ==== +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble2","red","50","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble3","blue","70","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarble","marble2","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarblesBasedOnColor","blue","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["delete","marble1"]}' + +// ==== Query marbles ==== +// peer chaincode query -C myc1 -n marbles -c '{"Args":["readMarble","marble1"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getMarblesByRange","marble1","marble3"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getHistoryForMarble","marble1"]}' + +// Rich Query (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesByOwner","tom"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +// Rich Query with Pagination (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesWithPagination","{\"selector\":{\"owner\":\"tom\"}}","3",""]}' + +// INDEXES TO SUPPORT COUCHDB RICH QUERIES +// +// Indexes in CouchDB are required in order to make JSON queries efficient and are required for +// any JSON query with a sort. As of Hyperledger Fabric 1.1, indexes may be packaged alongside +// chaincode in a META-INF/statedb/couchdb/indexes directory. Each index must be defined in its own +// text file with extension *.json with the index definition formatted in JSON following the +// CouchDB index JSON syntax as documented at: +// http://docs.couchdb.org/en/2.1.1/api/database/find.html#db-index +// +// This marbles02 example chaincode demonstrates a packaged +// index which you can find in META-INF/statedb/couchdb/indexes/indexOwner.json. +// For deployment of chaincode to production environments, it is recommended +// to define any indexes alongside chaincode so that the chaincode and supporting indexes +// are deployed automatically as a unit, once the chaincode has been installed on a peer and +// instantiated on a channel. See Hyperledger Fabric documentation for more details. +// +// If you have access to the your peer's CouchDB state database in a development environment, +// you may want to iteratively test various indexes in support of your chaincode queries. You +// can use the CouchDB Fauxton interface or a command line curl utility to create and update +// indexes. Then once you finalize an index, include the index definition alongside your +// chaincode in the META-INF/statedb/couchdb/indexes directory, for packaging and deployment +// to managed environments. +// +// In the examples below you can find index definitions that support marbles02 +// chaincode queries, along with the syntax that you can use in development environments +// to create the indexes in the CouchDB Fauxton interface or a curl command line utility. +// + +//Example hostname:port configurations to access CouchDB. +// +//To access CouchDB docker container from within another docker container or from vagrant environments: +// http://couchdb:5984/ +// +//Inside couchdb docker container +// http://127.0.0.1:5984/ + +// Index for docType, owner. +// +// Example curl command line to define index in the CouchDB channel_chaincode database +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[\"docType\",\"owner\"]},\"name\":\"indexOwner\",\"ddoc\":\"indexOwnerDoc\",\"type\":\"json\"}" http://hostname:port/myc1_marbles/_index +// + +// Index for docType, owner, size (descending order). +// +// Example curl command line to define index in the CouchDB channel_chaincode database +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[{\"size\":\"desc\"},{\"docType\":\"desc\"},{\"owner\":\"desc\"}]},\"ddoc\":\"indexSizeSortDoc\", \"name\":\"indexSizeSortDesc\",\"type\":\"json\"}" http://hostname:port/myc1_marbles/_index + +// Rich Query with index design doc and index name specified (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":\"marble\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}"]}' + +// Rich Query with index design doc specified only (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":{\"$eq\":\"marble\"},\"owner\":{\"$eq\":\"tom\"},\"size\":{\"$gt\":0}},\"fields\":[\"docType\",\"owner\",\"size\"],\"sort\":[{\"size\":\"desc\"}],\"use_index\":\"_design/indexSizeSortDoc\"}"]}' + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "strconv" + "strings" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +type marble struct { + ObjectType string `json:"docType"` //docType is used to distinguish the various types of objects in state database + Name string `json:"name"` //the fieldtags are needed to keep case from bouncing around + Color string `json:"color"` + Size int `json:"size"` + Owner string `json:"owner"` +} + +// =================================================================================== +// Main +// =================================================================================== +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} + +// Init initializes chaincode +// =========================== +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke - Our entry point for Invocations +// ======================================== +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + fmt.Println("invoke is running " + function) + + // Handle different functions + if function == "initMarble" { //create a new marble + return t.initMarble(stub, args) + } else if function == "transferMarble" { //change owner of a specific marble + return t.transferMarble(stub, args) + } else if function == "transferMarblesBasedOnColor" { //transfer all marbles of a certain color + return t.transferMarblesBasedOnColor(stub, args) + } else if function == "delete" { //delete a marble + return t.delete(stub, args) + } else if function == "readMarble" { //read a marble + return t.readMarble(stub, args) + } else if function == "queryMarblesByOwner" { //find marbles for owner X using rich query + return t.queryMarblesByOwner(stub, args) + } else if function == "queryMarbles" { //find marbles based on an ad hoc rich query + return t.queryMarbles(stub, args) + } else if function == "getHistoryForMarble" { //get history of values for a marble + return t.getHistoryForMarble(stub, args) + } else if function == "getMarblesByRange" { //get marbles based on range query + return t.getMarblesByRange(stub, args) + } else if function == "getMarblesByRangeWithPagination" { + return t.getMarblesByRangeWithPagination(stub, args) + } else if function == "queryMarblesWithPagination" { + return t.queryMarblesWithPagination(stub, args) + } + + fmt.Println("invoke did not find func: " + function) //error + return shim.Error("Received unknown function invocation") +} + +// ============================================================ +// initMarble - create a new marble, store into chaincode state +// ============================================================ +func (t *SimpleChaincode) initMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var err error + + // 0 1 2 3 + // "asdf", "blue", "35", "bob" + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // ==== Input sanitation ==== + fmt.Println("- start init marble") + if len(args[0]) <= 0 { + return shim.Error("1st argument must be a non-empty string") + } + if len(args[1]) <= 0 { + return shim.Error("2nd argument must be a non-empty string") + } + if len(args[2]) <= 0 { + return shim.Error("3rd argument must be a non-empty string") + } + if len(args[3]) <= 0 { + return shim.Error("4th argument must be a non-empty string") + } + marbleName := args[0] + color := strings.ToLower(args[1]) + owner := strings.ToLower(args[3]) + size, err := strconv.Atoi(args[2]) + if err != nil { + return shim.Error("3rd argument must be a numeric string") + } + + // ==== Check if marble already exists ==== + marbleAsBytes, err := stub.GetState(marbleName) + if err != nil { + return shim.Error("Failed to get marble: " + err.Error()) + } else if marbleAsBytes != nil { + fmt.Println("This marble already exists: " + marbleName) + return shim.Error("This marble already exists: " + marbleName) + } + + // ==== Create marble object and marshal to JSON ==== + objectType := "marble" + marble := &marble{objectType, marbleName, color, size, owner} + marbleJSONasBytes, err := json.Marshal(marble) + if err != nil { + return shim.Error(err.Error()) + } + //Alternatively, build the marble json string manually if you don't want to use struct marshalling + //marbleJSONasString := `{"docType":"Marble", "name": "` + marbleName + `", "color": "` + color + `", "size": ` + strconv.Itoa(size) + `, "owner": "` + owner + `"}` + //marbleJSONasBytes := []byte(str) + + // === Save marble to state === + err = stub.PutState(marbleName, marbleJSONasBytes) + if err != nil { + return shim.Error(err.Error()) + } + + // ==== Index the marble to enable color-based range queries, e.g. return all blue marbles ==== + // An 'index' is a normal key/value entry in state. + // The key is a composite key, with the elements that you want to range query on listed first. + // In our case, the composite key is based on indexName~color~name. + // This will enable very efficient state range queries based on composite keys matching indexName~color~* + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marble.Color, marble.Name}) + if err != nil { + return shim.Error(err.Error()) + } + // Save index entry to state. Only the key name is needed, no need to store a duplicate copy of the marble. + // Note - passing a 'nil' value will effectively delete the key from state, therefore we pass null character as value + value := []byte{0x00} + stub.PutState(colorNameIndexKey, value) + + // ==== Marble saved and indexed. Return success ==== + fmt.Println("- end init marble") + return shim.Success(nil) +} + +// =============================================== +// readMarble - read a marble from chaincode state +// =============================================== +func (t *SimpleChaincode) readMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var name, jsonResp string + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the marble to query") + } + + name = args[0] + valAsbytes, err := stub.GetState(name) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + name + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + name + "\"}" + return shim.Error(jsonResp) + } + + return shim.Success(valAsbytes) +} + +// ================================================== +// delete - remove a marble key/value pair from state +// ================================================== +func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var jsonResp string + var marbleJSON marble + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + marbleName := args[0] + + // to maintain the color~name index, we need to read the marble first and get its color + valAsbytes, err := stub.GetState(marbleName) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + marbleName + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = json.Unmarshal([]byte(valAsbytes), &marbleJSON) + if err != nil { + jsonResp = "{\"Error\":\"Failed to decode JSON of: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = stub.DelState(marbleName) //remove the marble from chaincode state + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + + // maintain the index + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marbleJSON.Color, marbleJSON.Name}) + if err != nil { + return shim.Error(err.Error()) + } + + // Delete index entry to state. + err = stub.DelState(colorNameIndexKey) + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + return shim.Success(nil) +} + +// =========================================================== +// transfer a marble by setting a new owner name on the marble +// =========================================================== +func (t *SimpleChaincode) transferMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "name", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + marbleName := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarble ", marbleName, newOwner) + + marbleAsBytes, err := stub.GetState(marbleName) + if err != nil { + return shim.Error("Failed to get marble:" + err.Error()) + } else if marbleAsBytes == nil { + return shim.Error("Marble does not exist") + } + + marbleToTransfer := marble{} + err = json.Unmarshal(marbleAsBytes, &marbleToTransfer) //unmarshal it aka JSON.parse() + if err != nil { + return shim.Error(err.Error()) + } + marbleToTransfer.Owner = newOwner //change the owner + + marbleJSONasBytes, _ := json.Marshal(marbleToTransfer) + err = stub.PutState(marbleName, marbleJSONasBytes) //rewrite the marble + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Println("- end transferMarble (success)") + return shim.Success(nil) +} + +// =========================================================================================== +// constructQueryResponseFromIterator constructs a JSON array containing query results from +// a given result iterator +// =========================================================================================== +func constructQueryResponseFromIterator(resultsIterator shim.StateQueryIteratorInterface) (*bytes.Buffer, error) { + // buffer is a JSON array containing QueryResults + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return nil, err + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + return &buffer, nil +} + +// =========================================================================================== +// addPaginationMetadataToQueryResults adds QueryResponseMetadata, which contains pagination +// info, to the constructed query results +// =========================================================================================== +func addPaginationMetadataToQueryResults(buffer *bytes.Buffer, responseMetadata *pb.QueryResponseMetadata) *bytes.Buffer { + + buffer.WriteString("[{\"ResponseMetadata\":{\"RecordsCount\":") + buffer.WriteString("\"") + buffer.WriteString(fmt.Sprintf("%v", responseMetadata.FetchedRecordsCount)) + buffer.WriteString("\"") + buffer.WriteString(", \"Bookmark\":") + buffer.WriteString("\"") + buffer.WriteString(responseMetadata.Bookmark) + buffer.WriteString("\"}}]") + + return buffer +} + +// =========================================================================================== +// getMarblesByRange performs a range query based on the start and end keys provided. + +// Read-only function results are not typically submitted to ordering. If the read-only +// results are submitted to ordering, or if the query is used in an update transaction +// and submitted to ordering, then the committing peers will re-execute to guarantee that +// result sets are stable between endorsement time and commit time. The transaction is +// invalidated by the committing peers if the result set has changed between endorsement +// time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) getMarblesByRange(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + startKey := args[0] + endKey := args[1] + + resultsIterator, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Printf("- getMarblesByRange queryResult:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} + +// ==== Example: GetStateByPartialCompositeKey/RangeQuery ========================================= +// transferMarblesBasedOnColor will transfer marbles of a given color to a certain new owner. +// Uses a GetStateByPartialCompositeKey (range query) against color~name 'index'. +// Committing peers will re-execute range queries to guarantee that result sets are stable +// between endorsement time and commit time. The transaction is invalidated by the +// committing peers if the result set has changed between endorsement time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) transferMarblesBasedOnColor(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "color", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + color := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarblesBasedOnColor ", color, newOwner) + + // Query the color~name index by color + // This will execute a key range query on all keys starting with 'color' + coloredMarbleResultsIterator, err := stub.GetStateByPartialCompositeKey("color~name", []string{color}) + if err != nil { + return shim.Error(err.Error()) + } + defer coloredMarbleResultsIterator.Close() + + // Iterate through result set and for each marble found, transfer to newOwner + var i int + for i = 0; coloredMarbleResultsIterator.HasNext(); i++ { + // Note that we don't get the value (2nd return variable), we'll just get the marble name from the composite key + responseRange, err := coloredMarbleResultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + + // get the color and name from color~name composite key + objectType, compositeKeyParts, err := stub.SplitCompositeKey(responseRange.Key) + if err != nil { + return shim.Error(err.Error()) + } + returnedColor := compositeKeyParts[0] + returnedMarbleName := compositeKeyParts[1] + fmt.Printf("- found a marble from index:%s color:%s name:%s\n", objectType, returnedColor, returnedMarbleName) + + // Now call the transfer function for the found marble. + // Re-use the same function that is used to transfer individual marbles + response := t.transferMarble(stub, []string{returnedMarbleName, newOwner}) + // if the transfer failed break out of loop and return error + if response.Status != shim.OK { + return shim.Error("Transfer failed: " + response.Message) + } + } + + responsePayload := fmt.Sprintf("Transferred %d %s marbles to %s", i, color, newOwner) + fmt.Println("- end transferMarblesBasedOnColor: " + responsePayload) + return shim.Success([]byte(responsePayload)) +} + +// =======Rich queries ========================================================================= +// Two examples of rich queries are provided below (parameterized query and ad hoc query). +// Rich queries pass a query string to the state database. +// Rich queries are only supported by state database implementations +// that support rich query (e.g. CouchDB). +// The query string is in the syntax of the underlying state database. +// With rich queries there is no guarantee that the result set hasn't changed between +// endorsement time and commit time, aka 'phantom reads'. +// Therefore, rich queries should not be used in update transactions, unless the +// application handles the possibility of result set changes between endorsement and commit time. +// Rich queries can be used for point-in-time queries against a peer. +// ============================================================================================ + +// ===== Example: Parameterized rich query ================================================= +// queryMarblesByOwner queries for marbles based on a passed in owner. +// This is an example of a parameterized query where the query logic is baked into the chaincode, +// and accepting a single query parameter (owner). +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarblesByOwner(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "bob" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + owner := strings.ToLower(args[0]) + + queryString := fmt.Sprintf("{\"selector\":{\"docType\":\"marble\",\"owner\":\"%s\"}}", owner) + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ===== Example: Ad hoc rich query ======================================================== +// queryMarbles uses a query string to perform a query for marbles. +// Query string matching state database syntax is passed in and executed as is. +// Supports ad hoc queries that can be defined at runtime by the client. +// If this is not desired, follow the queryMarblesForOwner example for parameterized queries. +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarbles(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "queryString" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + queryString := args[0] + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ========================================================================================= +// getQueryResultForQueryString executes the passed in query string. +// Result set is built and returned as a byte array containing the JSON results. +// ========================================================================================= +func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) { + + fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, err := stub.GetQueryResult(queryString) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return nil, err + } + + fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String()) + + return buffer.Bytes(), nil +} + +// ====== Pagination ========================================================================= +// Pagination provides a method to retrieve records with a defined pagesize and +// start point (bookmark). An empty string bookmark defines the first "page" of a query +// result. Paginated queries return a bookmark that can be used in +// the next query to retrieve the next page of results. Paginated queries extend +// rich queries and range queries to include a pagesize and bookmark. +// +// Two examples are provided in this example. The first is getMarblesByRangeWithPagination +// which executes a paginated range query. +// The second example is a paginated query for rich ad-hoc queries. +// ========================================================================================= + +// ====== Example: Pagination with Range Query =============================================== +// getMarblesByRangeWithPagination performs a range query based on the start & end key, +// page size and a bookmark. + +// The number of fetched records will be equal to or lesser than the page size. +// Paginated range queries are only valid for read only transactions. +// =========================================================================================== +func (t *SimpleChaincode) getMarblesByRangeWithPagination(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + startKey := args[0] + endKey := args[1] + //return type of ParseInt is int64 + pageSize, err := strconv.ParseInt(args[2], 10, 32) + if err != nil { + return shim.Error(err.Error()) + } + bookmark := args[3] + + resultsIterator, responseMetadata, err := stub.GetStateByRangeWithPagination(startKey, endKey, int32(pageSize), bookmark) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return shim.Error(err.Error()) + } + + bufferWithPaginationInfo := addPaginationMetadataToQueryResults(buffer, responseMetadata) + + fmt.Printf("- getMarblesByRange queryResult:\n%s\n", bufferWithPaginationInfo.String()) + + return shim.Success(buffer.Bytes()) +} + +// ===== Example: Pagination with Ad hoc Rich Query ======================================================== +// queryMarblesWithPagination uses a query string, page size and a bookmark to perform a query +// for marbles. Query string matching state database syntax is passed in and executed as is. +// The number of fetched records would be equal to or lesser than the specified page size. +// Supports ad hoc queries that can be defined at runtime by the client. +// If this is not desired, follow the queryMarblesForOwner example for parameterized queries. +// Only available on state databases that support rich query (e.g. CouchDB) +// Paginated queries are only valid for read only transactions. +// ========================================================================================= +func (t *SimpleChaincode) queryMarblesWithPagination(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "queryString" + if len(args) < 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + queryString := args[0] + //return type of ParseInt is int64 + pageSize, err := strconv.ParseInt(args[1], 10, 32) + if err != nil { + return shim.Error(err.Error()) + } + bookmark := args[2] + + queryResults, err := getQueryResultForQueryStringWithPagination(stub, queryString, int32(pageSize), bookmark) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ========================================================================================= +// getQueryResultForQueryStringWithPagination executes the passed in query string with +// pagination info. Result set is built and returned as a byte array containing the JSON results. +// ========================================================================================= +func getQueryResultForQueryStringWithPagination(stub shim.ChaincodeStubInterface, queryString string, pageSize int32, bookmark string) ([]byte, error) { + + fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, responseMetadata, err := stub.GetQueryResultWithPagination(queryString, pageSize, bookmark) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + buffer, err := constructQueryResponseFromIterator(resultsIterator) + if err != nil { + return nil, err + } + + bufferWithPaginationInfo := addPaginationMetadataToQueryResults(buffer, responseMetadata) + + fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", bufferWithPaginationInfo.String()) + + return buffer.Bytes(), nil +} + +func (t *SimpleChaincode) getHistoryForMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + marbleName := args[0] + + fmt.Printf("- start getHistoryForMarble: %s\n", marbleName) + + resultsIterator, err := stub.GetHistoryForKey(marbleName) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing historic values for the marble + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + response, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"TxId\":") + buffer.WriteString("\"") + buffer.WriteString(response.TxId) + buffer.WriteString("\"") + + buffer.WriteString(", \"Value\":") + // if it was a delete operation on given key, then we need to set the + //corresponding value null. Else, we will write the response.Value + //as-is (as the Value itself a JSON marble) + if response.IsDelete { + buffer.WriteString("null") + } else { + buffer.WriteString(string(response.Value)) + } + + buffer.WriteString(", \"Timestamp\":") + buffer.WriteString("\"") + buffer.WriteString(time.Unix(response.Timestamp.Seconds, int64(response.Timestamp.Nanos)).String()) + buffer.WriteString("\"") + + buffer.WriteString(", \"IsDelete\":") + buffer.WriteString("\"") + buffer.WriteString(strconv.FormatBool(response.IsDelete)) + buffer.WriteString("\"") + + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getHistoryForMarble returning:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/passthru/passthru.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/passthru/passthru.go new file mode 100644 index 000000000..49d978bf4 --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/passthru/passthru.go @@ -0,0 +1,72 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strings" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// PassthruChaincode passes thru invoke and query to another chaincode where +// called ChaincodeID = function +// called chaincode's function = args[0] +// called chaincode's args = args[1:] +type PassthruChaincode struct { +} + +func toChaincodeArgs(args ...string) [][]byte { + bargs := make([][]byte, len(args)) + for i, arg := range args { + bargs[i] = []byte(arg) + } + return bargs +} + +//Init func will return error if function has string "error" anywhere +func (p *PassthruChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + function, _ := stub.GetFunctionAndParameters() + if strings.Index(function, "error") >= 0 { + return shim.Error(function) + } + return shim.Success([]byte(function)) +} + +//helper +func (p *PassthruChaincode) iq(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + if function == "" { + return shim.Error("Chaincode ID not provided") + } + chaincodeID := function + + return stub.InvokeChaincode(chaincodeID, toChaincodeArgs(args...), "") +} + +// Invoke passes through the invoke call +func (p *PassthruChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + return p.iq(stub, function, args) +} + +func main() { + err := shim.Start(new(PassthruChaincode)) + if err != nil { + fmt.Printf("Error starting Passthru chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/sleeper/sleeper.go b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/sleeper/sleeper.go new file mode 100644 index 000000000..088b598cb --- /dev/null +++ b/app/platform/fabric/e2e-test/fabric/examples/chaincode/go/sleeper/sleeper.go @@ -0,0 +1,124 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +// Sleeper chaincode sleeps and works with one state variable +// Init - 1 param, a sleep time in millisecs +// Invoke - 4 or 3 params, "put" or "get", value to set and sleep time in millisecs +// +// Sleeper can be used to test the "chaincode.executetimeout" property + +import ( + "fmt" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SleeperChaincode example simple Chaincode implementation +type SleeperChaincode struct { +} + +func (t *SleeperChaincode) sleep(sleepTime string) { + st, _ := strconv.Atoi(sleepTime) + if st >= 0 { + time.Sleep(time.Duration(st) * time.Millisecond) + } +} + +// Init initializes chaincode...all it does is sleep a bi +func (t *SleeperChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + args := stub.GetStringArgs() + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + sleepTime := args[0] + + t.sleep(sleepTime) + + return shim.Success(nil) +} + +// Invoke sets key/value and sleeps a bit +func (t *SleeperChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "put" { + if len(args) != 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + // Make payment of X units from A to B + return t.invoke(stub, args) + } else if function == "get" { + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // the old "Query" is now implemtned in invoke + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"put\" or \"get\"") +} + +// Transaction makes payment of X units from A to B +func (t *SleeperChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // set state + key := args[0] + val := args[1] + + err := stub.PutState(key, []byte(val)) + if err != nil { + return shim.Error(err.Error()) + } + + sleepTime := args[2] + + //sleep for a bit + t.sleep(sleepTime) + + return shim.Success([]byte("OK")) +} + +// query callback representing the query of a chaincode +func (t *SleeperChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + key := args[0] + + // Get the state from the ledger + val, err := stub.GetState(key) + if err != nil { + return shim.Error(err.Error()) + } + + sleepTime := args[1] + + //sleep for a bit + t.sleep(sleepTime) + + return shim.Success(val) +} + +func main() { + err := shim.Start(new(SleeperChaincode)) + if err != nil { + fmt.Printf("Error starting Sleeper chaincode: %s", err) + } +} diff --git a/app/platform/fabric/e2e-test/.env b/app/platform/fabric/e2e-test/feature/.env similarity index 88% rename from app/platform/fabric/e2e-test/.env rename to app/platform/fabric/e2e-test/feature/.env index cf419615f..aeab38d40 100644 --- a/app/platform/fabric/e2e-test/.env +++ b/app/platform/fabric/e2e-test/feature/.env @@ -1,6 +1,3 @@ -# -# SPDX-License-Identifier: Apache-2.0 -# CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT=10 CONFIGTX_ORDERER_BATCHTIMEOUT=2s KAFKA_DEFAULT_REPLICATION_FACTOR=3 @@ -31,7 +28,3 @@ ORDERER_PREFERREDMAXBYTES=512 KB KAFKA_MESSAGE_MAX_BYTES=1000012 B KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 B KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=10485760 B -IMAGE_TAG=latest -FABRIC_CA_SERVER_EXAMPLE_TLS_KEYFILE=/var/hyperledger/fabric-ca-server-config/sk -SYS_CHANNEL=byfn-sys-channel - diff --git a/app/platform/fabric/e2e-test/feature/CouchDB_index.feature b/app/platform/fabric/e2e-test/feature/CouchDB_index.feature new file mode 100644 index 000000000..f0eedb97a --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/CouchDB_index.feature @@ -0,0 +1,450 @@ +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +Feature: Testing Fabric CouchDB indexing + + @daily + Scenario Outline: : Test CouchDB indexing using marbles chaincode using with 1 channels and 1 index with 1 selector + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test with design document name "indexdoc_behave_test" containing the fields "size" to the chaincode at path "" + + # set up 1 channels, 1 cc + When an admin sets up a channel named "mychannel1" + And an admin deploys chaincode at path "" with args [""] with name "mycc1" with language "" on channel "mychannel1" + + # Invoke in the channel + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble100","red","5","cassey"] on "peer0.org1.example.com" + + # Do sanity-check rich query + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles","{\\"selector\\":{\\"size\\":5}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"cassey" + + # Explicitly check with CouchDB to confirm the index is set up correctly for the rich query to pass using index + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"size":"asc"}] from the couchDB container + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7251 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7254 | + + +@daily + Scenario Outline: : Test CouchDB indexing using marbles chaincode using with 3 channels and 1 index with 3 selectors + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test with design document name "indexdoc_behave_test" containing the fields "owner,docType,color" to the chaincode at path "" + + # set up 3 channels, each with one unique chaincode + When an admin sets up a channel named "mychannel1" + And an admin sets up a channel named "mychannel2" + And an admin sets up a channel named "mychannel3" + And an admin deploys chaincode at path "" with args [""] with name "mycc1" with language "" on channel "mychannel1" + And an admin deploys chaincode at path "" with args [""] with name "mycc2" with language "" on channel "mychannel2" + And an admin deploys chaincode at path "" with args [""] with name "mycc3" with language "" on channel "mychannel3" + + # Invoke in each channel + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble1","green","10","matt"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel2" using chaincode named "mycc2" with args ["initMarble","marble2","yellow","20","alex"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel3" using chaincode named "mycc3" with args ["initMarble","marble3","red","5","jose"] on "peer0.org1.example.com" + + # Do sanity-check rich query + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"matt\\", \\"color\\":\\"green\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"alex\\", \\"color\\":\\"yellow\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"jose\\", \\"color\\":\\"red\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + + # Explicitly check with CouchDB to confirm the index is set up correctly for the rich query to pass using index + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7252 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7255 | + + +@daily + Scenario Outline: : Test CouchDB indexing using marbles chaincode using with 3 channels and 3 index with 1 selector + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test_1 with design document name "indexdoc_behave_test_1" containing the fields "owner" to the chaincode at path "" + And a user defines a couchDB index named index_behave_test_2 with design document name "indexdoc_behave_test_2" containing the fields "docType" to the chaincode at path "" + And a user defines a couchDB index named index_behave_test_3 with design document name "indexdoc_behave_test_3" containing the fields "color" to the chaincode at path "" + + # set up 3 channel, 1 cc + When an admin sets up a channel named "mychannel1" + And an admin sets up a channel named "mychannel2" + And an admin sets up a channel named "mychannel3" + And an admin deploys chaincode at path "" with args [""] with name "mycc1" with language "" on channel "mychannel1" + And an admin deploys chaincode at path "" with args [""] with name "mycc2" with language "" on channel "mychannel2" + And an admin deploys chaincode at path "" with args [""] with name "mycc3" with language "" on channel "mychannel3" + + # Invoke in the channel + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble1","green","10","matt"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel2" using chaincode named "mycc2" with args ["initMarble","marble2","yellow","20","alex"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel3" using chaincode named "mycc3" with args ["initMarble","marble3","red","5","jose"] on "peer0.org1.example.com" + + # Do sanity-check rich query + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"matt\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_1\\", \\"index_behave_test_1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"alex\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_1\\", \\"index_behave_test_1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"jose\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_1\\", \\"index_behave_test_1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_2\\", \\"index_behave_test_2\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_2\\", \\"index_behave_test_2\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_2\\", \\"index_behave_test_2\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"color\\":\\"green\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_3\\", \\"index_behave_test_3\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"color\\":\\"yellow\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_3\\", \\"index_behave_test_3\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"color\\":\\"red\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_3\\", \\"index_behave_test_3\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + + # Explicitly check with CouchDB to confirm the index is set up correctly for the rich query to pass using index + When a user requests to get the design doc "indexdoc_behave_test_1" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_1" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_1" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_2" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_2":{"map":{"fields":{"docType":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_2" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_2":{"map":{"fields":{"docType":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_2" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_2":{"map":{"fields":{"docType":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_3" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_3":{"map":{"fields":{"color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_3" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_3":{"map":{"fields":{"color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_3" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_3":{"map":{"fields":{"color":"asc"}] from the couchDB container + + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7253 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7256 | + + + Scenario Outline: : Test CouchDB indexing using CC upgrade with marbles chaincode using with 1 channel + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test with design document name "indexdoc_behave_test" containing the fields "owner,docType,color" to the chaincode at path "" + + # set up 1 channel, 1 cc + When an admin sets up a channel named "mychannel1" + And an admin deploys chaincode at path "" with version "0" with args [""] with name "mycc1" with language "" on channel "mychannel1" + + # Invoke in the channel + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble1","green","10","matt"] on "peer0.org1.example.com" + + #add another index and deploy version 1 + When a user defines a couchDB index named index_behave_test_v1 with design document name "indexdoc_behave_test_v1" containing the fields "owner" to the chaincode at path "" + And an admin installs chaincode at path "" of language "" as version "1" with args [""] with name "mycc1" + And an admin upgrades the chaincode with name "mycc1" on channel "mychannel1" to version "1" with args [""] + + # Do sanity-check rich query + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"matt\\", \\"color\\":\\"green\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"matt\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_v1\\", \\"index_behave_test_v1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + + # Explicitly check with CouchDB to confirm the index is set up correctly for the rich query to pass using index + When a user requests to get the design doc "indexdoc_behave_test_v1" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_v1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7263 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7268 | + + + @daily + Scenario Outline: : Test CouchDB indexing using CC upgrade with marbles chaincode using with 3 channels and 1 upgrade + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test with design document name "indexdoc_behave_test" containing the fields "owner,docType,color" to the chaincode at path "" + + # set up 3 channels, 1 cc each + When an admin sets up a channel named "mychannel1" + And an admin sets up a channel named "mychannel2" + And an admin sets up a channel named "mychannel3" + And an admin deploys chaincode at path "" with version "0" with args [""] with name "mycc1" with language "" on channel "mychannel1" + And an admin deploys chaincode at path "" with version "0" with args [""] with name "mycc2" with language "" on channel "mychannel2" + And an admin deploys chaincode at path "" with version "0" with args [""] with name "mycc3" with language "" on channel "mychannel3" + + # Invoke in the channels + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble1","green","10","matt"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel2" using chaincode named "mycc2" with args ["initMarble","marble2","yellow","20","alex"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel3" using chaincode named "mycc3" with args ["initMarble","marble3","red","5","jose"] on "peer0.org1.example.com" + + #add another index and deploy version 1 in 1 channel/cc only + When a user defines a couchDB index named index_behave_test_v1 with design document name "indexdoc_behave_test_v1" containing the fields "owner" to the chaincode at path "" + And an admin installs chaincode at path "" of language "" as version "1" with args [""] with name "mycc1" + And an admin upgrades the chaincode with name "mycc1" on channel "mychannel1" to version "1" with args [""] + + # Do sanity-check rich query + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"matt\\", \\"color\\":\\"green\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"matt\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_v1\\", \\"index_behave_test_v1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"alex\\", \\"color\\":\\"yellow\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"alex\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_v1\\", \\"index_behave_test_v1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"jose\\", \\"color\\":\\"red\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"jose\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_v1\\", \\"index_behave_test_v1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + + # Check index in CouchDB for channel1 with upgraded CC + When a user requests to get the design doc "indexdoc_behave_test_v1" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_v1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + + #Check index in CouchDB for channel2 with non-upgraded CC + And I wait "2" seconds + When a user requests to get the design doc "indexdoc_behave_test_v1" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + And I wait "2" seconds + Then a user receives error response of [{"error":"not_found","reason":"missing"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + + #Check index in CouchDB for channel3 with non-upgraded CC + And I wait "2" seconds + When a user requests to get the design doc "indexdoc_behave_test_v1" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + And I wait "2" seconds + Then a user receives error response of [{"error":"not_found","reason":"missing"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7264 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7269 | + + +@daily + Scenario Outline: : Test CouchDB indexing using CC upgrade with marbles chaincode using with 3 channels and 3 upgrade + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test with design document name "indexdoc_behave_test" containing the fields "owner,docType,color" to the chaincode at path "" + + # set up 3 channels, 1 cc each + When an admin sets up a channel named "mychannel1" + And an admin sets up a channel named "mychannel2" + And an admin sets up a channel named "mychannel3" + And an admin deploys chaincode at path "" with version "0" with args [""] with name "mycc1" with language "" on channel "mychannel1" + And an admin deploys chaincode at path "" with version "0" with args [""] with name "mycc2" with language "" on channel "mychannel2" + And an admin deploys chaincode at path "" with version "0" with args [""] with name "mycc3" with language "" on channel "mychannel3" + + # Invoke in the channels + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble1","green","10","matt"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel2" using chaincode named "mycc2" with args ["initMarble","marble2","yellow","20","alex"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel3" using chaincode named "mycc3" with args ["initMarble","marble3","red","5","jose"] on "peer0.org1.example.com" + + #add another index and deploy version 1 in all 3 channel-cc + When a user defines a couchDB index named index_behave_test_v1 with design document name "indexdoc_behave_test_v1" containing the fields "owner" to the chaincode at path "" + And an admin installs chaincode at path "" of language "" as version "1" with args [""] with name "mycc1" + And an admin upgrades the chaincode with name "mycc1" on channel "mychannel1" to version "1" with args [""] + And an admin installs chaincode at path "" of language "" as version "1" with args [""] with name "mycc2" + And an admin upgrades the chaincode with name "mycc2" on channel "mychannel2" to version "1" with args [""] + And an admin installs chaincode at path "" of language "" as version "1" with args [""] with name "mycc3" + And an admin upgrades the chaincode with name "mycc3" on channel "mychannel3" to version "1" with args [""] + + # Do sanity-check rich query + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"matt\\", \\"color\\":\\"green\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"matt\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_v1\\", \\"index_behave_test_v1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"matt" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"alex\\", \\"color\\":\\"yellow\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"alex\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_v1\\", \\"index_behave_test_v1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"alex" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"jose\\", \\"color\\":\\"red\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"jose\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test_v1\\", \\"index_behave_test_v1\\"]}"] on "peer0.org1.example.com" + Then a user receives a response containing "owner":"jose" + + # Check index in CouchDB for channel1 with upgraded CC + When a user requests to get the design doc "indexdoc_behave_test_v1" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_v1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + + # Check index in CouchDB for channel2 with upgraded CC + When a user requests to get the design doc "indexdoc_behave_test_v1" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_v1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + + # Check index in CouchDB for channel3 with upgraded CC + When a user requests to get the design doc "indexdoc_behave_test_v1" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_v1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7265, FAB-7266, FAB-7267 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7270, FAB-7271, FAB-7272 | + + +@daily + Scenario Outline: : Test CouchDB indexing using install-after-instantiate with marbles chaincode using with 3 channels and 1 index + + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test with design document name "indexdoc_behave_test" containing the fields "owner,docType,color" to the chaincode at path "" + + # set up 3 channels, 1 cc each + When an admin sets up a channel named "mychannel1" + And an admin sets up a channel named "mychannel2" + And an admin sets up a channel named "mychannel3" + + # install the 3 ccs only in 3 (out of 4) peers and instantiate them + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer0.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer1.org2.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer0.org2.example.com" + And an admin instantiates the chaincode on channel "mychannel1" on peer "peer0.org1.example.com" + + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer0.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer1.org2.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer0.org2.example.com" + And an admin instantiates the chaincode on channel "mychannel2" on peer "peer0.org1.example.com" + + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer0.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer1.org2.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer0.org2.example.com" + And an admin instantiates the chaincode on channel "mychannel3" on peer "peer0.org1.example.com" + And I wait "10" seconds + + # Invoke in the channels + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble1","green","10","matt"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel2" using chaincode named "mycc2" with args ["initMarble","marble2","yellow","20","alex"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel3" using chaincode named "mycc3" with args ["initMarble","marble3","red","5","jose"] on "peer0.org1.example.com" + + # Now the late-install in 4th peer + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer1.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer1.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer1.org1.example.com" + + # Do sanity-check rich query in 4th peer + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"matt\\", \\"color\\":\\"green\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"matt" from "peer1.org1.example.com" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"alex\\", \\"color\\":\\"yellow\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"alex" from "peer1.org1.example.com" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\",\\"owner\\":\\"jose\\", \\"color\\":\\"red\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"jose" from "peer1.org1.example.com" + + # Explicitly check with CouchDB in 4th peer to confirm the index is set up correctly for the rich query to pass using index + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:8984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:8984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:8984" + Then a user receives success response of ["views":{"index_behave_test":{"map":{"fields":{"owner":"asc","docType":"asc","color":"asc"}] from the couchDB container + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7257, FAB-7258 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7260, FAB-7261 | + + +@daily + Scenario Outline: : Test CouchDB indexing using install-after-instantiate with marbles chaincode using with 3 channels and 3 indexes + + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + When a user defines a couchDB index named index_behave_test_owner with design document name "indexdoc_behave_test" containing the fields "owner" to the chaincode at path "" + When a user defines a couchDB index named index_behave_test_docType with design document name "indexdoc_behave_test" containing the fields "docType" to the chaincode at path "" + When a user defines a couchDB index named index_behave_test_color with design document name "indexdoc_behave_test" containing the fields "color" to the chaincode at path "" + + # set up 3 channels, 1 cc each + When an admin sets up a channel named "mychannel1" + And an admin sets up a channel named "mychannel2" + And an admin sets up a channel named "mychannel3" + + # install the 3 ccs only in 3 (out of 4) peers and instantiate them + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer0.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer1.org2.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer0.org2.example.com" + And an admin instantiates the chaincode on channel "mychannel1" on peer "peer0.org1.example.com" + + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer0.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer1.org2.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer0.org2.example.com" + And an admin instantiates the chaincode on channel "mychannel2" on peer "peer0.org1.example.com" + + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer0.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer1.org2.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer0.org2.example.com" + And an admin instantiates the chaincode on channel "mychannel3" on peer "peer0.org1.example.com" + And I wait "10" seconds + + # Invoke in the channels + When a user invokes on the channel "mychannel1" using chaincode named "mycc1" with args ["initMarble","marble1","green","10","matt"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel2" using chaincode named "mycc2" with args ["initMarble","marble2","yellow","20","alex"] on "peer0.org1.example.com" + And a user invokes on the channel "mychannel3" using chaincode named "mycc3" with args ["initMarble","marble3","red","5","jose"] on "peer0.org1.example.com" + + # Now the late-install in 4th peer + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc1" to "peer1.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc2" to "peer1.org1.example.com" + And an admin installs chaincode at path "" of language "" as version "0" with args [""] with name "mycc3" to "peer1.org1.example.com" + + # Do sanity-check rich query in 4th peer + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"matt\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_owner\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"matt" from "peer1.org1.example.com" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"alex\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_owner\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"alex" from "peer1.org1.example.com" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"owner\\":\\"jose\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_owner\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"jose" from "peer1.org1.example.com" + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_docType\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"matt" from "peer1.org1.example.com" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_docType\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"alex" from "peer1.org1.example.com" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{\\"docType\\":\\"marble\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_docType\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"jose" from "peer1.org1.example.com" + When a user queries on the channel "mychannel1" using chaincode named "mycc1" with args ["queryMarbles", "{\\"selector\\":{ \\"color\\":\\"green\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_color\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"matt" from "peer1.org1.example.com" + When a user queries on the channel "mychannel2" using chaincode named "mycc2" with args ["queryMarbles", "{\\"selector\\":{ \\"color\\":\\"yellow\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_color\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"alex" from "peer1.org1.example.com" + When a user queries on the channel "mychannel3" using chaincode named "mycc3" with args ["queryMarbles", "{\\"selector\\":{ \\"color\\":\\"red\\"}, \\"use_index\\":[\\"_design/indexdoc_behave_test\\", \\"index_behave_test_color\\"]}"] on "peer1.org1.example.com" + Then a user receives a response containing "owner":"jose" from "peer1.org1.example.com" + + # Explicitly check with CouchDB to confirm the index is set up correctly for the rich query to pass using index + When a user requests to get the design doc "indexdoc_behave_test_1" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_1" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_1" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_1":{"map":{"fields":{"owner":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_2" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_2":{"map":{"fields":{"docType":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_2" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_2":{"map":{"fields":{"docType":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_2" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_2":{"map":{"fields":{"docType":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_3" for the chaincode named "mycc1" in the channel "mychannel1" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_3":{"map":{"fields":{"color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_3" for the chaincode named "mycc2" in the channel "mychannel2" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_3":{"map":{"fields":{"color":"asc"}] from the couchDB container + When a user requests to get the design doc "indexdoc_behave_test_3" for the chaincode named "mycc3" in the channel "mychannel3" and from the CouchDB instance "http://localhost:5984" + Then a user receives success response of ["views":{"index_behave_test_3":{"map":{"fields":{"color":"asc"}] from the couchDB container + +Examples: + | cc_path | index_path | language | jira_num | + | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | github.com/hyperledger/fabric-samples/chaincode/marbles02/go | GOLANG | FAB-7259 | + | ../../fabric-samples/chaincode/marbles02/node | ../fabric-samples/chaincode/marbles02/node | NODE | FAB-7262 | diff --git a/app/platform/fabric/e2e-test/feature/README.rst b/app/platform/fabric/e2e-test/feature/README.rst new file mode 100644 index 000000000..f329cd429 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/README.rst @@ -0,0 +1,349 @@ +Behave tests for Hyperledger Fabric Feature and System Tests +============================================================ + +.. image:: http://cdn.softwaretestinghelp.com/wp-content/qa/uploads/2007/08/regression-testing.jpg + +Behave is a tool used for Behavior Driven Development (BDD) testing. It uses tests (feature files) written in a natural language called Gherkin. The tests are executed using python as the supporting code. + +BDD is an agile software development technique that encourages collaboration between developers, QA and non-technical or business participants in a software project. Feel free to read more about `BDD`_. + +.. _BDD: http://pythonhosted.org/behave/philosophy.html + + +This drectory contains a behave implementation of system and feature file testing for Hyperledger Fabric. + +Full documentation and usage examples for Behave can be found in the `online documentation`_. + +.. _online documentation: http://pythonhosted.org/behave/ + + +Continuous Integration (CI) Execution +------------------------------------- +The following are links to the Jenkins execution of these tests: + * `daily`_ + * `weekly`_ + * `release`_ + +.. _daily: https://jenkins.hyperledger.org/view/Daily +.. _weekly: https://jenkins.hyperledger.org/view/Weekly +.. _release: https://jenkins.hyperledger.org/view/Release + + +Pre-requisites +-------------- +You must have the following installed: + * `python`_ (You must have 2.7 due to package incompatibilities) + * `docker`_ + * `docker-compose`_ + * `nodejs`_ + * `npm`_ + +Ensure that you have Docker for `Linux`_, `Mac`_ or `Windows`_ 1.12 or higher properly installed on your machine. + +.. _python: https://www.python.org/ +.. _docker: https://www.docker.com/ +.. _docker-compose: https://docs.docker.com/compose/ +.. _nodejs: https://nodejs.org/ +.. _npm: https://www.npmjs.com/ +.. _Linux: https://docs.docker.com/engine/installation/#supported-platforms +.. _Mac: https://docs.docker.com/engine/installation/mac/ +.. _Windows: https://docs.docker.com/engine/installation/windows/ + +You can install Behave and additional packages, such as the `Govendor`_, using the ``./scripts/install_behave.sh`` (useful for linux distros that use the apt packaging manager). This script installs additional packages into your OS environment. + +.. _Govendor: https://github.com/kardianos/govendor/ + +:: + + $ cd /path/to/fabric-test/feature; ../scripts/install_behave.sh + + +The following repositories are dependencies and are included as submodules at the designated locations + * `hyperledger-fabric`_: /path/to/fabric-test/fabric + * `hyperledger-fabric-ca`_: /path/to/fabric-test/fabric-ca + * `cello`_: /path/to/fabric-test/cello + +.. _hyperledger-fabric: https://github.com/hyperledger/fabric +.. _hyperledger-fabric-ca: https://github.com/hyperledger/fabric-ca +.. _cello: https://github.com/hyperledger/cello + +.. _Chaincode Vendoring: +The following commands must be executed + `govendor init` + `govendor add +external` + +inside the chaincodes folder for any chaincode (GO language program) that imports packages, outside the shim or protos folder. + +If the chaincode has imports from external third party, i.e. other than the packages in fabric outside the shim or protos, execute: + `govendor fetch << fully qualified package name here >>` + +Note: This vendoring can be done automatically for you, wherever your chaincode is located, by using some predefined feature steps. For exact syntax, search for "vendor" in the steps/basic_impl.py file, or search for "vendor" in an example testcase in the chaincodes.feature file. + +Caveats and Gotchas +------------------- +* This framework uses the `signal`_ package, which currently only works well in NIX environments. +* When there is a need for executing commands that contain pipes (|) in a table, the user will need to use bang (!) instead. This is to make sure that the pipe in the command does not conflict with the pipe in the behave table. + +.. _signal: https://docs.python.org/2/library/signal.html + + +================ +Using VirtualEnv +================ +It is also possible to execute these tests using `virtualenv`_. This allows for you to control your environment and ensure that the version of python and any other environment settings will be exactly what is needed regardless of the environment of the native machine. + +.. _virtualenv: http://docs.python-guide.org/en/latest/dev/virtualenvs/ + +There are instructions for setting up a virtualenv for executing behave tests located at ``fabric-test/fabric/bddtests/README.md``. Once these steps are completed and you have successfully setup the ``behave_venv`` virtual environment, execute the following before executing these behave tests. + +:: + + $ workon behave_venv + + +Getting Started +--------------- +Before executing the behave tests, it is assumed that there are docker images and tools that have already been built. + +================ +Areas of Testing +================ +BDD tests are testing functionality and feature behavior. With this in mind, the following are areas that we plan to be covered in these BDD tests: + * Basic setup (Happy Path) + * Orderer Functionality + * solo + * kafka + * Ledgers + * Endorser and committer peers + * Fabric-CA (used for SSL connections) + * Upgrades and Fallbacks + * Bootstrapping + * configtxgen + * cryptogen + * configtxlator + * Growing and shrinking networks + * Stopping and Starting components + * … and more (such as different tooling, messages sizes, special scenarios) + +The following are not covered in these BDD tests: + * scalability + * performance + * long running tests + * stress testing + + +====================== +Building docker images +====================== +When executing tests that are using docker-compose fabric-ca images, be sure to have the fabric-ca docker images built. You must perform a ``make docker`` in the ``/path/to/hyperledger/fabric-test/fabric-ca`` directory. + +The docker images for ``peer``, ``orderer``, ``kafka``, and ``zookeeper`` are needed. You must perform a ``make docker`` in the ``/path/to/hyperledger/fabric-test/fabric`` directory. + + +========================= +Building tool executables +========================= +The **configtxgen**, **configtxlator** and **cryptogen** tools are used when bootstrapping the networks in these tests. As a result, you must perform a ``make configtxgen cryptogen configtxlator`` in the ``/path/to/hyperledger/fabric-test/fabric`` directory. Be sure that the executable location is added to your PATH. + + +How to Contribute +-------------------------- + +.. image:: http://i.imgur.com/ztYl4lG.jpg + +There are different ways that you can contribute in this area. + * Writing feature files + * Writing python test code to execute the feature files + * Adding docker-compose files for different network configurations + +To add your contributions to the Hyperledger Fabric-test project, please refer to the `Hyperledger Fabric Contribution`_ page for more details. + +.. _Hyperledger Fabric Contribution: http://hyperledger-fabric.readthedocs.io/en/latest/CONTRIBUTING.html + +=================================== +How Do I Write My Own Feature File? +=================================== +The feature files are written by anyone who understands the requirements. This can be a business analyst, quality analyst, manager, developer, customer, etc. The file describes a feature or part of a feature with representative examples of expected outcomes and behaviors. These files are plain-text and do not require any compilation. Each feature step maps to a python step implementation. When choosing appropriate key phrases when writing feature files, look in the `Helpful Tools`_ section for more information. + +The following is an example of a simple feature file: + +.. sourcecode:: gherkin + + Feature: Test to ensure I take the correct accessory + Scenario: Test what happens on a rainy day + Given it is a new day + When the day is rainy + And the day is cold + Then we should bring an umbrella + Scenario Outline: Test what to bring + Given it is a new day + When the day is + Then we should bring + Examples: Accessories + | weather | accessory | + | hot | swimsuit | + | cold | coat | + | cloudy | nothing | + + +Keywords that are used when writing feature files: + * **Feature** + * The introduction of the different feature test scenarios + * You can have multiple scenarios for a single feature + * **Scenario/Scenario Outline** + * The title and description of the test + * You can run the same test with multiple inputs + * **Given** + * Indicates a known state before any interaction with the system. + * **Avoid talking about user interaction.** + * **When** + * Key actions are performed on the system. + * This is the step which may or may not cause some state to change in your system. + * **Then** + * The observed and expected outcomes. + * **And** + * Can be used when layering any givens, whens, or thens. + + +======================== +Writing python test code +======================== +Feature steps used in the feature file scenarios are implemented in python files stored in the “steps” directory. As the python implementation code grows, fewer changes to the code base will be needed in order to add new tests. If you simply want to write feature files, you are free to do so using the existing predefined feature steps. + +The behave implementation files are named '*_impl.py*' and the utilities are named '*_util.py*' in the steps directory. + +Python implementation steps are identified using decorators which match the keyword from the feature file: 'given', 'when', 'then', and 'and'. The decorator accepts a string containing the rest of the phrase used in the scenario step it belongs to. + + +.. sourcecode:: python + + >>> from behave import * + >>> @given('it is a new day') + ... def step_impl(context): + ... # Do some work + ... pass + >>> @when('the day is {weather}') + ... def step_impl(context, weather): + ... weatherMap = {'rainy': 'an umbrella', + ... 'sunny': 'shades', + ... 'cold': 'a coat'} + ... context.accessory = weatherMap.get(weather, "nothing") + >>> @then('we should bring {accessory}') + ... def step_impl(context, accessory): + ... assert context.accessory == accessory, "You're taking the wrong accessory!" + + +==================== +Docker-Compose Files +==================== +These docker composition files are used when setting up and tearing down networks of different configurations. Different tests can use different docker compose files depending on the test scenario. We are currently using `version 2 docker compose`_ files. + +.. _version 2 docker compose: https://docs.docker.com/compose/compose-file/compose-file-v2/ + + +============================ +How to execute Feature tests +============================ +There are multiple ways to execute behave tests. + * Execute all feature tests in the current directory + * Execute all tests in a specific feature file + * Execute all tests with a specified tag + * Execute a specific test + * Remote execution + * Execute with logs + +Local Execution +--------------- +When executing the behave tests locally, there are some simple commands that may be useful. + +**Executes all tests in directory** +:: + + $ behave + +**Executes specific feature file** +:: + + $ behave mytestfile.feature + +**Executes tests labelled with tag** +:: + + $ behave -t mytag + +**Executes tests labelled with tags not running the tests with skip label** +:: + + $ behave --tags=mytag1 --tags=mytag2 --tags=-skip + +**Executes a specific test** +:: + + $ behave -n 'my scenario name' + +**Executes a specific test saving logs of containers only when there are failures** +:: + + $ behave -n 'my scenario name' -D logs=y + +**Executes a specific test saving logs of containers** +:: + + $ behave -n 'my scenario name' -D logs=force + +**Executes a suite of tests on a remote network** +:: + + $ behave -t remote -D network= + + +Remote Execution +--------------- +When executing the behave tests remotely, there is some setup that needs to take place. Namely, it is important to know the information for the network that you are testing on. + +Also, note that any tests that are deemed well-suited for execution on a remote network are tagged with "remote". + + +Helpful Tools +------------- +Behave and the BDD ecosystem have a number of `tools`_ and extensions to assist in the development of tests. These tools include features that will display what feature steps are available for each keyword. Feel free to explore and use the tools, depending on your editor of choice. + +.. _tools: http://behave.readthedocs.io/en/latest/behave_ecosystem.html + + +Helpful Docker Commands +----------------------- +There are many helpful Docker tutorials available online. Feel free to take a look at some helpful hints found in the `Hyperledger Fabric Docker Tips`_ page. + +.. _Hyperledger Fabric Docker Tips: https://hyperledger-fabric.readthedocs.io/en/latest/chaincode4ade.html#download-docker-images + +Some helpful docker commands when debugging: + * View running containers + * ``$ docker ps`` + * View all containers (active and non-active) + * ``$ docker ps -a`` + * Stop all Docker containers + * ``$ docker stop $(docker ps -a -q)`` + * Remove all containers. Adding the `-f` will issue a "force" kill + * ``$ docker rm -f $(docker ps -aq)`` + * Remove all images + * ``$ docker rmi -f $(docker images -q)`` + * Remove all images except for hyperledger/fabric-baseimage + * ``$ docker rmi $(docker images | grep -v 'hyperledger/fabric-baseimage:latest' | awk {'print $3'})`` + * Start a container + * ``$ docker start `` + * Stop a containerID + * ``$ docker stop `` + * View network settings for a specific container + * ``$ docker inspect `` + * View logs for a specific containerID + * ``$ docker logs -f `` + * View docker images installed locally + * ``$ docker images`` + * View networks currently running + * ``$ docker networks ls`` + * Remove a specific residual network + * ``$ docker networks rm `` + +.. Licensed under Creative Commons Attribution 4.0 International License + https://creativecommons.org/licenses/by/4.0/ diff --git a/app/platform/fabric/e2e-test/feature/bootstrap.feature b/app/platform/fabric/e2e-test/feature/bootstrap.feature new file mode 100644 index 000000000..a1ec09830 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/bootstrap.feature @@ -0,0 +1,124 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + + +Feature: Bootstrapping Hyperledger Fabric + As a user I want to be able to bootstrap my fabric network + +@daily +Scenario: FAB-3635: Bootstrap Network from Configuration files + Given I have a fabric config file + When the network is bootstrapped for an orderer + Then the "orderer.block" file is generated + When the network is bootstrapped for a channel named "mychannel" + Then the "mychannel.tx" file is generated + +@daily +Scenario: FAB-3854: Ensure genesis block generated by configtxgen contains correct data + Given I have a fabric config file + When the network is bootstrapped for an orderer + Then the "orderer.block" file is generated + And the orderer block "orderer.block" contains MSP + And the orderer block "orderer.block" contains root_certs + And the orderer block "orderer.block" contains tls_root_certs + And the orderer block "orderer.block" contains Writers + And the orderer block "orderer.block" contains Readers + And the orderer block "orderer.block" contains BlockValidation + And the orderer block "orderer.block" contains HashingAlgorithm + And the orderer block "orderer.block" contains OrdererAddresses + And the orderer block "orderer.block" contains ChannelRestrictions + And the orderer block "orderer.block" contains ChannelCreationPolicy + And the orderer block "orderer.block" contains mod_policy + When the network is bootstrapped for a channel named "mychannel" + Then the "mychannel.tx" file is generated + And the channel transaction file "mychannel.tx" contains Consortium + And the channel transaction file "mychannel.tx" contains mychannel + And the channel transaction file "mychannel.tx" contains Admins + And the channel transaction file "mychannel.tx" contains Writers + And the channel transaction file "mychannel.tx" contains Readers + And the channel transaction file "mychannel.tx" contains mod_policy + +@daily +Scenario Outline: FAB-3858: Verify crypto material (TLS) generated by cryptogen + Given I have a crypto config file with orgs, peers, orderers, and users + When the crypto material is generated for TLS network + Then crypto directories are generated containing tls certificates for orgs, peers, orderers, and users + Examples: + | numOrgs | peersPerOrg | numOrderers | numUsers | + | 2 | 2 | 3 | 1 | + | 3 | 2 | 3 | 3 | + +@daily +Scenario Outline: FAB-3856: Verify crypto material (non-TLS) generated by cryptogen + Given I have a crypto config file with orgs, peers, orderers, and users + When the crypto material is generated + Then crypto directories are generated containing certificates for orgs, peers, orderers, and users + Examples: + | numOrgs | peersPerOrg | numOrderers | numUsers | + | 2 | 2 | 3 | 1 | + | 3 | 2 | 3 | 3 | + | 2 | 3 | 4 | 4 | + | 10 | 5 | 1 | 10 | + +@smoke +Scenario: Access to the fabric protobuf files + Given I test the access to the generated python protobuf files + Then there are no errors + +###Comment out temporarily so smoke test suite will pass. This will allow us to merge, and then +### can run all the daily tests. Some of the daily tests may fail (the ones that require modifying env vars). +###This test fails , probably because the more recent code and/or capabilities are needed to allow modifying the logspec +###@smoke +Scenario: Setting of environment variables + Given the KAFKA_DEFAULT_REPLICATION_FACTOR environment variable is 1 + And the CONFIGTX_ORDERER_BATCHTIMEOUT environment variable is 10 minutes + And the CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT environment variable is 10 + And the FABRIC_LOGGING_SPEC environment variable is gossip.discovery=DEBUG:nodeCmd=DEBUG + And I have a bootstrapped fabric network of type kafka with tls + Then the KAFKA_DEFAULT_REPLICATION_FACTOR environment variable is 1 on node "kafka1" + And the CONFIGTX_ORDERER_BATCHTIMEOUT environment variable is 10 minutes on node "orderer0.example.com" + And the CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT environment variable is 10 on node "orderer1.example.com" + And the ORDERER_GENERAL_TLS_ENABLED environment variable is true on node "orderer2.example.com" + And the CORE_PEER_TLS_ENABLED environment variable is true on node "peer0.org1.example.com" + And the FABRIC_LOGGING_SPEC environment variable is gossip.discovery=DEBUG:nodeCmd=DEBUG on node "peer1.org2.example.com" + And the logs on peer1.org2.example.com contains "\[gossip.discovery\] periodicalSendAlive -> DEBU" within 30 seconds + And the logs on peer1.org2.example.com contains "\[nodeCmd\] serve -> DEBU" within 15 seconds + + +#@doNotDecompose +@daily +Scenario Outline: FAB-4776/FAB-4777: Bring up a based network and check peers + Given I have a bootstrapped fabric network of type using state-database + When an admin sets up a channel + And an admin deploys chaincode + And the orderer node logs receiving the orderer block + And a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 100 + When an admin fetches genesis information using peer "peer1.org1.example.com" from "orderer0.example.com" to location "." + Then the config block file is fetched from peer "peer1.org1.example.com" at location "." + When a user queries on the chaincode with args ["query","a"] from "peer1.org1.example.com" + Then a user receives a success response of 100 from "peer1.org1.example.com" + When an admin fetches genesis information using peer "peer1.org2.example.com" from "orderer0.example.com" to location "." + Then the config block file is fetched from peer "peer1.org2.example.com" at location "." + When a user queries on the chaincode with args ["query","a"] from "peer1.org2.example.com" + Then a user receives a success response of 100 from "peer1.org2.example.com" +Examples: + | database | orderertype | + | leveldb | solo | +# | couchdb | kafka | + + +@daily +Scenario: FAB-4773: Fetching of a channel genesis block + Given I have a crypto config file with 2 orgs, 2 peers, 3 orderers, and 2 users + When the crypto material is generated for TLS network + Given I have a fabric config file + When the network is bootstrapped for an orderer + When I start a fabric network with TLS + When the network is bootstrapped for a channel named "mychannel" + When an admin creates a channel named "mychannel" + And an admin fetches genesis information for a channel "mychannel" using peer "peer1.org1.example.com" + Then the "mychannel.block" file is generated + Then the "mychannel.block" file is fetched from peer "peer1.org1.example.com" diff --git a/app/platform/fabric/e2e-test/feature/chaincodes.feature b/app/platform/fabric/e2e-test/feature/chaincodes.feature new file mode 100644 index 000000000..11d06c59f --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/chaincodes.feature @@ -0,0 +1,528 @@ +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + + +Feature: Chaincodes Testing + + +@daily +Scenario Outline: FAB-5797: Test chaincode fabric/examples/example02/cmd deploy, invoke, and query with chaincode install name in all lowercase/uppercase/mixedcase chars, for orderer + Given I have a bootstrapped fabric network of type + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "" + When a user queries on the chaincode named "" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "" with args ["invoke","a","b","10"] + And I wait "3" seconds + When a user queries on the chaincode named "" with args ["query","a"] + Then a user receives a success response of 990 +Examples: + | type | ccName | + | solo | mycc | + | solo | MYCC | + | solo | MYcc_Test | + | kafka | mycc | + | kafka | MYCC | + | kafka | MYcc_Test | + +@daily +Scenario Outline: FAB-11808: Test the use of the network model API to successfully commit to the ledger + Given I have a bootstrapped fabric network of type + And I use the NodeJS SDK interface + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + # evaluating a transaction == query, but using the network model API + When a user evaluates a transaction on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + # submitting a transaction == invoke, but using the network model API + When a user submits a transaction on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user evaluates a transaction on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 +Examples: + | type | security | + | solo | without tls | + | kafka | with tls | + +@daily +Scenario: FAB-4703: FAB-5663, Test chaincode calling chaincode - fabric/examples/example04/cmd + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example04/cmd" with args ["init","Event","1"] with name "myex04" + When an admin sets up a channel named "channel2" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "myex02_a" on channel "channel2" + When a user queries on the channel "channel2" using chaincode named "myex02_a" with args ["query","a"] + Then a user receives a success response of 1000 + When a user queries on the chaincode named "myex04" with args ["query","Event", "myex02_a", "a", "channel2"] + Then a user receives a success response of 1000 + +@shimAPI +@daily +Scenario: FAB-4717: FAB-5663, chaincode-to-chaincode testing passing in channel name as a third argument to chaincode_ex05 when cc_05 and cc_02 are on different channels + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example05/cmd" with args ["init","sum","0"] with name "myex05" + When an admin sets up a channel named "channel2" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "myex02_b" on channel "channel2" + When a user queries on the channel "channel2" using chaincode named "myex02_b" with args ["query","a"] + Then a user receives a success response of 1000 + When a user queries on the chaincode named "myex05" with args ["query","myex02_b", "sum", "channel2"] + Then a user receives a success response of 3000 + + +@daily +Scenario: FAB-4718: FAB-5663, chaincode-to-chaincode testing passing an empty string for channel_name when cc_05 and cc_02 are on the same channel + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example05/cmd" with args ["init","sum","0"] with name "myex05" + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "myex02_b" + When a user queries on the chaincode named "myex02_b" with args ["query","a"] + Then a user receives a success response of 1000 + When a user queries on the chaincode named "myex05" with args ["query","myex02_b", "sum", ""] + Then a user receives a success response of 3000 + + +@daily +Scenario: FAB-4720: FAB-5663, Test chaincode calling chaincode -ve test case passing an incorrect or non-existing channnel name when cc_ex02 and cc_ex05 installed on same channels + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example05/cmd" with args ["init","sum","0"] with name "myex05" + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "myex02_b" + When a user queries on the chaincode named "myex02_b" with args ["query","a"] + Then a user receives a success response of 1000 + When a user queries on the chaincode named "myex05" with args ["query","myex02_b", "sum", "non-existing-channel"] + Then a user receives an error response of status:500 + And a user receives an error response of Failed to get policy manager for channel [non-existing-channel] + + +@daily +Scenario: FAB-4721: FAB-5663, Test chaincode calling chaincode -ve testcase passing an incorrect ot non-existing string for channelname when cc_ex02 and cc_ex05 installed on different channels + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example05/cmd" with args ["init","sum","0"] with name "myex05" + When an admin sets up a channel named "channel2" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "myex02_b" on channel "channel2" + When a user queries on the channel "channel2" using chaincode named "myex02_b" with args ["query","a"] + Then a user receives a success response of 1000 + When a user queries on the chaincode named "myex05" with args ["query","myex02_b", "sum", "non-existing-channel"] + Then a user receives an error response of status:500 + And a user receives an error response of Failed to get policy manager for channel [non-existing-channel] + + +@daily +Scenario: FAB-4722: FAB-5663, Test chaincode calling chaincode -ve testcase passing an empty string for channelname when cc_ex02 and cc_ex05 installed on different channels + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example05/cmd" with args ["init","sum","0"] with name "myex05" + When an admin sets up a channel named "channel2" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "myex02_b" on channel "channel2" + When a user queries on the channel "channel2" using chaincode named "myex02_b" with args ["query","a"] + Then a user receives a success response of 1000 + When a user queries on the chaincode named "myex05" with args ["query","myex02_b", "sum", ""] + Then a user receives an error response of status:500 + And a user receives an error response of chaincode myex02_b not found + +@daily +Scenario: FAB-5384: FAB-5663, Test chaincode calling chaincode with two args cc_ex02 and cc_ex05 installed on same channels + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example05/cmd" with args ["init","sum","0"] with name "myex05" + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "myex02_b" + When a user queries on the chaincode named "myex02_b" with args ["query","a"] + Then a user receives a success response of 1000 + When a user queries on the chaincode named "myex05" with args ["query","myex02_b", "sum"] + Then a user receives a success response of 3000 + + +@daily +Scenario Outline: FAB-3888: State Transfer Test, bouncing a non-leader peer, using marbles02, for orderer + Given the FABRIC_LOGGING_SPEC environment variable is gossip.election=DEBUG + And I have a bootstrapped fabric network of type + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/marbles02" with args [""] with name "mycc" + + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble1","red","35","tom"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble1"] + Then a user receives a success response of {"docType":"marble","name":"marble1","color":"red","size":35,"owner":"tom"} + + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble111","pink","55","jane"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] + Then a user receives a success response of {"docType":"marble","name":"marble111","color":"pink","size":55,"owner":"jane"} + + When the initial non-leader peer of "org1" is taken down + + And a user invokes on the chaincode named "mycc" with args ["transferMarble","marble111","jerry"] on the initial leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] on the initial leader peer of "org1" + Then a user receives a success response of {"docType":"marble","name":"marble111","color":"pink","size":55,"owner":"jerry"} from the initial leader peer of "org1" + And I wait "3" seconds + When a user invokes on the chaincode named "mycc" with args ["transferMarble","marble111","tom"] on the initial leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] on the initial leader peer of "org1" + Then a user receives a success response of {"docType":"marble","name":"marble111","color":"pink","size":55,"owner":"tom"} from the initial leader peer of "org1" + + When the initial non-leader peer of "org1" comes back up + + And I wait "30" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] on the initial non-leader peer of "org1" + Then a user receives a success response of {"docType":"marble","name":"marble111","color":"pink","size":55,"owner":"tom"} from the initial non-leader peer of "org1" + + Examples: + | type | + | solo | + | kafka | + +@smoke +Scenario: FAB-6211: Test example02 chaincode written using NODE without tls + Given I have a bootstrapped fabric network of type solo without tls + When an admin sets up a channel + And an admin deploys chaincode at path "../../fabric-test/chaincodes/example02/node" with args ["init","a","1000","b","2000"] with name "mycc" with language "NODE" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + When a user queries on the chaincode named "mycc" with args ["query","b"] + Then a user receives a success response of 2010 + + +@daily +Scenario Outline: FAB-6211: Test example02 chaincode written using + Given I have a bootstrapped fabric network of type solo + When an admin sets up a channel + And an admin deploys chaincode at path "" with args ["init","a","1000","b","2000"] with name "mycc" with language "" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + When a user queries on the chaincode named "mycc" with args ["query","b"] + Then a user receives a success response of 2010 +Examples: + | path | language | security | + | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | with tls | + | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | without tls | + | ../../fabric-test/chaincodes/example02/node | NODE | with tls | + + + +@shimAPI +@daily +Scenario Outline: FAB-6256: Test support of rich queries in SHIM API: queryMarbles and queryMarblesByOwner using marbles chaincode on couchdb + Given I have a bootstrapped fabric network of type solo using state-database couchdb with tls + When an admin sets up a channel + And an admin deploys chaincode at path "" with args [""] with language "" + + When a user invokes on the chaincode with args ["initMarble","marble1","blue","35","tom"] + When a user invokes on the chaincode with args ["initMarble","marble2","red","50","tom"] + And I wait "3" seconds + When a user queries on the chaincode with args ["readMarble","marble1"] + Then a user receives a response containing "name":"marble1" + And a user receives a response containing "owner":"tom" + + When a user queries on the chaincode with args ["readMarble","marble2"] + Then a user receives a response containing "name":"marble2" + And a user receives a response containing "owner":"tom" + + # queryMarblesByOwner + When a user queries on the chaincode with args ["queryMarblesByOwner","tom"] + Then a user receives a response containing "Key":"marble1" + And a user receives a response containing "name":"marble1" + And a user receives a response containing "owner":"tom" + And a user receives a response containing "Key":"marble2" + And a user receives a response containing "name":"marble2" + + # queryMarbles + When a user queries on the chaincode with args ["queryMarbles","{\\"selector\\":{\\"owner\\":\\"tom\\"}}"] + Then a user receives a response containing "Key":"marble1" + And a user receives a response containing "name":"marble1" + And a user receives a response containing "owner":"tom" + And a user receives a response containing "Key":"marble2" + And a user receives a response containing "name":"marble2" + + # queryMarbles on more than one selector + When a user queries on the chaincode with args ["queryMarbles","{\\"selector\\":{\\"owner\\":\\"tom\\",\\"color\\":\\"red\\"}}"] + + Then a user receives a response containing "Key":"marble2" + And a user receives a response containing "name":"marble2" + And a user receives a response containing "color":"red" + And a user receives a response containing "owner":"tom" + Then a user receives a response not containing "Key":"marble1" + And a user receives a response not containing "color":"blue" + + When a user invokes on the chaincode with args ["transferMarble","marble1","jerry"] + And I wait "3" seconds + And a user queries on the chaincode with args ["readMarble","marble1"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble1" + And a user receives a response containing "color":"blue" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"jerry" + When a user invokes on the chaincode with args ["transferMarble","marble2","jerry"] + And I wait "3" seconds + And a user queries on the chaincode with args ["readMarble","marble2"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble2" + And a user receives a response containing "color":"red" + And a user receives a response containing "size":50 + And a user receives a response containing "owner":"jerry" + + When a user queries on the chaincode with args ["queryMarbles","{\\"selector\\":{\\"owner\\":\\"tom\\"}}"] + Then a user receives a success response of [] +Examples: + | path | language | + | github.com/hyperledger/fabric/examples/chaincode/go/marbles02 | GOLANG | + | ../../fabric-test/chaincodes/marbles/node | NODE | + +@daily +Scenario Outline: FAB-6439: Test chaincode enccc_example.go which uses encshim library extensions for orderer + #To generate good keys, we followed instructions as in the README.md under "github.com/hyperledger/fabric/examples/chaincode/go/enccc_example" folder + # ENCKEY=`openssl rand 32 -base64` + # IV=`openssl rand 16 -base64` + # SIGKEY=`openssl ecparam -name prime256v1 -genkey | tail -n5 | base64 -w0` + Given I have a bootstrapped fabric network of type + When an admin sets up a channel + #Warning: if you see errors during deploy instantiation, you may need to first remove outdated vendored materials inside the chaincode folder, + #e.g. `rm -rf ../../fabric-test/fabric/examples/chaincode/go/encc/vendor` + And I vendor "GOLANG" packages for fabric-based chaincode at "../fabric/examples/chaincode/go/enccc_example" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/enccc_example" with args ["init", ""] with name "mycc" + And I locally execute the command "openssl rand 32 -base64" saving the results as "ENCKEY" + And a user invokes on the chaincode named "mycc" with args ["ENCRYPT","Social-Security-Number","123-45-6789"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\"}" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["DECRYPT", "Social-Security-Number"] and generated transient args "{\\"DECKEY\\":\\"{ENCKEY}\\"}" + Then a user receives a success response of 123-45-6789 + When I locally execute the command "openssl rand 16 -base64" saving the results as "IV" + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","Tax-Id","1234-012"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\",\\"IV\\":\\"{IV}\\"}" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["DECRYPT", "Tax-Id"] and generated transient args "{\\"DECKEY\\":\\"{ENCKEY}\\",\\"IV\\":\\"{IV}\\"}" + Then a user receives a response containing 1234-012 + When I locally execute the command "openssl ecparam -name prime256v1 -genkey | tail -n5 | base64 -w0" saving the results as "SIGKEY" + When a user invokes on the chaincode named "mycc" with args ["ENCRYPTSIGN","Passport-Number","M9037"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\",\\"SIGKEY\\":\\"{SIGKEY}\\"}" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["DECRYPTVERIFY","Passport-Number"] and generated transient args "{\\"DECKEY\\":\\"{ENCKEY}\\",\\"VERKEY\\":\\"{SIGKEY}\\"}" + Then a user receives a response containing M9037 + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","WellsFargo-Savings-Account","09675879"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\"}" + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","BankOfAmerica-Savings-Account","08123456"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\"}" + And I wait "3" seconds + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","Employee-Number1","123-00-6789"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\"}" + And I wait "3" seconds + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","Employee-Number2","123-45-0089"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\"}" + And I wait "3" seconds + #for range use keys encrypted with 'ENC' 'PUT' + When a user queries on the chaincode named "mycc" with args ["RANGEQUERY"] and generated transient args "{\\"DECKEY\\":\\"{ENCKEY}\\"}" + Then a user receives a response containing "key":"Employee-Number1" + And a user receives a response containing "value":"123-00-6789" + And a user receives a response containing "key":"Employee-Number2" + And a user receives a response containing "value":"123-45-0089" + And a user receives a response containing "key":"WellsFargo-Savings-Account" + And a user receives a response containing "value":"09675879" + And a user receives a response containing "key":"BankOfAmerica-Savings-Account" + And a user receives a response containing "value":"08123456" + +Examples: + | type | + | solo | + | kafka | + + +@daily +Scenario Outline: FAB-6650: Test chaincode enccc_example.go negative scenario, passing in bad ENCRYPTION(ENC), IV, and SIGNATURE(SIG) KEYS + #To generate good keys, we followed instructions as in the README.md under "github.com/hyperledger/fabric/examples/chaincode/go/enccc_example" folder + # ENCKEY=`openssl rand 32 -base64` + # IV=`openssl rand 16 -base64` + # SIGKEY=`openssl ecparam -name prime256v1 -genkey | tail -n5 | base64 -w0` + # For the things we called BAD keys in this test, we deleted last character from the generated good keys to corrupt them. + + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And I vendor "GOLANG" packages for fabric-based chaincode at "../fabric/examples/chaincode/go/enccc_example" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/enccc_example" with args ["init", ""] with name "mycc" + + #first we test for invoke failures by passing in bad keys + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","Social-Security-Number","123-45-6789"] and transient args "{\\"ENCKEY\\":\\"\\"}" + Then a user receives an error response of Error: error parsing transient string: illegal base64 data at input byte 40 - proposal response: + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","Tax-Id","1234-012"] and transient args "{\\"ENCKEY\\":\\"\\",\\"IV\\":\\"\\"}" + Then a user receives an error response of Error: error parsing transient string: illegal base64 data at input byte 23 - proposal response: + When a user invokes on the chaincode named "mycc" with args ["ENCRYPTSIGN","Passport-Number","M9037"] and transient args "{\\"ENCKEY\\":\\"\\",\\"SIGKEY\\":\\"\\"}" + Then a user receives an error response of Error: error parsing transient string: illegal base64 data at input byte 300 - proposal response: + + #here we make sure invokes pass but test for query failures by passing in bad keys + When I locally execute the command "openssl rand 32 -base64" saving the results as "ENCKEY" + When a user invokes on the chaincode named "mycc" with args ["ENCRPYT","Employee-Number1","123-00-6789"] and generated transient args "{\\"ENCKEY\\":\\"{ENCKEY}\\"}" + And I wait "5" seconds + #query an encrypted entity without passing Encryption key + When a user queries on the chaincode named "mycc" with args ["ENCRYPT","Social-Security-Number"] + Then a user receives an error response of status:500 + And a user receives an error response of Expected transient encryption key ENCKEY + #query passing in bad_enc_key + When a user invokes on the chaincode named "mycc" with args ["ENCRYPT","Social-Security-Number","123-45-6789"] and transient args "{\\"ENCKEY\\":\\"\\"}" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["ENCRYPT","Social-Security-Number"] and generated transient args "{\\"ENCKEY\\":\\"\\"}" + Then a user receives an error response of Error: error parsing transient string: illegal base64 data at input byte 40 - proposal response: + +Examples: + | GOOD_ENC_KEY | BAD_ENC_KEY | BAD_IV_KEY | BAD_SIG_KEY | + | L6P9jLWR6d6E1KdGJBsUpzEm5QS6uVlS4onsteB+KaQ= | L6P9jLWR6d6E1KdGJBsUpzEm5QS6uVlS4onsteB+KaQ | +4DANc5uYLTnsH6Yy7v32g= | LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUhYRkd1eWxyTlQ1WUdtd1E0MVBWeTJqVlZrcXhMMTdBN1pSM0lDL1RGakJvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVHdWSEhrbklmUnUyZ3YwWU50R210akpDSHJzdThhekZ1OWZvUy9raUlPN2Q2aWhTWWRjdgpHbEoyNlF0WmtTTlhWNkJDLy91Z25ycGN3bldTdERsc1lRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo | + + +@shimAPI +@daily +Scenario Outline: FAB-5791: Test API in SHIM interface using marbles02 and shimApiDriver chaincodes for orderer db lang +# | shim API in fabric/core/shim/chaincode.go | Covered in marbles02 chaincode | +# | for chaincode invocation +# | Init | init | +# | Invoke | invoke | +# | GetState | readMarble, initMarble, transferMarble | +# | PutState | initMarble, transferMarble | +# | DelState | deleteMarble | +# | CreateCompositeKey | initMarble, deleteMarble | +# | SplitCompositeKey | transferMarblesBasedOnColor | +# | GetStateByRange | transferMarblesBasedOnColor | +# | GetQueryResult | FAB-6256 readMarbles,queryMarbles,queryMarblesByOwner | +# | GetHistoryForKey | getHistoryForMarble | +# | GetStatePartialCompositeKeyQuery | transferMarblesBasedOnColor | + +# | | Covered in shimApiDriver chaincode +# | GetArgs | getArgs | +# | GetArgsSlice | getArgsSlice | +# | GetStringArgs | getStringArgs | +# | GetFunctionAndParameters | getFunctionAndParameters | + +# | GetBinding | getBinding | +# | GetCreator | getCreator | +# | GetTxTimeStamp | getTxTimeStamp | +# | GetSignedProposal | getSignedProposal | +# | GetTransient | getTransient | +# | GetTxID | | +# | GetDecorations | | +# | SetEvent | | + +# | InvokeChaincode | FAB-4717 ch_ex05 calling ch_ex02 | + + Given I have a bootstrapped fabric network of type + When an admin sets up a channel + And I vendor "" packages for fabric-based chaincode at "" + When an admin deploys chaincode at path "" with args [""] with name "mycc" with language "" + When an admin deploys chaincode at path "" with args [""] with name "myShimAPI" with language "" + + + #first two marbles are used for getMarblesByRange + When a user invokes on the chaincode named "mycc" with args ["initMarble","001m1","indigo","35","saleem"] + When a user invokes on the chaincode named "mycc" with args ["initMarble","004m4","green","35","dire straits"] + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble1","red","35","tom"] + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble2","blue","55","jerry"] + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble111","pink","55","jane"] + And I wait "5" seconds + + When a user queries on the chaincode named "mycc" with args ["readMarble","marble1"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble1" + And a user receives a response containing "color":"red" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"tom" + + + When a user queries on the chaincode named "mycc" with args ["readMarble","marble2"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble2" + And a user receives a response containing "color":"blue" + And a user receives a response containing "size":55 + And a user receives a response containing "owner":"jerry" + + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble111" + And a user receives a response containing "color":"pink" + And a user receives a response containing "size":55 + And a user receives a response containing "owner":"jane" + +#Test transferMarble + When a user invokes on the chaincode named "mycc" with args ["transferMarble","marble1","jerry"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble1"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble1" + And a user receives a response containing "color":"red" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"jerry" + +# Begin creating marbles to to test transferMarblesBasedOnColor + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble100","red","5","cassey"] + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble101","blue","6","cassey"] + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble200","purple","5","ram"] + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble201","blue","6","ram"] + And I wait "3" seconds + + When a user invokes on the chaincode named "mycc" with args ["transferMarblesBasedOnColor","blue","jerry"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble100"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble100" + And a user receives a response containing "color":"red" + And a user receives a response containing "size":5 + And a user receives a response containing "owner":"cassey" + + + When a user queries on the chaincode named "mycc" with args ["readMarble","marble101"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble101" + And a user receives a response containing "color":"blue" + And a user receives a response containing "size":6 + And a user receives a response containing "owner":"jerry" + + + When a user queries on the chaincode named "mycc" with args ["readMarble","marble200"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble200" + And a user receives a response containing "color":"purple" + And a user receives a response containing "size":5 + And a user receives a response containing "owner":"ram" + + When a user queries on the chaincode named "mycc" with args ["readMarble","marble201"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble201" + And a user receives a response containing "color":"blue" + And a user receives a response containing "size":6 + And a user receives a response containing "owner":"jerry" + + +# Test getMarblesByRange + When a user queries on the chaincode named "mycc" with args ["getMarblesByRange","001m1", "005m4"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"001m1" + And a user receives a response containing "color":"indigo" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"saleem" + + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"004m4" + And a user receives a response containing "color":"green" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"dire straits" + + #delete a marble + When a user invokes on the chaincode named "mycc" with args ["delete","marble201"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble201"] + Then a user receives an error response of status:500 + And a user receives an error response of {\"Error\":\"Marble does not exist: marble201\"} + + When a user queries on the chaincode named "myShimAPI" with args ["getTxTimestamp"] + When a user queries on the chaincode named "myShimAPI" with args ["getCreator"] + When a user invokes on the chaincode named "myShimAPI" with args ["getBinding"] + When a user queries on the chaincode named "myShimAPI" with args ["getSignedProposal"] + When a user queries on the chaincode named "myShimAPI" with args ["getTransient"] + + Examples: + | type | database | marbles02Path | VendorPath | shimAPIDriverPath | language | + | solo | leveldb | github.com/hyperledger/fabric/examples/chaincode/go/marbles02 | ../chaincodes/shimApiDriver/go | github.com/hyperledger/fabric-test/chaincodes/shimApiDriver/go | GOLANG | + | kafka | couchdb | github.com/hyperledger/fabric/examples/chaincode/go/marbles02 | ../chaincodes/shimApiDriver/go | github.com/hyperledger/fabric-test/chaincodes/shimApiDriver/go | GOLANG | + | solo | leveldb | ../../fabric-test/chaincodes/marbles/node | ../chaincodes/shimApiDriver/node | ../../fabric-test/chaincodes/shimApiDriver/node | NODE | + | kafka | couchdb | ../../fabric-test/chaincodes/marbles/node | ../chaincodes/shimApiDriver/node | ../../fabric-test/chaincodes/shimApiDriver/node | NODE | diff --git a/app/platform/fabric/e2e-test/steps/__init__.py b/app/platform/fabric/e2e-test/feature/common/__init__.py similarity index 73% rename from app/platform/fabric/e2e-test/steps/__init__.py rename to app/platform/fabric/e2e-test/feature/common/__init__.py index 2f99ed969..49cd7f3ac 100644 --- a/app/platform/fabric/e2e-test/steps/__init__.py +++ b/app/platform/fabric/e2e-test/feature/common/__init__.py @@ -3,4 +3,3 @@ # # SPDX-License-Identifier: Apache-2.0 # -from behave_rest.steps import * \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/feature/common/common_pb2.py b/app/platform/fabric/e2e-test/feature/common/common_pb2.py new file mode 100644 index 000000000..244271537 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/common_pb2.py @@ -0,0 +1,774 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: common/common.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='common/common.proto', + package='common', + syntax='proto3', + serialized_pb=_b('\n\x13\x63ommon/common.proto\x12\x06\x63ommon\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1b\n\nLastConfig\x12\r\n\x05index\x18\x01 \x01(\x04\"H\n\x08Metadata\x12\r\n\x05value\x18\x01 \x01(\x0c\x12-\n\nsignatures\x18\x02 \x03(\x0b\x32\x19.common.MetadataSignature\"@\n\x11MetadataSignature\x12\x18\n\x10signature_header\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\":\n\x06Header\x12\x16\n\x0e\x63hannel_header\x18\x01 \x01(\x0c\x12\x18\n\x10signature_header\x18\x02 \x01(\x0c\"\xa2\x01\n\rChannelHeader\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\x0f\n\x07version\x18\x02 \x01(\x05\x12-\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x12\n\nchannel_id\x18\x04 \x01(\t\x12\r\n\x05tx_id\x18\x05 \x01(\t\x12\r\n\x05\x65poch\x18\x06 \x01(\x04\x12\x11\n\textension\x18\x07 \x01(\x0c\"1\n\x0fSignatureHeader\x12\x0f\n\x07\x63reator\x18\x01 \x01(\x0c\x12\r\n\x05nonce\x18\x02 \x01(\x0c\"7\n\x07Payload\x12\x1e\n\x06header\x18\x01 \x01(\x0b\x32\x0e.common.Header\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\".\n\x08\x45nvelope\x12\x0f\n\x07payload\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\"v\n\x05\x42lock\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.common.BlockHeader\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x11.common.BlockData\x12\'\n\x08metadata\x18\x03 \x01(\x0b\x32\x15.common.BlockMetadata\"G\n\x0b\x42lockHeader\x12\x0e\n\x06number\x18\x01 \x01(\x04\x12\x15\n\rprevious_hash\x18\x02 \x01(\x0c\x12\x11\n\tdata_hash\x18\x03 \x01(\x0c\"\x19\n\tBlockData\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x0c\"!\n\rBlockMetadata\x12\x10\n\x08metadata\x18\x01 \x03(\x0c*\xaa\x01\n\x06Status\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0c\n\x07SUCCESS\x10\xc8\x01\x12\x10\n\x0b\x42\x41\x44_REQUEST\x10\x90\x03\x12\x0e\n\tFORBIDDEN\x10\x93\x03\x12\x0e\n\tNOT_FOUND\x10\x94\x03\x12\x1d\n\x18REQUEST_ENTITY_TOO_LARGE\x10\x9d\x03\x12\x1a\n\x15INTERNAL_SERVER_ERROR\x10\xf4\x03\x12\x18\n\x13SERVICE_UNAVAILABLE\x10\xf7\x03*\x99\x01\n\nHeaderType\x12\x0b\n\x07MESSAGE\x10\x00\x12\n\n\x06\x43ONFIG\x10\x01\x12\x11\n\rCONFIG_UPDATE\x10\x02\x12\x18\n\x14\x45NDORSER_TRANSACTION\x10\x03\x12\x17\n\x13ORDERER_TRANSACTION\x10\x04\x12\x15\n\x11\x44\x45LIVER_SEEK_INFO\x10\x05\x12\x15\n\x11\x43HAINCODE_PACKAGE\x10\x06*[\n\x12\x42lockMetadataIndex\x12\x0e\n\nSIGNATURES\x10\x00\x12\x0f\n\x0bLAST_CONFIG\x10\x01\x12\x17\n\x13TRANSACTIONS_FILTER\x10\x02\x12\x0b\n\x07ORDERER\x10\x03\x42S\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/commonb\x06proto3') + , + dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_STATUS = _descriptor.EnumDescriptor( + name='Status', + full_name='common.Status', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UNKNOWN', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SUCCESS', index=1, number=200, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAD_REQUEST', index=2, number=400, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='FORBIDDEN', index=3, number=403, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NOT_FOUND', index=4, number=404, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REQUEST_ENTITY_TOO_LARGE', index=5, number=413, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INTERNAL_SERVER_ERROR', index=6, number=500, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERVICE_UNAVAILABLE', index=7, number=503, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=870, + serialized_end=1040, +) +_sym_db.RegisterEnumDescriptor(_STATUS) + +Status = enum_type_wrapper.EnumTypeWrapper(_STATUS) +_HEADERTYPE = _descriptor.EnumDescriptor( + name='HeaderType', + full_name='common.HeaderType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='MESSAGE', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CONFIG', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CONFIG_UPDATE', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ENDORSER_TRANSACTION', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ORDERER_TRANSACTION', index=4, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DELIVER_SEEK_INFO', index=5, number=5, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CHAINCODE_PACKAGE', index=6, number=6, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=1043, + serialized_end=1196, +) +_sym_db.RegisterEnumDescriptor(_HEADERTYPE) + +HeaderType = enum_type_wrapper.EnumTypeWrapper(_HEADERTYPE) +_BLOCKMETADATAINDEX = _descriptor.EnumDescriptor( + name='BlockMetadataIndex', + full_name='common.BlockMetadataIndex', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='SIGNATURES', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LAST_CONFIG', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TRANSACTIONS_FILTER', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ORDERER', index=3, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=1198, + serialized_end=1289, +) +_sym_db.RegisterEnumDescriptor(_BLOCKMETADATAINDEX) + +BlockMetadataIndex = enum_type_wrapper.EnumTypeWrapper(_BLOCKMETADATAINDEX) +UNKNOWN = 0 +SUCCESS = 200 +BAD_REQUEST = 400 +FORBIDDEN = 403 +NOT_FOUND = 404 +REQUEST_ENTITY_TOO_LARGE = 413 +INTERNAL_SERVER_ERROR = 500 +SERVICE_UNAVAILABLE = 503 +MESSAGE = 0 +CONFIG = 1 +CONFIG_UPDATE = 2 +ENDORSER_TRANSACTION = 3 +ORDERER_TRANSACTION = 4 +DELIVER_SEEK_INFO = 5 +CHAINCODE_PACKAGE = 6 +SIGNATURES = 0 +LAST_CONFIG = 1 +TRANSACTIONS_FILTER = 2 +ORDERER = 3 + + + +_LASTCONFIG = _descriptor.Descriptor( + name='LastConfig', + full_name='common.LastConfig', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='index', full_name='common.LastConfig.index', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=64, + serialized_end=91, +) + + +_METADATA = _descriptor.Descriptor( + name='Metadata', + full_name='common.Metadata', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='common.Metadata.value', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signatures', full_name='common.Metadata.signatures', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=93, + serialized_end=165, +) + + +_METADATASIGNATURE = _descriptor.Descriptor( + name='MetadataSignature', + full_name='common.MetadataSignature', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='signature_header', full_name='common.MetadataSignature.signature_header', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature', full_name='common.MetadataSignature.signature', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=167, + serialized_end=231, +) + + +_HEADER = _descriptor.Descriptor( + name='Header', + full_name='common.Header', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='channel_header', full_name='common.Header.channel_header', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature_header', full_name='common.Header.signature_header', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=233, + serialized_end=291, +) + + +_CHANNELHEADER = _descriptor.Descriptor( + name='ChannelHeader', + full_name='common.ChannelHeader', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='type', full_name='common.ChannelHeader.type', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='version', full_name='common.ChannelHeader.version', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='timestamp', full_name='common.ChannelHeader.timestamp', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='channel_id', full_name='common.ChannelHeader.channel_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='tx_id', full_name='common.ChannelHeader.tx_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='epoch', full_name='common.ChannelHeader.epoch', index=5, + number=6, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='extension', full_name='common.ChannelHeader.extension', index=6, + number=7, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=294, + serialized_end=456, +) + + +_SIGNATUREHEADER = _descriptor.Descriptor( + name='SignatureHeader', + full_name='common.SignatureHeader', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='creator', full_name='common.SignatureHeader.creator', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='nonce', full_name='common.SignatureHeader.nonce', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=458, + serialized_end=507, +) + + +_PAYLOAD = _descriptor.Descriptor( + name='Payload', + full_name='common.Payload', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='common.Payload.header', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='data', full_name='common.Payload.data', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=509, + serialized_end=564, +) + + +_ENVELOPE = _descriptor.Descriptor( + name='Envelope', + full_name='common.Envelope', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='payload', full_name='common.Envelope.payload', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature', full_name='common.Envelope.signature', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=566, + serialized_end=612, +) + + +_BLOCK = _descriptor.Descriptor( + name='Block', + full_name='common.Block', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='common.Block.header', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='data', full_name='common.Block.data', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='metadata', full_name='common.Block.metadata', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=614, + serialized_end=732, +) + + +_BLOCKHEADER = _descriptor.Descriptor( + name='BlockHeader', + full_name='common.BlockHeader', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='number', full_name='common.BlockHeader.number', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='previous_hash', full_name='common.BlockHeader.previous_hash', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='data_hash', full_name='common.BlockHeader.data_hash', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=734, + serialized_end=805, +) + + +_BLOCKDATA = _descriptor.Descriptor( + name='BlockData', + full_name='common.BlockData', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='common.BlockData.data', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=807, + serialized_end=832, +) + + +_BLOCKMETADATA = _descriptor.Descriptor( + name='BlockMetadata', + full_name='common.BlockMetadata', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='metadata', full_name='common.BlockMetadata.metadata', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=834, + serialized_end=867, +) + +_METADATA.fields_by_name['signatures'].message_type = _METADATASIGNATURE +_CHANNELHEADER.fields_by_name['timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_PAYLOAD.fields_by_name['header'].message_type = _HEADER +_BLOCK.fields_by_name['header'].message_type = _BLOCKHEADER +_BLOCK.fields_by_name['data'].message_type = _BLOCKDATA +_BLOCK.fields_by_name['metadata'].message_type = _BLOCKMETADATA +DESCRIPTOR.message_types_by_name['LastConfig'] = _LASTCONFIG +DESCRIPTOR.message_types_by_name['Metadata'] = _METADATA +DESCRIPTOR.message_types_by_name['MetadataSignature'] = _METADATASIGNATURE +DESCRIPTOR.message_types_by_name['Header'] = _HEADER +DESCRIPTOR.message_types_by_name['ChannelHeader'] = _CHANNELHEADER +DESCRIPTOR.message_types_by_name['SignatureHeader'] = _SIGNATUREHEADER +DESCRIPTOR.message_types_by_name['Payload'] = _PAYLOAD +DESCRIPTOR.message_types_by_name['Envelope'] = _ENVELOPE +DESCRIPTOR.message_types_by_name['Block'] = _BLOCK +DESCRIPTOR.message_types_by_name['BlockHeader'] = _BLOCKHEADER +DESCRIPTOR.message_types_by_name['BlockData'] = _BLOCKDATA +DESCRIPTOR.message_types_by_name['BlockMetadata'] = _BLOCKMETADATA +DESCRIPTOR.enum_types_by_name['Status'] = _STATUS +DESCRIPTOR.enum_types_by_name['HeaderType'] = _HEADERTYPE +DESCRIPTOR.enum_types_by_name['BlockMetadataIndex'] = _BLOCKMETADATAINDEX + +LastConfig = _reflection.GeneratedProtocolMessageType('LastConfig', (_message.Message,), dict( + DESCRIPTOR = _LASTCONFIG, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.LastConfig) + )) +_sym_db.RegisterMessage(LastConfig) + +Metadata = _reflection.GeneratedProtocolMessageType('Metadata', (_message.Message,), dict( + DESCRIPTOR = _METADATA, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.Metadata) + )) +_sym_db.RegisterMessage(Metadata) + +MetadataSignature = _reflection.GeneratedProtocolMessageType('MetadataSignature', (_message.Message,), dict( + DESCRIPTOR = _METADATASIGNATURE, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.MetadataSignature) + )) +_sym_db.RegisterMessage(MetadataSignature) + +Header = _reflection.GeneratedProtocolMessageType('Header', (_message.Message,), dict( + DESCRIPTOR = _HEADER, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.Header) + )) +_sym_db.RegisterMessage(Header) + +ChannelHeader = _reflection.GeneratedProtocolMessageType('ChannelHeader', (_message.Message,), dict( + DESCRIPTOR = _CHANNELHEADER, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.ChannelHeader) + )) +_sym_db.RegisterMessage(ChannelHeader) + +SignatureHeader = _reflection.GeneratedProtocolMessageType('SignatureHeader', (_message.Message,), dict( + DESCRIPTOR = _SIGNATUREHEADER, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.SignatureHeader) + )) +_sym_db.RegisterMessage(SignatureHeader) + +Payload = _reflection.GeneratedProtocolMessageType('Payload', (_message.Message,), dict( + DESCRIPTOR = _PAYLOAD, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.Payload) + )) +_sym_db.RegisterMessage(Payload) + +Envelope = _reflection.GeneratedProtocolMessageType('Envelope', (_message.Message,), dict( + DESCRIPTOR = _ENVELOPE, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.Envelope) + )) +_sym_db.RegisterMessage(Envelope) + +Block = _reflection.GeneratedProtocolMessageType('Block', (_message.Message,), dict( + DESCRIPTOR = _BLOCK, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.Block) + )) +_sym_db.RegisterMessage(Block) + +BlockHeader = _reflection.GeneratedProtocolMessageType('BlockHeader', (_message.Message,), dict( + DESCRIPTOR = _BLOCKHEADER, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.BlockHeader) + )) +_sym_db.RegisterMessage(BlockHeader) + +BlockData = _reflection.GeneratedProtocolMessageType('BlockData', (_message.Message,), dict( + DESCRIPTOR = _BLOCKDATA, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.BlockData) + )) +_sym_db.RegisterMessage(BlockData) + +BlockMetadata = _reflection.GeneratedProtocolMessageType('BlockMetadata', (_message.Message,), dict( + DESCRIPTOR = _BLOCKMETADATA, + __module__ = 'common.common_pb2' + # @@protoc_insertion_point(class_scope:common.BlockMetadata) + )) +_sym_db.RegisterMessage(BlockMetadata) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/common')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/common/common_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/common/common_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/common_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/common/configtx_pb2.py b/app/platform/fabric/e2e-test/feature/common/configtx_pb2.py new file mode 100644 index 000000000..00be0dde6 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/configtx_pb2.py @@ -0,0 +1,879 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: common/configtx.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from common import common_pb2 as common_dot_common__pb2 +from common import policies_pb2 as common_dot_policies__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='common/configtx.proto', + package='common', + syntax='proto3', + serialized_pb=_b('\n\x15\x63ommon/configtx.proto\x12\x06\x63ommon\x1a\x13\x63ommon/common.proto\x1a\x15\x63ommon/policies.proto\"W\n\x0e\x43onfigEnvelope\x12\x1e\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x0e.common.Config\x12%\n\x0blast_update\x18\x02 \x01(\x0b\x32\x10.common.Envelope\"\x9d\x03\n\x11\x43onfigGroupSchema\x12\x35\n\x06groups\x18\x01 \x03(\x0b\x32%.common.ConfigGroupSchema.GroupsEntry\x12\x35\n\x06values\x18\x02 \x03(\x0b\x32%.common.ConfigGroupSchema.ValuesEntry\x12\x39\n\x08policies\x18\x03 \x03(\x0b\x32\'.common.ConfigGroupSchema.PoliciesEntry\x1aH\n\x0bGroupsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.common.ConfigGroupSchema:\x02\x38\x01\x1aH\n\x0bValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.common.ConfigValueSchema:\x02\x38\x01\x1aK\n\rPoliciesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x1a.common.ConfigPolicySchema:\x02\x38\x01\"\x13\n\x11\x43onfigValueSchema\"\x14\n\x12\x43onfigPolicySchema\"F\n\x06\x43onfig\x12\x10\n\x08sequence\x18\x01 \x01(\x04\x12*\n\rchannel_group\x18\x02 \x01(\x0b\x32\x13.common.ConfigGroup\"Z\n\x14\x43onfigUpdateEnvelope\x12\x15\n\rconfig_update\x18\x01 \x01(\x0c\x12+\n\nsignatures\x18\x02 \x03(\x0b\x32\x17.common.ConfigSignature\"q\n\x0c\x43onfigUpdate\x12\x12\n\nchannel_id\x18\x01 \x01(\t\x12%\n\x08read_set\x18\x02 \x01(\x0b\x32\x13.common.ConfigGroup\x12&\n\twrite_set\x18\x03 \x01(\x0b\x32\x13.common.ConfigGroup\"\x98\x03\n\x0b\x43onfigGroup\x12\x0f\n\x07version\x18\x01 \x01(\x04\x12/\n\x06groups\x18\x02 \x03(\x0b\x32\x1f.common.ConfigGroup.GroupsEntry\x12/\n\x06values\x18\x03 \x03(\x0b\x32\x1f.common.ConfigGroup.ValuesEntry\x12\x33\n\x08policies\x18\x04 \x03(\x0b\x32!.common.ConfigGroup.PoliciesEntry\x12\x12\n\nmod_policy\x18\x05 \x01(\t\x1a\x42\n\x0bGroupsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.common.ConfigGroup:\x02\x38\x01\x1a\x42\n\x0bValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.common.ConfigValue:\x02\x38\x01\x1a\x45\n\rPoliciesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.common.ConfigPolicy:\x02\x38\x01\"A\n\x0b\x43onfigValue\x12\x0f\n\x07version\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x12\n\nmod_policy\x18\x03 \x01(\t\"S\n\x0c\x43onfigPolicy\x12\x0f\n\x07version\x18\x01 \x01(\x04\x12\x1e\n\x06policy\x18\x02 \x01(\x0b\x32\x0e.common.Policy\x12\x12\n\nmod_policy\x18\x03 \x01(\t\">\n\x0f\x43onfigSignature\x12\x18\n\x10signature_header\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x42S\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/commonb\x06proto3') + , + dependencies=[common_dot_common__pb2.DESCRIPTOR,common_dot_policies__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_CONFIGENVELOPE = _descriptor.Descriptor( + name='ConfigEnvelope', + full_name='common.ConfigEnvelope', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='config', full_name='common.ConfigEnvelope.config', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='last_update', full_name='common.ConfigEnvelope.last_update', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=77, + serialized_end=164, +) + + +_CONFIGGROUPSCHEMA_GROUPSENTRY = _descriptor.Descriptor( + name='GroupsEntry', + full_name='common.ConfigGroupSchema.GroupsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='common.ConfigGroupSchema.GroupsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.ConfigGroupSchema.GroupsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=357, + serialized_end=429, +) + +_CONFIGGROUPSCHEMA_VALUESENTRY = _descriptor.Descriptor( + name='ValuesEntry', + full_name='common.ConfigGroupSchema.ValuesEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='common.ConfigGroupSchema.ValuesEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.ConfigGroupSchema.ValuesEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=431, + serialized_end=503, +) + +_CONFIGGROUPSCHEMA_POLICIESENTRY = _descriptor.Descriptor( + name='PoliciesEntry', + full_name='common.ConfigGroupSchema.PoliciesEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='common.ConfigGroupSchema.PoliciesEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.ConfigGroupSchema.PoliciesEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=505, + serialized_end=580, +) + +_CONFIGGROUPSCHEMA = _descriptor.Descriptor( + name='ConfigGroupSchema', + full_name='common.ConfigGroupSchema', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='groups', full_name='common.ConfigGroupSchema.groups', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='values', full_name='common.ConfigGroupSchema.values', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='policies', full_name='common.ConfigGroupSchema.policies', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_CONFIGGROUPSCHEMA_GROUPSENTRY, _CONFIGGROUPSCHEMA_VALUESENTRY, _CONFIGGROUPSCHEMA_POLICIESENTRY, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=167, + serialized_end=580, +) + + +_CONFIGVALUESCHEMA = _descriptor.Descriptor( + name='ConfigValueSchema', + full_name='common.ConfigValueSchema', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=582, + serialized_end=601, +) + + +_CONFIGPOLICYSCHEMA = _descriptor.Descriptor( + name='ConfigPolicySchema', + full_name='common.ConfigPolicySchema', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=603, + serialized_end=623, +) + + +_CONFIG = _descriptor.Descriptor( + name='Config', + full_name='common.Config', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='sequence', full_name='common.Config.sequence', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='channel_group', full_name='common.Config.channel_group', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=625, + serialized_end=695, +) + + +_CONFIGUPDATEENVELOPE = _descriptor.Descriptor( + name='ConfigUpdateEnvelope', + full_name='common.ConfigUpdateEnvelope', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='config_update', full_name='common.ConfigUpdateEnvelope.config_update', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signatures', full_name='common.ConfigUpdateEnvelope.signatures', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=697, + serialized_end=787, +) + + +_CONFIGUPDATE = _descriptor.Descriptor( + name='ConfigUpdate', + full_name='common.ConfigUpdate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='channel_id', full_name='common.ConfigUpdate.channel_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='read_set', full_name='common.ConfigUpdate.read_set', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='write_set', full_name='common.ConfigUpdate.write_set', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=789, + serialized_end=902, +) + + +_CONFIGGROUP_GROUPSENTRY = _descriptor.Descriptor( + name='GroupsEntry', + full_name='common.ConfigGroup.GroupsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='common.ConfigGroup.GroupsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.ConfigGroup.GroupsEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1108, + serialized_end=1174, +) + +_CONFIGGROUP_VALUESENTRY = _descriptor.Descriptor( + name='ValuesEntry', + full_name='common.ConfigGroup.ValuesEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='common.ConfigGroup.ValuesEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.ConfigGroup.ValuesEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1176, + serialized_end=1242, +) + +_CONFIGGROUP_POLICIESENTRY = _descriptor.Descriptor( + name='PoliciesEntry', + full_name='common.ConfigGroup.PoliciesEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='common.ConfigGroup.PoliciesEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.ConfigGroup.PoliciesEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1244, + serialized_end=1313, +) + +_CONFIGGROUP = _descriptor.Descriptor( + name='ConfigGroup', + full_name='common.ConfigGroup', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='version', full_name='common.ConfigGroup.version', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='groups', full_name='common.ConfigGroup.groups', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='values', full_name='common.ConfigGroup.values', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='policies', full_name='common.ConfigGroup.policies', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='mod_policy', full_name='common.ConfigGroup.mod_policy', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_CONFIGGROUP_GROUPSENTRY, _CONFIGGROUP_VALUESENTRY, _CONFIGGROUP_POLICIESENTRY, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=905, + serialized_end=1313, +) + + +_CONFIGVALUE = _descriptor.Descriptor( + name='ConfigValue', + full_name='common.ConfigValue', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='version', full_name='common.ConfigValue.version', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.ConfigValue.value', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='mod_policy', full_name='common.ConfigValue.mod_policy', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1315, + serialized_end=1380, +) + + +_CONFIGPOLICY = _descriptor.Descriptor( + name='ConfigPolicy', + full_name='common.ConfigPolicy', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='version', full_name='common.ConfigPolicy.version', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='policy', full_name='common.ConfigPolicy.policy', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='mod_policy', full_name='common.ConfigPolicy.mod_policy', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1382, + serialized_end=1465, +) + + +_CONFIGSIGNATURE = _descriptor.Descriptor( + name='ConfigSignature', + full_name='common.ConfigSignature', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='signature_header', full_name='common.ConfigSignature.signature_header', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature', full_name='common.ConfigSignature.signature', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1467, + serialized_end=1529, +) + +_CONFIGENVELOPE.fields_by_name['config'].message_type = _CONFIG +_CONFIGENVELOPE.fields_by_name['last_update'].message_type = common_dot_common__pb2._ENVELOPE +_CONFIGGROUPSCHEMA_GROUPSENTRY.fields_by_name['value'].message_type = _CONFIGGROUPSCHEMA +_CONFIGGROUPSCHEMA_GROUPSENTRY.containing_type = _CONFIGGROUPSCHEMA +_CONFIGGROUPSCHEMA_VALUESENTRY.fields_by_name['value'].message_type = _CONFIGVALUESCHEMA +_CONFIGGROUPSCHEMA_VALUESENTRY.containing_type = _CONFIGGROUPSCHEMA +_CONFIGGROUPSCHEMA_POLICIESENTRY.fields_by_name['value'].message_type = _CONFIGPOLICYSCHEMA +_CONFIGGROUPSCHEMA_POLICIESENTRY.containing_type = _CONFIGGROUPSCHEMA +_CONFIGGROUPSCHEMA.fields_by_name['groups'].message_type = _CONFIGGROUPSCHEMA_GROUPSENTRY +_CONFIGGROUPSCHEMA.fields_by_name['values'].message_type = _CONFIGGROUPSCHEMA_VALUESENTRY +_CONFIGGROUPSCHEMA.fields_by_name['policies'].message_type = _CONFIGGROUPSCHEMA_POLICIESENTRY +_CONFIG.fields_by_name['channel_group'].message_type = _CONFIGGROUP +_CONFIGUPDATEENVELOPE.fields_by_name['signatures'].message_type = _CONFIGSIGNATURE +_CONFIGUPDATE.fields_by_name['read_set'].message_type = _CONFIGGROUP +_CONFIGUPDATE.fields_by_name['write_set'].message_type = _CONFIGGROUP +_CONFIGGROUP_GROUPSENTRY.fields_by_name['value'].message_type = _CONFIGGROUP +_CONFIGGROUP_GROUPSENTRY.containing_type = _CONFIGGROUP +_CONFIGGROUP_VALUESENTRY.fields_by_name['value'].message_type = _CONFIGVALUE +_CONFIGGROUP_VALUESENTRY.containing_type = _CONFIGGROUP +_CONFIGGROUP_POLICIESENTRY.fields_by_name['value'].message_type = _CONFIGPOLICY +_CONFIGGROUP_POLICIESENTRY.containing_type = _CONFIGGROUP +_CONFIGGROUP.fields_by_name['groups'].message_type = _CONFIGGROUP_GROUPSENTRY +_CONFIGGROUP.fields_by_name['values'].message_type = _CONFIGGROUP_VALUESENTRY +_CONFIGGROUP.fields_by_name['policies'].message_type = _CONFIGGROUP_POLICIESENTRY +_CONFIGPOLICY.fields_by_name['policy'].message_type = common_dot_policies__pb2._POLICY +DESCRIPTOR.message_types_by_name['ConfigEnvelope'] = _CONFIGENVELOPE +DESCRIPTOR.message_types_by_name['ConfigGroupSchema'] = _CONFIGGROUPSCHEMA +DESCRIPTOR.message_types_by_name['ConfigValueSchema'] = _CONFIGVALUESCHEMA +DESCRIPTOR.message_types_by_name['ConfigPolicySchema'] = _CONFIGPOLICYSCHEMA +DESCRIPTOR.message_types_by_name['Config'] = _CONFIG +DESCRIPTOR.message_types_by_name['ConfigUpdateEnvelope'] = _CONFIGUPDATEENVELOPE +DESCRIPTOR.message_types_by_name['ConfigUpdate'] = _CONFIGUPDATE +DESCRIPTOR.message_types_by_name['ConfigGroup'] = _CONFIGGROUP +DESCRIPTOR.message_types_by_name['ConfigValue'] = _CONFIGVALUE +DESCRIPTOR.message_types_by_name['ConfigPolicy'] = _CONFIGPOLICY +DESCRIPTOR.message_types_by_name['ConfigSignature'] = _CONFIGSIGNATURE + +ConfigEnvelope = _reflection.GeneratedProtocolMessageType('ConfigEnvelope', (_message.Message,), dict( + DESCRIPTOR = _CONFIGENVELOPE, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigEnvelope) + )) +_sym_db.RegisterMessage(ConfigEnvelope) + +ConfigGroupSchema = _reflection.GeneratedProtocolMessageType('ConfigGroupSchema', (_message.Message,), dict( + + GroupsEntry = _reflection.GeneratedProtocolMessageType('GroupsEntry', (_message.Message,), dict( + DESCRIPTOR = _CONFIGGROUPSCHEMA_GROUPSENTRY, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroupSchema.GroupsEntry) + )) + , + + ValuesEntry = _reflection.GeneratedProtocolMessageType('ValuesEntry', (_message.Message,), dict( + DESCRIPTOR = _CONFIGGROUPSCHEMA_VALUESENTRY, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroupSchema.ValuesEntry) + )) + , + + PoliciesEntry = _reflection.GeneratedProtocolMessageType('PoliciesEntry', (_message.Message,), dict( + DESCRIPTOR = _CONFIGGROUPSCHEMA_POLICIESENTRY, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroupSchema.PoliciesEntry) + )) + , + DESCRIPTOR = _CONFIGGROUPSCHEMA, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroupSchema) + )) +_sym_db.RegisterMessage(ConfigGroupSchema) +_sym_db.RegisterMessage(ConfigGroupSchema.GroupsEntry) +_sym_db.RegisterMessage(ConfigGroupSchema.ValuesEntry) +_sym_db.RegisterMessage(ConfigGroupSchema.PoliciesEntry) + +ConfigValueSchema = _reflection.GeneratedProtocolMessageType('ConfigValueSchema', (_message.Message,), dict( + DESCRIPTOR = _CONFIGVALUESCHEMA, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigValueSchema) + )) +_sym_db.RegisterMessage(ConfigValueSchema) + +ConfigPolicySchema = _reflection.GeneratedProtocolMessageType('ConfigPolicySchema', (_message.Message,), dict( + DESCRIPTOR = _CONFIGPOLICYSCHEMA, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigPolicySchema) + )) +_sym_db.RegisterMessage(ConfigPolicySchema) + +Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), dict( + DESCRIPTOR = _CONFIG, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.Config) + )) +_sym_db.RegisterMessage(Config) + +ConfigUpdateEnvelope = _reflection.GeneratedProtocolMessageType('ConfigUpdateEnvelope', (_message.Message,), dict( + DESCRIPTOR = _CONFIGUPDATEENVELOPE, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigUpdateEnvelope) + )) +_sym_db.RegisterMessage(ConfigUpdateEnvelope) + +ConfigUpdate = _reflection.GeneratedProtocolMessageType('ConfigUpdate', (_message.Message,), dict( + DESCRIPTOR = _CONFIGUPDATE, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigUpdate) + )) +_sym_db.RegisterMessage(ConfigUpdate) + +ConfigGroup = _reflection.GeneratedProtocolMessageType('ConfigGroup', (_message.Message,), dict( + + GroupsEntry = _reflection.GeneratedProtocolMessageType('GroupsEntry', (_message.Message,), dict( + DESCRIPTOR = _CONFIGGROUP_GROUPSENTRY, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroup.GroupsEntry) + )) + , + + ValuesEntry = _reflection.GeneratedProtocolMessageType('ValuesEntry', (_message.Message,), dict( + DESCRIPTOR = _CONFIGGROUP_VALUESENTRY, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroup.ValuesEntry) + )) + , + + PoliciesEntry = _reflection.GeneratedProtocolMessageType('PoliciesEntry', (_message.Message,), dict( + DESCRIPTOR = _CONFIGGROUP_POLICIESENTRY, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroup.PoliciesEntry) + )) + , + DESCRIPTOR = _CONFIGGROUP, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigGroup) + )) +_sym_db.RegisterMessage(ConfigGroup) +_sym_db.RegisterMessage(ConfigGroup.GroupsEntry) +_sym_db.RegisterMessage(ConfigGroup.ValuesEntry) +_sym_db.RegisterMessage(ConfigGroup.PoliciesEntry) + +ConfigValue = _reflection.GeneratedProtocolMessageType('ConfigValue', (_message.Message,), dict( + DESCRIPTOR = _CONFIGVALUE, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigValue) + )) +_sym_db.RegisterMessage(ConfigValue) + +ConfigPolicy = _reflection.GeneratedProtocolMessageType('ConfigPolicy', (_message.Message,), dict( + DESCRIPTOR = _CONFIGPOLICY, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigPolicy) + )) +_sym_db.RegisterMessage(ConfigPolicy) + +ConfigSignature = _reflection.GeneratedProtocolMessageType('ConfigSignature', (_message.Message,), dict( + DESCRIPTOR = _CONFIGSIGNATURE, + __module__ = 'common.configtx_pb2' + # @@protoc_insertion_point(class_scope:common.ConfigSignature) + )) +_sym_db.RegisterMessage(ConfigSignature) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/common')) +_CONFIGGROUPSCHEMA_GROUPSENTRY.has_options = True +_CONFIGGROUPSCHEMA_GROUPSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +_CONFIGGROUPSCHEMA_VALUESENTRY.has_options = True +_CONFIGGROUPSCHEMA_VALUESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +_CONFIGGROUPSCHEMA_POLICIESENTRY.has_options = True +_CONFIGGROUPSCHEMA_POLICIESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +_CONFIGGROUP_GROUPSENTRY.has_options = True +_CONFIGGROUP_GROUPSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +_CONFIGGROUP_VALUESENTRY.has_options = True +_CONFIGGROUP_VALUESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +_CONFIGGROUP_POLICIESENTRY.has_options = True +_CONFIGGROUP_POLICIESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/common/configtx_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/common/configtx_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/configtx_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/common/configuration_pb2.py b/app/platform/fabric/e2e-test/feature/common/configuration_pb2.py new file mode 100644 index 000000000..afcadc6f4 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/configuration_pb2.py @@ -0,0 +1,319 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: common/configuration.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='common/configuration.proto', + package='common', + syntax='proto3', + serialized_pb=_b('\n\x1a\x63ommon/configuration.proto\x12\x06\x63ommon\" \n\x10HashingAlgorithm\x12\x0c\n\x04name\x18\x01 \x01(\t\"*\n\x19\x42lockDataHashingStructure\x12\r\n\x05width\x18\x01 \x01(\r\"%\n\x10OrdererAddresses\x12\x11\n\taddresses\x18\x01 \x03(\t\"\x1a\n\nConsortium\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x95\x01\n\x0c\x43\x61pabilities\x12<\n\x0c\x63\x61pabilities\x18\x01 \x03(\x0b\x32&.common.Capabilities.CapabilitiesEntry\x1aG\n\x11\x43\x61pabilitiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.common.Capability:\x02\x38\x01\"\x0c\n\nCapabilityBS\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/commonb\x06proto3') +) + + + + +_HASHINGALGORITHM = _descriptor.Descriptor( + name='HashingAlgorithm', + full_name='common.HashingAlgorithm', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='common.HashingAlgorithm.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=38, + serialized_end=70, +) + + +_BLOCKDATAHASHINGSTRUCTURE = _descriptor.Descriptor( + name='BlockDataHashingStructure', + full_name='common.BlockDataHashingStructure', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='width', full_name='common.BlockDataHashingStructure.width', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=72, + serialized_end=114, +) + + +_ORDERERADDRESSES = _descriptor.Descriptor( + name='OrdererAddresses', + full_name='common.OrdererAddresses', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='addresses', full_name='common.OrdererAddresses.addresses', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=116, + serialized_end=153, +) + + +_CONSORTIUM = _descriptor.Descriptor( + name='Consortium', + full_name='common.Consortium', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='common.Consortium.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=155, + serialized_end=181, +) + + +_CAPABILITIES_CAPABILITIESENTRY = _descriptor.Descriptor( + name='CapabilitiesEntry', + full_name='common.Capabilities.CapabilitiesEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='common.Capabilities.CapabilitiesEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.Capabilities.CapabilitiesEntry.value', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=262, + serialized_end=333, +) + +_CAPABILITIES = _descriptor.Descriptor( + name='Capabilities', + full_name='common.Capabilities', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='capabilities', full_name='common.Capabilities.capabilities', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_CAPABILITIES_CAPABILITIESENTRY, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=184, + serialized_end=333, +) + + +_CAPABILITY = _descriptor.Descriptor( + name='Capability', + full_name='common.Capability', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=335, + serialized_end=347, +) + +_CAPABILITIES_CAPABILITIESENTRY.fields_by_name['value'].message_type = _CAPABILITY +_CAPABILITIES_CAPABILITIESENTRY.containing_type = _CAPABILITIES +_CAPABILITIES.fields_by_name['capabilities'].message_type = _CAPABILITIES_CAPABILITIESENTRY +DESCRIPTOR.message_types_by_name['HashingAlgorithm'] = _HASHINGALGORITHM +DESCRIPTOR.message_types_by_name['BlockDataHashingStructure'] = _BLOCKDATAHASHINGSTRUCTURE +DESCRIPTOR.message_types_by_name['OrdererAddresses'] = _ORDERERADDRESSES +DESCRIPTOR.message_types_by_name['Consortium'] = _CONSORTIUM +DESCRIPTOR.message_types_by_name['Capabilities'] = _CAPABILITIES +DESCRIPTOR.message_types_by_name['Capability'] = _CAPABILITY +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +HashingAlgorithm = _reflection.GeneratedProtocolMessageType('HashingAlgorithm', (_message.Message,), dict( + DESCRIPTOR = _HASHINGALGORITHM, + __module__ = 'common.configuration_pb2' + # @@protoc_insertion_point(class_scope:common.HashingAlgorithm) + )) +_sym_db.RegisterMessage(HashingAlgorithm) + +BlockDataHashingStructure = _reflection.GeneratedProtocolMessageType('BlockDataHashingStructure', (_message.Message,), dict( + DESCRIPTOR = _BLOCKDATAHASHINGSTRUCTURE, + __module__ = 'common.configuration_pb2' + # @@protoc_insertion_point(class_scope:common.BlockDataHashingStructure) + )) +_sym_db.RegisterMessage(BlockDataHashingStructure) + +OrdererAddresses = _reflection.GeneratedProtocolMessageType('OrdererAddresses', (_message.Message,), dict( + DESCRIPTOR = _ORDERERADDRESSES, + __module__ = 'common.configuration_pb2' + # @@protoc_insertion_point(class_scope:common.OrdererAddresses) + )) +_sym_db.RegisterMessage(OrdererAddresses) + +Consortium = _reflection.GeneratedProtocolMessageType('Consortium', (_message.Message,), dict( + DESCRIPTOR = _CONSORTIUM, + __module__ = 'common.configuration_pb2' + # @@protoc_insertion_point(class_scope:common.Consortium) + )) +_sym_db.RegisterMessage(Consortium) + +Capabilities = _reflection.GeneratedProtocolMessageType('Capabilities', (_message.Message,), dict( + + CapabilitiesEntry = _reflection.GeneratedProtocolMessageType('CapabilitiesEntry', (_message.Message,), dict( + DESCRIPTOR = _CAPABILITIES_CAPABILITIESENTRY, + __module__ = 'common.configuration_pb2' + # @@protoc_insertion_point(class_scope:common.Capabilities.CapabilitiesEntry) + )) + , + DESCRIPTOR = _CAPABILITIES, + __module__ = 'common.configuration_pb2' + # @@protoc_insertion_point(class_scope:common.Capabilities) + )) +_sym_db.RegisterMessage(Capabilities) +_sym_db.RegisterMessage(Capabilities.CapabilitiesEntry) + +Capability = _reflection.GeneratedProtocolMessageType('Capability', (_message.Message,), dict( + DESCRIPTOR = _CAPABILITY, + __module__ = 'common.configuration_pb2' + # @@protoc_insertion_point(class_scope:common.Capability) + )) +_sym_db.RegisterMessage(Capability) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/common')) +_CAPABILITIES_CAPABILITIESENTRY.has_options = True +_CAPABILITIES_CAPABILITIESENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/common/configuration_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/common/configuration_pb2_grpc.py new file mode 100644 index 000000000..a89435267 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/configuration_pb2_grpc.py @@ -0,0 +1,3 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + diff --git a/app/platform/fabric/e2e-test/feature/common/ledger_pb2.py b/app/platform/fabric/e2e-test/feature/common/ledger_pb2.py new file mode 100644 index 000000000..e9c45bebd --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/ledger_pb2.py @@ -0,0 +1,95 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: common/ledger.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='common/ledger.proto', + package='common', + syntax='proto3', + serialized_pb=_b('\n\x13\x63ommon/ledger.proto\x12\x06\x63ommon\"U\n\x0e\x42lockchainInfo\x12\x0e\n\x06height\x18\x01 \x01(\x04\x12\x18\n\x10\x63urrentBlockHash\x18\x02 \x01(\x0c\x12\x19\n\x11previousBlockHash\x18\x03 \x01(\x0c\x42S\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/commonb\x06proto3') +) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_BLOCKCHAININFO = _descriptor.Descriptor( + name='BlockchainInfo', + full_name='common.BlockchainInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='height', full_name='common.BlockchainInfo.height', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='currentBlockHash', full_name='common.BlockchainInfo.currentBlockHash', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='previousBlockHash', full_name='common.BlockchainInfo.previousBlockHash', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=31, + serialized_end=116, +) + +DESCRIPTOR.message_types_by_name['BlockchainInfo'] = _BLOCKCHAININFO + +BlockchainInfo = _reflection.GeneratedProtocolMessageType('BlockchainInfo', (_message.Message,), dict( + DESCRIPTOR = _BLOCKCHAININFO, + __module__ = 'common.ledger_pb2' + # @@protoc_insertion_point(class_scope:common.BlockchainInfo) + )) +_sym_db.RegisterMessage(BlockchainInfo) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/common')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/common/ledger_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/common/ledger_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/ledger_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/common/policies_pb2.py b/app/platform/fabric/e2e-test/feature/common/policies_pb2.py new file mode 100644 index 000000000..37aa2e5cc --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/policies_pb2.py @@ -0,0 +1,355 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: common/policies.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from msp import msp_principal_pb2 as msp_dot_msp__principal__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='common/policies.proto', + package='common', + syntax='proto3', + serialized_pb=_b('\n\x15\x63ommon/policies.proto\x12\x06\x63ommon\x1a\x17msp/msp_principal.proto\"k\n\x06Policy\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\x0c\"D\n\nPolicyType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\r\n\tSIGNATURE\x10\x01\x12\x07\n\x03MSP\x10\x02\x12\x11\n\rIMPLICIT_META\x10\x03\"{\n\x17SignaturePolicyEnvelope\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12%\n\x04rule\x18\x02 \x01(\x0b\x32\x17.common.SignaturePolicy\x12(\n\nidentities\x18\x03 \x03(\x0b\x32\x14.common.MSPPrincipal\"\x9f\x01\n\x0fSignaturePolicy\x12\x13\n\tsigned_by\x18\x01 \x01(\x05H\x00\x12\x32\n\x08n_out_of\x18\x02 \x01(\x0b\x32\x1e.common.SignaturePolicy.NOutOfH\x00\x1a;\n\x06NOutOf\x12\t\n\x01n\x18\x01 \x01(\x05\x12&\n\x05rules\x18\x02 \x03(\x0b\x32\x17.common.SignaturePolicyB\x06\n\x04Type\"\x7f\n\x12ImplicitMetaPolicy\x12\x12\n\nsub_policy\x18\x01 \x01(\t\x12-\n\x04rule\x18\x02 \x01(\x0e\x32\x1f.common.ImplicitMetaPolicy.Rule\"&\n\x04Rule\x12\x07\n\x03\x41NY\x10\x00\x12\x07\n\x03\x41LL\x10\x01\x12\x0c\n\x08MAJORITY\x10\x02\x42S\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/commonb\x06proto3') + , + dependencies=[msp_dot_msp__principal__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + +_POLICY_POLICYTYPE = _descriptor.EnumDescriptor( + name='PolicyType', + full_name='common.Policy.PolicyType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UNKNOWN', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SIGNATURE', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MSP', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='IMPLICIT_META', index=3, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=97, + serialized_end=165, +) +_sym_db.RegisterEnumDescriptor(_POLICY_POLICYTYPE) + +_IMPLICITMETAPOLICY_RULE = _descriptor.EnumDescriptor( + name='Rule', + full_name='common.ImplicitMetaPolicy.Rule', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='ANY', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ALL', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MAJORITY', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=543, + serialized_end=581, +) +_sym_db.RegisterEnumDescriptor(_IMPLICITMETAPOLICY_RULE) + + +_POLICY = _descriptor.Descriptor( + name='Policy', + full_name='common.Policy', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='type', full_name='common.Policy.type', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='common.Policy.value', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _POLICY_POLICYTYPE, + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=58, + serialized_end=165, +) + + +_SIGNATUREPOLICYENVELOPE = _descriptor.Descriptor( + name='SignaturePolicyEnvelope', + full_name='common.SignaturePolicyEnvelope', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='version', full_name='common.SignaturePolicyEnvelope.version', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='rule', full_name='common.SignaturePolicyEnvelope.rule', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='identities', full_name='common.SignaturePolicyEnvelope.identities', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=167, + serialized_end=290, +) + + +_SIGNATUREPOLICY_NOUTOF = _descriptor.Descriptor( + name='NOutOf', + full_name='common.SignaturePolicy.NOutOf', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='n', full_name='common.SignaturePolicy.NOutOf.n', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='rules', full_name='common.SignaturePolicy.NOutOf.rules', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=385, + serialized_end=444, +) + +_SIGNATUREPOLICY = _descriptor.Descriptor( + name='SignaturePolicy', + full_name='common.SignaturePolicy', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='signed_by', full_name='common.SignaturePolicy.signed_by', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='n_out_of', full_name='common.SignaturePolicy.n_out_of', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_SIGNATUREPOLICY_NOUTOF, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='Type', full_name='common.SignaturePolicy.Type', + index=0, containing_type=None, fields=[]), + ], + serialized_start=293, + serialized_end=452, +) + + +_IMPLICITMETAPOLICY = _descriptor.Descriptor( + name='ImplicitMetaPolicy', + full_name='common.ImplicitMetaPolicy', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='sub_policy', full_name='common.ImplicitMetaPolicy.sub_policy', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='rule', full_name='common.ImplicitMetaPolicy.rule', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _IMPLICITMETAPOLICY_RULE, + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=454, + serialized_end=581, +) + +_POLICY_POLICYTYPE.containing_type = _POLICY +_SIGNATUREPOLICYENVELOPE.fields_by_name['rule'].message_type = _SIGNATUREPOLICY +_SIGNATUREPOLICYENVELOPE.fields_by_name['identities'].message_type = msp_dot_msp__principal__pb2._MSPPRINCIPAL +_SIGNATUREPOLICY_NOUTOF.fields_by_name['rules'].message_type = _SIGNATUREPOLICY +_SIGNATUREPOLICY_NOUTOF.containing_type = _SIGNATUREPOLICY +_SIGNATUREPOLICY.fields_by_name['n_out_of'].message_type = _SIGNATUREPOLICY_NOUTOF +_SIGNATUREPOLICY.oneofs_by_name['Type'].fields.append( + _SIGNATUREPOLICY.fields_by_name['signed_by']) +_SIGNATUREPOLICY.fields_by_name['signed_by'].containing_oneof = _SIGNATUREPOLICY.oneofs_by_name['Type'] +_SIGNATUREPOLICY.oneofs_by_name['Type'].fields.append( + _SIGNATUREPOLICY.fields_by_name['n_out_of']) +_SIGNATUREPOLICY.fields_by_name['n_out_of'].containing_oneof = _SIGNATUREPOLICY.oneofs_by_name['Type'] +_IMPLICITMETAPOLICY.fields_by_name['rule'].enum_type = _IMPLICITMETAPOLICY_RULE +_IMPLICITMETAPOLICY_RULE.containing_type = _IMPLICITMETAPOLICY +DESCRIPTOR.message_types_by_name['Policy'] = _POLICY +DESCRIPTOR.message_types_by_name['SignaturePolicyEnvelope'] = _SIGNATUREPOLICYENVELOPE +DESCRIPTOR.message_types_by_name['SignaturePolicy'] = _SIGNATUREPOLICY +DESCRIPTOR.message_types_by_name['ImplicitMetaPolicy'] = _IMPLICITMETAPOLICY + +Policy = _reflection.GeneratedProtocolMessageType('Policy', (_message.Message,), dict( + DESCRIPTOR = _POLICY, + __module__ = 'common.policies_pb2' + # @@protoc_insertion_point(class_scope:common.Policy) + )) +_sym_db.RegisterMessage(Policy) + +SignaturePolicyEnvelope = _reflection.GeneratedProtocolMessageType('SignaturePolicyEnvelope', (_message.Message,), dict( + DESCRIPTOR = _SIGNATUREPOLICYENVELOPE, + __module__ = 'common.policies_pb2' + # @@protoc_insertion_point(class_scope:common.SignaturePolicyEnvelope) + )) +_sym_db.RegisterMessage(SignaturePolicyEnvelope) + +SignaturePolicy = _reflection.GeneratedProtocolMessageType('SignaturePolicy', (_message.Message,), dict( + + NOutOf = _reflection.GeneratedProtocolMessageType('NOutOf', (_message.Message,), dict( + DESCRIPTOR = _SIGNATUREPOLICY_NOUTOF, + __module__ = 'common.policies_pb2' + # @@protoc_insertion_point(class_scope:common.SignaturePolicy.NOutOf) + )) + , + DESCRIPTOR = _SIGNATUREPOLICY, + __module__ = 'common.policies_pb2' + # @@protoc_insertion_point(class_scope:common.SignaturePolicy) + )) +_sym_db.RegisterMessage(SignaturePolicy) +_sym_db.RegisterMessage(SignaturePolicy.NOutOf) + +ImplicitMetaPolicy = _reflection.GeneratedProtocolMessageType('ImplicitMetaPolicy', (_message.Message,), dict( + DESCRIPTOR = _IMPLICITMETAPOLICY, + __module__ = 'common.policies_pb2' + # @@protoc_insertion_point(class_scope:common.ImplicitMetaPolicy) + )) +_sym_db.RegisterMessage(ImplicitMetaPolicy) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n$org.hyperledger.fabric.protos.commonZ+github.com/hyperledger/fabric/protos/common')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/common/policies_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/common/policies_pb2_grpc.py new file mode 100644 index 000000000..a89435267 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/common/policies_pb2_grpc.py @@ -0,0 +1,3 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + diff --git a/app/platform/fabric/e2e-test/configs/configtx.yaml b/app/platform/fabric/e2e-test/feature/configs/configtx.yaml similarity index 86% rename from app/platform/fabric/e2e-test/configs/configtx.yaml rename to app/platform/fabric/e2e-test/feature/configs/configtx.yaml index c200c5a9f..24f15bd6a 100644 --- a/app/platform/fabric/e2e-test/configs/configtx.yaml +++ b/app/platform/fabric/e2e-test/feature/configs/configtx.yaml @@ -26,7 +26,10 @@ Capabilities: # Channel capabilities apply to both the orderers and the peers and must be # supported by both. Set the value of the capability to true to require it. Global: &ChannelCapabilities - V1_3: true + ### I think these recent capabilities wont work unless we update protobufs + ###V1_4_3: true + ###V1_4_2: true + ###V1_3: true # (V1_2 not defined in fabric) # Note: older ones are superceded, e.g. V1_3 capabilities include V1_1. # Thus, those like V1_1 need not be set if V1_3 or later is set true. @@ -38,6 +41,8 @@ Capabilities: # manipulated without concern for upgrading peers. Set the value of the # capability to true to require it. Orderer: &OrdererCapabilities + ### I think these recent capabilities wont work unless we update protobufs + ###V1_4_2: true # (V1_3 not defined in fabric) # (V1_2 not defined in fabric) V1_1: true @@ -46,7 +51,9 @@ Capabilities: # manipulated without concern for upgrading orderers. Set the value of the # capability to true to require it. Application: &ApplicationCapabilities - V1_3: true + ### I think these recent capabilities wont work unless we update protobufs + ###V1_4_2: true + ###V1_3: true V1_2: true # Note: older ones are superceded, e.g. V1_2 capabilities include V1_1. # Thus, older ones like V1_1 need not be set if we set V1_2 or later. @@ -74,13 +81,16 @@ Organizations: Policies: Readers: Type: Signature - Rule: "OR('example.com.member')" + Rule: OR('example.com.member') Writers: Type: Signature - Rule: "OR('example.com.member')" + Rule: OR('example.com.member') Admins: Type: Signature - Rule: "OR('example.com.admin')" + Rule: OR('example.com.admin') + Endorsement: + Type: Signature + Rule: OR('example.com.member') - &Org1ExampleCom Name: Org1ExampleCom @@ -93,13 +103,16 @@ Organizations: Policies: Readers: Type: Signature - Rule: "OR('org1.example.com.member')" + Rule: OR('org1.example.com.member') Writers: Type: Signature - Rule: "OR('org1.example.com.member')" + Rule: OR('org1.example.com.member') Admins: Type: Signature - Rule: "OR('org1.example.com.admin')" + Rule: OR('org1.example.com.admin') + Endorsement: + Type: Signature + Rule: OR('org1.example.com.member') - &Org2ExampleCom Name: Org2ExampleCom @@ -112,13 +125,16 @@ Organizations: Policies: Readers: Type: Signature - Rule: "OR('org2.example.com.member')" + Rule: OR('org2.example.com.member') Writers: Type: Signature - Rule: "OR('org2.example.com.member')" + Rule: OR('org2.example.com.member') Admins: Type: Signature - Rule: "OR('org2.example.com.admin')" + Rule: OR('org2.example.com.admin') + Endorsement: + Type: Signature + Rule: OR('org2.example.com.member') ################################################################################ # @@ -183,18 +199,18 @@ Orderer: &OrdererDefaults Policies: Readers: Type: ImplicitMeta - Rule: "ANY Readers" + Rule: ANY Readers Writers: Type: ImplicitMeta - Rule: "ANY Writers" + Rule: ANY Writers Admins: Type: ImplicitMeta - Rule: "MAJORITY Admins" + Rule: MAJORITY Admins # BlockValidation specifies what signatures must be included in the block # from the orderer for the peer to validate it. BlockValidation: Type: ImplicitMeta - Rule: "ANY Writers" + Rule: ANY Writers # Capabilities describes the orderer level capabilities, see the # dedicated Capabilities section elsewhere in this file for a full @@ -218,15 +234,15 @@ Channel: &ChannelDefaults # Who may invoke the 'Deliver' API Readers: Type: ImplicitMeta - Rule: "ANY Readers" + Rule: ANY Readers # Who may invoke the 'Broadcast' API Writers: Type: ImplicitMeta - Rule: "ANY Writers" + Rule: ANY Writers # By default, who may modify elements at this config level Admins: Type: ImplicitMeta - Rule: "MAJORITY Admins" + Rule: MAJORITY Admins # Capabilities describes the channel level capabilities, see the @@ -254,6 +270,17 @@ Application: &ApplicationDefaults # User's can override these defaults with their own policy mapping by defining the # mapping under ACLs in their channel definition + #---New Lifecycle System Chaincode (_lifecycle) function to policy mapping for access control--# + + # ACL policy for _lifecycle's "CommitChaincodeDefinition" function + _lifecycle/CommitChaincodeDefinition: /Channel/Application/Writers + + # ACL policy for _lifecycle's "QueryChaincodeDefinition" function + _lifecycle/QueryChaincodeDefinition: /Channel/Application/Readers + + # ACL policy for _lifecycle's "QueryNamespaceDefinitions" function + _lifecycle/QueryNamespaceDefinitions: /Channel/Application/Readers + #---Lifecycle System Chaincode (lscc) function to policy mapping for access control---# # ACL policy for lscc's "getid" function @@ -404,6 +431,7 @@ Profiles: # and contains a single MSP definition (the MSP sampleconfig). # The Consortium SampleConsortium has only a single member, SampleOrg SampleSingleMSPSolo: + <<: *ChannelDefaults Orderer: <<: *OrdererDefaults Organizations: @@ -426,17 +454,33 @@ Profiles: # SampleEmptyInsecureChannel defines a channel with no members # and therefore no access control SampleEmptyInsecureChannel: - Capabilities: - <<: *ChannelCapabilities + <<: *ChannelDefaults Consortium: SampleConsortium Application: Organizations: - *ExampleCom Capabilities: <<: *ApplicationCapabilities + Policies: + Readers: + Type: ImplicitMeta + Rule: ANY Readers + Writers: + Type: ImplicitMeta + Rule: ANY Writers + Admins: + Type: ImplicitMeta + Rule: MAJORITY Admins + LifecycleEndorsement: + Type: ImplicitMeta + Rule: "MAJORITY Endorsement" + Endorsement: + Type: ImplicitMeta + Rule: "MAJORITY Endorsement" # SysTestChannel defines a channel for use with the System Test Orgs SysTestChannel: + <<: *ChannelDefaults Capabilities: <<: *ChannelCapabilities Consortium: SampleConsortium @@ -452,6 +496,7 @@ Profiles: # member. It is designed to be used in conjunction with SampleSingleMSPSolo # and SampleSingleMSPKafka orderer profiles SampleSingleMSPChannel: + <<: *ChannelDefaults Capabilities: <<: *ChannelCapabilities Consortium: SampleConsortium diff --git a/app/platform/fabric/e2e-test/configs/crypto.yaml b/app/platform/fabric/e2e-test/feature/configs/crypto.yaml similarity index 90% rename from app/platform/fabric/e2e-test/configs/crypto.yaml rename to app/platform/fabric/e2e-test/feature/configs/crypto.yaml index d80e29960..e283dac10 100644 --- a/app/platform/fabric/e2e-test/configs/crypto.yaml +++ b/app/platform/fabric/e2e-test/feature/configs/crypto.yaml @@ -7,6 +7,7 @@ OrdererOrgs: - Name: ExampleCom Domain: example.com + #EnableNodeOUs: true CA: SANS: - localhost @@ -19,6 +20,7 @@ PeerOrgs: - Name: Org1ExampleCom Domain: org1.example.com EnableNodeOUs: false + #EnableNodeOUs: true CA: SANS: - localhost @@ -32,6 +34,7 @@ PeerOrgs: - Name: Org2ExampleCom Domain: org2.example.com EnableNodeOUs: false + #EnableNodeOUs: true CA: SANS: - localhost diff --git a/app/platform/fabric/e2e-test/configs/fabric-ca-server-config.yaml b/app/platform/fabric/e2e-test/feature/configs/fabric-ca-server-config.yaml similarity index 100% rename from app/platform/fabric/e2e-test/configs/fabric-ca-server-config.yaml rename to app/platform/fabric/e2e-test/feature/configs/fabric-ca-server-config.yaml diff --git a/app/platform/fabric/e2e-test/feature/configs/network-config.json b/app/platform/fabric/e2e-test/feature/configs/network-config.json new file mode 100644 index 000000000..a123ceeb8 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/configs/network-config.json @@ -0,0 +1,338 @@ +{ + "name": "%(networkId)s", + "version": "1.x", + "networkID": "%(networkId)s", + "tls": %(tls)s, + "environment": "dev", + "headers": {"Content-Type": "application/json"}, + "client": { + "organization": "Org1ExampleCom" + }, + "organizations": { + "Org1ExampleCom": { + "mspid": "org1.example.com", + "peers": [ + "peer0.org1.example.com", + "peer1.org1.example.com" + ], + "certificateAuthorities": [ + "ca.org1.example.com" + ] + }, + "Org2ExampleCom": { + "mspid": "org2.example.com", + "peers": [ + "peer0.org2.example.com", + "peer1.org2.example.com" + ], + "certificateAuthorities": [ + "ca.org2.example.com" + ] + } + }, + "orderers": { + "orderer0.example.com": { + "url": "%(grpcType)s://localhost:7050", + "grpcOptions": { + "grpc.http2.keepalive_time": 360, + "grpc.keepalive_time_ms": 360000, + "grpc.http2.keepalive_timeout": 180, + "grpc.keepalive_timeout_ms": 180000 + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + } + } + }, + "peers": { + "peer0.org1.example.com": { + "url": "%(grpcType)s://localhost:7051", + "eventUrl": "%(grpcType)s://localhost:7053", + "grpcOptions": { + "grpc.http2.keepalive_time": 360, + "grpc.keepalive_time_ms": 360000, + "grpc.http2.keepalive_timeout": 180, + "grpc.keepalive_timeout_ms": 180000 + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + }, + "x-mspid": "Org1ExampleCom" + }, + "peer1.org1.example.com": { + "url": "%(grpcType)s://localhost:8051", + "eventUrl": "%(grpcType)s://localhost:8053", + "grpcOptions": { + "grpc.http2.keepalive_time": 360, + "grpc.keepalive_time_ms": 360000, + "grpc.http2.keepalive_timeout": 180, + "grpc.keepalive_timeout_ms": 180000 + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + }, + "x-mspid": "Org1ExampleCom" + }, + "peer0.org2.example.com": { + "url": "%(grpcType)s://localhost:9051", + "eventUrl": "%(grpcType)s://localhost:9053", + "grpcOptions": { + "grpc.http2.keepalive_time": 360, + "grpc.keepalive_time_ms": 360000, + "grpc.http2.keepalive_timeout": 180, + "grpc.keepalive_timeout_ms": 180000 + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + }, + "x-mspid": "Org2ExampleCom" + }, + "peer1.org2.example.com": { + "url": "%(grpcType)s://localhost:10051", + "eventUrl": "%(grpcType)s://localhost:10053", + "grpcOptions": { + "grpc.http2.keepalive_time": 360, + "grpc.keepalive_time_ms": 360000, + "grpc.http2.keepalive_timeout": 180, + "grpc.keepalive_timeout_ms": 180000 + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + }, + "x-mspid": "Org2ExampleCom" + } + }, + "channels": { + "behavesystest": { + "orderers": [ + "orderer0.example.com" + ], + "peers": { + "peer0.org1.example.com": { + "x-chaincode": {} + }, + "peer1.org1.example.com": { + "x-chaincode": {} + } + }, + "chaincodes": [], + "x-members": [ + "Org1ExampleCom", + "Org2ExampleCom" + ] + } + }, + "certificateAuthorities": { + "ca.example.com": { + "url": "%(proto)s://localhost:7054", + "httpOptions": { + "verify": true + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + }, + "registrar": [ + { + "enrollId": "Admin", + "enrollSecret": "adminpw" + } + ], + "caName": "ca.example.com", + "x-mspid": "ExampleCom" + }, + "ca.org1.example.com": { + "url": "%(proto)s://localhost:8054", + "httpOptions": { + "verify": true + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + }, + "registrar": [ + { + "enrollId": "Admin", + "enrollSecret": "adminpw" + } + ], + "caName": "ca.org1.example.com", + "x-mspid": "Org1ExampleCom" + }, + "ca.org2.example.com": { + "url": "%(proto)s://localhost:9054", + "httpOptions": { + "verify": true + }, + "tlsCACerts": { + "pem": "%(cacerts)s" + }, + "registrar": [ + { + "enrollId": "Admin", + "enrollSecret": "adminpw" + } + ], + "caName": "ca.org2.example.com", + "x-mspid": "Org2ExampleCom" + } + }, + "network-config": { + "orderer": { + "url": "%(grpcType)s://localhost:7050", + "server-hostname": "orderer0.example.com", + "tls_cacerts": "%(config)s/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/ca.crt", + "ca": "%(proto)s://localhost:7054" + }, + "Org1ExampleCom": { + "name": "Org1ExampleCom", + "mspid": "org1.example.com", + "ca": "%(proto)s://localhost:8054", + "peers": { + "peer0.org1.example.com": { + "requests": "%(grpcType)s://localhost:7051", + "events": "%(grpcType)s://localhost:7053", + "server-hostname": "peer0.org1.example.com", + "tls_cacerts": "%(config)s/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" + }, + "peer1.org1.example.com": { + "requests": "%(grpcType)s://localhost:8051", + "events": "%(grpcType)s://localhost:8053", + "server-hostname": "peer1.org1.example.com", + "tls_cacerts": "%(config)s/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt" + } + }, + "admin": { + "key": "%(config)s/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", + "cert": "%(config)s/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts" + }, + "user1": { + "key": "%(config)s/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore", + "cert": "%(config)s/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts" + } + }, + "Org2ExampleCom": { + "name": "Org2ExampleCom", + "mspid": "org2.example.com", + "ca": "%(proto)s://localhost:9054", + "peers": { + "peer0.org2.example.com": { + "requests": "%(grpcType)s://localhost:9051", + "events": "%(grpcType)s://localhost:9053", + "server-hostname": "peer0.org2.example.com", + "tls_cacerts": "%(config)s/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" + }, + "peer1.org2.example.com": { + "requests": "%(grpcType)s://localhost:10051", + "events": "%(grpcType)s://localhost:10053", + "server-hostname": "peer1.org2.example.com", + "tls_cacerts": "%(config)s/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt" + } + }, + "admin": { + "key": "%(config)s/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore", + "cert": "%(config)s/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts" + }, + "user1": { + "key": "%(config)s/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore", + "cert": "%(config)s/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts" + } + } + }, + "common-connection-profile": { + "version":"1.0", + "channels":{ + "behavesystest":{ + "orderers":[ + "orderer0.example.com" + ], + "peers":{ + "peer0.org1.example.com":{ + "endorsingPeer":true, + "chaincodeQuery":true, + "ledgerQuery":true, + "eventSource":true + }, + "peer1.org1.example.com":{ + "endorsingPeer":false, + "chaincodeQuery":false, + "ledgerQuery":true, + "eventSource":false + }, + "peer0.org2.example.com":{ + "endorsingPeer":true, + "chaincodeQuery":true, + "ledgerQuery":true, + "eventSource":true + }, + "peer1.org2.example.com":{ + "endorsingPeer":false, + "chaincodeQuery":false, + "ledgerQuery":true, + "eventSource":false + } + } + } + }, + "orderers":{ + "orderer0.example.com":{ + "url":"%(grpcType)s://localhost:7050", + "grpcOptions":{ + "ssl-target-name-override":"orderer0.example.com" + }, + "tlsCACerts":{ + "path":"%(config)s/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/ca.crt" + } + } + }, + "organizations":{ + "Org1ExampleCom": { + "name": "Org1ExampleCom", + "mspid": "org1.example.com", + "ca": "https://localhost:7054", + "peers": [ + "peer0.org1.example.com", + "peer1.org1.example.com" + ], + "adminPrivateKeyPEM": "%(config)s/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", + "signedCertPEM": "%(config)s/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts" + } + }, + "peers":{ + "peer0.org1.example.com":{ + "url":"%(grpcType)s://localhost:7051", + "grpcOptions":{ + "ssl-target-name-override":"peer0.org1.example.com" + }, + "tlsCACerts":{ + "path":"%(config)s/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" + } + }, + "peer1.org1.example.com":{ + "url":"%(grpcType)s://localhost:8051", + "grpcOptions":{ + "ssl-target-name-override":"peer1.org1.example.com" + }, + "tlsCACerts":{ + "path":"%(config)s/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt" + } + }, + "peer0.org2.example.com":{ + "url":"%(grpcType)s://localhost:9051", + "grpcOptions":{ + "ssl-target-name-override":"peer0.org2.example.com" + }, + "tlsCACerts":{ + "path":"%(config)s/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" + } + }, + "peer1.org2.example.com":{ + "url":"%(grpcType)s://localhost:10051", + "grpcOptions":{ + "ssl-target-name-override":"peer1.org2.example.com" + }, + "tlsCACerts":{ + "path":"%(config)s/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt" + } + } + } + } +} diff --git a/app/platform/fabric/e2e-test/docker-compose/docker-compose-base.yml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-base.yml similarity index 100% rename from app/platform/fabric/e2e-test/docker-compose/docker-compose-base.yml rename to app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-base.yml diff --git a/app/platform/fabric/e2e-test/docker-compose/docker-compose-cli.yml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-cli.yml similarity index 100% rename from app/platform/fabric/e2e-test/docker-compose/docker-compose-cli.yml rename to app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-cli.yml diff --git a/app/platform/fabric/e2e-test/docker-compose/docker-compose-couchdb.yml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-couchdb.yml similarity index 100% rename from app/platform/fabric/e2e-test/docker-compose/docker-compose-couchdb.yml rename to app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-couchdb.yml diff --git a/app/platform/fabric/e2e-test/docker-compose/docker-compose-explorer.yaml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-explorer.yaml similarity index 88% rename from app/platform/fabric/e2e-test/docker-compose/docker-compose-explorer.yaml rename to app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-explorer.yaml index 031435903..67d740850 100644 --- a/app/platform/fabric/e2e-test/docker-compose/docker-compose-explorer.yaml +++ b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-explorer.yaml @@ -21,7 +21,7 @@ services: - DATABASE_USERNAME=hppoc - DATABASE_PASSWORD=password volumes: - - ../../../../persistence/fabric/postgreSQL/db/createdb.sh:/docker-entrypoint-initdb.d/createdb.sh + - ../../../../../persistence/fabric/postgreSQL/db/createdb.sh:/docker-entrypoint-initdb.d/createdb.sh - pgdata:/var/lib/postgresql/data networks: - mynetwork.com @@ -38,7 +38,7 @@ services: volumes: - ./../explorer-configs/config-${NETWORK_PROFILE}.json:/opt/explorer/app/platform/fabric/config.json - ./../explorer-configs/connection-profile:/opt/explorer/app/platform/fabric/connection-profile - - ../configs/${CORE_PEER_NETWORKID}:/tmp/crypto + - ./../configs/${CORE_PEER_NETWORKID}:/tmp/crypto - walletstore:/opt/wallet command: sh -c "sleep 5&& node /opt/explorer/main.js && tail -f /dev/null" ports: diff --git a/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-kafka-sd.yml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-kafka-sd.yml new file mode 100644 index 000000000..98bea8718 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-kafka-sd.yml @@ -0,0 +1,443 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +version: '2' + +networks: + behave: + +services: + + ca.example.com: + extends: + file: docker-compose-base.yml + service: ca + container_name: ca.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca.example.com + - BOOTSTRAP_USER_PASS=Admin:adminpw + - FABRIC_CA_SERVER_CSR_CN=ca.example.com + #- FABRIC_CA_SERVER_HOME=/var/hyperledger/fabric-ca-server + #- FABRIC_CA_SERVER_CSR_HOSTS=ca.example.com + - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_TLS_KEYFILE=/var/hyperledger/fabric-ca-server-config/tls/server.key + - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_EXAMPLE_TLS_KEYFILE} + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_EXAMPLE_TLS_KEYFILE} + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 7054' + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/ca:/var/hyperledger/fabric-ca-server-config + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com:/var/hyperledger/fabric-ca-server + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + ca.org1.example.com: + extends: + file: docker-compose-base.yml + service: ca + container_name: ca.org1.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca.org1.example.com + - BOOTSTRAP_USER_PASS=Admin:adminpw + - FABRIC_CA_SERVER_CSR_CN=ca.org1.example.com + #- FABRIC_CA_SERVER_CSR_HOSTS=ca.org1.example.com + - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_ORG1_TLS_KEYFILE} + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_ORG1_TLS_KEYFILE} + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_TLS_KEYFILE=/var/hyperledger/fabric-ca-server-config/tls/server.key + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.org1.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 8054' + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/ca:/var/hyperledger/fabric-ca-server-config + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com:/var/hyperledger/fabric-ca-server + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + ca.org2.example.com: + extends: + file: docker-compose-base.yml + service: ca + container_name: ca.org2.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca.org2.example.com + - BOOTSTRAP_USER_PASS=Admin:adminpw + - FABRIC_CA_SERVER_CSR_CN=ca.org2.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.org2.example.com + - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem + - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_ORG2_TLS_KEYFILE} + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_ORG2_TLS_KEYFILE} + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.org2.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 9054' + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/ca:/var/hyperledger/fabric-ca-server-config + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com:/var/hyperledger/fabric-ca-server + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper0: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper0 + environment: + - ZOO_MY_ID=1 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper1: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper1 + environment: + - ZOO_MY_ID=2 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper2: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper2 + environment: + - ZOO_MY_ID=3 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka0: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka0 + environment: + - KAFKA_BROKER_ID=0 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka1: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka1 + environment: + - KAFKA_BROKER_ID=1 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka2: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka2 + environment: + - KAFKA_BROKER_ID=2 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka3: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka3 + environment: + - KAFKA_BROKER_ID=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + orderer0.example.com: + extends: + file: docker-compose-base.yml + service: orderer + container_name: orderer0.example.com + environment: + - ORDERER_HOST=orderer0.example.com + - CONFIGTX_ORDERER_ORDERERTYPE=kafka + - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka0:9092,kafka1:9092,kafka2:9092,kafka3:9092] + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_GENESISPROFILE=SampleInsecureKafka + - ORDERER_ABSOLUTEMAXBYTES=${ORDERER_ABSOLUTEMAXBYTES} + - ORDERER_PREFERREDMAXBYTES=${ORDERER_PREFERREDMAXBYTES} + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer0.example.com/tls:/var/hyperledger/tls + depends_on: + - kafka0 + - kafka1 + - kafka2 + - kafka3 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 7050:7050 + + orderer1.example.com: + extends: + file: docker-compose-base.yml + service: orderer + container_name: orderer1.example.com + environment: + - ORDERER_HOST=orderer1.example.com + - CONFIGTX_ORDERER_ORDERERTYPE=kafka + - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka0:9092,kafka1:9092,kafka2:9092,kafka3:9092] + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_GENESISPROFILE=SampleInsecureKafka + - ORDERER_ABSOLUTEMAXBYTES=${ORDERER_ABSOLUTEMAXBYTES} + - ORDERER_PREFERREDMAXBYTES=${ORDERER_PREFERREDMAXBYTES} + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer1.example.com/tls:/var/hyperledger/tls + depends_on: + - kafka0 + - kafka1 + - kafka2 + - kafka3 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 8050:7050 + + orderer2.example.com: + extends: + file: docker-compose-base.yml + service: orderer + container_name: orderer2.example.com + environment: + - ORDERER_HOST=orderer2.example.com + - CONFIGTX_ORDERER_ORDERERTYPE=kafka + - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka0:9092,kafka1:9092,kafka2:9092,kafka3:9092] + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_GENESISPROFILE=SampleInsecureKafka + - ORDERER_ABSOLUTEMAXBYTES=${ORDERER_ABSOLUTEMAXBYTES} + - ORDERER_PREFERREDMAXBYTES=${ORDERER_PREFERREDMAXBYTES} + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer2.example.com/tls:/var/hyperledger/tls + depends_on: + - kafka0 + - kafka1 + - kafka2 + - kafka3 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 9050:7050 + + peer0.org1.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer0.org1.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG1} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG1} + - CORE_PEER_LOCALMSPID=org1.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org1.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/users:/var/hyperledger/users + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/ca:/var/hyperledger/ca + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 7051:7051 + - 7053:7053 + + peer0.org2.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer0.org2.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052 + - CORE_PEER_ID=peer0.org2.example.com + - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG2} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG2} + - CORE_PEER_LOCALMSPID=org2.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org2.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/users:/var/hyperledger/users + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 9051:7051 + - 9053:7053 + + peer1.org1.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer1.org1.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer1.org1.example.com:7052 + - CORE_PEER_ID=peer1.org1.example.com + - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG1} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG1} + - CORE_PEER_LOCALMSPID=org1.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org1.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/users:/var/hyperledger/users + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + - peer0.org1.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 8051:7051 + - 8053:7053 + + peer1.org2.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer1.org2.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer1.org2.example.com:7052 + - CORE_PEER_ID=peer1.org2.example.com + - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG2} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG2} + - CORE_PEER_LOCALMSPID=org2.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org2.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/users:/var/hyperledger/users + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + - peer0.org2.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 10051:7051 + - 10053:7053 diff --git a/app/platform/fabric/e2e-test/docker-compose/docker-compose-kafka.yml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-kafka.yml similarity index 77% rename from app/platform/fabric/e2e-test/docker-compose/docker-compose-kafka.yml rename to app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-kafka.yml index 84bee29c5..46ec83183 100644 --- a/app/platform/fabric/e2e-test/docker-compose/docker-compose-kafka.yml +++ b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-kafka.yml @@ -19,10 +19,20 @@ services: - FABRIC_CA_SERVER_CA_NAME=ca.example.com - BOOTSTRAP_USER_PASS=Admin:adminpw - FABRIC_CA_SERVER_CSR_CN=ca.example.com - - FABRIC_CA_SERVER_CSR_HOSTS=ca.example.com + #- FABRIC_CA_SERVER_HOME=/var/hyperledger/fabric-ca-server + #- FABRIC_CA_SERVER_CSR_HOSTS=ca.example.com - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_TLS_KEYFILE=/var/hyperledger/fabric-ca-server-config/tls/server.key - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_EXAMPLE_TLS_KEYFILE} - command: /bin/bash -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_EXAMPLE_TLS_KEYFILE} + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 7054' volumes: - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/ca:/var/hyperledger/fabric-ca-server-config - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com:/var/hyperledger/fabric-ca-server @@ -40,10 +50,19 @@ services: - FABRIC_CA_SERVER_CA_NAME=ca.org1.example.com - BOOTSTRAP_USER_PASS=Admin:adminpw - FABRIC_CA_SERVER_CSR_CN=ca.org1.example.com - - FABRIC_CA_SERVER_CSR_HOSTS=ca.org1.example.com + #- FABRIC_CA_SERVER_CSR_HOSTS=ca.org1.example.com + - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_ORG1_TLS_KEYFILE} - command: /bin/bash -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_ORG1_TLS_KEYFILE} + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_TLS_KEYFILE=/var/hyperledger/fabric-ca-server-config/tls/server.key + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.org1.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 8054' volumes: - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/ca:/var/hyperledger/fabric-ca-server-config - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com:/var/hyperledger/fabric-ca-server @@ -63,8 +82,14 @@ services: - FABRIC_CA_SERVER_CSR_CN=ca.org2.example.com - FABRIC_CA_SERVER_CSR_HOSTS=ca.org2.example.com - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_ORG2_TLS_KEYFILE} - command: /bin/bash -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_ORG2_TLS_KEYFILE} + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.org2.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 9054' volumes: - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/ca:/var/hyperledger/fabric-ca-server-config - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com:/var/hyperledger/fabric-ca-server diff --git a/app/platform/fabric/e2e-test/docker-compose/docker-compose-peer-org3.yml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-peer-org3.yml similarity index 100% rename from app/platform/fabric/e2e-test/docker-compose/docker-compose-peer-org3.yml rename to app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-peer-org3.yml diff --git a/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-solo.yml b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-solo.yml new file mode 100644 index 000000000..567ff6240 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/docker-compose/docker-compose-solo.yml @@ -0,0 +1,560 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +version: '2' + +networks: + behave: + +services: + + ca.example.com: + extends: + file: docker-compose-base.yml + service: ca + container_name: ca.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca.example.com + - BOOTSTRAP_USER_PASS=Admin:adminpw + - FABRIC_CA_SERVER_CSR_CN=ca.example.com + #- FABRIC_CA_SERVER_HOME=/var/hyperledger/fabric-ca-server + #- FABRIC_CA_SERVER_CSR_HOSTS=ca.example.com + - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_TLS_KEYFILE=/var/hyperledger/fabric-ca-server-config/tls/server.key + - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_EXAMPLE_TLS_KEYFILE} + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_EXAMPLE_TLS_KEYFILE} + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 7054' + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/ca:/var/hyperledger/fabric-ca-server-config + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com:/var/hyperledger/fabric-ca-server + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + ca.org1.example.com: + extends: + file: docker-compose-base.yml + service: ca + container_name: ca.org1.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca.org1.example.com + - BOOTSTRAP_USER_PASS=Admin:adminpw + - FABRIC_CA_SERVER_CSR_CN=ca.org1.example.com + #- FABRIC_CA_SERVER_CSR_HOSTS=ca.org1.example.com + - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_ORG1_TLS_KEYFILE} + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_ORG1_TLS_KEYFILE} + #- FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/tls/server.crt + #- FABRIC_CA_SERVER_TLS_KEYFILE=/var/hyperledger/fabric-ca-server-config/tls/server.key + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.org1.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 8054' + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/ca:/var/hyperledger/fabric-ca-server-config + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com:/var/hyperledger/fabric-ca-server + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + ca.org2.example.com: + extends: + file: docker-compose-base.yml + service: ca + container_name: ca.org2.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca.org2.example.com + - BOOTSTRAP_USER_PASS=Admin:adminpw + - FABRIC_CA_SERVER_CSR_CN=ca.org2.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.org2.example.com + - FABRIC_CA_SERVER_CA_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_CERTFILE=/var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem + - FABRIC_CA_SERVER_CA_KEYFILE=${FABRIC_CA_SERVER_ORG2_TLS_KEYFILE} + - FABRIC_CA_SERVER_TLS_KEYFILE=${FABRIC_CA_SERVER_ORG2_TLS_KEYFILE} + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --tls.certfile /var/hyperledger/fabric-ca-server-config/tls/server.crt --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.keyfile /var/hyperledger/fabric-ca-server-config/tls/server.key -b $${BOOTSTRAP_USER_PASS} -d' + #command: sh -c 'fabric-ca-server start -b $${BOOTSTRAP_USER_PASS} --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts ca.org2.example.com,localhost -d' + command: sh -c 'fabric-ca-server start --ca.certfile /var/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile $${FABRIC_CA_SERVER_CA_KEYFILE} --tls.enabled --csr.hosts $${FABRIC_CA_SERVER_CA_NAME},localhost,0.0.0.0 -b $${BOOTSTRAP_USER_PASS}' + #command: sh -c 'fabric-ca-server start -d -b $${BOOTSTRAP_USER_PASS} --port 9054' + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/ca:/var/hyperledger/fabric-ca-server-config + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com:/var/hyperledger/fabric-ca-server + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper0: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper0 + environment: + - ZOO_MY_ID=1 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper1: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper1 + environment: + - ZOO_MY_ID=2 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper2: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper2 + environment: + - ZOO_MY_ID=3 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka0: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka0 + environment: + - KAFKA_BROKER_ID=0 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka1: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka1 + environment: + - KAFKA_BROKER_ID=1 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka2: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka2 + environment: + - KAFKA_BROKER_ID=2 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka3: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka3 + environment: + - KAFKA_BROKER_ID=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper0: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper0 + environment: + - ZOO_MY_ID=1 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper1: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper1 + environment: + - ZOO_MY_ID=2 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + zookeeper2: + extends: + file: docker-compose-base.yml + service: zookeeper + container_name: zookeeper2 + environment: + - ZOO_MY_ID=3 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka0: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka0 + environment: + - KAFKA_BROKER_ID=0 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka1: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka1 + environment: + - KAFKA_BROKER_ID=1 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka2: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka2 + environment: + - KAFKA_BROKER_ID=2 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + kafka3: + extends: + file: docker-compose-base.yml + service: kafka + container_name: kafka3 + environment: + - KAFKA_BROKER_ID=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + - KAFKA_MESSAGE_MAX_BYTES=${KAFKA_MESSAGE_MAX_BYTES} + - KAFKA_REPLICA_FETCH_MAX_BYTES=${KAFKA_REPLICA_FETCH_MAX_BYTES} + - KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES=${KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES} + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + + orderer0.example.com: + extends: + file: docker-compose-base.yml + service: orderer + container_name: orderer0.example.com + environment: + - ORDERER_HOST=orderer0.example.com + - CONFIGTX_ORDERER_ORDERERTYPE=kafka + - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka0:9092,kafka1:9092,kafka2:9092,kafka3:9092] + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_GENESISPROFILE=SampleInsecureKafka + - ORDERER_ABSOLUTEMAXBYTES=${ORDERER_ABSOLUTEMAXBYTES} + - ORDERER_PREFERREDMAXBYTES=${ORDERER_PREFERREDMAXBYTES} + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer0.example.com/tls:/var/hyperledger/tls + depends_on: + - kafka0 + - kafka1 + - kafka2 + - kafka3 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 7050:7050 + + orderer1.example.com: + extends: + file: docker-compose-base.yml + service: orderer + container_name: orderer1.example.com + environment: + - ORDERER_HOST=orderer1.example.com + - CONFIGTX_ORDERER_ORDERERTYPE=kafka + - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka0:9092,kafka1:9092,kafka2:9092,kafka3:9092] + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_GENESISPROFILE=SampleInsecureKafka + - ORDERER_ABSOLUTEMAXBYTES=${ORDERER_ABSOLUTEMAXBYTES} + - ORDERER_PREFERREDMAXBYTES=${ORDERER_PREFERREDMAXBYTES} + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer1.example.com/tls:/var/hyperledger/tls + depends_on: + - kafka0 + - kafka1 + - kafka2 + - kafka3 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 8050:7050 + + orderer2.example.com: + extends: + file: docker-compose-base.yml + service: orderer + container_name: orderer2.example.com + environment: + - ORDERER_HOST=orderer2.example.com + - CONFIGTX_ORDERER_ORDERERTYPE=kafka + - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka0:9092,kafka1:9092,kafka2:9092,kafka3:9092] + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + - ORDERER_GENERAL_GENESISPROFILE=SampleInsecureKafka + - ORDERER_ABSOLUTEMAXBYTES=${ORDERER_ABSOLUTEMAXBYTES} + - ORDERER_PREFERREDMAXBYTES=${ORDERER_PREFERREDMAXBYTES} + volumes: + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/ordererOrganizations/example.com/orderers/orderer2.example.com/tls:/var/hyperledger/tls + depends_on: + - kafka0 + - kafka1 + - kafka2 + - kafka3 + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 9050:7050 + + peer0.org1.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer0.org1.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG1} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG1} + - CORE_PEER_LOCALMSPID=org1.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org1.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/users:/var/hyperledger/users + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/ca:/var/hyperledger/ca + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 7051:7051 + - 7053:7053 + + peer0.org2.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer0.org2.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052 + - CORE_PEER_ID=peer0.org2.example.com + - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG2} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG2} + - CORE_PEER_LOCALMSPID=org2.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org2.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/users:/var/hyperledger/users + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 9051:7051 + - 9053:7053 + + peer1.org1.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer1.org1.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer1.org1.example.com:7052 + - CORE_PEER_ID=peer1.org1.example.com + - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG1} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG1} + - CORE_PEER_LOCALMSPID=org1.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org1.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org1.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org1.example.com/users:/var/hyperledger/users + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + - peer0.org1.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 8051:7051 + - 8053:7053 + + peer1.org2.example.com: + extends: + file: docker-compose-base.yml + service: peer + container_name: peer1.org2.example.com + environment: + - CORE_PEER_CHAINCODELISTENADDRESS=peer1.org2.example.com:7052 + - CORE_PEER_ID=peer1.org2.example.com + - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_ORGLEADER=${CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG2} + - CORE_PEER_GOSSIP_USELEADERELECTION=${CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG2} + - CORE_PEER_LOCALMSPID=org2.example.com + - CORE_PEER_TLS_CLIENTROOTCAS_FILES=/var/hyperledger/users/Admin@org2.example.com/tls/ca.crt + - CORE_PEER_TLS_CLIENTCERT_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.crt + - CORE_PEER_TLS_CLIENTKEY_FILE=/var/hyperledger/users/Admin@org2.example.com/tls/client.key + volumes: + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/var/hyperledger/msp + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/var/hyperledger/tls + - ../configs/${CORE_PEER_NETWORKID}/peerOrganizations/org2.example.com/users:/var/hyperledger/users + depends_on: + - orderer0.example.com + - orderer1.example.com + - orderer2.example.com + - peer0.org2.example.com + networks: + behave: + aliases: + - ${CORE_PEER_NETWORKID} + ports: + - 10051:7051 + - 10053:7053 diff --git a/app/platform/fabric/e2e-test/environment.py b/app/platform/fabric/e2e-test/feature/environment.py similarity index 73% rename from app/platform/fabric/e2e-test/environment.py rename to app/platform/fabric/e2e-test/feature/environment.py index f1be91ddc..b652305ac 100644 --- a/app/platform/fabric/e2e-test/environment.py +++ b/app/platform/fabric/e2e-test/feature/environment.py @@ -10,7 +10,7 @@ import gc import psutil from steps.endorser_util import CLIInterface, ToolInterface -import steps.json_responses as json_responses + def getLogFiles(containers, fileSuffix): """ This will gather the logs for the different component containers as well as @@ -42,22 +42,8 @@ def before_scenario(context, scenario): if container != '': subprocess.call(['docker rm -f {}'.format(container)], shell=True) - # Remove all existing networks generated by this BDD - network_output = str(subprocess.check_output(["docker network ls -q --filter name=behave"], shell=True)) - network_list = network_output.strip().split('\n') - for network in network_list: - if network != '': - subprocess.call(['docker network rm {}'.format(network)], shell=True) - def after_scenario(context, scenario): - - if scenario.status == "failed": - print("Explorer container log:") - subprocess.call("docker logs explorer.mynetwork.com 2>&1", shell=True) - print("Explorer-DB container log:") - subprocess.call("docker logs explorerdb.mynetwork.com 2>&1", shell=True) - # Display memory usage before tearing down the network mem = psutil.virtual_memory() print("Memory Info Before Network Teardown:\n\tFree: {}\n\tUsed: {}\n\tPercentage: {}\n".format(mem.free, mem.used, mem.percent)) @@ -89,17 +75,13 @@ def after_scenario(context, scenario): context.compose_yaml)) elif 'composition' in context: # Remove config data and docker containers - shutil.rmtree("configs/%s" % context.composition.projectName, ignore_errors=True) + shutil.rmtree("configs/%s" % context.composition.projectName) shutil.rmtree("/tmp/fabric-client-kvs_org1", ignore_errors=True) shutil.rmtree("/tmp/fabric-client-kvs_org2", ignore_errors=True) - if context.composition.composeFilesYaml != None: - context.composition.decompose() + context.composition.decompose() elif hasattr(context, 'projectName'): shutil.rmtree("configs/%s" % context.projectName) - # Stop node app of balance-transfer example - subprocess.call(["kill -15 $(lsof -i:4000 -t) 2>/dev/null"], shell=True) - # Print memory information after every scenario memory = subprocess.check_output(["df", "-h"], shell=True) print("\nMemory Usage Info:\n{}\n".format(memory)) @@ -118,25 +100,19 @@ def after_scenario(context, scenario): gc.collect() def before_all(context): - # for behave-rest - context.base_url = "" - context.headers = {} - context.json_responses = json_responses - context.verify_ssl = False - # Be sure to use a fresh install of the vendored packages for this chaincode - # shutil.rmtree("../fabric/examples/chaincode/go/enccc_example/vendor", ignore_errors=True) + shutil.rmtree("../fabric/examples/chaincode/go/enccc_example/vendor", ignore_errors=True) # Performing `npm install` before test suit not before test cases. - # shutil.rmtree("./node_modules", ignore_errors=True) - # shutil.rmtree("./package-lock.json", ignore_errors=True) - # shutil.copyfile("package.json", "../../../package.json") + shutil.rmtree("./node_modules", ignore_errors=True) + shutil.rmtree("./package-lock.json", ignore_errors=True) + shutil.copyfile("package.json", "../../../package.json") npminstall = subprocess.check_output(["npm install --silent"], env=os.environ, - cwd=".", + cwd="../../..", shell=True) print("npm install: {}".format(npminstall)) - # shutil.copytree("../../../node_modules", "./node_modules") + shutil.copytree("../../../node_modules", "./node_modules") context.interface = CLIInterface() context.remote = False if context.config.userdata.get("network", None) is not None: @@ -144,19 +120,16 @@ def before_all(context): context.remote = True context.interface = ToolInterface(context) - # Stop node app of balance-transfer example - subprocess.call(["kill -15 $(lsof -i:4000 -t) 2>/dev/null"], shell=True) - mem = psutil.virtual_memory() print("Starting Memory Info:\n\tFree: {}\n\tUsed: {}\n\tPercentage: {}\n".format(mem.free, mem.used, mem.percent)) def after_all(context): # Removing Node modules at the end of the test suites - # if os.path.exists("./node_modules"): - # shutil.rmtree("./node_modules", ignore_errors=True) - # shutil.rmtree("../../../node_modules", ignore_errors=True) - # shutil.rmtree("../../../package-lock.json", ignore_errors=True) - # subprocess.call(["npm cache clear --force"], shell=True) - # subprocess.call(["npm i -g npm"], shell=True) + if os.path.exists("./node_modules"): + shutil.rmtree("./node_modules", ignore_errors=True) + shutil.rmtree("../../../node_modules", ignore_errors=True) + shutil.rmtree("../../../package-lock.json", ignore_errors=True) + subprocess.call(["npm cache clear --force"], shell=True) + # subprocess.call(["npm i -g npm"], shell=True) mem = psutil.virtual_memory() print("\nEnding Memory Info:\n\tFree: {}\n\tUsed: {}\n\tPercentage: {}".format(mem.free, mem.used, mem.percent)) diff --git a/app/platform/fabric/e2e-test/explorer-configs/config-balance-transfer.json b/app/platform/fabric/e2e-test/feature/explorer-configs/config-balance-transfer.json similarity index 100% rename from app/platform/fabric/e2e-test/explorer-configs/config-balance-transfer.json rename to app/platform/fabric/e2e-test/feature/explorer-configs/config-balance-transfer.json diff --git a/app/platform/fabric/e2e-test/explorer-configs/config-first-network.json b/app/platform/fabric/e2e-test/feature/explorer-configs/config-first-network.json similarity index 100% rename from app/platform/fabric/e2e-test/explorer-configs/config-first-network.json rename to app/platform/fabric/e2e-test/feature/explorer-configs/config-first-network.json diff --git a/app/platform/fabric/e2e-test/explorer-configs/config-solo-tls-disabled.json b/app/platform/fabric/e2e-test/feature/explorer-configs/config-solo-tls-disabled.json similarity index 100% rename from app/platform/fabric/e2e-test/explorer-configs/config-solo-tls-disabled.json rename to app/platform/fabric/e2e-test/feature/explorer-configs/config-solo-tls-disabled.json diff --git a/app/platform/fabric/e2e-test/explorer-configs/connection-profile/balance-transfer.json b/app/platform/fabric/e2e-test/feature/explorer-configs/connection-profile/balance-transfer.json similarity index 86% rename from app/platform/fabric/e2e-test/explorer-configs/connection-profile/balance-transfer.json rename to app/platform/fabric/e2e-test/feature/explorer-configs/connection-profile/balance-transfer.json index adeec5ae2..b49199990 100644 --- a/app/platform/fabric/e2e-test/explorer-configs/connection-profile/balance-transfer.json +++ b/app/platform/fabric/e2e-test/feature/explorer-configs/connection-profile/balance-transfer.json @@ -4,8 +4,8 @@ "license": "Apache-2.0", "client": { "tlsEnable": true, - "adminUser": "admin", - "adminPassword": "adminpw", + "adminUser": "latitia", + "adminPassword": "h3ll0", "enableAuthentication": false, "organization": "Org1", "connection": { @@ -19,7 +19,7 @@ }, "channels": { "mychannel": { - "orderers": ["orderer.example.com"], + "orderers": ["orderer0.example.com"], "peers": { "peer0.org1.example.com": { "ledgerQuery": true @@ -29,7 +29,7 @@ }, "organizations": { "Org1": { - "mspid": "Org1MSP", + "mspid": "org1.example.com", "peers": ["peer0.org1.example.com", "peer1.org1.example.com"], "certificateAuthorities": ["ca-org1"], "adminPrivateKey": { @@ -54,7 +54,7 @@ }, "certificateAuthorities": { "ca-org1": { - "url": "https://ca_peerOrg1:7054", + "url": "https://ca.org1.example.com:7054", "httpOptions": { "verify": false }, @@ -62,7 +62,7 @@ "path": "/tmp/crypto/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem" }, - "caName": "ca-org1" + "caName": "ca.org1.example.com" } } } diff --git a/app/platform/fabric/e2e-test/explorer-configs/connection-profile/first-network.json b/app/platform/fabric/e2e-test/feature/explorer-configs/connection-profile/first-network.json similarity index 100% rename from app/platform/fabric/e2e-test/explorer-configs/connection-profile/first-network.json rename to app/platform/fabric/e2e-test/feature/explorer-configs/connection-profile/first-network.json diff --git a/app/platform/fabric/e2e-test/explorer-configs/connection-profile/solo-tls-disabled.json b/app/platform/fabric/e2e-test/feature/explorer-configs/connection-profile/solo-tls-disabled.json similarity index 100% rename from app/platform/fabric/e2e-test/explorer-configs/connection-profile/solo-tls-disabled.json rename to app/platform/fabric/e2e-test/feature/explorer-configs/connection-profile/solo-tls-disabled.json diff --git a/app/platform/fabric/e2e-test/explorer.feature b/app/platform/fabric/e2e-test/feature/explorer.feature similarity index 60% rename from app/platform/fabric/e2e-test/explorer.feature rename to app/platform/fabric/e2e-test/feature/explorer.feature index 55a030765..c5ed2084f 100644 --- a/app/platform/fabric/e2e-test/explorer.feature +++ b/app/platform/fabric/e2e-test/feature/explorer.feature @@ -3,42 +3,19 @@ Feature: Bootstrapping Hyperledger Explorer As a user I want to be able to bootstrap Hyperledger Explorer -# @sanity -# @doNotDecompose -# Scenario: Bring up explorer with tls-disabled fabric network and retrieve channel list successfully -# Given I have a bootstrapped fabric network of type solo without tls -# Given the NETWORK_PROFILE environment variable is solo-disabled -# When an admin sets up a channel named "mychannel" -# When I start explorer -# Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds - -# Given I wait "5" seconds -# Given I set base URL to "http://localhost:8090" -# When I make a POST request to "auth/login" with parameters -# |user |password |network | -# |test |test |first-network | -# Then the response status code should equal 200 -# Then the response structure should equal "loginResp" -# Then JSON at path ".success" should equal true -# Then JSON at path ".user.message" should equal "logged in" -# Then JSON at path ".user.name" should equal "test" - -# Given JSON at path ".success" should equal true -# Given I want to reuse "token" parameter -# Given I set Authorization header to "context.token" -# When I make a GET request to "api/channels" -# Then the response status code should equal 200 -# Then the response structure should equal "channelsResp" -# Then JSON at path ".channels" should equal ["mychannel"] - -@basic @sanitycheck # @doNotDecompose -Scenario Outline: [] Bring up explorer with fabric-samples/ and send requests to the basic REST API functions successfully - # Start a fabric network by using fabric-samples/ - Given I start orderer network of type - # Need to specify which profiles should be in use before starting Explorer - Given the NETWORK_PROFILE environment variable is +Scenario Outline: : Bring up explorer and send requests to the basic REST API functions successfully + Given I have a bootstrapped fabric network of type + Given the NETWORK_PROFILE environment variable is solo-tls-disabled + + When an admin sets up a channel named "mychannel" + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" on channel "mychannel" + When a user invokes on the channel "mychannel" using chaincode named "mycc" with args ["invoke","a","b","10"] + When I wait "3" seconds + When a user queries on the channel "mychannel" using chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + When I start explorer Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds @@ -48,11 +25,11 @@ Scenario Outline: [] Bring up explorer with fabric-samples/", {} ]] + Then JSON at path ".networkList" should equal [[ "first-network", {} ]] When I make a POST request to "auth/login" with parameters - |user |password |network | - |test |test | | + |user |password |network | + |test |test |first-network | Then the response status code should equal 200 Then the response structure should equal "loginResp" Then JSON at path ".success" should equal true @@ -105,15 +82,29 @@ Scenario Outline: [] Bring up explorer with fabric-samples/ based orderer with a db using the with chaincode + Given I have a bootstrapped fabric network of type using state-database with tls + Given Copy "./bin/fabric-ca-client" to "/usr/local/bin/fabric-ca-client" on "peer0.org1.example.com" + Given Copy "./bin/fabric-ca-client" to "/usr/local/bin/fabric-ca-client" on "peer0.org2.example.com" + And I use the interface + And I enroll the following users using fabric-ca + | username | organization | password | role | certType | + | latitia | org1.example.com | h3ll0 | admin | x509 | + | scott | org2.example.com | th3r3 | member | x509 | + | adnan | org1.example.com | wh@tsup | member | x509 | + When an admin sets up a channel named "mychannel" + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" on channel "mychannel" + When a user invokes on the channel "mychannel" using chaincode named "mycc" with args ["invoke","a","b","10"] + When I wait "3" seconds + When a user queries on the channel "mychannel" using chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + Given the NETWORK_PROFILE environment variable is balance-transfer When I start explorer Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds @@ -123,20 +114,20 @@ Scenario: [balance-transfer] Register a new user successfully Given I set base URL to "http://localhost:8090" When I make a POST request to "auth/login" with parameters - |user |password |network | - |test1 |test1 |balance-transfer | + |user |password |network | + |latitia |h3ll0 |balance-transfer | Then the response status code should equal 200 Then the response structure should equal "loginResp" Then JSON at path ".success" should equal true Then JSON at path ".user.message" should equal "logged in" - Then JSON at path ".user.name" should equal "test1" + Then JSON at path ".user.name" should equal "latitia" Given I want to reuse "token" parameter Given I set Authorization header to "context.token" When I make a POST request to "api/register" with parameters |user |password |affiliation |role | - |test2 |test2 |department1 |admin | + |test2 |test2 |example.com |admin | Then the response status code should equal 200 Then the response structure should equal "registerResp" Then the response parameter "status" should equal 200 @@ -144,24 +135,33 @@ Scenario: [balance-transfer] Register a new user successfully # duplicate call : api/register (fail) When I make a POST request to "api/register" with parameters |user |password |affiliation |role | - |test2 |test2 |department1 |admin | + |test2 |test2 |example.com |admin | Then the response status code should equal 200 Then the response structure should equal "registerResp" Then the response parameter "status" should equal 400 Then the response parameter "message" should equal "Error: already exists" -@basic +Examples: + | type | database | interface | path | language | + #| solo | leveldb | Java SDK | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | + | solo | leveldb | NodeJS SDK | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | + # | kafka | couchdb | CLI | ../../fabric-test/chaincodes/example02/node | NODE | + # | solo | leveldb | NodeJS SDK | ../../fabric-samples/chaincode/chaincode_example02/java | JAVA | + +@bugfix # @doNotDecompose -Scenario: [first-network] Not supported to register a new user - Given I start first-network - Given the NETWORK_PROFILE environment variable is first-network +Scenario: Check a variety of error cases + Given I have a bootstrapped fabric network of type kafka + Given the NETWORK_PROFILE environment variable is solo-tls-disabled + + # [BE-583] Memory Leak : Channel Event Hub shoud be created just once + When an admin sets up a channel named "mychannel" When I start explorer Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds + Then the explorer app logs contains "Successfully created channel event hub for" 1 time(s) within 60 seconds - # Need to wait enough until completing process a new BlockEvent - Given I wait "20" seconds + # Not supported to register a new user in network without fabric-ca Given I set base URL to "http://localhost:8090" - When I make a POST request to "auth/login" with parameters |user |password |network | |test1 |test1 |first-network | @@ -182,41 +182,14 @@ Scenario: [first-network] Not supported to register a new user Then the response parameter "status" should equal 400 Then the response parameter "message" should equal "Error: did not register with CA" -@bugfix -# @doNotDecompose -Scenario: [BE-583] Memory Leak : Channel Event Hub shoud be created just once - Given I start first-network - Given the NETWORK_PROFILE environment variable is first-network - When I start explorer - Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds - Then the explorer app logs contains "Successfully created channel event hub for" 1 time(s) within 60 seconds - -@bugfix -# @doNotDecompose -Scenario: [BE-603] Create a channel with long channel name - Given I have a bootstrapped fabric network of type solo without tls - Given the NETWORK_PROFILE environment variable is solo-tls-disabled - When an admin sets up a channel named "mychannel" - When I start explorer - Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds - + # [BE-603] Create a channel with long channel name + # [BE-713] Detect a newly added channel When an admin sets up a channel named "channel2422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422" - Then the explorer app logs contains "Successfully created channel event hub for \[channel2422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422\]" 1 time(s) within 60 seconds - -@bugfix -@doNotDecompose -Scenario: [BE-690] Keep explorer running after losing the default orderer - # Start a fabric network by using fabric-samples/first-network - Given I start first-network orderer network of type etcdraft - # Need to specify which profiles should be in use before starting Explorer - Given the NETWORK_PROFILE environment variable is first-network - When I start explorer - Then the logs on explorer.mynetwork.com contains "Please open web browser to access" within 20 seconds - - When "orderer.example.com" is stopped - Then the explorer app logs contains "Succeeded to switch default orderer to orderer2.example.com" within 30 seconds + Then the explorer app logs contains "Channel genesis hash for channel \[channel2422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422\]" within 60 seconds + # [BE-690] Keep explorer running after losing the default orderer + When "orderer0.example.com" is stopped + Then the explorer app logs contains "Succeeded to switch default orderer to orderer1.example.com" within 30 seconds Given I wait "20" seconds - - When "orderer2.example.com" is stopped - Then the explorer app logs contains "Succeeded to switch default orderer to orderer3.example.com" within 30 seconds + When "orderer1.example.com" is stopped + Then the explorer app logs contains "Succeeded to switch default orderer to orderer2.example.com" within 30 seconds diff --git a/app/platform/fabric/e2e-test/feature/explorer_gui_e2e.feature b/app/platform/fabric/e2e-test/feature/explorer_gui_e2e.feature new file mode 100644 index 000000000..5d9d37e37 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/explorer_gui_e2e.feature @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: Apache-2.0 + +Feature: Bootstrapping Hyperledger Explorer + As a user I want to be able to bootstrap Hyperledger Explorer + +@doNotDecompose +Scenario: Bring up fabric network for GUI e2e test + Given For explorer env, I have a bootstrapped fabric network of type kafka-sd + Given the NETWORK_PROFILE environment variable is solo-tls-disabled + + When an admin sets up a channel named "mychannel" + Given Update "peer0.org1.example.com" of "Org1ExampleCom" as an anchor in "mychannel" + Given Update "peer0.org2.example.com" of "Org2ExampleCom" as an anchor in "mychannel" + + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" on channel "mychannel" + When a user invokes on the channel "mychannel" using chaincode named "mycc" with args ["invoke","a","b","10"] + When I wait "3" seconds + When a user queries on the channel "mychannel" using chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + + When I start explorer + Then the logs on explorer.mynetwork.com contains "Please open web browser to access :" within 20 seconds diff --git a/app/platform/fabric/e2e-test/feature/fabric-ca.feature b/app/platform/fabric/e2e-test/feature/fabric-ca.feature new file mode 100644 index 000000000..69a706cda --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/fabric-ca.feature @@ -0,0 +1,101 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + + +Feature: Fabric-CA Service + As a user I want to be able to use the Fabric-CA for generation of certificates + +##@doNotDecompose +##@interop +##@daily +Scenario Outline: FAB-6489: Interoperability Test using based orderer with a db using the with chaincode + Given I have a bootstrapped fabric network of type using state-database with tls + And I use the interface + And I enroll the following users using fabric-ca + | username | organization | password | role | certType | + | latitia | org1.example.com | h3ll0 | admin | x509 | + | scott | org2.example.com | th3r3 | member | x509 | + | adnan | org1.example.com | wh@tsup | member | x509 | + When an admin sets up a channel + And an admin deploys chaincode at path "" with args ["init","a","1000","b","2000"] with name "mycc" with language "" + And I wait "10" seconds + When a user "adnan" queries on the chaincode with args ["query","a"] + Then a user receives a success response of 1000 + And I wait "5" seconds + When a user "adnan" invokes on the chaincode with args ["invoke","a","b","10"] + And I wait "10" seconds + When a user "scott" queries on the chaincode with args ["query","a"] from "peer0.org2.example.com" + Then a user receives a success response of 990 from "peer0.org2.example.com" + When a user "scott" invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on "peer0.org2.example.com" + And I wait "5" seconds + When a user "latitia" queries on the chaincode with args ["query","a"] + Then a user receives a success response of 980 + # We should use the JavaSDK once the TLS version of this is working correctly +Examples: + | type | database | interface | path | language | + #| solo | leveldb | Java SDK | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | + | solo | leveldb | NodeJS SDK | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | + | kafka | couchdb | CLI | ../../fabric-test/chaincodes/example02/node | NODE | + | solo | leveldb | NodeJS SDK | ../../fabric-samples/chaincode/chaincode_example02/java | JAVA | + + +##@daily +Scenario Outline: FAB-11621: JavaSDK interoperability Test using chaincode shim + Given I have a bootstrapped fabric network + And I use the Java SDK interface + And I enroll the following users using fabric-ca + | username | organization | password | role | + | latitia | org1.example.com | h3ll0 | admin | + | scott | org2.example.com | th3r3 | member | + | adnan | org1.example.com | wh@tsup | member | + When an admin sets up a channel + And an admin deploys chaincode at path "" with args ["init","a","1000","b","2000"] with name "mycc" with language "" + And I wait "10" seconds + When a user "adnan" queries on the chaincode with args ["query","a"] + Then a user receives a success response of 1000 + And I wait "5" seconds + When a user "adnan" invokes on the chaincode with args ["invoke","a","b","10"] + And I wait "10" seconds + When a user "scott" queries on the chaincode with args ["query","a"] from "peer0.org2.example.com" + Then a user receives a success response of 990 from "peer0.org2.example.com" + When a user "scott" invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on "peer0.org2.example.com" + And I wait "5" seconds + When a user "latitia" queries on the chaincode with args ["query","a"] + Then a user receives a success response of 980 +Examples: + | path | language | + | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | + | ../../fabric-test/chaincodes/example02/node | NODE | + | ../../fabric-samples/chaincode/chaincode_example02/java | JAVA | + + #@daily + #Scenario Outline: FAB-11728: Identity Mixer Test Happy Path + # Given an admin creates an idemix MSP for organization "org1.example.com" + # Given I have a bootstrapped fabric network with tls + # And I use the interface + # And I enroll the following users using fabric-ca + # | username | organization | password | role | certType | + # | latitia | org1.example.com | h3ll0 | admin | idemix | + # | scott | org2.example.com | th3r3 | member | idemix | + # | adnan | org1.example.com | wh@tsup | member | idemix | + # When an admin sets up a channel + # And an admin deploys chaincode at path "" with args ["init","a","1000","b","2000"] with name "mycc" with language "" + # And I wait "5" seconds + # When a user "adnan" queries on the chaincode with args ["query","a"] + # Then a user receives a success response of 1000 + # And I wait "5" seconds + # When a user "adnan" invokes on the chaincode with args ["invoke","a","b","10"] + # And I wait "5" seconds + # When a user "scott" queries on the chaincode with args ["query","a"] from "peer0.org2.example.com" + # Then a user receives a success response of 990 from "peer0.org2.example.com" + # When a user "scott" invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on peer0.org2.example.com + # And I wait "5" seconds + # When a user "latitia" queries on the chaincode with args ["query","a"] + # Then a user receives a success response of 980 + #Examples: + # | interface | path | language | + # | CLI | github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd | GOLANG | + # | Java SDK | github.com/hyperledger/fabric-sdk-java/chaincode/gocc/sample1/src/github.com/example_cc | GOLANG | + # | NodeJS SDK | ../../fabric-test/chaincodes/example02/java | JAVA | diff --git a/app/platform/fabric/e2e-test/feature/gossip.feature b/app/platform/fabric/e2e-test/feature/gossip.feature new file mode 100644 index 000000000..d79d154bb --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/gossip.feature @@ -0,0 +1,411 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +Feature: Gossip Service + As a user I expect the gossip component work correctly + +@daily +Scenario Outline: [FAB-4663] [FAB-4664] [FAB-4665] A non-leader peer goes down by , comes back up and catches up eventually. + Given the FABRIC_LOGGING_SPEC environment variable is gossip.election=DEBUG + And I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + # the following wait is for Gossip leadership states to be stabilized + And I wait "30" seconds + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" on the initial leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 1000 from the initial leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on the initial leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 990 from the initial leader peer of "org1" + + When the initial non-leader peer of "org1" is taken down by doing a + And I wait "5" seconds + ## Now do 3 invoke-queries in leader peer + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on the initial leader peer of "org1" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 980 from the initial leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] on the initial leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 960 from the initial leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] on the initial leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 930 from the initial leader peer of "org1" + + When the initial non-leader peer of "org1" comes back up by doing a + And I wait "60" seconds + + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 930 from the initial non-leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","40"] on the initial non-leader peer of "org1" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 890 from the initial leader peer of "org1" + + Examples: + | takeDownType | bringUpType | + | stop | start | + | pause | unpause | + | disconnect | connect | + +@daily +Scenario Outline: [FAB-4667] [FAB-4671] [FAB-4672] A leader peer goes down by , comes back up *after* another leader is elected, catches up. + Given the FABRIC_LOGGING_SPEC environment variable is gossip.election=DEBUG + And I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + # the following wait is for Gossip leadership states to be stabilized + And I wait "30" seconds + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" on the initial non-leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 1000 from the initial non-leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on the initial non-leader peer of "org1" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 990 from the initial non-leader peer of "org1" + + When the initial leader peer of "org1" is taken down by doing a + # Give time to leader change to happen + And I wait "30" seconds + Then the initial non-leader peer of "org1" has become the leader + ## Now do 3 invoke-queries + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on the initial non-leader peer of "org1" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 980 from the initial non-leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] on the initial non-leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 960 from the initial non-leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] on the initial non-leader peer of "org1" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 930 from the initial non-leader peer of "org1" + + When the initial leader peer of "org1" comes back up by doing a + And I wait "60" seconds + + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 930 from the initial leader peer of "org1" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","40"] on the initial leader peer of "org1" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 890 from the initial leader peer of "org1" + + Examples: + | takeDownType | bringUpType | + | stop | start | + | pause | unpause | + | disconnect | connect | + +@daily +Scenario Outline: [FAB-4673] [FAB-4674] [FAB-4675] A leader peer goes down by , comes back up *before* another leader is elected, catches up. + Given the FABRIC_LOGGING_SPEC environment variable is gossip.election,peer.gossip=DEBUG + And I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + # the following wait is for Gossip leadership states to be stabilized + And I wait "30" seconds + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" on the initial non-leader peer of "org1" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 1000 from the initial non-leader peer of "org1" + + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on the initial non-leader peer of "org1" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on the initial non-leader peer of "org1" + Then a user receives a success response of 990 from the initial non-leader peer of "org1" + + ## take down leader, invoke in non-leader, wait 5 seconds and bring back up the initial leader + When the initial leader peer of "org1" is taken down by doing a + And a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on the initial non-leader peer of "org1" + And I wait "3" seconds + Then the initial non-leader peer of "org1" has not become the leader + When the initial leader peer of "org1" comes back up by doing a + And I wait "30" seconds + + When a user queries on the chaincode named "mycc" with args ["query","a"] on the initial leader peer of "org1" + Then a user receives a success response of 980 from the initial leader peer of "org1" + + Examples: + | takeDownType | bringUpType | + | stop | start | + | pause | unpause | + | disconnect | connect | + +@daily +Scenario Outline: [FAB-4676] [FAB-4677] [FAB-4678] "All peers in an organization go down via , then catch up after ". + Given the FABRIC_LOGGING_SPEC environment variable is gossip.election=DEBUG + And I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + # the following wait is for Gossip leadership states to be stabilized + And I wait "30" seconds + + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 980 + + #take down both peers in "org2" + When "peer0.org2.example.com" is taken down by doing a + And I wait "5" seconds + When "peer1.org2.example.com" is taken down by doing a + And I wait "5" seconds + ## Now do 3 invoke-queries in a peer from org1 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 970 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 950 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 920 + + When "peer0.org2.example.com" comes back up by doing a + And I wait "60" seconds + When "peer1.org2.example.com" comes back up by doing a + And I wait "60" seconds + + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org2.example.com" + Then a user receives a success response of 920 from "peer0.org2.example.com" + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org2.example.com" + Then a user receives a success response of 920 from "peer1.org2.example.com" + + Examples: + | takeDownType | bringUpType | + | stop | start | + | pause | unpause | + | disconnect | connect | + +@daily +Scenario Outline: [FAB-4679] [FAB-4680] [FAB-4681] In leader-selection setup, a non-leader peer goes down by , comes back up and catches up eventually. + # Select Peer0 of both org as leader and turn leader election off + + Given the CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG1 environment variable is true + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG2 environment variable is true + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG2 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG2 environment variable is false + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG2 environment variable is false + + # Bootstrap the network create channel, deploy chaincode + And I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + + # Take down the non-leader peer + When "peer1.org1.example.com" is taken down by doing a + And I wait "5" seconds + + # Now do three invoke-query pairs + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on "peer0.org1.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 980 from "peer0.org1.example.com" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] on "peer0.org1.example.com" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 960 from "peer0.org1.example.com" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] on "peer0.org1.example.com" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 930 from "peer0.org1.example.com" + + # Bring back up the non-leader peer + When "peer1.org1.example.com" comes back up by doing a + And I wait "60" seconds + + # Test with the non-leader peer + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org1.example.com" + Then a user receives a success response of 930 from "peer1.org1.example.com" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","40"] on "peer1.org1.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org1.example.com" + Then a user receives a success response of 890 from "peer1.org1.example.com" + + Examples: + | takeDownType | bringUpType | + | stop | start | + | pause | unpause | + | disconnect | connect | + +@daily +Scenario Outline: [FAB-4683] [FAB-4684] [FAB-4685] In leader-selection setup, leader peer goes down by for at least seconds, comes back up and catches up eventually. + + # Select Peer0 of both org as leader and turn leader election off + Given the CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG1 environment variable is true + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG2 environment variable is true + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG2 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG2 environment variable is false + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG2 environment variable is false + + # Bootstrap the network create channel, deploy chaincode + And I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + + # Take down the leader peer + When "peer0.org2.example.com" is taken down by doing a + And I wait "5" seconds + + # Now do three invoke-query pairs + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] on "peer0.org1.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 970 from "peer0.org1.example.com" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] on "peer0.org1.example.com" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 940 from "peer0.org1.example.com" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","40"] on "peer0.org1.example.com" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 900 from "peer0.org1.example.com" + + When I wait "" seconds + + # Bring back up the leader peer + When "peer0.org2.example.com" comes back up by doing a + And I wait "60" seconds + + # Query the leader peer + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org2.example.com" + Then a user receives a success response of 900 from "peer0.org2.example.com" + + Examples: + | takeDownType | bringUpType | minDownDuration | + | stop | start | 15 | + | pause | unpause | 15 | + | disconnect | connect | 15 | + | stop | start | 90 | + | pause | unpause | 90 | + | disconnect | connect | 90 | + + +@daily + Scenario: [FAB-4666] A non-leader peer, that joins an already-active channel--is expected to have all the blocks eventually. + + Given the FABRIC_LOGGING_SPEC environment variable is gossip=DEBUG + And I have a bootstrapped fabric network of type kafka + When an admin creates a channel + + #Join only three peers + When an admin fetches genesis information using peer "peer0.org1.example.com" + And an admin fetches genesis information using peer "peer0.org2.example.com" + And an admin fetches genesis information using peer "peer1.org1.example.com" + And an admin makes peer "peer0.org1.example.com" join the channel + And an admin makes peer "peer0.org2.example.com" join the channel + And an admin makes peer "peer1.org1.example.com" join the channel + + # the following wait is for Gossip leadership states to be stabilized + And I wait "30" seconds + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + And I wait "5" seconds + ## Now do 3 invoke-queries in leader peer + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 970 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 940 + + #Join the rest of the peers + When an admin fetches genesis information using peer "peer1.org2.example.com" + And an admin makes peer "peer1.org2.example.com" join the channel + + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org2.example.com" + Then a user receives a success response of 940 from "peer1.org2.example.com" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","40"] on "peer1.org2.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org2.example.com" + Then a user receives a success response of 900 from "peer1.org2.example.com" + + +@daily + Scenario: [FAB-4682] In leader-selection, a non-leader peer, that joins an already-active channel--is expected to have all the blocks eventually. + + # Select Peer0 of both org as leader and turn leader election off + Given the CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG1 environment variable is true + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER0_ORG2 environment variable is true + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER0_ORG2 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG1 environment variable is false + And the CORE_PEER_GOSSIP_ORGLEADER_PEER1_ORG2 environment variable is false + And the CORE_PEER_GOSSIP_USELEADERELECTION_PEER1_ORG2 environment variable is false + + And I have a bootstrapped fabric network of type kafka + When an admin creates a channel + + #Join only three peers + When an admin fetches genesis information using peer "peer0.org1.example.com" + And an admin fetches genesis information using peer "peer0.org2.example.com" + And an admin fetches genesis information using peer "peer1.org1.example.com" + And an admin makes peer "peer0.org1.example.com" join the channel + And an admin makes peer "peer0.org2.example.com" join the channel + And an admin makes peer "peer1.org1.example.com" join the channel + + # the following wait is for Gossip leadership states to be stabilized + And I wait "30" seconds + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + And I wait "5" seconds + ## Now do 3 invoke-queries in leader peer + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 970 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 940 + + #Join the rest of the peers + When an admin fetches genesis information using peer "peer1.org2.example.com" + And an admin makes peer "peer1.org2.example.com" join the channel + + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org2.example.com" + Then a user receives a success response of 940 from "peer1.org2.example.com" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","40"] on "peer1.org2.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org2.example.com" + Then a user receives a success response of 900 from "peer1.org2.example.com" diff --git a/app/platform/fabric/e2e-test/feature/ledger.feature b/app/platform/fabric/e2e-test/feature/ledger.feature new file mode 100644 index 000000000..372979119 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/ledger.feature @@ -0,0 +1,240 @@ +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +Feature: Ledger Service + As a user I want to be able to test private chaincode with private data that would not be stored in ledger + + +#This test can be run once following two CRS get merged in master +#1.[FAB-5874] Support for queries over pvtdata +#2.[FAB-5080] Chaincode API Support for PrivateData + +@skip +Scenario Outline: FAB-6036-1: Test marbles02_private initMarble, readMarble, deleteMarble, transferMarble, getMarblesByRange, stateTransfer + Given the FABRIC_LOGGING_SPEC environment variable is gossip.election=DEBUG + And I have a bootstrapped fabric network of type + When an admin deploys chaincode at path "github.com/hyperledger/fabric-test/chaincodes/marbles02_private" with args [""] with name "mycc" + + #comment or remove the following 6 lines once we are in phase2 + Given "peer1.org1.example.com" is taken down + And I wait "10" seconds + Given "peer1.org2.example.com" is taken down + And I wait "10" seconds + Given "peer0.org2.example.com" is taken down + And I wait "10" seconds + + #These two marbles are used for getMarblesByRange + When a user invokes on the chaincode named "mycc" with args ["initMarble","001m1","indigo","35","saleem"] + And I wait "10" seconds + When a user invokes on the chaincode named "mycc" with args ["initMarble","004m4","green","35","dire straits"] + + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble1","red","35","tom"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble1"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble1" + And a user receives a response containing "color":"red" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"tom" + + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble2","blue","55","jerry"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble2"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble2" + And a user receives a response containing "color":"blue" + And a user receives a response containing "size":55 + And a user receives a response containing "owner":"jerry" + + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble111","pink","55","jane"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble111" + And a user receives a response containing "color":"pink" + And a user receives a response containing "size":55 + And a user receives a response containing "owner":"jane" + +#Test transferMarble + When a user invokes on the chaincode named "mycc" with args ["transferMarble","marble1","jerry"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble1"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble1" + And a user receives a response containing "color":"red" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"jerry" + +#delete a marble + When a user invokes on the chaincode named "mycc" with args ["delete","marble2"] + And I wait "10" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble2"] + Then a user receives an error response of status:500 + And a user receives an error response of {"Error":"Marble does not exist: marble2"} + And I wait "3" seconds + +# Begin creating marbles to to test transferMarblesBasedOnColor +# When a user invokes on the chaincode named "mycc" with args ["initMarble","marble100","red","5","cassey"] +# And I wait "3" seconds + +# When a user invokes on the chaincode named "mycc" with args ["initMarble","marble101","blue","6","cassey"] +# And I wait "3" seconds + +# When a user invokes on the chaincode named "mycc" with args ["initMarble","marble200","purple","5","ram"] +# And I wait "3" seconds + +# When a user invokes on the chaincode named "mycc" with args ["initMarble","marble201","blue","6","ram"] +# And I wait "3" seconds + +# When a user invokes on the chaincode named "mycc" with args ["transferMarblesBasedOnColor","blue","jerry"] +# And I wait "3" seconds +# When a user queries on the chaincode named "mycc" with args ["readMarble","marble100"] +# Then a user receives a response containing "docType":"marble" +# And a user receives a response containing "name":"marble100" +# And a user receives a response containing "color":"red" +# And a user receives a response containing "size":5 +# And a user receives a response containing "owner":"cassey" + + +# When a user queries on the chaincode named "mycc" with args ["readMarble","marble101"] +# Then a user receives a response containing "docType":"marble" +# And a user receives a response containing "name":"marble101" +# And a user receives a response containing "color":"blue" +# And a user receives a response containing "size":6 +# And a user receives a response containing "owner":"jerry" + + +# When a user queries on the chaincode named "mycc" with args ["readMarble","marble200"] +# Then a user receives a response containing "docType":"marble" +# And a user receives a response containing "name":"marble200" +# And a user receives a response containing "color":"purple" +# And a user receives a response containing "size":5 +# And a user receives a response containing "owner":"ram" + +# When a user queries on the chaincode named "mycc" with args ["readMarble","marble201"] +# Then a user receives a response containing "docType":"marble" +# And a user receives a response containing "name":"marble201" +# And a user receives a response containing "color":"blue" +# And a user receives a response containing "size":6 +# And a user receives a response containing "owner":"jerry" +# + +# When a user invokes on the chaincode named "mycc" with args ["queryMarblesByOwner","ram"] +# And I wait "3" seconds + +# Then a user receives a response containing "docType":"marble" +# And a user receives a response containing "name":"marble200" +# And a user receives a response containing "color":"purple" +# And a user receives a response containing "size":5 +# And a user receives a response containing "owner":"ram" +# peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesByOwner","tom"]}' +# peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +# state transfer + When a user invokes on the chaincode named "mycc" with args ["transferMarble","marble111","jerry"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble111" + And a user receives a response containing "color":"pink" + And a user receives a response containing "size":55 + And a user receives a response containing "owner":"jerry" + And I wait "10" seconds + + When a user invokes on the chaincode named "mycc" with args ["transferMarble","marble111","tom"] + And I wait "3" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble111" + And a user receives a response containing "color":"pink" + And a user receives a response containing "size":55 + And a user receives a response containing "owner":"tom" + +Given the initial non-leader peer of "org1" comes back up + And I wait "10" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble111"] on the initial non-leader peer of "org1" + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"marble111" + And a user receives a response containing "color":"pink" + And a user receives a response containing "size":55 + And a user receives a response containing "owner":"tom" + +# Test getMarblesByRange + When a user queries on the chaincode named "mycc" with args ["getMarblesByRange","001m1", "005m4"] + And I wait "3" seconds + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"001m1" + And a user receives a response containing "color":"indigo" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"saleem" + + Then a user receives a response containing "docType":"marble" + And a user receives a response containing "name":"004m4" + And a user receives a response containing "color":"green" + And a user receives a response containing "size":35 + And a user receives a response containing "owner":"dire straits" + + Examples: + | type | database | + | kafka | leveldb | + | kafka | couchdb | + | solo | leveldb | + | solo | couchdb | + + +@skip +Scenario Outline: FAB-6036-2: Test marbles02_private : getHistoryForMarble + Given I have a bootstrapped fabric network of type + When an admin deploys chaincode at path "github.com/hyperledger/fabric-test/chaincodes/marbles02_private" with args [""] with name "mycc" + + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble1","red","35","tom"] + And I wait "10" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble1"] + Then a user receives a success response containing "docType":"marble" + And a user receives a success response containing "name":"marble1" + And a user receives a success response containing "color":"red" + And a user receives a success response containing "size":35 + And a user receives a success response containing "owner":"tom" + + + When a user invokes on the chaincode named "mycc" with args ["initMarble","marble201","blue","6","ram"] + And I wait "10" seconds + # Test getHistoryForMarble + When a user queries on the chaincode named "mycc" with args ["getHistoryForMarble","marble1"] + And I wait "10" seconds + Then a user receives a success response containing "TxId" + And a user receives a success response containing "Value":{"docType":"marble","name":"marble1","color":"red","size":35,"owner":"tom"} + And a user receives a success response containing "Timestamp" + And a user receives a success response containing "IsDelete":"false" + + #delete a marble + When a user invokes on the chaincode named "mycc" with args ["delete","marble201"] + And I wait "20" seconds + When a user queries on the chaincode named "mycc" with args ["readMarble","marble201"] + Then a user receives a success response of status:500 with error status + And a user receives a success response of {"Error":"Marble does not exist: marble201"} with error status + And I wait "10" seconds + + + #Test getHistoryForDeletedMarble + When a user queries on the chaincode named "mycc" with args ["getHistoryForMarble","marble201"] + And I wait "10" seconds + Then a user receives a success response containing "TxId" + And a user receives a success response containing "Value":{"docType":"marble","name":"marble201","color":"blue","size":6,"owner":"ram"} + And a user receives a success response containing "Timestamp" + And a user receives a success response containing "IsDelete":"false" + And I wait "10" seconds + Then a user receives a success response containing "TxId" + And a user receives a success response containing "Value":{"docType":"marble","name":"marble201","color":"blue","size":6,"owner":"ram"} + And a user receives a success response containing "Timestamp" + And a user receives a success response containing "IsDelete":"true" + + Examples: + | type | database | + | solo | leveldb | + | solo | couchdb | + | kafka | leveldb | + | kafka | couchdb | diff --git a/app/platform/fabric/e2e-test/feature/orderer.feature b/app/platform/fabric/e2e-test/feature/orderer.feature new file mode 100644 index 000000000..83e2d4bfa --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/orderer.feature @@ -0,0 +1,353 @@ +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +Feature: Orderer Service + As a user I want to be able to have my transactions ordered correctly + +#@doNotDecompose +@skip +Scenario: FAB-1335: Resilient Kafka Orderer and Brokers + Given the KAFKA_DEFAULT_REPLICATION_FACTOR environment variable is 1 + And the CONFIGTX_ORDERER_BATCHSIZE_MAXMESSAGECOUNT environment variable is 10 + And the CONFIGTX_ORDERER_BATCHTIMEOUT environment variable is 10 minutes + And I have a bootstrapped fabric network of type kafka + When 10 unique messages are broadcasted + Then I get 10 successful broadcast responses + #When the topic partition leader is stopped + When I stop the current kafka topic partition leader + And 10 unique messages are broadcasted + Then I get 10 successful broadcast responses + And all 20 messages are delivered in 1 block + +@skip +Scenario: FAB-1306: Adding a new Kafka Broker + Given a kafka cluster + And an orderer connected to the kafka cluster + When a new organization NewOrg certificate is added + Then the NewOrg is able to connect to the kafka cluster + +@skip +Scenario: FAB-1306: Multiple organizations in a kafka cluster, remove 1 + Given a certificate from Org1 is added to the kafka orderer network + And a certificate from Org2 is added to the kafka orderer network + And an orderer connected to the kafka cluster + When authorization for Org2 is removed from the kafka cluster + Then the Org2 cannot connect to the kafka cluster + +@skip +Scenario: FAB-1306: Multiple organizations in a cluster - remove all, reinstate 1. + Given a certificate from Org1 is added to the kafka orderer network + And a certificate from Org2 is added to the kafka orderer network + And a certificate from Org3 is added to the kafka orderer network + And an orderer connected to the kafka cluster + When authorization for Org2 is removed from the kafka cluster + Then the Org2 cannot connect to the kafka cluster + And the orderer functions successfully + When authorization for Org1 is removed from the kafka cluster + Then the Org1 cannot connect to the kafka cluster + And the orderer functions successfully + When authorization for Org3 is removed from the kafka cluster + Then the Org3 cannot connect to the kafka cluster + And the zookeeper notifies the orderer of the disconnect + And the orderer stops sending messages to the cluster + When authorization for Org1 is added to the kafka cluster + And I wait "15" seconds + Then the Org1 is able to connect to the kafka cluster + And the orderer functions successfully + + +@smoke +Scenario: FAB-3852: Message Payloads Less than 1MB, for kafka-based orderer using the NodeJS SDK interface + Given I have a bootstrapped fabric network of type kafka using state-database couchdb with tls + And I use the NodeJS SDK interface + # Following lines are equivaent to "When an admin sets up a channel" + When an admin creates a channel + When an admin fetches genesis information using peer "peer0.org1.example.com" + When an admin makes all peers join the channel + # Following lines are equivalent to "When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args [""]" + When an admin installs chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args [""] on all peers + When an admin instantiates the chaincode on "peer0.org1.example.com" + + # 1K + And a user invokes on the chaincode named "mycc" with random args ["put","a","{random_value}"] of length 1024 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","a"] + Then a user receives a response containing a value of length 1024 + And a user receives a response with the random value + # 64K + When a user invokes on the chaincode named "mycc" with random args ["put","b","{random_value}"] of length 65536 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","b"] + Then a user receives a response containing a value of length 65536 + # + When a user invokes on the chaincode named "mycc" with random args ["put","d","{random_value}"] of length 100000 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","d"] + Then a user receives a response containing a value of length 100000 + # + When a user invokes on the chaincode named "mycc" with random args ["put","g","{random_value}"] of length 130610 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","g"] + Then a user receives a response containing a value of length 130610 + And a user receives a response with the random value + + +@daily +Scenario Outline: FAB-3852: Message Payloads Less than 1MB, for orderer using the interface + Given I have a bootstrapped fabric network of type + And I use the interface + # Following lines are equivaent to "When an admin sets up a channel" + When an admin creates a channel + When an admin fetches genesis information using peer "peer0.org1.example.com" + When an admin makes all peers join the channel + # Following lines are equivalent to "When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args [""]" + When an admin installs chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args [""] on all peers + When an admin instantiates the chaincode on "peer0.org1.example.com" + + # 1K + And a user invokes on the chaincode named "mycc" with random args ["put","a","{random_value}"] of length 1024 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","a"] + Then a user receives a response containing a value of length 1024 + And a user receives a response with the random value + # 64K + When a user invokes on the chaincode named "mycc" with random args ["put","b","{random_value}"] of length 65536 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","b"] + Then a user receives a response containing a value of length 65536 + # + When a user invokes on the chaincode named "mycc" with random args ["put","d","{random_value}"] of length 100000 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","d"] + Then a user receives a response containing a value of length 100000 + # + When a user invokes on the chaincode named "mycc" with random args ["put","g","{random_value}"] of length 130610 + And I wait "3" seconds + And a user queries on the chaincode named "mycc" with args ["get","g"] + Then a user receives a response containing a value of length 130610 + And a user receives a response with the random value +Examples: + | type | interface | + | solo | CLI | + | kafka | CLI | + | solo | NodeJS SDK | + | kafka | NodeJS SDK | + + +@daily +Scenario Outline: FAB-3851: Message Payloads of size , for orderer + Given I have a bootstrapped fabric network of type using state-database couchdb + And I use the NodeJS SDK interface + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args [""] + + When a user invokes on the chaincode named "mycc" with random args ["put","g","{random_value}"] of length + And I wait "7" seconds + And a user queries on the chaincode named "mycc" with args ["get","g"] + Then a user receives a response containing a value of length + And a user receives a response with the random value + + When a user invokes on the chaincode named "mycc" with random args ["put","g","{random_value}"] of length + And I wait "7" seconds + And a user queries on the chaincode named "mycc" with args ["get","g"] + Then a user receives a response containing a value of length + And a user receives a response with the random value +Examples: + | type | size | comment | + | solo | 1048576 | 1MB | + | solo | 2097152 | 2MB | + | solo | 4194304 | 4MB | + | kafka | 125000 | 125KB (with default msg size) | + | kafka | 320000 | 320KB (with default msg size) | + | kafka | 490000 | 490KB (with default msg size) | + #| kafka | 1000012 | 1MB | + + +@daily +Scenario Outline: FAB-3859: Kafka Network with Large Message Size with Configuration Tweaks + Given the ORDERER_ABSOLUTEMAXBYTES environment variable is + And the ORDERER_PREFERREDMAXBYTES environment variable is + And the KAFKA_MESSAGE_MAX_BYTES environment variable is + And the KAFKA_REPLICA_FETCH_MAX_BYTES environment variable is + And the KAFKA_REPLICA_FETCH_RESPONSE_MAX_BYTES environment variable is + Given I have a bootstrapped fabric network of type kafka + And I use the NodeJS SDK interface + When an admin sets up a channel named "configsz" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args ["init"] with name "mapIt" on channel "configsz" + + When a user invokes on the channel "configsz" using chaincode named "mapIt" with random args ["put","g","{random_value}"] of length + And I wait "10" seconds + And a user queries on the channel "configsz" using chaincode named "mapIt" for the random key with args ["get","g"] on "peer0.org1.example.com" + Then a user receives a response containing a value of length + And a user receives a response with the random value +Examples: + | absoluteMaxBytes | preferredMaxBytes | messageMaxBytes | replicaFetchMaxBytes | replicaFetchResponseMaxBytes | size | comment | + | 20 MB | 2 MB | 4 MB | 2 MB | 20 MB | 1048576 | 1MB | + | 1 MB | 1 MB | 4 MB | 2 MB | 10 MB | 1048576 | 1MB | + | 1 MB | 1 MB | 4 MB | 1.5 MB | 10 MB | 1048576 | 1MB | + | 4 MB | 4 MB | 4 MB | 4 MB | 10 MB | 1048576 | 1MB | + | 8 MB | 8 MB | 8 MB | 8 MB | 10 MB | 2097152 | 2MB | + | 16 MB | 16 MB | 16 MB | 16 MB | 20 MB | 4194304 | 4MB | + | 11 MB | 2 MB | 22 MB | 11 MB | 20 MB | 10485760 | 10MB | + +@daily +Scenario Outline: FAB-3857: key/value pairs in Payloads of size + Given I have a bootstrapped fabric network of type kafka using state-database couchdb + And I use the NodeJS SDK interface + When an admin sets up a channel + When an admin deploys chaincode at path "github.com/hyperledger/fabric-test/chaincodes/mapkeys/go" with args [""] + + When a user invokes on the chaincode named "mycc" with args ["put","c","3F","d","76D"] + When I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["get","c"] + Then a user receives a success response of 3F + When a user queries on the chaincode named "mycc" with args ["get","d"] + Then a user receives a success response of 76D + + When a user invokes args with random key/values of length on the chaincode named "mycc" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with dynamic args ["get","{last_key}"] on "peer0.org1.example.com" + Then a user receives a response containing a value of length + And a user receives a response with the random value +Examples: + | size | count | comment | + #| 2048 | 20 | caused IOError: resource temporarily unavailable | + | 512 | 10 | | + #| 256 | 1024 | caused IOError: resource temporarily unavailable | + | 64 | 256 | | + + +#@daily +Scenario: FAB-4686: Test taking down all kafka brokers and bringing back last 3 + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "10" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + + When "kafka0" is taken down + And I wait "5" seconds + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + When a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 980 + + When "kafka1" is taken down + And "kafka2" is taken down + And "kafka3" is taken down + And I wait "5" seconds + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "10" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 980 + And I wait "5" seconds + + When "kafka3" comes back up + And I wait "60" seconds + And "kafka2" comes back up + And I wait "60" seconds + And "kafka1" comes back up + And I wait "90" seconds + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "10" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 970 + + +# skip FAB-4770 until FAB-6335 gets fixed so that we reliably stop the correct kafkabroker +@skip +@daily +Scenario Outline: [FAB-4770] [FAB-4845]: all kafka brokers in the RF set, and in LIFO order + # By default, the number of kafka brokers in the RF set is 3(KAFKA_DEFAULT_REPLICATION_FACTOR), + # and the min ISR is 2(KAFKA_MIN_INSYNC_REPLICAS) + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + + When I the current kafka topic partition leader + And I wait "60" seconds + Then the broker is reported as down + And ensure kafka ISR set contains 2 brokers + #new leader is elected + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 980 + + When I the current kafka topic partition leader + And I wait "65" seconds + Then the broker is reported as down + And ensure kafka ISR set contains 1 brokers + And I wait "10" seconds + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "60" seconds + # Do not do this service_unavailable check, to see query value returned for an error + #Then a user receives an error response of SERVICE_UNAVAILABLE + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 980 + + When I the current kafka topic partition leader + And I wait "60" seconds + #Then the broker is reported as down + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "10" seconds + Then a user receives an error response of SERVICE_UNAVAILABLE + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 980 + + # Stopping Queue: Last In First Out + When I a former kafka topic partition leader + And I wait "60" seconds + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "10" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 980 + + When I a former kafka topic partition leader + And I wait "60" seconds + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "10" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 970 + + When I a former kafka topic partition leader + And I wait "60" seconds + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "10" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 960 + Examples: + | takeDownType | bringUpType | + | stop | start | + | pause | unpause | + | disconnect | connect | + +@daily +Scenario Outline: FAB-4808,FAB-3937,FAB-3938: Orderer_BatchTimeOut is honored, for orderer + Given the CONFIGTX_ORDERER_BATCHTIMEOUT environment variable is + And I have a bootstrapped fabric network of type + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of + And I wait "16" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of +Examples: + | type | envValue | firstQuery | lastQuery | + | solo | 2 seconds | 990 | 990 | + | kafka | 2 seconds | 990 | 990 | + | solo | 20 seconds | 1000 | 990 | + | kafka | 20 seconds | 1000 | 990 | diff --git a/app/platform/fabric/e2e-test/feature/package.json b/app/platform/fabric/e2e-test/feature/package.json new file mode 100644 index 000000000..2771338e2 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/package.json @@ -0,0 +1,25 @@ +{ + "name": "Integration", + "version": "1.2.0", + "description": "Behave Node.js SDK Integration", + "keywords": [ + "Behave node-sdk integration", + "Call node-sdk apis from behave" + ], + "engines": { + "node": ">=8.9.4 <9.0", + "npm": ">=5.6.0 <6.0" + }, + "license": "Apache-2.0", + "dependencies": { + "fabric-ca-client": "unstable-1.4", + "fabric-client": "unstable-1.4", + "fabric-network": "unstable-1.4", + "fs-extra": "^2.0.0", + "log4js": "^0.6.38" + }, + "devDependencies": { + "make-runnable": "^1.3.6", + "sync-dir": "^1.5.1" + } +} diff --git a/app/platform/fabric/e2e-test/feature/peer.feature b/app/platform/fabric/e2e-test/feature/peer.feature new file mode 100644 index 000000000..b01eceb43 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer.feature @@ -0,0 +1,398 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + + +Feature: Peer Service + As a user I want to be able have channels and chaincodes to execute + +#@doNotDecompose +@daily +Scenario Outline: FAB-3505: Test chaincode example02 deploy, invoke, and query, with orderer + Given I have a bootstrapped fabric network of type + And I use the interface + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + When "peer0.org2.example.com" is taken down + And a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And "peer0.org2.example.com" comes back up + And I wait "10" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org2.example.com" + Then a user receives a success response of 980 from "peer0.org2.example.com" +Examples: + | type | security | interface | + | solo | without tls | NodeJS SDK | + | kafka | with tls | NodeJS SDK | + | solo | without tls | CLI | + | kafka | with tls | CLI | + + +@daily +Scenario Outline: FAB-1440, FAB-3861: Basic Chaincode Execution - orderer type, using , + Given I have a bootstrapped fabric network of type using state-database + When an admin sets up a channel + And an admin deploys chaincode + When a user queries on the chaincode + Then a user receives a success response of 100 + When a user invokes on the chaincode + And I wait "5" seconds + And a user queries on the chaincode + Then a user receives a success response of 95 +Examples: + | type | database | security | + | solo | leveldb | with tls | + | solo | leveldb | without tls | + | solo | couchdb | with tls | + | solo | couchdb | without tls | + | kafka | leveldb | with tls | + | kafka | leveldb | without tls | + | kafka | couchdb | with tls | + | kafka | couchdb | without tls | + + +@daily +Scenario Outline: FAB-3865: Multiple Channels Per Peer, with orderer + Given I have a bootstrapped fabric network of type + When an admin sets up a channel named "chn1" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init", "a", "1000" , "b", "2000"] with name "cc1" on channel "chn1" + When an admin sets up a channel named "chn2" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args ["init"] with name "cc2" on channel "chn2" + When a user invokes on the channel "chn2" using chaincode named "cc2" with args ["put", "a", "1000"] + And I wait "5" seconds + And a user queries on the channel "chn2" using chaincode named "cc2" with args ["get", "a"] + # the "map" chaincode adds quotes around the result + Then a user receives a success response of "1000" + When a user invokes on the channel "chn2" using chaincode named "cc2" with args ["put", "b", "2000"] + And I wait "5" seconds + And a user queries on the channel "chn2" using chaincode named "cc2" with args ["get", "b"] + # the "map" chaincode adds quotes around the result + Then a user receives a success response of "2000" + When a user invokes on the channel "chn1" using chaincode named "cc1" with args ["invoke", "a", "b", "10"] + And I wait "5" seconds + And a user queries on the channel "chn1" using chaincode named "cc1" with args ["query", "a"] + Then a user receives a success response of 990 + When a user queries on the channel "chn2" using chaincode named "cc2" with args ["get", "a"] + # the "map" chaincode adds quotes around the result + Then a user receives a success response of "1000" +Examples: + | type | + | solo | + | kafka | + + +@daily +Scenario Outline: FAB-3866: Multiple Chaincodes Per Peer, with orderer + Given I have a bootstrapped fabric network of type + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/eventsender" with args [] with name "eventsender" + When a user invokes on the chaincode named "eventsender" with args ["invoke", "test_event"] + And I wait "5" seconds + And a user queries on the chaincode named "eventsender" with args ["query"] + Then a user receives a success response of {"NoEvents":"1"} + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init", "a", "1000" , "b", "2000"] with name "example02" + When a user invokes on the chaincode named "example02" with args ["invoke", "a", "b", "10"] + And I wait "5" seconds + And a user queries on the chaincode named "example02" with args ["query", "a"] + Then a user receives a success response of 990 + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args ["init"] with name "map" + When a user invokes on the chaincode named "map" with args ["put", "a", "1000"] + And I wait "5" seconds + And a user queries on the chaincode named "map" with args ["get", "a"] + # the "map" chaincode adds quotes around the result + Then a user receives a success response of "1000" + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/marbles02" with args [] with name "marbles" + When a user invokes on the chaincode named "marbles" with args ["initMarble", "marble1", "blue", "35", "tom"] + And I wait "5" seconds + And a user invokes on the chaincode named "marbles" with args ["transferMarble", "marble1", "jerry"] + And I wait "5" seconds + And a user queries on the chaincode named "marbles" with args ["readMarble", "marble1"] + Then a user receives a success response of {"docType":"marble","name":"marble1","color":"blue","size":35,"owner":"jerry"} + When an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/sleeper" with args ["1"] with name "sleeper" + When a user invokes on the chaincode named "sleeper" with args ["put", "a", "1000", "1"] + And I wait "5" seconds + And a user queries on the chaincode named "sleeper" with args ["get", "a", "1"] + Then a user receives a success response of 1000 +Examples: + | type | + | solo | + | kafka | + +Scenario: FAB-6333: A peer with chaincode container disconnects, comes back up, is able to resume regular operation + Given I have a bootstrapped fabric network of type solo + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + And I wait "10" seconds + + # do 1 set of invoke-query on peer1.org1 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on "peer1.org1.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org1.example.com" + Then a user receives a success response of 990 from "peer1.org1.example.com" + + ## Now disconnect a peer + When "peer1.org1.example.com" is taken down by doing a disconnect + And I wait "15" seconds + + # do 2 set of invoke-query on peer0.org1 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","20"] on "peer0.org1.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 970 from "peer0.org1.example.com" + + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","30"] on "peer0.org1.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 940 from "peer0.org1.example.com" + + #bring back up the disconnected peer + When "peer1.org1.example.com" comes back up by doing a connect + And I wait "30" seconds + + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org1.example.com" + Then a user receives a success response of 940 from "peer1.org1.example.com" + + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","40"] on "peer1.org1.example.com" + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer1.org1.example.com" + Then a user receives a success response of 900 from "peer1.org1.example.com" + + +@daily +Scenario Outline: FAB-7150/FAB-7153/FAB-7759: Test Mutual TLS/ClientAuth with based-orderer using interface + Given the CORE_PEER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + And the ORDERER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + And I have a bootstrapped fabric network of type + And I use the interface + When an admin sets up a channel + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init","a","1000","b","2000"] with name "mycc" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + + When "peer0.org2.example.com" is taken down + And a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + And "peer0.org2.example.com" comes back up + And I wait "10" seconds + And a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org2.example.com" + Then a user receives a success response of 980 from "peer0.org2.example.com" + + When an admin queries for the first block + Then an admin receives a response containing org1.example.com + Then an admin receives a response containing org2.example.com + Then an admin receives a response containing example.com + Then an admin receives a response containing CERTIFICATE +Examples: + | type | security | interface | + | kafka | with tls | NodeJS SDK | + | solo | with tls | NodeJS SDK | + | kafka | with tls | CLI | + | solo | with tls | CLI | + | kafka | without tls | CLI | + | solo | without tls | NodeJS SDK | + +@daily +Scenario: FAB-3855: Empty Payload Messages + Given I have a bootstrapped fabric network of type kafka + When an admin sets up a channel named "emptiness" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args ["init"] with name "empty" on channel "emptiness" + When a user invokes on the channel "emptiness" using chaincode named "empty" with args ["put", "a", ""] + And I wait "5" seconds + And a user queries on the channel "emptiness" using chaincode named "empty" with args ["get", "a"] + # the "map" chaincode adds quotes around the result + Then a user receives a success response of "" + + +@daily +Scenario: FAB-8379: Test MSP Identity - Happy Path + Given I have a bootstrapped fabric network of type kafka with tls with organizational units enabled on all nodes + When an admin sets up a channel + And an admin deploys chaincode with args ["init","a","1000","b","2000"] with policy "OR ('org1.example.com.member','org2.example.com.member')" + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 1000 + # Endorsement policies not enforced during initialization + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 990 + + +@daily +Scenario: FAB-8380: Test MSP Identity - Malicious Peer + Given the CORE_PEER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + And the ORDERER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + Given the peer "peer1.org2.example.com" is setup to use a client identity + And I have a bootstrapped fabric network of type kafka with tls with organizational units enabled on all nodes + When an admin sets up a channel + + And an admin deploys chaincode with args ["init","a","1000","b","2000"] with policy "OR ('org1.example.com.peer','org2.example.com.peer')" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on "peer1.org2.example.com" + Then the logs on peer1.org2.example.com contains "VSCCValidateTx for transaction txId " within 10 seconds + And the logs on peer1.org2.example.com contains "returned error: validation of endorsement policy for chaincode mycc in tx 2:0 failed: signature set did not satisfy policy" within 10 seconds + And I wait "2" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 1000 + + +@daily +Scenario: FAB-8381: Test MSP Identity - Malicious Peer (Clients set as writers in policy) + Given the CORE_PEER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + And the ORDERER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + And I have a bootstrapped fabric network of type kafka with tls with organizational units enabled on all nodes + When an admin sets up a channel + And an admin deploys chaincode with args ["init","a","1000","b","2000"] with policy "OR ('org1.example.com.client','org2.example.com.client')" + + When the admin changes the policy to "OR ('org1.example.com.client','org2.example.com.client')" + And I wait "5" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org2.example.com" + Then a user receives a success response of 1000 from "peer0.org2.example.com" + When a user queries on the chaincode named "mycc" with args ["query","a"] + Then a user receives a success response of 1000 + + When a user using a peer identity invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] + Then the logs on peer0.org2.example.com contains "VSCCValidateTx for transaction txId " within 10 seconds + And the logs on peer0.org2.example.com contains "returned error: validation of endorsement policy for chaincode mycc in tx 2:0 failed: signature set did not satisfy policy" within 10 seconds + And I wait "2" seconds + + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 1000 + + +@daily +Scenario: FAB-8382: Test MSP Identity with inconsistencies + Given the CORE_PEER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + And the ORDERER_TLS_CLIENTAUTHREQUIRED environment variable is "true" + And I have a bootstrapped fabric network of type kafka with tls with organizational units enabled on all Org1ExampleCom nodes + When an admin sets up a channel + And an admin deploys chaincode with args ["init","a","1000","b","2000"] with policy "OR ('org1.example.com.peer','org2.example.com.peer')" + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 1000 + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org2.example.com" + Then a user receives a success response of 1000 from "peer0.org2.example.com" + + When a user invokes on the chaincode named "mycc" with args ["invoke","a","b","10"] on "peer0.org2.example.com" + Then the logs on peer0.org2.example.com contains "VSCCValidateTx for transaction txId " within 10 seconds + And the logs on peer0.org2.example.com contains "returned error: validation of endorsement policy for chaincode mycc in tx 2:0 failed: signature set did not satisfy policy" within 10 seconds + And I wait "2" seconds + When a user queries on the chaincode named "mycc" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 1000 + +@daily +Scenario: FAB-8759: Test querying a peer with two different versions of chaincode - values change + Given I have a bootstrapped fabric network of type kafka with tls + When an admin sets up a channel named "versioningtest" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" with args ["init", "a", "1000" , "b", "2000"] with name "vt" on channel "versioningtest" + When a user queries on the channel "versioningtest" using chaincode named "vt" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 1000 + When a user invokes on the channel "versioningtest" using chaincode named "vt" with args ["invoke","a","b","10"] on "peer0.org2.example.com" + And I wait "5" seconds + When a user queries on the channel "versioningtest" using chaincode named "vt" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 990 + + When an admin installs chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" as version "3" with args ["init","a","1000","b","2000"] with name "vt" on all peers + And I wait "5" seconds + When an admin upgrades the chaincode with name "vt" on channel "versioningtest" to version "3" on peer "peer0.org1.example.com" with args ["init","a","1000","b","2000"] + #When an admin upgrades the chaincode on channel "versioningtest" to version "3" on peer "peer0.org1.example.com" + When a user queries on version "3" of the channel "versioningtest" using chaincode named "vt" with args ["query","a"] on "peer0.org1.example.com" + Then a user receives a success response of 1000 + When a user queries on version "0" of the channel "versioningtest" using chaincode named "vt" with args ["query","a"] on "peer0.org2.example.com" + Then a user receives a success response of 1000 from "peer0.org2.example.com" + + +@daily +Scenario: FAB-8759: Test querying a peer that has two different versions of chaincode - no change in data + Given I have a bootstrapped fabric network of type kafka with tls + When an admin sets up a channel named "versioningtest" + And an admin deploys chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" with args ["init"] with name "vt" on channel "versioningtest" + When a user invokes on the channel "versioningtest" using chaincode named "vt" with args ["put","a","1000"] on "peer0.org2.example.com" + When a user invokes on the channel "versioningtest" using chaincode named "vt" with args ["put","b","2000"] on "peer0.org1.example.com" + When a user invokes on the channel "versioningtest" using chaincode named "vt" with args ["put","c","3000"] on "peer1.org1.example.com" + And I wait "5" seconds + When a user queries on the channel "versioningtest" using chaincode named "vt" with args ["get","a"] on "peer1.org2.example.com" + Then a user receives a success response of "1000" from "peer1.org2.example.com" + When a user queries on the channel "versioningtest" using chaincode named "vt" with args ["get","c"] on "peer1.org2.example.com" + Then a user receives a success response of "3000" from "peer1.org2.example.com" + + When an admin installs chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/map" as version "4" with args ["init"] with name "vt" on all peers + And I wait "5" seconds + When an admin upgrades the chaincode with name "vt" on channel "versioningtest" to version "4" on peer "peer0.org1.example.com" with args ["init"] + When a user queries on version "4" of the channel "versioningtest" using chaincode named "vt" with args ["get","a"] on "peer0.org1.example.com" + Then a user receives a success response of "1000" + When a user queries on version "0" of the channel "versioningtest" using chaincode named "vt" with args ["get","c"] on "peer0.org2.example.com" + Then a user receives a success response of "3000" from "peer0.org2.example.com" + +@daily +Scenario: FAB-7407: Update the channel policies - add an organization + Given I have a bootstrapped fabric network of type solo with tls + When an admin sets up a channel + And an admin deploys chaincode with args ["init","a","1000","b","2000"] + When a user invokes on the chaincode with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 990 + + When an admin adds an organization to the channel config + # Assume channel config file is distributed out of band + And all organization admins sign the updated channel config + When the admin updates the channel using peer "peer0.org1.example.com" + + When an admin fetches genesis information using peer "peer0.org1.example.com" + Then the config block file is fetched from peer "peer0.org1.example.com" + Then the updated config block contains Org3ExampleCom + + When a user invokes on the chaincode with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 980 + + When the peers from the added organization are added to the network + + When an admin fetches genesis information at block 0 using peer "peer0.org3.example.com" + When an admin makes peer "peer0.org3.example.com" join the channel + And an admin makes peer "peer1.org3.example.com" join the channel + When an admin installs chaincode at path "github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd" as version "2" with args ["init","a","1000","b","2000"] on all peers + And I wait "5" seconds + When an admin upgrades the chaincode to version "2" on peer "peer0.org1.example.com" with args ["init","a","1000","b","2000"] + + When a user queries on the chaincode with args ["query","a"] from "peer0.org3.example.com" + Then a user receives a success response of 1000 from "peer0.org3.example.com" + + When a user invokes on the chaincode with args ["invoke","a","b","10"] on "peer0.org2.example.com" + And I wait "5" seconds + When a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 990 + When a user invokes on the chaincode with args ["invoke","a","b","10"] on "peer1.org3.example.com" + And I wait "5" seconds + When a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 980 + + When an admin fetches genesis information using peer "peer0.org1.example.com" + Then the config block file is fetched from peer "peer0.org1.example.com" + When an admin removes an organization named Org2ExampleCom from the channel config + And all organization admins sign the updated channel config + When the admin updates the channel using peer "peer0.org1.example.com" + + When an admin fetches genesis information using peer "peer0.org1.example.com" + Then the config block file is fetched from peer "peer0.org1.example.com" + Then the updated config block does not contain Org2ExampleCom + + When a user invokes on the chaincode with args ["invoke","a","b","10"] + And I wait "5" seconds + When a user queries on the chaincode with args ["query","a"] + Then a user receives a success response of 970 + When a user queries on the chaincode with args ["query","a"] from "peer0.org2.example.com" + Then a user receives a success response of 980 from "peer0.org2.example.com" diff --git a/app/platform/fabric/e2e-test/feature/peer/__init__.py b/app/platform/fabric/e2e-test/feature/peer/__init__.py new file mode 100644 index 000000000..49cd7f3ac --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/__init__.py @@ -0,0 +1,5 @@ +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# diff --git a/app/platform/fabric/e2e-test/feature/peer/admin_pb2.py b/app/platform/fabric/e2e-test/feature/peer/admin_pb2.py new file mode 100644 index 000000000..597c6be83 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/admin_pb2.py @@ -0,0 +1,429 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/admin.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/admin.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x10peer/admin.proto\x12\x06protos\x1a\x1bgoogle/protobuf/empty.proto\"\x9a\x01\n\x0cServerStatus\x12/\n\x06status\x18\x01 \x01(\x0e\x32\x1f.protos.ServerStatus.StatusCode\"Y\n\nStatusCode\x12\r\n\tUNDEFINED\x10\x00\x12\x0b\n\x07STARTED\x10\x01\x12\x0b\n\x07STOPPED\x10\x02\x12\n\n\x06PAUSED\x10\x03\x12\t\n\x05\x45RROR\x10\x04\x12\x0b\n\x07UNKNOWN\x10\x05\"8\n\x0fLogLevelRequest\x12\x12\n\nlog_module\x18\x01 \x01(\t\x12\x11\n\tlog_level\x18\x02 \x01(\t\"9\n\x10LogLevelResponse\x12\x12\n\nlog_module\x18\x01 \x01(\t\x12\x11\n\tlog_level\x18\x02 \x01(\t2\xd5\x02\n\x05\x41\x64min\x12;\n\tGetStatus\x12\x16.google.protobuf.Empty\x1a\x14.protos.ServerStatus\"\x00\x12=\n\x0bStartServer\x12\x16.google.protobuf.Empty\x1a\x14.protos.ServerStatus\"\x00\x12<\n\nStopServer\x12\x16.google.protobuf.Empty\x1a\x14.protos.ServerStatus\"\x00\x12H\n\x11GetModuleLogLevel\x12\x17.protos.LogLevelRequest\x1a\x18.protos.LogLevelResponse\"\x00\x12H\n\x11SetModuleLogLevel\x12\x17.protos.LogLevelRequest\x1a\x18.protos.LogLevelResponse\"\x00\x42]\n\"org.hyperledger.fabric.protos.peerB\x0c\x41\x64minPackageZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + +_SERVERSTATUS_STATUSCODE = _descriptor.EnumDescriptor( + name='StatusCode', + full_name='protos.ServerStatus.StatusCode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UNDEFINED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='STARTED', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='STOPPED', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PAUSED', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERROR', index=4, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UNKNOWN', index=5, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=123, + serialized_end=212, +) +_sym_db.RegisterEnumDescriptor(_SERVERSTATUS_STATUSCODE) + + +_SERVERSTATUS = _descriptor.Descriptor( + name='ServerStatus', + full_name='protos.ServerStatus', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='protos.ServerStatus.status', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SERVERSTATUS_STATUSCODE, + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=58, + serialized_end=212, +) + + +_LOGLEVELREQUEST = _descriptor.Descriptor( + name='LogLevelRequest', + full_name='protos.LogLevelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='log_module', full_name='protos.LogLevelRequest.log_module', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='log_level', full_name='protos.LogLevelRequest.log_level', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=214, + serialized_end=270, +) + + +_LOGLEVELRESPONSE = _descriptor.Descriptor( + name='LogLevelResponse', + full_name='protos.LogLevelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='log_module', full_name='protos.LogLevelResponse.log_module', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='log_level', full_name='protos.LogLevelResponse.log_level', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=272, + serialized_end=329, +) + +_SERVERSTATUS.fields_by_name['status'].enum_type = _SERVERSTATUS_STATUSCODE +_SERVERSTATUS_STATUSCODE.containing_type = _SERVERSTATUS +DESCRIPTOR.message_types_by_name['ServerStatus'] = _SERVERSTATUS +DESCRIPTOR.message_types_by_name['LogLevelRequest'] = _LOGLEVELREQUEST +DESCRIPTOR.message_types_by_name['LogLevelResponse'] = _LOGLEVELRESPONSE + +ServerStatus = _reflection.GeneratedProtocolMessageType('ServerStatus', (_message.Message,), dict( + DESCRIPTOR = _SERVERSTATUS, + __module__ = 'peer.admin_pb2' + # @@protoc_insertion_point(class_scope:protos.ServerStatus) + )) +_sym_db.RegisterMessage(ServerStatus) + +LogLevelRequest = _reflection.GeneratedProtocolMessageType('LogLevelRequest', (_message.Message,), dict( + DESCRIPTOR = _LOGLEVELREQUEST, + __module__ = 'peer.admin_pb2' + # @@protoc_insertion_point(class_scope:protos.LogLevelRequest) + )) +_sym_db.RegisterMessage(LogLevelRequest) + +LogLevelResponse = _reflection.GeneratedProtocolMessageType('LogLevelResponse', (_message.Message,), dict( + DESCRIPTOR = _LOGLEVELRESPONSE, + __module__ = 'peer.admin_pb2' + # @@protoc_insertion_point(class_scope:protos.LogLevelResponse) + )) +_sym_db.RegisterMessage(LogLevelResponse) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerB\014AdminPackageZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + + + class AdminStub(object): + """Interface exported by the server. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetStatus = channel.unary_unary( + '/protos.Admin/GetStatus', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=ServerStatus.FromString, + ) + self.StartServer = channel.unary_unary( + '/protos.Admin/StartServer', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=ServerStatus.FromString, + ) + self.StopServer = channel.unary_unary( + '/protos.Admin/StopServer', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=ServerStatus.FromString, + ) + self.GetModuleLogLevel = channel.unary_unary( + '/protos.Admin/GetModuleLogLevel', + request_serializer=LogLevelRequest.SerializeToString, + response_deserializer=LogLevelResponse.FromString, + ) + self.SetModuleLogLevel = channel.unary_unary( + '/protos.Admin/SetModuleLogLevel', + request_serializer=LogLevelRequest.SerializeToString, + response_deserializer=LogLevelResponse.FromString, + ) + + + class AdminServicer(object): + """Interface exported by the server. + """ + + def GetStatus(self, request, context): + """Return the serve status. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def StartServer(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def StopServer(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetModuleLogLevel(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetModuleLogLevel(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + + def add_AdminServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetStatus': grpc.unary_unary_rpc_method_handler( + servicer.GetStatus, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=ServerStatus.SerializeToString, + ), + 'StartServer': grpc.unary_unary_rpc_method_handler( + servicer.StartServer, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=ServerStatus.SerializeToString, + ), + 'StopServer': grpc.unary_unary_rpc_method_handler( + servicer.StopServer, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=ServerStatus.SerializeToString, + ), + 'GetModuleLogLevel': grpc.unary_unary_rpc_method_handler( + servicer.GetModuleLogLevel, + request_deserializer=LogLevelRequest.FromString, + response_serializer=LogLevelResponse.SerializeToString, + ), + 'SetModuleLogLevel': grpc.unary_unary_rpc_method_handler( + servicer.SetModuleLogLevel, + request_deserializer=LogLevelRequest.FromString, + response_serializer=LogLevelResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.Admin', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + class BetaAdminServicer(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Interface exported by the server. + """ + def GetStatus(self, request, context): + """Return the serve status. + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def StartServer(self, request, context): + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def StopServer(self, request, context): + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def GetModuleLogLevel(self, request, context): + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + def SetModuleLogLevel(self, request, context): + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + + + class BetaAdminStub(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Interface exported by the server. + """ + def GetStatus(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + """Return the serve status. + """ + raise NotImplementedError() + GetStatus.future = None + def StartServer(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + raise NotImplementedError() + StartServer.future = None + def StopServer(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + raise NotImplementedError() + StopServer.future = None + def GetModuleLogLevel(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + raise NotImplementedError() + GetModuleLogLevel.future = None + def SetModuleLogLevel(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + raise NotImplementedError() + SetModuleLogLevel.future = None + + + def beta_create_Admin_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_deserializers = { + ('protos.Admin', 'GetModuleLogLevel'): LogLevelRequest.FromString, + ('protos.Admin', 'GetStatus'): google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ('protos.Admin', 'SetModuleLogLevel'): LogLevelRequest.FromString, + ('protos.Admin', 'StartServer'): google_dot_protobuf_dot_empty__pb2.Empty.FromString, + ('protos.Admin', 'StopServer'): google_dot_protobuf_dot_empty__pb2.Empty.FromString, + } + response_serializers = { + ('protos.Admin', 'GetModuleLogLevel'): LogLevelResponse.SerializeToString, + ('protos.Admin', 'GetStatus'): ServerStatus.SerializeToString, + ('protos.Admin', 'SetModuleLogLevel'): LogLevelResponse.SerializeToString, + ('protos.Admin', 'StartServer'): ServerStatus.SerializeToString, + ('protos.Admin', 'StopServer'): ServerStatus.SerializeToString, + } + method_implementations = { + ('protos.Admin', 'GetModuleLogLevel'): face_utilities.unary_unary_inline(servicer.GetModuleLogLevel), + ('protos.Admin', 'GetStatus'): face_utilities.unary_unary_inline(servicer.GetStatus), + ('protos.Admin', 'SetModuleLogLevel'): face_utilities.unary_unary_inline(servicer.SetModuleLogLevel), + ('protos.Admin', 'StartServer'): face_utilities.unary_unary_inline(servicer.StartServer), + ('protos.Admin', 'StopServer'): face_utilities.unary_unary_inline(servicer.StopServer), + } + server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) + return beta_implementations.server(method_implementations, options=server_options) + + + def beta_create_Admin_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_serializers = { + ('protos.Admin', 'GetModuleLogLevel'): LogLevelRequest.SerializeToString, + ('protos.Admin', 'GetStatus'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ('protos.Admin', 'SetModuleLogLevel'): LogLevelRequest.SerializeToString, + ('protos.Admin', 'StartServer'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ('protos.Admin', 'StopServer'): google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + } + response_deserializers = { + ('protos.Admin', 'GetModuleLogLevel'): LogLevelResponse.FromString, + ('protos.Admin', 'GetStatus'): ServerStatus.FromString, + ('protos.Admin', 'SetModuleLogLevel'): LogLevelResponse.FromString, + ('protos.Admin', 'StartServer'): ServerStatus.FromString, + ('protos.Admin', 'StopServer'): ServerStatus.FromString, + } + cardinalities = { + 'GetModuleLogLevel': cardinality.Cardinality.UNARY_UNARY, + 'GetStatus': cardinality.Cardinality.UNARY_UNARY, + 'SetModuleLogLevel': cardinality.Cardinality.UNARY_UNARY, + 'StartServer': cardinality.Cardinality.UNARY_UNARY, + 'StopServer': cardinality.Cardinality.UNARY_UNARY, + } + stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) + return beta_implementations.dynamic_stub(channel, 'protos.Admin', cardinalities, options=stub_options) +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/admin_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/admin_pb2_grpc.py new file mode 100644 index 000000000..0114d9a48 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/admin_pb2_grpc.py @@ -0,0 +1,109 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + +import google.protobuf.empty_pb2 as google_dot_protobuf_dot_empty__pb2 +import peer.admin_pb2 as peer_dot_admin__pb2 + + +class AdminStub(object): + """Interface exported by the server. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetStatus = channel.unary_unary( + '/protos.Admin/GetStatus', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=peer_dot_admin__pb2.ServerStatus.FromString, + ) + self.StartServer = channel.unary_unary( + '/protos.Admin/StartServer', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=peer_dot_admin__pb2.ServerStatus.FromString, + ) + self.StopServer = channel.unary_unary( + '/protos.Admin/StopServer', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=peer_dot_admin__pb2.ServerStatus.FromString, + ) + self.GetModuleLogLevel = channel.unary_unary( + '/protos.Admin/GetModuleLogLevel', + request_serializer=peer_dot_admin__pb2.LogLevelRequest.SerializeToString, + response_deserializer=peer_dot_admin__pb2.LogLevelResponse.FromString, + ) + self.SetModuleLogLevel = channel.unary_unary( + '/protos.Admin/SetModuleLogLevel', + request_serializer=peer_dot_admin__pb2.LogLevelRequest.SerializeToString, + response_deserializer=peer_dot_admin__pb2.LogLevelResponse.FromString, + ) + + +class AdminServicer(object): + """Interface exported by the server. + """ + + def GetStatus(self, request, context): + """Return the serve status. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def StartServer(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def StopServer(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetModuleLogLevel(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SetModuleLogLevel(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_AdminServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetStatus': grpc.unary_unary_rpc_method_handler( + servicer.GetStatus, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=peer_dot_admin__pb2.ServerStatus.SerializeToString, + ), + 'StartServer': grpc.unary_unary_rpc_method_handler( + servicer.StartServer, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=peer_dot_admin__pb2.ServerStatus.SerializeToString, + ), + 'StopServer': grpc.unary_unary_rpc_method_handler( + servicer.StopServer, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=peer_dot_admin__pb2.ServerStatus.SerializeToString, + ), + 'GetModuleLogLevel': grpc.unary_unary_rpc_method_handler( + servicer.GetModuleLogLevel, + request_deserializer=peer_dot_admin__pb2.LogLevelRequest.FromString, + response_serializer=peer_dot_admin__pb2.LogLevelResponse.SerializeToString, + ), + 'SetModuleLogLevel': grpc.unary_unary_rpc_method_handler( + servicer.SetModuleLogLevel, + request_deserializer=peer_dot_admin__pb2.LogLevelRequest.FromString, + response_serializer=peer_dot_admin__pb2.LogLevelResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.Admin', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2.py b/app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2.py new file mode 100644 index 000000000..7a09d82ea --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2.py @@ -0,0 +1,102 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/chaincode_event.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/chaincode_event.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x1apeer/chaincode_event.proto\x12\x06protos\"Z\n\x0e\x43haincodeEvent\x12\x14\n\x0c\x63haincode_id\x18\x01 \x01(\t\x12\r\n\x05tx_id\x18\x02 \x01(\t\x12\x12\n\nevent_name\x18\x03 \x01(\t\x12\x0f\n\x07payload\x18\x04 \x01(\x0c\x42\x66\n\"org.hyperledger.fabric.protos.peerB\x15\x43haincodeEventPackageZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') +) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_CHAINCODEEVENT = _descriptor.Descriptor( + name='ChaincodeEvent', + full_name='protos.ChaincodeEvent', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='chaincode_id', full_name='protos.ChaincodeEvent.chaincode_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='tx_id', full_name='protos.ChaincodeEvent.tx_id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='event_name', full_name='protos.ChaincodeEvent.event_name', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='payload', full_name='protos.ChaincodeEvent.payload', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=38, + serialized_end=128, +) + +DESCRIPTOR.message_types_by_name['ChaincodeEvent'] = _CHAINCODEEVENT + +ChaincodeEvent = _reflection.GeneratedProtocolMessageType('ChaincodeEvent', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEEVENT, + __module__ = 'peer.chaincode_event_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeEvent) + )) +_sym_db.RegisterMessage(ChaincodeEvent) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerB\025ChaincodeEventPackageZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/chaincode_event_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/peer/chaincode_pb2.py b/app/platform/fabric/e2e-test/feature/peer/chaincode_pb2.py new file mode 100644 index 000000000..b2e12b127 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/chaincode_pb2.py @@ -0,0 +1,396 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/chaincode.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/chaincode.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x14peer/chaincode.proto\x12\x06protos\x1a\x1fgoogle/protobuf/timestamp.proto\":\n\x0b\x43haincodeID\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\"\x1e\n\x0e\x43haincodeInput\x12\x0c\n\x04\x61rgs\x18\x01 \x03(\x0c\"\xdc\x01\n\rChaincodeSpec\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x1a.protos.ChaincodeSpec.Type\x12)\n\x0c\x63haincode_id\x18\x02 \x01(\x0b\x32\x13.protos.ChaincodeID\x12%\n\x05input\x18\x03 \x01(\x0b\x32\x16.protos.ChaincodeInput\x12\x0f\n\x07timeout\x18\x04 \x01(\x05\">\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06GOLANG\x10\x01\x12\x08\n\x04NODE\x10\x02\x12\x07\n\x03\x43\x41R\x10\x03\x12\x08\n\x04JAVA\x10\x04\"\x8a\x02\n\x17\x43haincodeDeploymentSpec\x12-\n\x0e\x63haincode_spec\x18\x01 \x01(\x0b\x32\x15.protos.ChaincodeSpec\x12\x32\n\x0e\x65\x66\x66\x65\x63tive_date\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x14\n\x0c\x63ode_package\x18\x03 \x01(\x0c\x12\x46\n\x08\x65xec_env\x18\x04 \x01(\x0e\x32\x34.protos.ChaincodeDeploymentSpec.ExecutionEnvironment\".\n\x14\x45xecutionEnvironment\x12\n\n\x06\x44OCKER\x10\x00\x12\n\n\x06SYSTEM\x10\x01\"c\n\x17\x43haincodeInvocationSpec\x12-\n\x0e\x63haincode_spec\x18\x01 \x01(\x0b\x32\x15.protos.ChaincodeSpec\x12\x19\n\x11id_generation_alg\x18\x02 \x01(\t*4\n\x14\x43onfidentialityLevel\x12\n\n\x06PUBLIC\x10\x00\x12\x10\n\x0c\x43ONFIDENTIAL\x10\x01\x42O\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_CONFIDENTIALITYLEVEL = _descriptor.EnumDescriptor( + name='ConfidentialityLevel', + full_name='protos.ConfidentialityLevel', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='PUBLIC', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CONFIDENTIAL', index=1, number=1, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=750, + serialized_end=802, +) +_sym_db.RegisterEnumDescriptor(_CONFIDENTIALITYLEVEL) + +ConfidentialityLevel = enum_type_wrapper.EnumTypeWrapper(_CONFIDENTIALITYLEVEL) +PUBLIC = 0 +CONFIDENTIAL = 1 + + +_CHAINCODESPEC_TYPE = _descriptor.EnumDescriptor( + name='Type', + full_name='protos.ChaincodeSpec.Type', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UNDEFINED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GOLANG', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NODE', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CAR', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='JAVA', index=4, number=4, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=316, + serialized_end=378, +) +_sym_db.RegisterEnumDescriptor(_CHAINCODESPEC_TYPE) + +_CHAINCODEDEPLOYMENTSPEC_EXECUTIONENVIRONMENT = _descriptor.EnumDescriptor( + name='ExecutionEnvironment', + full_name='protos.ChaincodeDeploymentSpec.ExecutionEnvironment', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='DOCKER', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SYSTEM', index=1, number=1, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=601, + serialized_end=647, +) +_sym_db.RegisterEnumDescriptor(_CHAINCODEDEPLOYMENTSPEC_EXECUTIONENVIRONMENT) + + +_CHAINCODEID = _descriptor.Descriptor( + name='ChaincodeID', + full_name='protos.ChaincodeID', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='path', full_name='protos.ChaincodeID.path', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='name', full_name='protos.ChaincodeID.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='version', full_name='protos.ChaincodeID.version', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=65, + serialized_end=123, +) + + +_CHAINCODEINPUT = _descriptor.Descriptor( + name='ChaincodeInput', + full_name='protos.ChaincodeInput', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='args', full_name='protos.ChaincodeInput.args', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=125, + serialized_end=155, +) + + +_CHAINCODESPEC = _descriptor.Descriptor( + name='ChaincodeSpec', + full_name='protos.ChaincodeSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='type', full_name='protos.ChaincodeSpec.type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='chaincode_id', full_name='protos.ChaincodeSpec.chaincode_id', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='input', full_name='protos.ChaincodeSpec.input', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='timeout', full_name='protos.ChaincodeSpec.timeout', index=3, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _CHAINCODESPEC_TYPE, + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=158, + serialized_end=378, +) + + +_CHAINCODEDEPLOYMENTSPEC = _descriptor.Descriptor( + name='ChaincodeDeploymentSpec', + full_name='protos.ChaincodeDeploymentSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='chaincode_spec', full_name='protos.ChaincodeDeploymentSpec.chaincode_spec', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='effective_date', full_name='protos.ChaincodeDeploymentSpec.effective_date', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='code_package', full_name='protos.ChaincodeDeploymentSpec.code_package', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='exec_env', full_name='protos.ChaincodeDeploymentSpec.exec_env', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _CHAINCODEDEPLOYMENTSPEC_EXECUTIONENVIRONMENT, + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=381, + serialized_end=647, +) + + +_CHAINCODEINVOCATIONSPEC = _descriptor.Descriptor( + name='ChaincodeInvocationSpec', + full_name='protos.ChaincodeInvocationSpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='chaincode_spec', full_name='protos.ChaincodeInvocationSpec.chaincode_spec', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='id_generation_alg', full_name='protos.ChaincodeInvocationSpec.id_generation_alg', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=649, + serialized_end=748, +) + +_CHAINCODESPEC.fields_by_name['type'].enum_type = _CHAINCODESPEC_TYPE +_CHAINCODESPEC.fields_by_name['chaincode_id'].message_type = _CHAINCODEID +_CHAINCODESPEC.fields_by_name['input'].message_type = _CHAINCODEINPUT +_CHAINCODESPEC_TYPE.containing_type = _CHAINCODESPEC +_CHAINCODEDEPLOYMENTSPEC.fields_by_name['chaincode_spec'].message_type = _CHAINCODESPEC +_CHAINCODEDEPLOYMENTSPEC.fields_by_name['effective_date'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_CHAINCODEDEPLOYMENTSPEC.fields_by_name['exec_env'].enum_type = _CHAINCODEDEPLOYMENTSPEC_EXECUTIONENVIRONMENT +_CHAINCODEDEPLOYMENTSPEC_EXECUTIONENVIRONMENT.containing_type = _CHAINCODEDEPLOYMENTSPEC +_CHAINCODEINVOCATIONSPEC.fields_by_name['chaincode_spec'].message_type = _CHAINCODESPEC +DESCRIPTOR.message_types_by_name['ChaincodeID'] = _CHAINCODEID +DESCRIPTOR.message_types_by_name['ChaincodeInput'] = _CHAINCODEINPUT +DESCRIPTOR.message_types_by_name['ChaincodeSpec'] = _CHAINCODESPEC +DESCRIPTOR.message_types_by_name['ChaincodeDeploymentSpec'] = _CHAINCODEDEPLOYMENTSPEC +DESCRIPTOR.message_types_by_name['ChaincodeInvocationSpec'] = _CHAINCODEINVOCATIONSPEC +DESCRIPTOR.enum_types_by_name['ConfidentialityLevel'] = _CONFIDENTIALITYLEVEL + +ChaincodeID = _reflection.GeneratedProtocolMessageType('ChaincodeID', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEID, + __module__ = 'peer.chaincode_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeID) + )) +_sym_db.RegisterMessage(ChaincodeID) + +ChaincodeInput = _reflection.GeneratedProtocolMessageType('ChaincodeInput', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEINPUT, + __module__ = 'peer.chaincode_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeInput) + )) +_sym_db.RegisterMessage(ChaincodeInput) + +ChaincodeSpec = _reflection.GeneratedProtocolMessageType('ChaincodeSpec', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODESPEC, + __module__ = 'peer.chaincode_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeSpec) + )) +_sym_db.RegisterMessage(ChaincodeSpec) + +ChaincodeDeploymentSpec = _reflection.GeneratedProtocolMessageType('ChaincodeDeploymentSpec', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEDEPLOYMENTSPEC, + __module__ = 'peer.chaincode_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeDeploymentSpec) + )) +_sym_db.RegisterMessage(ChaincodeDeploymentSpec) + +ChaincodeInvocationSpec = _reflection.GeneratedProtocolMessageType('ChaincodeInvocationSpec', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEINVOCATIONSPEC, + __module__ = 'peer.chaincode_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeInvocationSpec) + )) +_sym_db.RegisterMessage(ChaincodeInvocationSpec) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/chaincode_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/chaincode_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/chaincode_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2.py b/app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2.py new file mode 100644 index 000000000..7126da2cb --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2.py @@ -0,0 +1,670 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/chaincode_shim.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from peer import chaincode_event_pb2 as peer_dot_chaincode__event__pb2 +from peer import proposal_pb2 as peer_dot_proposal__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/chaincode_shim.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x19peer/chaincode_shim.proto\x12\x06protos\x1a\x1apeer/chaincode_event.proto\x1a\x13peer/proposal.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xac\x04\n\x10\x43haincodeMessage\x12+\n\x04type\x18\x01 \x01(\x0e\x32\x1d.protos.ChaincodeMessage.Type\x12-\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\x12\x0c\n\x04txid\x18\x04 \x01(\t\x12\"\n\x08proposal\x18\x05 \x01(\x0b\x32\x10.protos.Proposal\x12/\n\x0f\x63haincode_event\x18\x06 \x01(\x0b\x32\x16.protos.ChaincodeEvent\"\xc7\x02\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x0c\n\x08REGISTER\x10\x01\x12\x0e\n\nREGISTERED\x10\x02\x12\x08\n\x04INIT\x10\x03\x12\t\n\x05READY\x10\x04\x12\x0f\n\x0bTRANSACTION\x10\x05\x12\r\n\tCOMPLETED\x10\x06\x12\t\n\x05\x45RROR\x10\x07\x12\r\n\tGET_STATE\x10\x08\x12\r\n\tPUT_STATE\x10\t\x12\r\n\tDEL_STATE\x10\n\x12\x14\n\x10INVOKE_CHAINCODE\x10\x0b\x12\x0c\n\x08RESPONSE\x10\r\x12\x16\n\x12GET_STATE_BY_RANGE\x10\x0e\x12\x14\n\x10GET_QUERY_RESULT\x10\x0f\x12\x14\n\x10QUERY_STATE_NEXT\x10\x10\x12\x15\n\x11QUERY_STATE_CLOSE\x10\x11\x12\r\n\tKEEPALIVE\x10\x12\x12\x17\n\x13GET_HISTORY_FOR_KEY\x10\x13\"*\n\x0cPutStateInfo\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"3\n\x0fGetStateByRange\x12\x10\n\x08startKey\x18\x01 \x01(\t\x12\x0e\n\x06\x65ndKey\x18\x02 \x01(\t\"\x1f\n\x0eGetQueryResult\x12\r\n\x05query\x18\x01 \x01(\t\"\x1f\n\x10GetHistoryForKey\x12\x0b\n\x03key\x18\x01 \x01(\t\"\x1c\n\x0eQueryStateNext\x12\n\n\x02id\x18\x01 \x01(\t\"\x1d\n\x0fQueryStateClose\x12\n\n\x02id\x18\x01 \x01(\t\"0\n\x12QueryStateKeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"g\n\x12QueryStateResponse\x12\x33\n\x0fkeys_and_values\x18\x01 \x03(\x0b\x32\x1a.protos.QueryStateKeyValue\x12\x10\n\x08has_more\x18\x02 \x01(\x08\x12\n\n\x02id\x18\x03 \x01(\t2X\n\x10\x43haincodeSupport\x12\x44\n\x08Register\x12\x18.protos.ChaincodeMessage\x1a\x18.protos.ChaincodeMessage\"\x00(\x01\x30\x01\x42O\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[peer_dot_chaincode__event__pb2.DESCRIPTOR,peer_dot_proposal__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + +_CHAINCODEMESSAGE_TYPE = _descriptor.EnumDescriptor( + name='Type', + full_name='protos.ChaincodeMessage.Type', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UNDEFINED', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REGISTER', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REGISTERED', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INIT', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='READY', index=4, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TRANSACTION', index=5, number=5, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='COMPLETED', index=6, number=6, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ERROR', index=7, number=7, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GET_STATE', index=8, number=8, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PUT_STATE', index=9, number=9, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DEL_STATE', index=10, number=10, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INVOKE_CHAINCODE', index=11, number=11, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='RESPONSE', index=12, number=13, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GET_STATE_BY_RANGE', index=13, number=14, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GET_QUERY_RESULT', index=14, number=15, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='QUERY_STATE_NEXT', index=15, number=16, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='QUERY_STATE_CLOSE', index=16, number=17, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='KEEPALIVE', index=17, number=18, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GET_HISTORY_FOR_KEY', index=18, number=19, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=349, + serialized_end=676, +) +_sym_db.RegisterEnumDescriptor(_CHAINCODEMESSAGE_TYPE) + + +_CHAINCODEMESSAGE = _descriptor.Descriptor( + name='ChaincodeMessage', + full_name='protos.ChaincodeMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='type', full_name='protos.ChaincodeMessage.type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='timestamp', full_name='protos.ChaincodeMessage.timestamp', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='payload', full_name='protos.ChaincodeMessage.payload', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='txid', full_name='protos.ChaincodeMessage.txid', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='proposal', full_name='protos.ChaincodeMessage.proposal', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='chaincode_event', full_name='protos.ChaincodeMessage.chaincode_event', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _CHAINCODEMESSAGE_TYPE, + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=120, + serialized_end=676, +) + + +_PUTSTATEINFO = _descriptor.Descriptor( + name='PutStateInfo', + full_name='protos.PutStateInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='protos.PutStateInfo.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='protos.PutStateInfo.value', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=678, + serialized_end=720, +) + + +_GETSTATEBYRANGE = _descriptor.Descriptor( + name='GetStateByRange', + full_name='protos.GetStateByRange', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='startKey', full_name='protos.GetStateByRange.startKey', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='endKey', full_name='protos.GetStateByRange.endKey', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=722, + serialized_end=773, +) + + +_GETQUERYRESULT = _descriptor.Descriptor( + name='GetQueryResult', + full_name='protos.GetQueryResult', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='query', full_name='protos.GetQueryResult.query', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=775, + serialized_end=806, +) + + +_GETHISTORYFORKEY = _descriptor.Descriptor( + name='GetHistoryForKey', + full_name='protos.GetHistoryForKey', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='protos.GetHistoryForKey.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=808, + serialized_end=839, +) + + +_QUERYSTATENEXT = _descriptor.Descriptor( + name='QueryStateNext', + full_name='protos.QueryStateNext', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='protos.QueryStateNext.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=841, + serialized_end=869, +) + + +_QUERYSTATECLOSE = _descriptor.Descriptor( + name='QueryStateClose', + full_name='protos.QueryStateClose', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='protos.QueryStateClose.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=871, + serialized_end=900, +) + + +_QUERYSTATEKEYVALUE = _descriptor.Descriptor( + name='QueryStateKeyValue', + full_name='protos.QueryStateKeyValue', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='protos.QueryStateKeyValue.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='protos.QueryStateKeyValue.value', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=902, + serialized_end=950, +) + + +_QUERYSTATERESPONSE = _descriptor.Descriptor( + name='QueryStateResponse', + full_name='protos.QueryStateResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='keys_and_values', full_name='protos.QueryStateResponse.keys_and_values', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='has_more', full_name='protos.QueryStateResponse.has_more', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='id', full_name='protos.QueryStateResponse.id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=952, + serialized_end=1055, +) + +_CHAINCODEMESSAGE.fields_by_name['type'].enum_type = _CHAINCODEMESSAGE_TYPE +_CHAINCODEMESSAGE.fields_by_name['timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_CHAINCODEMESSAGE.fields_by_name['proposal'].message_type = peer_dot_proposal__pb2._PROPOSAL +_CHAINCODEMESSAGE.fields_by_name['chaincode_event'].message_type = peer_dot_chaincode__event__pb2._CHAINCODEEVENT +_CHAINCODEMESSAGE_TYPE.containing_type = _CHAINCODEMESSAGE +_QUERYSTATERESPONSE.fields_by_name['keys_and_values'].message_type = _QUERYSTATEKEYVALUE +DESCRIPTOR.message_types_by_name['ChaincodeMessage'] = _CHAINCODEMESSAGE +DESCRIPTOR.message_types_by_name['PutStateInfo'] = _PUTSTATEINFO +DESCRIPTOR.message_types_by_name['GetStateByRange'] = _GETSTATEBYRANGE +DESCRIPTOR.message_types_by_name['GetQueryResult'] = _GETQUERYRESULT +DESCRIPTOR.message_types_by_name['GetHistoryForKey'] = _GETHISTORYFORKEY +DESCRIPTOR.message_types_by_name['QueryStateNext'] = _QUERYSTATENEXT +DESCRIPTOR.message_types_by_name['QueryStateClose'] = _QUERYSTATECLOSE +DESCRIPTOR.message_types_by_name['QueryStateKeyValue'] = _QUERYSTATEKEYVALUE +DESCRIPTOR.message_types_by_name['QueryStateResponse'] = _QUERYSTATERESPONSE + +ChaincodeMessage = _reflection.GeneratedProtocolMessageType('ChaincodeMessage', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEMESSAGE, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeMessage) + )) +_sym_db.RegisterMessage(ChaincodeMessage) + +PutStateInfo = _reflection.GeneratedProtocolMessageType('PutStateInfo', (_message.Message,), dict( + DESCRIPTOR = _PUTSTATEINFO, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.PutStateInfo) + )) +_sym_db.RegisterMessage(PutStateInfo) + +GetStateByRange = _reflection.GeneratedProtocolMessageType('GetStateByRange', (_message.Message,), dict( + DESCRIPTOR = _GETSTATEBYRANGE, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.GetStateByRange) + )) +_sym_db.RegisterMessage(GetStateByRange) + +GetQueryResult = _reflection.GeneratedProtocolMessageType('GetQueryResult', (_message.Message,), dict( + DESCRIPTOR = _GETQUERYRESULT, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.GetQueryResult) + )) +_sym_db.RegisterMessage(GetQueryResult) + +GetHistoryForKey = _reflection.GeneratedProtocolMessageType('GetHistoryForKey', (_message.Message,), dict( + DESCRIPTOR = _GETHISTORYFORKEY, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.GetHistoryForKey) + )) +_sym_db.RegisterMessage(GetHistoryForKey) + +QueryStateNext = _reflection.GeneratedProtocolMessageType('QueryStateNext', (_message.Message,), dict( + DESCRIPTOR = _QUERYSTATENEXT, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.QueryStateNext) + )) +_sym_db.RegisterMessage(QueryStateNext) + +QueryStateClose = _reflection.GeneratedProtocolMessageType('QueryStateClose', (_message.Message,), dict( + DESCRIPTOR = _QUERYSTATECLOSE, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.QueryStateClose) + )) +_sym_db.RegisterMessage(QueryStateClose) + +QueryStateKeyValue = _reflection.GeneratedProtocolMessageType('QueryStateKeyValue', (_message.Message,), dict( + DESCRIPTOR = _QUERYSTATEKEYVALUE, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.QueryStateKeyValue) + )) +_sym_db.RegisterMessage(QueryStateKeyValue) + +QueryStateResponse = _reflection.GeneratedProtocolMessageType('QueryStateResponse', (_message.Message,), dict( + DESCRIPTOR = _QUERYSTATERESPONSE, + __module__ = 'peer.chaincode_shim_pb2' + # @@protoc_insertion_point(class_scope:protos.QueryStateResponse) + )) +_sym_db.RegisterMessage(QueryStateResponse) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + + + class ChaincodeSupportStub(object): + """Interface that provides support to chaincode execution. ChaincodeContext + provides the context necessary for the server to respond appropriately. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Register = channel.stream_stream( + '/protos.ChaincodeSupport/Register', + request_serializer=ChaincodeMessage.SerializeToString, + response_deserializer=ChaincodeMessage.FromString, + ) + + + class ChaincodeSupportServicer(object): + """Interface that provides support to chaincode execution. ChaincodeContext + provides the context necessary for the server to respond appropriately. + """ + + def Register(self, request_iterator, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + + def add_ChaincodeSupportServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Register': grpc.stream_stream_rpc_method_handler( + servicer.Register, + request_deserializer=ChaincodeMessage.FromString, + response_serializer=ChaincodeMessage.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.ChaincodeSupport', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + class BetaChaincodeSupportServicer(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Interface that provides support to chaincode execution. ChaincodeContext + provides the context necessary for the server to respond appropriately. + """ + def Register(self, request_iterator, context): + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + + + class BetaChaincodeSupportStub(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Interface that provides support to chaincode execution. ChaincodeContext + provides the context necessary for the server to respond appropriately. + """ + def Register(self, request_iterator, timeout, metadata=None, with_call=False, protocol_options=None): + raise NotImplementedError() + + + def beta_create_ChaincodeSupport_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_deserializers = { + ('protos.ChaincodeSupport', 'Register'): ChaincodeMessage.FromString, + } + response_serializers = { + ('protos.ChaincodeSupport', 'Register'): ChaincodeMessage.SerializeToString, + } + method_implementations = { + ('protos.ChaincodeSupport', 'Register'): face_utilities.stream_stream_inline(servicer.Register), + } + server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) + return beta_implementations.server(method_implementations, options=server_options) + + + def beta_create_ChaincodeSupport_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_serializers = { + ('protos.ChaincodeSupport', 'Register'): ChaincodeMessage.SerializeToString, + } + response_deserializers = { + ('protos.ChaincodeSupport', 'Register'): ChaincodeMessage.FromString, + } + cardinalities = { + 'Register': cardinality.Cardinality.STREAM_STREAM, + } + stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) + return beta_implementations.dynamic_stub(channel, 'protos.ChaincodeSupport', cardinalities, options=stub_options) +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2_grpc.py new file mode 100644 index 000000000..49f2357f2 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/chaincode_shim_pb2_grpc.py @@ -0,0 +1,48 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + +import peer.chaincode_shim_pb2 as peer_dot_chaincode__shim__pb2 + + +class ChaincodeSupportStub(object): + """Interface that provides support to chaincode execution. ChaincodeContext + provides the context necessary for the server to respond appropriately. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Register = channel.stream_stream( + '/protos.ChaincodeSupport/Register', + request_serializer=peer_dot_chaincode__shim__pb2.ChaincodeMessage.SerializeToString, + response_deserializer=peer_dot_chaincode__shim__pb2.ChaincodeMessage.FromString, + ) + + +class ChaincodeSupportServicer(object): + """Interface that provides support to chaincode execution. ChaincodeContext + provides the context necessary for the server to respond appropriately. + """ + + def Register(self, request_iterator, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_ChaincodeSupportServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Register': grpc.stream_stream_rpc_method_handler( + servicer.Register, + request_deserializer=peer_dot_chaincode__shim__pb2.ChaincodeMessage.FromString, + response_serializer=peer_dot_chaincode__shim__pb2.ChaincodeMessage.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.ChaincodeSupport', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/app/platform/fabric/e2e-test/feature/peer/configuration_pb2.py b/app/platform/fabric/e2e-test/feature/peer/configuration_pb2.py new file mode 100644 index 000000000..2aba1a786 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/configuration_pb2.py @@ -0,0 +1,128 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/configuration.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/configuration.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x18peer/configuration.proto\x12\x06protos\"7\n\x0b\x41nchorPeers\x12(\n\x0c\x61nchor_peers\x18\x01 \x03(\x0b\x32\x12.protos.AnchorPeer\"(\n\nAnchorPeer\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\x42O\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') +) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_ANCHORPEERS = _descriptor.Descriptor( + name='AnchorPeers', + full_name='protos.AnchorPeers', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='anchor_peers', full_name='protos.AnchorPeers.anchor_peers', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=36, + serialized_end=91, +) + + +_ANCHORPEER = _descriptor.Descriptor( + name='AnchorPeer', + full_name='protos.AnchorPeer', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='host', full_name='protos.AnchorPeer.host', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='port', full_name='protos.AnchorPeer.port', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=93, + serialized_end=133, +) + +_ANCHORPEERS.fields_by_name['anchor_peers'].message_type = _ANCHORPEER +DESCRIPTOR.message_types_by_name['AnchorPeers'] = _ANCHORPEERS +DESCRIPTOR.message_types_by_name['AnchorPeer'] = _ANCHORPEER + +AnchorPeers = _reflection.GeneratedProtocolMessageType('AnchorPeers', (_message.Message,), dict( + DESCRIPTOR = _ANCHORPEERS, + __module__ = 'peer.configuration_pb2' + # @@protoc_insertion_point(class_scope:protos.AnchorPeers) + )) +_sym_db.RegisterMessage(AnchorPeers) + +AnchorPeer = _reflection.GeneratedProtocolMessageType('AnchorPeer', (_message.Message,), dict( + DESCRIPTOR = _ANCHORPEER, + __module__ = 'peer.configuration_pb2' + # @@protoc_insertion_point(class_scope:protos.AnchorPeer) + )) +_sym_db.RegisterMessage(AnchorPeer) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/configuration_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/configuration_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/configuration_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/peer/events_pb2.py b/app/platform/fabric/e2e-test/feature/peer/events_pb2.py new file mode 100644 index 000000000..720911e49 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/events_pb2.py @@ -0,0 +1,568 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/events.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from common import common_pb2 as common_dot_common__pb2 +from peer import chaincode_event_pb2 as peer_dot_chaincode__event__pb2 +from peer import transaction_pb2 as peer_dot_transaction__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/events.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x11peer/events.proto\x12\x06protos\x1a\x13\x63ommon/common.proto\x1a\x1apeer/chaincode_event.proto\x1a\x16peer/transaction.proto\"8\n\x0c\x43haincodeReg\x12\x14\n\x0c\x63haincode_id\x18\x01 \x01(\t\x12\x12\n\nevent_name\x18\x02 \x01(\t\"\x81\x01\n\x08Interest\x12%\n\nevent_type\x18\x01 \x01(\x0e\x32\x11.protos.EventType\x12\x32\n\x12\x63haincode_reg_info\x18\x02 \x01(\x0b\x32\x14.protos.ChaincodeRegH\x00\x12\x0f\n\x07\x63hainID\x18\x03 \x01(\tB\t\n\x07RegInfo\",\n\x08Register\x12 \n\x06\x65vents\x18\x01 \x03(\x0b\x32\x10.protos.Interest\"?\n\tRejection\x12\x1f\n\x02tx\x18\x01 \x01(\x0b\x32\x13.protos.Transaction\x12\x11\n\terror_msg\x18\x02 \x01(\t\".\n\nUnregister\x12 \n\x06\x65vents\x18\x01 \x03(\x0b\x32\x10.protos.Interest\"4\n\x0bSignedEvent\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\x12\n\neventBytes\x18\x02 \x01(\x0c\"\xec\x01\n\x05\x45vent\x12$\n\x08register\x18\x01 \x01(\x0b\x32\x10.protos.RegisterH\x00\x12\x1e\n\x05\x62lock\x18\x02 \x01(\x0b\x32\r.common.BlockH\x00\x12\x31\n\x0f\x63haincode_event\x18\x03 \x01(\x0b\x32\x16.protos.ChaincodeEventH\x00\x12&\n\trejection\x18\x04 \x01(\x0b\x32\x11.protos.RejectionH\x00\x12(\n\nunregister\x18\x05 \x01(\x0b\x32\x12.protos.UnregisterH\x00\x12\x0f\n\x07\x63reator\x18\x06 \x01(\x0c\x42\x07\n\x05\x45vent*B\n\tEventType\x12\x0c\n\x08REGISTER\x10\x00\x12\t\n\x05\x42LOCK\x10\x01\x12\r\n\tCHAINCODE\x10\x02\x12\r\n\tREJECTION\x10\x03\x32\x34\n\x06\x45vents\x12*\n\x04\x43hat\x12\r.protos.Event\x1a\r.protos.Event\"\x00(\x01\x30\x01\x42^\n\"org.hyperledger.fabric.protos.peerB\rEventsPackageZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[common_dot_common__pb2.DESCRIPTOR,peer_dot_chaincode__event__pb2.DESCRIPTOR,peer_dot_transaction__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_EVENTTYPE = _descriptor.EnumDescriptor( + name='EventType', + full_name='protos.EventType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='REGISTER', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BLOCK', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CHAINCODE', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REJECTION', index=3, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=744, + serialized_end=810, +) +_sym_db.RegisterEnumDescriptor(_EVENTTYPE) + +EventType = enum_type_wrapper.EnumTypeWrapper(_EVENTTYPE) +REGISTER = 0 +BLOCK = 1 +CHAINCODE = 2 +REJECTION = 3 + + + +_CHAINCODEREG = _descriptor.Descriptor( + name='ChaincodeReg', + full_name='protos.ChaincodeReg', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='chaincode_id', full_name='protos.ChaincodeReg.chaincode_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='event_name', full_name='protos.ChaincodeReg.event_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=102, + serialized_end=158, +) + + +_INTEREST = _descriptor.Descriptor( + name='Interest', + full_name='protos.Interest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='event_type', full_name='protos.Interest.event_type', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='chaincode_reg_info', full_name='protos.Interest.chaincode_reg_info', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='chainID', full_name='protos.Interest.chainID', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='RegInfo', full_name='protos.Interest.RegInfo', + index=0, containing_type=None, fields=[]), + ], + serialized_start=161, + serialized_end=290, +) + + +_REGISTER = _descriptor.Descriptor( + name='Register', + full_name='protos.Register', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='events', full_name='protos.Register.events', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=292, + serialized_end=336, +) + + +_REJECTION = _descriptor.Descriptor( + name='Rejection', + full_name='protos.Rejection', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='tx', full_name='protos.Rejection.tx', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='error_msg', full_name='protos.Rejection.error_msg', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=338, + serialized_end=401, +) + + +_UNREGISTER = _descriptor.Descriptor( + name='Unregister', + full_name='protos.Unregister', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='events', full_name='protos.Unregister.events', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=403, + serialized_end=449, +) + + +_SIGNEDEVENT = _descriptor.Descriptor( + name='SignedEvent', + full_name='protos.SignedEvent', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='signature', full_name='protos.SignedEvent.signature', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='eventBytes', full_name='protos.SignedEvent.eventBytes', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=451, + serialized_end=503, +) + + +_EVENT = _descriptor.Descriptor( + name='Event', + full_name='protos.Event', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='register', full_name='protos.Event.register', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='block', full_name='protos.Event.block', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='chaincode_event', full_name='protos.Event.chaincode_event', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='rejection', full_name='protos.Event.rejection', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='unregister', full_name='protos.Event.unregister', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='creator', full_name='protos.Event.creator', index=5, + number=6, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + _descriptor.OneofDescriptor( + name='Event', full_name='protos.Event.Event', + index=0, containing_type=None, fields=[]), + ], + serialized_start=506, + serialized_end=742, +) + +_INTEREST.fields_by_name['event_type'].enum_type = _EVENTTYPE +_INTEREST.fields_by_name['chaincode_reg_info'].message_type = _CHAINCODEREG +_INTEREST.oneofs_by_name['RegInfo'].fields.append( + _INTEREST.fields_by_name['chaincode_reg_info']) +_INTEREST.fields_by_name['chaincode_reg_info'].containing_oneof = _INTEREST.oneofs_by_name['RegInfo'] +_REGISTER.fields_by_name['events'].message_type = _INTEREST +_REJECTION.fields_by_name['tx'].message_type = peer_dot_transaction__pb2._TRANSACTION +_UNREGISTER.fields_by_name['events'].message_type = _INTEREST +_EVENT.fields_by_name['register'].message_type = _REGISTER +_EVENT.fields_by_name['block'].message_type = common_dot_common__pb2._BLOCK +_EVENT.fields_by_name['chaincode_event'].message_type = peer_dot_chaincode__event__pb2._CHAINCODEEVENT +_EVENT.fields_by_name['rejection'].message_type = _REJECTION +_EVENT.fields_by_name['unregister'].message_type = _UNREGISTER +_EVENT.oneofs_by_name['Event'].fields.append( + _EVENT.fields_by_name['register']) +_EVENT.fields_by_name['register'].containing_oneof = _EVENT.oneofs_by_name['Event'] +_EVENT.oneofs_by_name['Event'].fields.append( + _EVENT.fields_by_name['block']) +_EVENT.fields_by_name['block'].containing_oneof = _EVENT.oneofs_by_name['Event'] +_EVENT.oneofs_by_name['Event'].fields.append( + _EVENT.fields_by_name['chaincode_event']) +_EVENT.fields_by_name['chaincode_event'].containing_oneof = _EVENT.oneofs_by_name['Event'] +_EVENT.oneofs_by_name['Event'].fields.append( + _EVENT.fields_by_name['rejection']) +_EVENT.fields_by_name['rejection'].containing_oneof = _EVENT.oneofs_by_name['Event'] +_EVENT.oneofs_by_name['Event'].fields.append( + _EVENT.fields_by_name['unregister']) +_EVENT.fields_by_name['unregister'].containing_oneof = _EVENT.oneofs_by_name['Event'] +DESCRIPTOR.message_types_by_name['ChaincodeReg'] = _CHAINCODEREG +DESCRIPTOR.message_types_by_name['Interest'] = _INTEREST +DESCRIPTOR.message_types_by_name['Register'] = _REGISTER +DESCRIPTOR.message_types_by_name['Rejection'] = _REJECTION +DESCRIPTOR.message_types_by_name['Unregister'] = _UNREGISTER +DESCRIPTOR.message_types_by_name['SignedEvent'] = _SIGNEDEVENT +DESCRIPTOR.message_types_by_name['Event'] = _EVENT +DESCRIPTOR.enum_types_by_name['EventType'] = _EVENTTYPE + +ChaincodeReg = _reflection.GeneratedProtocolMessageType('ChaincodeReg', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEREG, + __module__ = 'peer.events_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeReg) + )) +_sym_db.RegisterMessage(ChaincodeReg) + +Interest = _reflection.GeneratedProtocolMessageType('Interest', (_message.Message,), dict( + DESCRIPTOR = _INTEREST, + __module__ = 'peer.events_pb2' + # @@protoc_insertion_point(class_scope:protos.Interest) + )) +_sym_db.RegisterMessage(Interest) + +Register = _reflection.GeneratedProtocolMessageType('Register', (_message.Message,), dict( + DESCRIPTOR = _REGISTER, + __module__ = 'peer.events_pb2' + # @@protoc_insertion_point(class_scope:protos.Register) + )) +_sym_db.RegisterMessage(Register) + +Rejection = _reflection.GeneratedProtocolMessageType('Rejection', (_message.Message,), dict( + DESCRIPTOR = _REJECTION, + __module__ = 'peer.events_pb2' + # @@protoc_insertion_point(class_scope:protos.Rejection) + )) +_sym_db.RegisterMessage(Rejection) + +Unregister = _reflection.GeneratedProtocolMessageType('Unregister', (_message.Message,), dict( + DESCRIPTOR = _UNREGISTER, + __module__ = 'peer.events_pb2' + # @@protoc_insertion_point(class_scope:protos.Unregister) + )) +_sym_db.RegisterMessage(Unregister) + +SignedEvent = _reflection.GeneratedProtocolMessageType('SignedEvent', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDEVENT, + __module__ = 'peer.events_pb2' + # @@protoc_insertion_point(class_scope:protos.SignedEvent) + )) +_sym_db.RegisterMessage(SignedEvent) + +Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), dict( + DESCRIPTOR = _EVENT, + __module__ = 'peer.events_pb2' + # @@protoc_insertion_point(class_scope:protos.Event) + )) +_sym_db.RegisterMessage(Event) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerB\rEventsPackageZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + + + class EventsStub(object): + """Interface exported by the events server + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Chat = channel.stream_stream( + '/protos.Events/Chat', + request_serializer=Event.SerializeToString, + response_deserializer=Event.FromString, + ) + + + class EventsServicer(object): + """Interface exported by the events server + """ + + def Chat(self, request_iterator, context): + """event chatting using Event + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + + def add_EventsServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Chat': grpc.stream_stream_rpc_method_handler( + servicer.Chat, + request_deserializer=Event.FromString, + response_serializer=Event.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.Events', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + class BetaEventsServicer(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Interface exported by the events server + """ + def Chat(self, request_iterator, context): + """event chatting using Event + """ + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + + + class BetaEventsStub(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + """Interface exported by the events server + """ + def Chat(self, request_iterator, timeout, metadata=None, with_call=False, protocol_options=None): + """event chatting using Event + """ + raise NotImplementedError() + + + def beta_create_Events_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_deserializers = { + ('protos.Events', 'Chat'): Event.FromString, + } + response_serializers = { + ('protos.Events', 'Chat'): Event.SerializeToString, + } + method_implementations = { + ('protos.Events', 'Chat'): face_utilities.stream_stream_inline(servicer.Chat), + } + server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) + return beta_implementations.server(method_implementations, options=server_options) + + + def beta_create_Events_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_serializers = { + ('protos.Events', 'Chat'): Event.SerializeToString, + } + response_deserializers = { + ('protos.Events', 'Chat'): Event.FromString, + } + cardinalities = { + 'Chat': cardinality.Cardinality.STREAM_STREAM, + } + stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) + return beta_implementations.dynamic_stub(channel, 'protos.Events', cardinalities, options=stub_options) +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/events_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/events_pb2_grpc.py new file mode 100644 index 000000000..8331caf53 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/events_pb2_grpc.py @@ -0,0 +1,48 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + +import peer.events_pb2 as peer_dot_events__pb2 + + +class EventsStub(object): + """Interface exported by the events server + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Chat = channel.stream_stream( + '/protos.Events/Chat', + request_serializer=peer_dot_events__pb2.Event.SerializeToString, + response_deserializer=peer_dot_events__pb2.Event.FromString, + ) + + +class EventsServicer(object): + """Interface exported by the events server + """ + + def Chat(self, request_iterator, context): + """event chatting using Event + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_EventsServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Chat': grpc.stream_stream_rpc_method_handler( + servicer.Chat, + request_deserializer=peer_dot_events__pb2.Event.FromString, + response_serializer=peer_dot_events__pb2.Event.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.Events', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/app/platform/fabric/e2e-test/feature/peer/peer_pb2.py b/app/platform/fabric/e2e-test/feature/peer/peer_pb2.py new file mode 100644 index 000000000..6177b5974 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/peer_pb2.py @@ -0,0 +1,226 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/peer.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from peer import proposal_pb2 as peer_dot_proposal__pb2 +from peer import proposal_response_pb2 as peer_dot_proposal__response__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/peer.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x0fpeer/peer.proto\x12\x06protos\x1a\x13peer/proposal.proto\x1a\x1cpeer/proposal_response.proto\"\x16\n\x06PeerID\x12\x0c\n\x04name\x18\x01 \x01(\t\";\n\x0cPeerEndpoint\x12\x1a\n\x02id\x18\x01 \x01(\x0b\x32\x0e.protos.PeerID\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t2Q\n\x08\x45ndorser\x12\x45\n\x0fProcessProposal\x12\x16.protos.SignedProposal\x1a\x18.protos.ProposalResponse\"\x00\x42O\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[peer_dot_proposal__pb2.DESCRIPTOR,peer_dot_proposal__response__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_PEERID = _descriptor.Descriptor( + name='PeerID', + full_name='protos.PeerID', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='protos.PeerID.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=78, + serialized_end=100, +) + + +_PEERENDPOINT = _descriptor.Descriptor( + name='PeerEndpoint', + full_name='protos.PeerEndpoint', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='protos.PeerEndpoint.id', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='address', full_name='protos.PeerEndpoint.address', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=102, + serialized_end=161, +) + +_PEERENDPOINT.fields_by_name['id'].message_type = _PEERID +DESCRIPTOR.message_types_by_name['PeerID'] = _PEERID +DESCRIPTOR.message_types_by_name['PeerEndpoint'] = _PEERENDPOINT + +PeerID = _reflection.GeneratedProtocolMessageType('PeerID', (_message.Message,), dict( + DESCRIPTOR = _PEERID, + __module__ = 'peer.peer_pb2' + # @@protoc_insertion_point(class_scope:protos.PeerID) + )) +_sym_db.RegisterMessage(PeerID) + +PeerEndpoint = _reflection.GeneratedProtocolMessageType('PeerEndpoint', (_message.Message,), dict( + DESCRIPTOR = _PEERENDPOINT, + __module__ = 'peer.peer_pb2' + # @@protoc_insertion_point(class_scope:protos.PeerEndpoint) + )) +_sym_db.RegisterMessage(PeerEndpoint) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + + + class EndorserStub(object): + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ProcessProposal = channel.unary_unary( + '/protos.Endorser/ProcessProposal', + request_serializer=peer_dot_proposal__pb2.SignedProposal.SerializeToString, + response_deserializer=peer_dot_proposal__response__pb2.ProposalResponse.FromString, + ) + + + class EndorserServicer(object): + + def ProcessProposal(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + + def add_EndorserServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ProcessProposal': grpc.unary_unary_rpc_method_handler( + servicer.ProcessProposal, + request_deserializer=peer_dot_proposal__pb2.SignedProposal.FromString, + response_serializer=peer_dot_proposal__response__pb2.ProposalResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.Endorser', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + class BetaEndorserServicer(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + def ProcessProposal(self, request, context): + context.code(beta_interfaces.StatusCode.UNIMPLEMENTED) + + + class BetaEndorserStub(object): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This class was generated + only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""" + def ProcessProposal(self, request, timeout, metadata=None, with_call=False, protocol_options=None): + raise NotImplementedError() + ProcessProposal.future = None + + + def beta_create_Endorser_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_deserializers = { + ('protos.Endorser', 'ProcessProposal'): peer_dot_proposal__pb2.SignedProposal.FromString, + } + response_serializers = { + ('protos.Endorser', 'ProcessProposal'): peer_dot_proposal__response__pb2.ProposalResponse.SerializeToString, + } + method_implementations = { + ('protos.Endorser', 'ProcessProposal'): face_utilities.unary_unary_inline(servicer.ProcessProposal), + } + server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout) + return beta_implementations.server(method_implementations, options=server_options) + + + def beta_create_Endorser_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None): + """The Beta API is deprecated for 0.15.0 and later. + + It is recommended to use the GA API (classes and functions in this + file not marked beta) for all further purposes. This function was + generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0""" + request_serializers = { + ('protos.Endorser', 'ProcessProposal'): peer_dot_proposal__pb2.SignedProposal.SerializeToString, + } + response_deserializers = { + ('protos.Endorser', 'ProcessProposal'): peer_dot_proposal__response__pb2.ProposalResponse.FromString, + } + cardinalities = { + 'ProcessProposal': cardinality.Cardinality.UNARY_UNARY, + } + stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size) + return beta_implementations.dynamic_stub(channel, 'protos.Endorser', cardinalities, options=stub_options) +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/peer_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/peer_pb2_grpc.py new file mode 100644 index 000000000..116fc050e --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/peer_pb2_grpc.py @@ -0,0 +1,43 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + +import peer.proposal_pb2 as peer_dot_proposal__pb2 +import peer.proposal_response_pb2 as peer_dot_proposal__response__pb2 + + +class EndorserStub(object): + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ProcessProposal = channel.unary_unary( + '/protos.Endorser/ProcessProposal', + request_serializer=peer_dot_proposal__pb2.SignedProposal.SerializeToString, + response_deserializer=peer_dot_proposal__response__pb2.ProposalResponse.FromString, + ) + + +class EndorserServicer(object): + + def ProcessProposal(self, request, context): + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_EndorserServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ProcessProposal': grpc.unary_unary_rpc_method_handler( + servicer.ProcessProposal, + request_deserializer=peer_dot_proposal__pb2.SignedProposal.FromString, + response_serializer=peer_dot_proposal__response__pb2.ProposalResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'protos.Endorser', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/app/platform/fabric/e2e-test/feature/peer/proposal_pb2.py b/app/platform/fabric/e2e-test/feature/peer/proposal_pb2.py new file mode 100644 index 000000000..57daac9ca --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/proposal_pb2.py @@ -0,0 +1,340 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/proposal.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from peer import chaincode_pb2 as peer_dot_chaincode__pb2 +from peer import proposal_response_pb2 as peer_dot_proposal__response__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/proposal.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x13peer/proposal.proto\x12\x06protos\x1a\x14peer/chaincode.proto\x1a\x1cpeer/proposal_response.proto\";\n\x0eSignedProposal\x12\x16\n\x0eproposal_bytes\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\">\n\x08Proposal\x12\x0e\n\x06header\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x11\n\textension\x18\x03 \x01(\x0c\"a\n\x18\x43haincodeHeaderExtension\x12\x1a\n\x12payload_visibility\x18\x01 \x01(\x0c\x12)\n\x0c\x63haincode_id\x18\x02 \x01(\x0b\x32\x13.protos.ChaincodeID\"\xa8\x01\n\x18\x43haincodeProposalPayload\x12\r\n\x05input\x18\x01 \x01(\x0c\x12H\n\x0cTransientMap\x18\x02 \x03(\x0b\x32\x32.protos.ChaincodeProposalPayload.TransientMapEntry\x1a\x33\n\x11TransientMapEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"V\n\x0f\x43haincodeAction\x12\x0f\n\x07results\x18\x01 \x01(\x0c\x12\x0e\n\x06\x65vents\x18\x02 \x01(\x0c\x12\"\n\x08response\x18\x03 \x01(\x0b\x32\x10.protos.ResponseB`\n\"org.hyperledger.fabric.protos.peerB\x0fProposalPackageZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[peer_dot_chaincode__pb2.DESCRIPTOR,peer_dot_proposal__response__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_SIGNEDPROPOSAL = _descriptor.Descriptor( + name='SignedProposal', + full_name='protos.SignedProposal', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='proposal_bytes', full_name='protos.SignedProposal.proposal_bytes', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature', full_name='protos.SignedProposal.signature', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=83, + serialized_end=142, +) + + +_PROPOSAL = _descriptor.Descriptor( + name='Proposal', + full_name='protos.Proposal', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='protos.Proposal.header', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='payload', full_name='protos.Proposal.payload', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='extension', full_name='protos.Proposal.extension', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=144, + serialized_end=206, +) + + +_CHAINCODEHEADEREXTENSION = _descriptor.Descriptor( + name='ChaincodeHeaderExtension', + full_name='protos.ChaincodeHeaderExtension', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='payload_visibility', full_name='protos.ChaincodeHeaderExtension.payload_visibility', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='chaincode_id', full_name='protos.ChaincodeHeaderExtension.chaincode_id', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=208, + serialized_end=305, +) + + +_CHAINCODEPROPOSALPAYLOAD_TRANSIENTMAPENTRY = _descriptor.Descriptor( + name='TransientMapEntry', + full_name='protos.ChaincodeProposalPayload.TransientMapEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='protos.ChaincodeProposalPayload.TransientMapEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='protos.ChaincodeProposalPayload.TransientMapEntry.value', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')), + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=425, + serialized_end=476, +) + +_CHAINCODEPROPOSALPAYLOAD = _descriptor.Descriptor( + name='ChaincodeProposalPayload', + full_name='protos.ChaincodeProposalPayload', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='input', full_name='protos.ChaincodeProposalPayload.input', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='TransientMap', full_name='protos.ChaincodeProposalPayload.TransientMap', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_CHAINCODEPROPOSALPAYLOAD_TRANSIENTMAPENTRY, ], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=308, + serialized_end=476, +) + + +_CHAINCODEACTION = _descriptor.Descriptor( + name='ChaincodeAction', + full_name='protos.ChaincodeAction', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='results', full_name='protos.ChaincodeAction.results', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='events', full_name='protos.ChaincodeAction.events', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='response', full_name='protos.ChaincodeAction.response', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=478, + serialized_end=564, +) + +_CHAINCODEHEADEREXTENSION.fields_by_name['chaincode_id'].message_type = peer_dot_chaincode__pb2._CHAINCODEID +_CHAINCODEPROPOSALPAYLOAD_TRANSIENTMAPENTRY.containing_type = _CHAINCODEPROPOSALPAYLOAD +_CHAINCODEPROPOSALPAYLOAD.fields_by_name['TransientMap'].message_type = _CHAINCODEPROPOSALPAYLOAD_TRANSIENTMAPENTRY +_CHAINCODEACTION.fields_by_name['response'].message_type = peer_dot_proposal__response__pb2._RESPONSE +DESCRIPTOR.message_types_by_name['SignedProposal'] = _SIGNEDPROPOSAL +DESCRIPTOR.message_types_by_name['Proposal'] = _PROPOSAL +DESCRIPTOR.message_types_by_name['ChaincodeHeaderExtension'] = _CHAINCODEHEADEREXTENSION +DESCRIPTOR.message_types_by_name['ChaincodeProposalPayload'] = _CHAINCODEPROPOSALPAYLOAD +DESCRIPTOR.message_types_by_name['ChaincodeAction'] = _CHAINCODEACTION + +SignedProposal = _reflection.GeneratedProtocolMessageType('SignedProposal', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDPROPOSAL, + __module__ = 'peer.proposal_pb2' + # @@protoc_insertion_point(class_scope:protos.SignedProposal) + )) +_sym_db.RegisterMessage(SignedProposal) + +Proposal = _reflection.GeneratedProtocolMessageType('Proposal', (_message.Message,), dict( + DESCRIPTOR = _PROPOSAL, + __module__ = 'peer.proposal_pb2' + # @@protoc_insertion_point(class_scope:protos.Proposal) + )) +_sym_db.RegisterMessage(Proposal) + +ChaincodeHeaderExtension = _reflection.GeneratedProtocolMessageType('ChaincodeHeaderExtension', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEHEADEREXTENSION, + __module__ = 'peer.proposal_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeHeaderExtension) + )) +_sym_db.RegisterMessage(ChaincodeHeaderExtension) + +ChaincodeProposalPayload = _reflection.GeneratedProtocolMessageType('ChaincodeProposalPayload', (_message.Message,), dict( + + TransientMapEntry = _reflection.GeneratedProtocolMessageType('TransientMapEntry', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEPROPOSALPAYLOAD_TRANSIENTMAPENTRY, + __module__ = 'peer.proposal_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeProposalPayload.TransientMapEntry) + )) + , + DESCRIPTOR = _CHAINCODEPROPOSALPAYLOAD, + __module__ = 'peer.proposal_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeProposalPayload) + )) +_sym_db.RegisterMessage(ChaincodeProposalPayload) +_sym_db.RegisterMessage(ChaincodeProposalPayload.TransientMapEntry) + +ChaincodeAction = _reflection.GeneratedProtocolMessageType('ChaincodeAction', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEACTION, + __module__ = 'peer.proposal_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeAction) + )) +_sym_db.RegisterMessage(ChaincodeAction) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerB\017ProposalPackageZ)github.com/hyperledger/fabric/protos/peer')) +_CHAINCODEPROPOSALPAYLOAD_TRANSIENTMAPENTRY.has_options = True +_CHAINCODEPROPOSALPAYLOAD_TRANSIENTMAPENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/proposal_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/proposal_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/proposal_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2.py b/app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2.py new file mode 100644 index 000000000..09ef33152 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2.py @@ -0,0 +1,259 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/proposal_response.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/proposal_response.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x1cpeer/proposal_response.proto\x12\x06protos\x1a\x1fgoogle/protobuf/timestamp.proto\"\xb1\x01\n\x10ProposalResponse\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12-\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x08response\x18\x04 \x01(\x0b\x32\x10.protos.Response\x12\x0f\n\x07payload\x18\x05 \x01(\x0c\x12(\n\x0b\x65ndorsement\x18\x06 \x01(\x0b\x32\x13.protos.Endorsement\"<\n\x08Response\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"C\n\x17ProposalResponsePayload\x12\x15\n\rproposal_hash\x18\x01 \x01(\x0c\x12\x11\n\textension\x18\x02 \x01(\x0c\"2\n\x0b\x45ndorsement\x12\x10\n\x08\x65ndorser\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\x42h\n\"org.hyperledger.fabric.protos.peerB\x17ProposalResponsePackageZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_PROPOSALRESPONSE = _descriptor.Descriptor( + name='ProposalResponse', + full_name='protos.ProposalResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='version', full_name='protos.ProposalResponse.version', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='timestamp', full_name='protos.ProposalResponse.timestamp', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='response', full_name='protos.ProposalResponse.response', index=2, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='payload', full_name='protos.ProposalResponse.payload', index=3, + number=5, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='endorsement', full_name='protos.ProposalResponse.endorsement', index=4, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=74, + serialized_end=251, +) + + +_RESPONSE = _descriptor.Descriptor( + name='Response', + full_name='protos.Response', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='protos.Response.status', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='message', full_name='protos.Response.message', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='payload', full_name='protos.Response.payload', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=253, + serialized_end=313, +) + + +_PROPOSALRESPONSEPAYLOAD = _descriptor.Descriptor( + name='ProposalResponsePayload', + full_name='protos.ProposalResponsePayload', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='proposal_hash', full_name='protos.ProposalResponsePayload.proposal_hash', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='extension', full_name='protos.ProposalResponsePayload.extension', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=315, + serialized_end=382, +) + + +_ENDORSEMENT = _descriptor.Descriptor( + name='Endorsement', + full_name='protos.Endorsement', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='endorser', full_name='protos.Endorsement.endorser', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature', full_name='protos.Endorsement.signature', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=384, + serialized_end=434, +) + +_PROPOSALRESPONSE.fields_by_name['timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_PROPOSALRESPONSE.fields_by_name['response'].message_type = _RESPONSE +_PROPOSALRESPONSE.fields_by_name['endorsement'].message_type = _ENDORSEMENT +DESCRIPTOR.message_types_by_name['ProposalResponse'] = _PROPOSALRESPONSE +DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE +DESCRIPTOR.message_types_by_name['ProposalResponsePayload'] = _PROPOSALRESPONSEPAYLOAD +DESCRIPTOR.message_types_by_name['Endorsement'] = _ENDORSEMENT + +ProposalResponse = _reflection.GeneratedProtocolMessageType('ProposalResponse', (_message.Message,), dict( + DESCRIPTOR = _PROPOSALRESPONSE, + __module__ = 'peer.proposal_response_pb2' + # @@protoc_insertion_point(class_scope:protos.ProposalResponse) + )) +_sym_db.RegisterMessage(ProposalResponse) + +Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), dict( + DESCRIPTOR = _RESPONSE, + __module__ = 'peer.proposal_response_pb2' + # @@protoc_insertion_point(class_scope:protos.Response) + )) +_sym_db.RegisterMessage(Response) + +ProposalResponsePayload = _reflection.GeneratedProtocolMessageType('ProposalResponsePayload', (_message.Message,), dict( + DESCRIPTOR = _PROPOSALRESPONSEPAYLOAD, + __module__ = 'peer.proposal_response_pb2' + # @@protoc_insertion_point(class_scope:protos.ProposalResponsePayload) + )) +_sym_db.RegisterMessage(ProposalResponsePayload) + +Endorsement = _reflection.GeneratedProtocolMessageType('Endorsement', (_message.Message,), dict( + DESCRIPTOR = _ENDORSEMENT, + __module__ = 'peer.proposal_response_pb2' + # @@protoc_insertion_point(class_scope:protos.Endorsement) + )) +_sym_db.RegisterMessage(Endorsement) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerB\027ProposalResponsePackageZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/proposal_response_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/peer/query_pb2.py b/app/platform/fabric/e2e-test/feature/peer/query_pb2.py new file mode 100644 index 000000000..e9a3631fb --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/query_pb2.py @@ -0,0 +1,235 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/query.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/query.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x10peer/query.proto\x12\x06protos\"C\n\x16\x43haincodeQueryResponse\x12)\n\nchaincodes\x18\x01 \x03(\x0b\x32\x15.protos.ChaincodeInfo\"g\n\rChaincodeInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\x12\r\n\x05input\x18\x04 \x01(\t\x12\x0c\n\x04\x65scc\x18\x05 \x01(\t\x12\x0c\n\x04vscc\x18\x06 \x01(\t\"=\n\x14\x43hannelQueryResponse\x12%\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x13.protos.ChannelInfo\"!\n\x0b\x43hannelInfo\x12\x12\n\nchannel_id\x18\x01 \x01(\tBO\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') +) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + + + + +_CHAINCODEQUERYRESPONSE = _descriptor.Descriptor( + name='ChaincodeQueryResponse', + full_name='protos.ChaincodeQueryResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='chaincodes', full_name='protos.ChaincodeQueryResponse.chaincodes', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=28, + serialized_end=95, +) + + +_CHAINCODEINFO = _descriptor.Descriptor( + name='ChaincodeInfo', + full_name='protos.ChaincodeInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='protos.ChaincodeInfo.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='version', full_name='protos.ChaincodeInfo.version', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='path', full_name='protos.ChaincodeInfo.path', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='input', full_name='protos.ChaincodeInfo.input', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='escc', full_name='protos.ChaincodeInfo.escc', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='vscc', full_name='protos.ChaincodeInfo.vscc', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=97, + serialized_end=200, +) + + +_CHANNELQUERYRESPONSE = _descriptor.Descriptor( + name='ChannelQueryResponse', + full_name='protos.ChannelQueryResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='channels', full_name='protos.ChannelQueryResponse.channels', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=202, + serialized_end=263, +) + + +_CHANNELINFO = _descriptor.Descriptor( + name='ChannelInfo', + full_name='protos.ChannelInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='channel_id', full_name='protos.ChannelInfo.channel_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=265, + serialized_end=298, +) + +_CHAINCODEQUERYRESPONSE.fields_by_name['chaincodes'].message_type = _CHAINCODEINFO +_CHANNELQUERYRESPONSE.fields_by_name['channels'].message_type = _CHANNELINFO +DESCRIPTOR.message_types_by_name['ChaincodeQueryResponse'] = _CHAINCODEQUERYRESPONSE +DESCRIPTOR.message_types_by_name['ChaincodeInfo'] = _CHAINCODEINFO +DESCRIPTOR.message_types_by_name['ChannelQueryResponse'] = _CHANNELQUERYRESPONSE +DESCRIPTOR.message_types_by_name['ChannelInfo'] = _CHANNELINFO + +ChaincodeQueryResponse = _reflection.GeneratedProtocolMessageType('ChaincodeQueryResponse', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEQUERYRESPONSE, + __module__ = 'peer.query_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeQueryResponse) + )) +_sym_db.RegisterMessage(ChaincodeQueryResponse) + +ChaincodeInfo = _reflection.GeneratedProtocolMessageType('ChaincodeInfo', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEINFO, + __module__ = 'peer.query_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeInfo) + )) +_sym_db.RegisterMessage(ChaincodeInfo) + +ChannelQueryResponse = _reflection.GeneratedProtocolMessageType('ChannelQueryResponse', (_message.Message,), dict( + DESCRIPTOR = _CHANNELQUERYRESPONSE, + __module__ = 'peer.query_pb2' + # @@protoc_insertion_point(class_scope:protos.ChannelQueryResponse) + )) +_sym_db.RegisterMessage(ChannelQueryResponse) + +ChannelInfo = _reflection.GeneratedProtocolMessageType('ChannelInfo', (_message.Message,), dict( + DESCRIPTOR = _CHANNELINFO, + __module__ = 'peer.query_pb2' + # @@protoc_insertion_point(class_scope:protos.ChannelInfo) + )) +_sym_db.RegisterMessage(ChannelInfo) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/query_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/query_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/query_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/feature/peer/resources_pb2.py b/app/platform/fabric/e2e-test/feature/peer/resources_pb2.py new file mode 100644 index 000000000..27702668a --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/resources_pb2.py @@ -0,0 +1,301 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/resources.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from common import configtx_pb2 as common_dot_configtx__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/resources.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x14peer/resources.proto\x12\x06protos\x1a\x15\x63ommon/configtx.proto\"!\n\x0b\x41PIResource\x12\x12\n\npolicy_ref\x18\x01 \x01(\t\"4\n\x13\x43haincodeIdentifier\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0f\n\x07version\x18\x02 \x01(\t\"5\n\x13\x43haincodeValidation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x61rgument\x18\x02 \x01(\x0c\"*\n\x08VSCCArgs\x12\x1e\n\x16\x65ndorsement_policy_ref\x18\x01 \x01(\t\"$\n\x14\x43haincodeEndorsement\x12\x0c\n\x04name\x18\x01 \x01(\t\"^\n\nConfigTree\x12&\n\x0e\x63hannel_config\x18\x01 \x01(\x0b\x32\x0e.common.Config\x12(\n\x10resources_config\x18\x02 \x01(\x0b\x32\x0e.common.ConfigBO\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[common_dot_configtx__pb2.DESCRIPTOR,]) + + + + +_APIRESOURCE = _descriptor.Descriptor( + name='APIResource', + full_name='protos.APIResource', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='policy_ref', full_name='protos.APIResource.policy_ref', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=55, + serialized_end=88, +) + + +_CHAINCODEIDENTIFIER = _descriptor.Descriptor( + name='ChaincodeIdentifier', + full_name='protos.ChaincodeIdentifier', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='hash', full_name='protos.ChaincodeIdentifier.hash', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='version', full_name='protos.ChaincodeIdentifier.version', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=90, + serialized_end=142, +) + + +_CHAINCODEVALIDATION = _descriptor.Descriptor( + name='ChaincodeValidation', + full_name='protos.ChaincodeValidation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='protos.ChaincodeValidation.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='argument', full_name='protos.ChaincodeValidation.argument', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=144, + serialized_end=197, +) + + +_VSCCARGS = _descriptor.Descriptor( + name='VSCCArgs', + full_name='protos.VSCCArgs', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='endorsement_policy_ref', full_name='protos.VSCCArgs.endorsement_policy_ref', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=199, + serialized_end=241, +) + + +_CHAINCODEENDORSEMENT = _descriptor.Descriptor( + name='ChaincodeEndorsement', + full_name='protos.ChaincodeEndorsement', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='protos.ChaincodeEndorsement.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=243, + serialized_end=279, +) + + +_CONFIGTREE = _descriptor.Descriptor( + name='ConfigTree', + full_name='protos.ConfigTree', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='channel_config', full_name='protos.ConfigTree.channel_config', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='resources_config', full_name='protos.ConfigTree.resources_config', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=281, + serialized_end=375, +) + +_CONFIGTREE.fields_by_name['channel_config'].message_type = common_dot_configtx__pb2._CONFIG +_CONFIGTREE.fields_by_name['resources_config'].message_type = common_dot_configtx__pb2._CONFIG +DESCRIPTOR.message_types_by_name['APIResource'] = _APIRESOURCE +DESCRIPTOR.message_types_by_name['ChaincodeIdentifier'] = _CHAINCODEIDENTIFIER +DESCRIPTOR.message_types_by_name['ChaincodeValidation'] = _CHAINCODEVALIDATION +DESCRIPTOR.message_types_by_name['VSCCArgs'] = _VSCCARGS +DESCRIPTOR.message_types_by_name['ChaincodeEndorsement'] = _CHAINCODEENDORSEMENT +DESCRIPTOR.message_types_by_name['ConfigTree'] = _CONFIGTREE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +APIResource = _reflection.GeneratedProtocolMessageType('APIResource', (_message.Message,), dict( + DESCRIPTOR = _APIRESOURCE, + __module__ = 'peer.resources_pb2' + # @@protoc_insertion_point(class_scope:protos.APIResource) + )) +_sym_db.RegisterMessage(APIResource) + +ChaincodeIdentifier = _reflection.GeneratedProtocolMessageType('ChaincodeIdentifier', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEIDENTIFIER, + __module__ = 'peer.resources_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeIdentifier) + )) +_sym_db.RegisterMessage(ChaincodeIdentifier) + +ChaincodeValidation = _reflection.GeneratedProtocolMessageType('ChaincodeValidation', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEVALIDATION, + __module__ = 'peer.resources_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeValidation) + )) +_sym_db.RegisterMessage(ChaincodeValidation) + +VSCCArgs = _reflection.GeneratedProtocolMessageType('VSCCArgs', (_message.Message,), dict( + DESCRIPTOR = _VSCCARGS, + __module__ = 'peer.resources_pb2' + # @@protoc_insertion_point(class_scope:protos.VSCCArgs) + )) +_sym_db.RegisterMessage(VSCCArgs) + +ChaincodeEndorsement = _reflection.GeneratedProtocolMessageType('ChaincodeEndorsement', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEENDORSEMENT, + __module__ = 'peer.resources_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeEndorsement) + )) +_sym_db.RegisterMessage(ChaincodeEndorsement) + +ConfigTree = _reflection.GeneratedProtocolMessageType('ConfigTree', (_message.Message,), dict( + DESCRIPTOR = _CONFIGTREE, + __module__ = 'peer.resources_pb2' + # @@protoc_insertion_point(class_scope:protos.ConfigTree) + )) +_sym_db.RegisterMessage(ConfigTree) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/resources_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/resources_pb2_grpc.py new file mode 100644 index 000000000..a89435267 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/resources_pb2_grpc.py @@ -0,0 +1,3 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + diff --git a/app/platform/fabric/e2e-test/feature/peer/transaction_pb2.py b/app/platform/fabric/e2e-test/feature/peer/transaction_pb2.py new file mode 100644 index 000000000..b2bee443d --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/transaction_pb2.py @@ -0,0 +1,426 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peer/transaction.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from peer import proposal_response_pb2 as peer_dot_proposal__response__pb2 +from common import common_pb2 as common_dot_common__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peer/transaction.proto', + package='protos', + syntax='proto3', + serialized_pb=_b('\n\x16peer/transaction.proto\x12\x06protos\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cpeer/proposal_response.proto\x1a\x13\x63ommon/common.proto\"A\n\x11SignedTransaction\x12\x19\n\x11transaction_bytes\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\"]\n\x14ProcessedTransaction\x12-\n\x13transactionEnvelope\x18\x01 \x01(\x0b\x32\x10.common.Envelope\x12\x16\n\x0evalidationCode\x18\x02 \x01(\x05\"9\n\x0bTransaction\x12*\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x19.protos.TransactionAction\"4\n\x11TransactionAction\x12\x0e\n\x06header\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"m\n\x16\x43haincodeActionPayload\x12\"\n\x1a\x63haincode_proposal_payload\x18\x01 \x01(\x0c\x12/\n\x06\x61\x63tion\x18\x02 \x01(\x0b\x32\x1f.protos.ChaincodeEndorsedAction\"g\n\x17\x43haincodeEndorsedAction\x12!\n\x19proposal_response_payload\x18\x01 \x01(\x0c\x12)\n\x0c\x65ndorsements\x18\x02 \x03(\x0b\x32\x13.protos.Endorsement*\xc2\x03\n\x10TxValidationCode\x12\t\n\x05VALID\x10\x00\x12\x10\n\x0cNIL_ENVELOPE\x10\x01\x12\x0f\n\x0b\x42\x41\x44_PAYLOAD\x10\x02\x12\x15\n\x11\x42\x41\x44_COMMON_HEADER\x10\x03\x12\x19\n\x15\x42\x41\x44_CREATOR_SIGNATURE\x10\x04\x12 \n\x1cINVALID_ENDORSER_TRANSACTION\x10\x05\x12\x1e\n\x1aINVALID_CONFIG_TRANSACTION\x10\x06\x12\x1a\n\x16UNSUPPORTED_TX_PAYLOAD\x10\x07\x12\x15\n\x11\x42\x41\x44_PROPOSAL_TXID\x10\x08\x12\x12\n\x0e\x44UPLICATE_TXID\x10\t\x12\x1e\n\x1a\x45NDORSEMENT_POLICY_FAILURE\x10\n\x12\x16\n\x12MVCC_READ_CONFLICT\x10\x0b\x12\x19\n\x15PHANTOM_READ_CONFLICT\x10\x0c\x12\x13\n\x0fUNKNOWN_TX_TYPE\x10\r\x12\x1a\n\x16TARGET_CHAIN_NOT_FOUND\x10\x0e\x12\x14\n\x10MARSHAL_TX_ERROR\x10\x0f\x12\x10\n\x0cNIL_TXACTION\x10\x10\x12\x19\n\x14INVALID_OTHER_REASON\x10\xff\x01\x42\x63\n\"org.hyperledger.fabric.protos.peerB\x12TransactionPackageZ)github.com/hyperledger/fabric/protos/peerb\x06proto3') + , + dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,peer_dot_proposal__response__pb2.DESCRIPTOR,common_dot_common__pb2.DESCRIPTOR,]) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_TXVALIDATIONCODE = _descriptor.EnumDescriptor( + name='TxValidationCode', + full_name='protos.TxValidationCode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='VALID', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NIL_ENVELOPE', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAD_PAYLOAD', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAD_COMMON_HEADER', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAD_CREATOR_SIGNATURE', index=4, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INVALID_ENDORSER_TRANSACTION', index=5, number=5, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INVALID_CONFIG_TRANSACTION', index=6, number=6, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UNSUPPORTED_TX_PAYLOAD', index=7, number=7, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAD_PROPOSAL_TXID', index=8, number=8, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DUPLICATE_TXID', index=9, number=9, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ENDORSEMENT_POLICY_FAILURE', index=10, number=10, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MVCC_READ_CONFLICT', index=11, number=11, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PHANTOM_READ_CONFLICT', index=12, number=12, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UNKNOWN_TX_TYPE', index=13, number=13, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TARGET_CHAIN_NOT_FOUND', index=14, number=14, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='MARSHAL_TX_ERROR', index=15, number=15, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='NIL_TXACTION', index=16, number=16, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='INVALID_OTHER_REASON', index=17, number=255, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=610, + serialized_end=1060, +) +_sym_db.RegisterEnumDescriptor(_TXVALIDATIONCODE) + +TxValidationCode = enum_type_wrapper.EnumTypeWrapper(_TXVALIDATIONCODE) +VALID = 0 +NIL_ENVELOPE = 1 +BAD_PAYLOAD = 2 +BAD_COMMON_HEADER = 3 +BAD_CREATOR_SIGNATURE = 4 +INVALID_ENDORSER_TRANSACTION = 5 +INVALID_CONFIG_TRANSACTION = 6 +UNSUPPORTED_TX_PAYLOAD = 7 +BAD_PROPOSAL_TXID = 8 +DUPLICATE_TXID = 9 +ENDORSEMENT_POLICY_FAILURE = 10 +MVCC_READ_CONFLICT = 11 +PHANTOM_READ_CONFLICT = 12 +UNKNOWN_TX_TYPE = 13 +TARGET_CHAIN_NOT_FOUND = 14 +MARSHAL_TX_ERROR = 15 +NIL_TXACTION = 16 +INVALID_OTHER_REASON = 255 + + + +_SIGNEDTRANSACTION = _descriptor.Descriptor( + name='SignedTransaction', + full_name='protos.SignedTransaction', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='transaction_bytes', full_name='protos.SignedTransaction.transaction_bytes', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='signature', full_name='protos.SignedTransaction.signature', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=118, + serialized_end=183, +) + + +_PROCESSEDTRANSACTION = _descriptor.Descriptor( + name='ProcessedTransaction', + full_name='protos.ProcessedTransaction', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='transactionEnvelope', full_name='protos.ProcessedTransaction.transactionEnvelope', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='validationCode', full_name='protos.ProcessedTransaction.validationCode', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=185, + serialized_end=278, +) + + +_TRANSACTION = _descriptor.Descriptor( + name='Transaction', + full_name='protos.Transaction', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='actions', full_name='protos.Transaction.actions', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=280, + serialized_end=337, +) + + +_TRANSACTIONACTION = _descriptor.Descriptor( + name='TransactionAction', + full_name='protos.TransactionAction', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='protos.TransactionAction.header', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='payload', full_name='protos.TransactionAction.payload', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=339, + serialized_end=391, +) + + +_CHAINCODEACTIONPAYLOAD = _descriptor.Descriptor( + name='ChaincodeActionPayload', + full_name='protos.ChaincodeActionPayload', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='chaincode_proposal_payload', full_name='protos.ChaincodeActionPayload.chaincode_proposal_payload', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='action', full_name='protos.ChaincodeActionPayload.action', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=393, + serialized_end=502, +) + + +_CHAINCODEENDORSEDACTION = _descriptor.Descriptor( + name='ChaincodeEndorsedAction', + full_name='protos.ChaincodeEndorsedAction', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='proposal_response_payload', full_name='protos.ChaincodeEndorsedAction.proposal_response_payload', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=_b(""), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='endorsements', full_name='protos.ChaincodeEndorsedAction.endorsements', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=504, + serialized_end=607, +) + +_PROCESSEDTRANSACTION.fields_by_name['transactionEnvelope'].message_type = common_dot_common__pb2._ENVELOPE +_TRANSACTION.fields_by_name['actions'].message_type = _TRANSACTIONACTION +_CHAINCODEACTIONPAYLOAD.fields_by_name['action'].message_type = _CHAINCODEENDORSEDACTION +_CHAINCODEENDORSEDACTION.fields_by_name['endorsements'].message_type = peer_dot_proposal__response__pb2._ENDORSEMENT +DESCRIPTOR.message_types_by_name['SignedTransaction'] = _SIGNEDTRANSACTION +DESCRIPTOR.message_types_by_name['ProcessedTransaction'] = _PROCESSEDTRANSACTION +DESCRIPTOR.message_types_by_name['Transaction'] = _TRANSACTION +DESCRIPTOR.message_types_by_name['TransactionAction'] = _TRANSACTIONACTION +DESCRIPTOR.message_types_by_name['ChaincodeActionPayload'] = _CHAINCODEACTIONPAYLOAD +DESCRIPTOR.message_types_by_name['ChaincodeEndorsedAction'] = _CHAINCODEENDORSEDACTION +DESCRIPTOR.enum_types_by_name['TxValidationCode'] = _TXVALIDATIONCODE + +SignedTransaction = _reflection.GeneratedProtocolMessageType('SignedTransaction', (_message.Message,), dict( + DESCRIPTOR = _SIGNEDTRANSACTION, + __module__ = 'peer.transaction_pb2' + # @@protoc_insertion_point(class_scope:protos.SignedTransaction) + )) +_sym_db.RegisterMessage(SignedTransaction) + +ProcessedTransaction = _reflection.GeneratedProtocolMessageType('ProcessedTransaction', (_message.Message,), dict( + DESCRIPTOR = _PROCESSEDTRANSACTION, + __module__ = 'peer.transaction_pb2' + # @@protoc_insertion_point(class_scope:protos.ProcessedTransaction) + )) +_sym_db.RegisterMessage(ProcessedTransaction) + +Transaction = _reflection.GeneratedProtocolMessageType('Transaction', (_message.Message,), dict( + DESCRIPTOR = _TRANSACTION, + __module__ = 'peer.transaction_pb2' + # @@protoc_insertion_point(class_scope:protos.Transaction) + )) +_sym_db.RegisterMessage(Transaction) + +TransactionAction = _reflection.GeneratedProtocolMessageType('TransactionAction', (_message.Message,), dict( + DESCRIPTOR = _TRANSACTIONACTION, + __module__ = 'peer.transaction_pb2' + # @@protoc_insertion_point(class_scope:protos.TransactionAction) + )) +_sym_db.RegisterMessage(TransactionAction) + +ChaincodeActionPayload = _reflection.GeneratedProtocolMessageType('ChaincodeActionPayload', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEACTIONPAYLOAD, + __module__ = 'peer.transaction_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeActionPayload) + )) +_sym_db.RegisterMessage(ChaincodeActionPayload) + +ChaincodeEndorsedAction = _reflection.GeneratedProtocolMessageType('ChaincodeEndorsedAction', (_message.Message,), dict( + DESCRIPTOR = _CHAINCODEENDORSEDACTION, + __module__ = 'peer.transaction_pb2' + # @@protoc_insertion_point(class_scope:protos.ChaincodeEndorsedAction) + )) +_sym_db.RegisterMessage(ChaincodeEndorsedAction) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\"org.hyperledger.fabric.protos.peerB\022TransactionPackageZ)github.com/hyperledger/fabric/protos/peer')) +try: + # THESE ELEMENTS WILL BE DEPRECATED. + # Please use the generated *_pb2_grpc.py files instead. + import grpc + from grpc.framework.common import cardinality + from grpc.framework.interfaces.face import utilities as face_utilities + from grpc.beta import implementations as beta_implementations + from grpc.beta import interfaces as beta_interfaces +except ImportError: + pass +# @@protoc_insertion_point(module_scope) diff --git a/app/platform/fabric/e2e-test/feature/peer/transaction_pb2_grpc.py b/app/platform/fabric/e2e-test/feature/peer/transaction_pb2_grpc.py new file mode 100644 index 000000000..d5557c123 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/peer/transaction_pb2_grpc.py @@ -0,0 +1,5 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc +from grpc.framework.common import cardinality +from grpc.framework.interfaces.face import utilities as face_utilities + diff --git a/app/platform/fabric/e2e-test/requirement.txt b/app/platform/fabric/e2e-test/feature/requirement.txt similarity index 100% rename from app/platform/fabric/e2e-test/requirement.txt rename to app/platform/fabric/e2e-test/feature/requirement.txt diff --git a/app/platform/fabric/e2e-test/sdk/java/jar-with-dependencies-exclude-resources.xml b/app/platform/fabric/e2e-test/feature/sdk/java/jar-with-dependencies-exclude-resources.xml similarity index 100% rename from app/platform/fabric/e2e-test/sdk/java/jar-with-dependencies-exclude-resources.xml rename to app/platform/fabric/e2e-test/feature/sdk/java/jar-with-dependencies-exclude-resources.xml diff --git a/app/platform/fabric/e2e-test/sdk/java/package.sh b/app/platform/fabric/e2e-test/feature/sdk/java/package.sh similarity index 85% rename from app/platform/fabric/e2e-test/sdk/java/package.sh rename to app/platform/fabric/e2e-test/feature/sdk/java/package.sh index 04e76cd16..e78783e1e 100755 --- a/app/platform/fabric/e2e-test/sdk/java/package.sh +++ b/app/platform/fabric/e2e-test/feature/sdk/java/package.sh @@ -1,9 +1,5 @@ #!/bin/bash -e -# -# SPDX-License-Identifier: Apache-2.0 -# - WD=$GOPATH/src/github.com/hyperledger/fabric-test/feature/sdk/java cd $WD diff --git a/app/platform/fabric/e2e-test/sdk/java/pom.xml b/app/platform/fabric/e2e-test/feature/sdk/java/pom.xml similarity index 100% rename from app/platform/fabric/e2e-test/sdk/java/pom.xml rename to app/platform/fabric/e2e-test/feature/sdk/java/pom.xml diff --git a/app/platform/fabric/e2e-test/sdk/java/src/META-INF/MANIFEST.MF b/app/platform/fabric/e2e-test/feature/sdk/java/src/META-INF/MANIFEST.MF similarity index 100% rename from app/platform/fabric/e2e-test/sdk/java/src/META-INF/MANIFEST.MF rename to app/platform/fabric/e2e-test/feature/sdk/java/src/META-INF/MANIFEST.MF diff --git a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/CreateAppUser.java b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/CreateAppUser.java similarity index 74% rename from app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/CreateAppUser.java rename to app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/CreateAppUser.java index bb5acf694..415aef229 100644 --- a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/CreateAppUser.java +++ b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/CreateAppUser.java @@ -1,7 +1,3 @@ -/* - *SPDX-License-Identifier: Apache-2.0 - */ - package org.hyperledger.fabric_test.operations; public class CreateAppUser { diff --git a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/PeerOperations.java b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/PeerOperations.java similarity index 99% rename from app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/PeerOperations.java rename to app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/PeerOperations.java index 8984eeb1f..cb7934aae 100644 --- a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/PeerOperations.java +++ b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/operations/PeerOperations.java @@ -1,7 +1,3 @@ -/* - *SPDX-License-Identifier: Apache-2.0 - */ - package org.hyperledger.fabric_test.operations; import com.beust.jcommander.JCommander; diff --git a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppEnrollment.java b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppEnrollment.java similarity index 89% rename from app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppEnrollment.java rename to app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppEnrollment.java index 0e4b06cee..813be618a 100644 --- a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppEnrollment.java +++ b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppEnrollment.java @@ -1,7 +1,3 @@ -/* - *SPDX-License-Identifier: Apache-2.0 - */ - package org.hyperledger.fabric_test.structures; import org.hyperledger.fabric.sdk.Enrollment; diff --git a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppPrivateKey.java b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppPrivateKey.java similarity index 88% rename from app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppPrivateKey.java rename to app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppPrivateKey.java index 6d8683dc0..4d1981b6b 100644 --- a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppPrivateKey.java +++ b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppPrivateKey.java @@ -1,7 +1,3 @@ -/* - *SPDX-License-Identifier: Apache-2.0 - */ - package org.hyperledger.fabric_test.structures; import java.security.PrivateKey; diff --git a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppUser.java b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppUser.java similarity index 98% rename from app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppUser.java rename to app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppUser.java index 93ec7774f..6ca79b2b2 100644 --- a/app/platform/fabric/e2e-test/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppUser.java +++ b/app/platform/fabric/e2e-test/feature/sdk/java/src/main/java/org/hyperledger/fabric_test/structures/AppUser.java @@ -1,7 +1,3 @@ -/* - *SPDX-License-Identifier: Apache-2.0 - */ - package org.hyperledger.fabric_test.structures; import org.hyperledger.fabric.sdk.Enrollment; diff --git a/app/platform/fabric/e2e-test/feature/sdk/node/common.js b/app/platform/fabric/e2e-test/feature/sdk/node/common.js new file mode 100644 index 000000000..912762477 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/sdk/node/common.js @@ -0,0 +1,137 @@ +/** + * Copyright IBM Corp All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + */ +'use strict'; +const log4js = require('log4js'); +const logger = log4js.getLogger('SDK_INT'); + +const path = require('path'); +const util = require('util'); +const fs = require('fs-extra'); +const Client = require('fabric-client'); + +function setupPeers(peers, channel, org, client, network_config, tls) { + let nodes = network_config[org]['peers']; + for (let key in nodes) { + if (peers.indexOf(key) >= 0) { + let peer; + if (tls === true){ + let data = fs.readFileSync(nodes[key].tls_cacerts); + peer = client.newPeer( + nodes[key].requests, { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': key + } + ); + } else { + peer = client.newPeer(nodes[key].requests); + } + peer.setName(key); + channel.addPeer(peer); + } + } +} + +var newPeers = function(names, org, network_config, client) { + return newRemotes(names, true, org, network_config, client); +}; + +var newEventHubs = function(names, org, network_config, client) { + return newRemotes(names, false, org, network_config, client); +}; + +function readAllFiles(dir) { + var files = fs.readdirSync(dir); + var certs = []; + files.forEach((file_name) => { + let file_path = path.join(dir,file_name); + let data = fs.readFileSync(file_path); + certs.push(data); + }); + return certs; +} + +function getKeyStoreForOrg(org) { + // console.info("???" + Client.getConfigSetting('keyValueStore') + '_' + org); + return Client.getConfigSetting('keyValueStore') + '_' + org; +} + +function newRemotes(names, forPeers, userOrg, network_config, client) { + let targets = []; + // find the peer that match the names + for (let idx in names) { + let peerName = names[idx]; + let nodes = network_config[userOrg]['peers']; + if (nodes[peerName]) { + // found a peer matching the name + let data = fs.readFileSync(nodes[peerName].tls_cacerts); + let grpcOpts = { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ''+peerName + }; + if (forPeers) { + targets.push(client.newPeer(nodes[peerName].requests, grpcOpts)); + } else { + let eh = client.newEventHub(); + eh.setPeerAddr(nodes[peerName].events, grpcOpts); + targets.push(eh); + } + } + } + + if (targets.length === 0) { + logger.error(util.format('Failed to find peers matching the names %s', names)); + } + return targets; +} + +function newOrderer(client, network_config, orderer, tls) { + let url = network_config.orderer.url; + if (tls === true){ + let data = fs.readFileSync(network_config.orderer.tls_cacerts); + let pem = Buffer.from(data).toString(); + return client.newOrderer(url, { + 'pem': pem, + 'ssl-target-name-override': network_config.orderer['server-hostname'] + }); + } else { + return client.newOrderer(url); + } +} + +var getRegisteredUsers = function(client, username, org, networkID, mspID) { + var keyPath = util.format('./configs/%s/peerOrganizations/%s/users/%s/msp/keystore/', networkID, org, username); + var keyPEM = Buffer.from(readAllFiles(keyPath)[0]).toString(); + var certPath = util.format('./configs/%s/peerOrganizations/%s/users/%s/msp/signcerts/', networkID, org, username); + var certPEM = readAllFiles(certPath)[0].toString(); + + var cryptoSuite = Client.newCryptoSuite(); + cryptoSuite.setCryptoKeyStore(Client.newCryptoKeyStore({path: '/tmp/fabric-client-kvs_'+org.split('.')[0]})); + client.setCryptoSuite(cryptoSuite); + + return Client.newDefaultKeyValueStore({ + path: getKeyStoreForOrg(org) + }).then((store) => { + client.setStateStore(store); + + return client.createUser({ + username: username.split('@')[0], + mspid: mspID, + cryptoContent: { + privateKeyPEM: keyPEM, + signedCertPEM: certPEM + } + }); + }); +} + +exports.newPeers = newPeers; +exports.newEventHubs = newEventHubs; +exports.setupPeers = setupPeers; +exports.newRemotes = newRemotes; +exports.newOrderer = newOrderer; +exports.getRegisteredUsers = getRegisteredUsers; +exports.getKeyStoreForOrg = getKeyStoreForOrg; +exports.readAllFiles = readAllFiles; diff --git a/app/platform/fabric/e2e-test/feature/sdk/node/invoke.js b/app/platform/fabric/e2e-test/feature/sdk/node/invoke.js new file mode 100644 index 000000000..60e826d16 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/sdk/node/invoke.js @@ -0,0 +1,216 @@ +/** + * Copyright IBM Corp All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + */ + +'use strict'; +const fs = require('fs'); +const path = require('path'); +const util = require('util'); +const hfc = require('fabric-client'); +const {Gateway, InMemoryWallet, X509WalletMixin} = require('fabric-network'); +const common = require('./common.js'); +const client = new hfc(); + +/** + * Perform an "invoke" action on installed/instantiated chaincode + * @param {String} inputFilePath the file path containing test run information as a JSON object containing + * { + * username: the test user name + * org: the organisation to use + * chaincode: object describing the chaincode parameters + * orderer: the orderer to use + * networkConfigFile: the network configuration file path + * opts: additional test parameters + * } + */ +function invoke(inputFilePath) { + + const filePath = path.join(__dirname, inputFilePath); + const inputData = JSON.parse(fs.readFileSync(filePath, {encoding: 'utf-8'})); + + const temptext = '\n\n Username : '+ inputData.user + + '\n\n Org: '+ inputData.org + + '\n\n OrgName: '+ inputData.orgName + + '\n\n chaincode : '+ util.format(inputData.chaincode) + + '\n\n peerNames : '+ inputData.peers + + '\n\n orderer: '+ inputData.orderer + + '\n\n network_config_path: '+ inputData.networkConfigFile + + '\n\n opts: '+ util.format(inputData.opts); + //console.log(temptext); + + // Read Network JSON PATH from behave + let network_config; + try { + network_config = JSON.parse(fs.readFileSync(inputData.networkConfigFile)); + } catch(err) { + console.error(err); + } + + // Node SDK implements transaction as well as invoke, disambiguate on the passed opts + if(inputData.opts && inputData.opts['network-model'] && inputData.opts['network-model'].localeCompare("true") === 0){ + return _submitTransaction(inputData.orgName, inputData.chaincode, network_config) + } else { + return _invoke(inputData.user, inputData.org, inputData.orgName, inputData.chaincode, inputData.peers, inputData.orderer, network_config) + } +}; + +/** + * Perform an invoke using the NodeSDK + * @param {Strinrg} username the user name to perform the action under + * @param {String} org the organisation to use + * @param {String} orgName the organisation name + * @param {JSON} chaincode the chaincode descriptor + * @param {[String]} peerNames string array of peers + * @param {String} orderer the orderer + * @param {JSON} network_config the network configuration + */ +function _invoke(username, org, orgName, chaincode, peerNames, orderer, network_config) { + let channel; + + let targets = (peerNames) ? common.newPeers(peerNames, orgName, network_config['network-config'], client) : undefined; + + const user = username.split('@')[1] ? username : username+'@'+org; + const userOrg = username.split('@')[1] ? username.split('@')[1] : org; + + let tx_id = null; + return common.getRegisteredUsers(client, user, userOrg, network_config['networkID'], network_config['network-config'][orgName]['mspid']).then((user) => { + tx_id = client.newTransactionID(); + + channel = client.newChannel(chaincode.channelId); + channel.addOrderer(common.newOrderer(client, network_config['network-config'], orderer, network_config['tls'])); + common.setupPeers(peerNames, channel, orgName, client, network_config['network-config'], network_config['tls']); + + // send proposal to endorser + let request = { + chaincodeId: chaincode.chaincodeId, + fcn: chaincode.fcn, + args: chaincode.args, + chainId: chaincode.channelId, + txId: tx_id + }; + + if (targets) { + request.targets = targets; + } + + console.info(JSON.stringify(["ok", "request is set"])); + return channel.sendTransactionProposal(request, 120000); + }, (err) => { + console.error('Failed to enroll user \'' + username + '\'. ' + err); + throw new Error('Failed to enroll user \'' + username + '\'. ' + err); + }).then((results) => { + console.info(JSON.stringify(["ok", "proposal sent"])); + let proposalResponses = results[0]; + let proposal = results[1]; + let all_good = true; + for (var i in proposalResponses) { + let one_good = false; + if (proposalResponses && proposalResponses[i].response && + proposalResponses[i].response.status === 200) { + one_good = true; + } else { + console.error('transaction proposal was bad'); + } + all_good = all_good & one_good; + } + if (all_good) { + var request = { + proposalResponses: proposalResponses, + proposal: proposal + }; + // set the transaction listener and set a timeout of 30sec + // if the transaction did not get committed within the timeout period, + // fail the test + let eventPromises = []; + + if (!peerNames) { + peerNames = channel.getPeers().map(function(peer) { + return peer.getName(); + }); + } + + let sendPromise = channel.sendTransaction(request); + return Promise.all([sendPromise].concat(eventPromises)).then((results) => { + return results[0]; // the first returned value is from the 'sendPromise' which is from the 'sendTransaction()' call + }).catch((err) => { + console.error(JSON.stringify( + ["error", 'Failed to send transaction and get notifications within the timeout period.'] + ) + ); + return 'Failed to send transaction and get notifications within the timeout period.'; + }); + } else { + console.error( + 'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...' + ); + return 'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...'; + } + }, (err) => { + console.error('Failed to send proposal due to error: ' + err.stack ? err.stack : + err); + return 'Failed to send proposal due to error: ' + err.stack ? err.stack : + err; + }).then((response) => { + if (response.status === 'SUCCESS') { + var jsonResponse = ["ok", tx_id.getTransactionID().toString()]; + console.info(JSON.stringify(jsonResponse)); + return JSON.stringify(jsonResponse); + } else { + console.error(JSON.stringify(["ok", 'Failed to order the transaction. Error code: ' + response])); + return 'Failed to order the transaction. Error code: ' + response.status; + } + }, (err) => { + console.error('Failed to send transaction due to error: ' + err.stack ? err + .stack : err); + return 'Failed to send transaction due to error: ' + err.stack ? err.stack : + err; + }); +} + +/** + * Perform a transaction invoke using the network APIs + * @param {String} org the organisation to use + * @param {JSON} chaincode the chaincode descriptor + * @param {JSON} network_config the network configuration + */ +async function _submitTransaction(org, chaincode, network_config){ + const ccp = network_config['common-connection-profile']; + const orgConfig = ccp.organizations[org]; + const cert = common.readAllFiles(orgConfig.signedCertPEM)[0]; + const key = common.readAllFiles(orgConfig.adminPrivateKeyPEM)[0]; + const inMemoryWallet = new InMemoryWallet(); + + const gateway = new Gateway(); + + try { + await inMemoryWallet.import('admin', X509WalletMixin.createIdentity(orgConfig.mspid, cert, key)); + + const opts = { + wallet: inMemoryWallet, + identity: 'admin', + discovery: { enabled: false } + }; + + await gateway.connect(ccp, opts); + + const network = await gateway.getNetwork(chaincode.channelId) + const contract = await network.getContract(chaincode.chaincodeId); + + const args = [chaincode.fcn, ...chaincode.args]; + const result = await contract.submitTransaction(...args); + + gateway.disconnect(); + return result; + } catch(err) { + throw new Error(err); + }; +} + +exports.invoke = invoke; +require('make-runnable'); + +// Example test calls +// node invoke.js invoke User1@org1.example.com Org1ExampleCom '{"channelId": "behavesystest", "args": ["a", "b", "10"], "chaincodeId": "mycc", "name": "mycc", "fcn": "invoke"}' ['peer0.org1.example.com'] orderer0.example.com /Users/nkl/go/src/github.com/hyperledger/fabric-test/feature/configs/0be5908ac30011e88d70acbc32c08695/network-config.json '{"transaction": "true"}' +// node invoke.js invoke User1@org1.example.com Org1ExampleCom '{"channelId": "behavesystest", "args": ["a", "b", "10"], "chaincodeId": "mycc", "name": "mycc", "fcn": "invoke"}' ['peer0.org1.example.com'] orderer0.example.com /Users/nkl/go/src/github.com/hyperledger/fabric-test/feature/configs/4fe4f54cc62411e8977eacbc32c08695/network-config.json '{"transaction": "true"}' \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/feature/sdk/node/query.js b/app/platform/fabric/e2e-test/feature/sdk/node/query.js new file mode 100644 index 000000000..f3088f436 --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/sdk/node/query.js @@ -0,0 +1,184 @@ +/** + * Copyright IBM Corp All Rights Reserved + * + * SPDX-License-Identifier: Apache-2.0 + */ + +const fs = require('fs'); +const path = require('path'); +const util = require('util'); +const common = require('./common.js'); +const {Gateway, InMemoryWallet, X509WalletMixin} = require('fabric-network'); +const Client = require('fabric-client'); +let client = new Client(); + +/** + * Perform a query using installed/instantiated chaincode + * @param {String} inputFilePath the file path containing test run information as a JSON object containing + * { + * username: the test user name + * org: the organisation to use + * chaincode: object describing the chaincode parameters + * peer: array of the peers to use + * networkConfigFile: the network configuration file path + * opts: additional test parameters + * } + */ +function query(inputFilePath) { + + const filePath = path.join(__dirname, inputFilePath); + const inputData = JSON.parse(fs.readFileSync(filePath, {encoding: 'utf-8'})); + + const temptext = '\n\n user : ' + inputData.user + + '\n\n Org: ' + inputData.org + + '\n\n OrgName: ' + inputData.orgName + + '\n\n chaincode : ' + util.format(inputData.chaincode) + + '\n\n peerNames : ' + inputData.peers + + '\n\n network_config_path: ' + inputData.networkConfigFile; + '\n\n opts: '+ util.format(inputData.opts); + //console.log(temptext); + + let network_config; + try { + network_config = JSON.parse(fs.readFileSync(inputData.networkConfigFile)); + } catch(err) { + console.error(err); + } + + // Node SDK implements network and native options, disambiguate on the passed opts + if(inputData.opts && inputData.opts['network-model'] && inputData.opts['network-model'].localeCompare("true") === 0){ + console.log('evaluating transaction .... ') + return _evaluateTransaction(inputData.orgName, inputData.chaincode, network_config) + } else { + console.log('performing query .... ') + return _query(inputData.user, inputData.peers[0], inputData.org, inputData.orgName, inputData.chaincode, network_config) + } +} + +/** + * Perform a query using the NodeJS SDK + * @param {String} username the user + * @param {String} peer the peer to use + * @param {String} userOrg the organisation to use + * @param {String} orgName the organisation name + * @param {JSON} chaincode the chaincode descriptor + * @param {JSON} network_config_details the network configuration + */ +async function _query(username, peer, org, orgName, chaincode, network_config_details){ + const user = username.split('@')[1] ? username : username+'@'+org; + const userOrg = username.split('@')[1] ? username.split('@')[1] : org; + const target = buildTarget(peer, orgName, network_config_details['network-config']); + + Client.setConfigSetting('request-timeout', 60000); + + // this is a transaction, will just use org's identity to + // submit the request. intentionally we are using a different org + // than the one that submitted the "move" transaction, although either org + // should work properly + const channel = client.newChannel(chaincode.channelId); + + const tlsInfo = await common.getRegisteredUsers(client, user, userOrg, network_config_details['networkID'], network_config_details['network-config'][orgName]['mspid']); + client.setTlsClientCertAndKey(tlsInfo.certificate, tlsInfo.key); + + const store = await Client.newDefaultKeyValueStore({path: common.getKeyStoreForOrg(userOrg)}); + client.setStateStore(store); + + const admin = await common.getRegisteredUsers(client, user,userOrg, network_config_details['networkID'], network_config_details['network-config'][orgName]['mspid']); + + tx_id = client.newTransactionID(); + common.setupPeers(peer, channel, orgName, client, network_config_details['network-config'], network_config_details['tls']); + + let request = { + targets: [target], + txId: tx_id, + chaincodeId: chaincode.chaincodeId, + fcn: chaincode.fcn, + args: chaincode.args + }; + + try { + // send query + const response_payloads = await channel.queryByChaincode(request); + if (response_payloads) { + let stringRespose = formatString(response_payloads.toString()); + var jsonResponse = {'response': stringRespose}; + console.info('\n query jsonResponse: ', jsonResponse); + return JSON.stringify(jsonResponse); + } else { + console.error('response_payloads is null'); + return {'error': 'response_payloads is null'}; + } + } catch (err) { + console.error(['error', 'Failed to send query due to error:' + err.stack ? err.stack : err]); + return {'Error': 'Failed to send query due to error:' + err.stack ? err.stack : err}; + } +}; + +function buildTarget(peer, org, network_config) { + var target = null; + if (typeof peer !== 'undefined') { + let targets = common.newPeers([peer], org, network_config, client); + if (targets && targets.length > 0) target = targets[0]; + } + return target; +} + +/** + * Conditionally strip the leading/trailing double quotes + */ +function formatString(inputString){ + if ((inputString.charAt(0)=='"') && (inputString.charAt(inputString.length -1)=='"')) { + return inputString.slice(1, -1); + } else { + return inputString; + } +} + +/** + * Perform a query using the NodeJS Netowrk APIs + * @param {String} org the organisation to use + * @param {JSON} chaincode the chaincode descriptor + * @param {JSON} network_config the network configuration + */ +async function _evaluateTransaction(org, chaincode, network_config){ + const ccp = network_config['common-connection-profile']; + const orgConfig = ccp.organizations[org]; + const cert = common.readAllFiles(orgConfig.signedCertPEM)[0]; + const key = common.readAllFiles(orgConfig.adminPrivateKeyPEM)[0]; + const inMemoryWallet = new InMemoryWallet(); + + const gateway = new Gateway(); + + try { + await inMemoryWallet.import('admin', X509WalletMixin.createIdentity(orgConfig.mspid, cert, key)); + + const opts = { + wallet: inMemoryWallet, + identity: 'admin', + discovery: { enabled: false } + }; + + await gateway.connect(ccp, opts); + + const network = await gateway.getNetwork(chaincode.channelId) + const contract = await network.getContract(chaincode.chaincodeId); + + const args = [chaincode.fcn, ...chaincode.args]; + const result = await contract.evaluateTransaction(...args); + + gateway.disconnect(); + + let stringRespose = formatString(result.toString()); + let jsonResponse = {'response': stringRespose}; + return JSON.stringify(jsonResponse); + } catch(err) { + throw new Error(err); + }; +} + +exports.query = query; +require('make-runnable'); + +// Example test calls +// node query.js query User1@org2.example.com Org2ExampleCom' {"args": ["a"], "fcn":"query", "channelId": "behavesystest", "chaincodeId": "mycc"}' ["peer1.org2.example.com"] /opt/gopath/src/github.com/hyperledger/fabric-test/feature/configs/3f09636eb35811e79e510214683e8447/network-config.json; +// node query.js query User1@org1.example.com Org1ExampleCom '{"channelId": "behavesystest", "args": ["a"], "chaincodeId": "mycc", "name": "mycc", "fcn": "query"}' ['peer0.org1.example.com'] /Users/nkl/go/src/github.com/hyperledger/fabric-test/feature/configs/4fe4f54cc62411e8977eacbc32c08695/network-config.json '{"transaction": "true"}' \ No newline at end of file diff --git a/app/platform/fabric/e2e-test/feature/steps/__init__.py b/app/platform/fabric/e2e-test/feature/steps/__init__.py new file mode 100644 index 000000000..49cd7f3ac --- /dev/null +++ b/app/platform/fabric/e2e-test/feature/steps/__init__.py @@ -0,0 +1,5 @@ +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# diff --git a/app/platform/fabric/e2e-test/steps/basic_impl.py b/app/platform/fabric/e2e-test/feature/steps/basic_impl.py similarity index 99% rename from app/platform/fabric/e2e-test/steps/basic_impl.py rename to app/platform/fabric/e2e-test/feature/steps/basic_impl.py index 92278f06d..da1f43bc0 100644 --- a/app/platform/fabric/e2e-test/steps/basic_impl.py +++ b/app/platform/fabric/e2e-test/feature/steps/basic_impl.py @@ -345,7 +345,7 @@ def step_impl(context): @when(u'I locally execute the command "{command}" saving the results as "{key}"') def step_impl(context, command, key): - # This is a workaround to allow sending piped commands to behave without conflicting with the pipes in the table. + # This is a workaround to allow sending piped commands to behave without conflicting with the pipes in the table. command = command.replace("!", "|") if not hasattr(context, "command_result"): context.command_result = {} diff --git a/app/platform/fabric/e2e-test/steps/bootstrap_impl.py b/app/platform/fabric/e2e-test/feature/steps/bootstrap_impl.py similarity index 100% rename from app/platform/fabric/e2e-test/steps/bootstrap_impl.py rename to app/platform/fabric/e2e-test/feature/steps/bootstrap_impl.py diff --git a/app/platform/fabric/e2e-test/steps/common_util.py b/app/platform/fabric/e2e-test/feature/steps/common_util.py similarity index 100% rename from app/platform/fabric/e2e-test/steps/common_util.py rename to app/platform/fabric/e2e-test/feature/steps/common_util.py diff --git a/app/platform/fabric/e2e-test/steps/compose_util.py b/app/platform/fabric/e2e-test/feature/steps/compose_util.py similarity index 99% rename from app/platform/fabric/e2e-test/steps/compose_util.py rename to app/platform/fabric/e2e-test/feature/steps/compose_util.py index 6306dc8df..82f5f14a8 100644 --- a/app/platform/fabric/e2e-test/steps/compose_util.py +++ b/app/platform/fabric/e2e-test/feature/steps/compose_util.py @@ -67,7 +67,7 @@ def up(self, force_recreate=True, components=[]): command = ["up", "-d"] if force_recreate: command += ["--force-recreate"] - cas = ["ca.org1.example.com", "ca.org2.example.com"] + cas = ["ca.example.com", "ca.org1.example.com", "ca.org2.example.com"] for ca in cas: self.setFabricCaEnv(ca) self.issueCommand(command + components) diff --git a/app/platform/fabric/e2e-test/steps/config_util.py b/app/platform/fabric/e2e-test/feature/steps/config_util.py similarity index 99% rename from app/platform/fabric/e2e-test/steps/config_util.py rename to app/platform/fabric/e2e-test/feature/steps/config_util.py index 9991726f2..d55dc7be5 100644 --- a/app/platform/fabric/e2e-test/steps/config_util.py +++ b/app/platform/fabric/e2e-test/feature/steps/config_util.py @@ -269,8 +269,6 @@ def generateCrypto(context, cryptoLoc="./configs/crypto.yaml"): '--output={0}/.'.format(testConfigs), '--config={0}'.format(cryptoLoc)], env=updated_env) - cmd = ['find {0} -iregex \'.*_sk$\' -type f | xargs -I[] dirname [] | xargs -I[] bash -c \'pushd [] && ln -s *_sk sk && popd\''.format(testConfigs)] - subprocess.call(cmd, shell=True, env=updated_env) except: print("Unable to generate crypto material: {0}".format(sys.exc_info()[1])) diff --git a/app/platform/fabric/e2e-test/steps/database_util.py b/app/platform/fabric/e2e-test/feature/steps/database_util.py similarity index 100% rename from app/platform/fabric/e2e-test/steps/database_util.py rename to app/platform/fabric/e2e-test/feature/steps/database_util.py diff --git a/app/platform/fabric/e2e-test/steps/endorser_impl.py b/app/platform/fabric/e2e-test/feature/steps/endorser_impl.py similarity index 99% rename from app/platform/fabric/e2e-test/steps/endorser_impl.py rename to app/platform/fabric/e2e-test/feature/steps/endorser_impl.py index 7bae5a9a1..07d846521 100644 --- a/app/platform/fabric/e2e-test/steps/endorser_impl.py +++ b/app/platform/fabric/e2e-test/feature/steps/endorser_impl.py @@ -18,13 +18,13 @@ import config_util from endorser_util import CLIInterface, ToolInterface, SDKInterface -# try: -# pbFilePath = "../feature-upgrade" -# sys.path.insert(0, pbFilePath) -# from common import ledger_pb2 -# except: -# print("ERROR! Unable to import the protobuf libraries from the ../feature-upgrade directory: {0}".format(sys.exc_info()[0])) -# sys.exit(1) +try: + pbFilePath = "../feature" + sys.path.insert(0, pbFilePath) + from common import ledger_pb2 +except: + print("ERROR! Failed to import the protobuf libraries ledger_pb2 from the ../feature/common/ directory: {0}".format(sys.exc_info()[0])) + sys.exit(1) @when(u'an admin sets up a channel named "{channelId}" using orderer "{orderer}"') diff --git a/app/platform/fabric/e2e-test/steps/endorser_util.py b/app/platform/fabric/e2e-test/feature/steps/endorser_util.py similarity index 97% rename from app/platform/fabric/e2e-test/steps/endorser_util.py rename to app/platform/fabric/e2e-test/feature/steps/endorser_util.py index 3096982c3..02ee03004 100644 --- a/app/platform/fabric/e2e-test/steps/endorser_util.py +++ b/app/platform/fabric/e2e-test/feature/steps/endorser_util.py @@ -16,13 +16,13 @@ import time import common_util -# try: -# pbFilePath = "../feature-upgrade" -# sys.path.insert(0, pbFilePath) -# from peer import chaincode_pb2 -# except: -# print("ERROR! Unable to import the protobuf libraries from the ../feature-upgrade directory: {0}".format(sys.exc_info()[0])) -# sys.exit(1) +try: + pbFilePath = "../feature" + sys.path.insert(0, pbFilePath) + from peer import chaincode_pb2 +except: + print("ERROR! Failed to import the protobuf libraries chaincode_pb2 from the ../feature/peer/ directory: {0}".format(sys.exc_info()[0])) + sys.exit(1) # The default channel ID SYS_CHANNEL_ID = "behavesyschan" @@ -463,7 +463,7 @@ def get_env_vars(self, context, peer="peer0.org1.example.com", user="Admin", inc configDir = "/var/hyperledger/configs/{0}".format(context.composition.projectName) peerParts = peer.split('.') org = '.'.join(peerParts[1:]) - setup = ["/bin/bash", "-c", + setup = ["sh", "-c", '"CORE_PEER_MSPCONFIGPATH={0}/peerOrganizations/{2}/users/{1}@{2}/msp'.format(configDir, user, org)] if includeAll: @@ -483,16 +483,16 @@ def get_env_vars(self, context, peer="peer0.org1.example.com", user="Admin", inc return setup - # def get_chaincode_deploy_spec(self, projectDir, ccType, path, name, args): - # subprocess.call(["peer", "chaincode", "package", - # "-n", name, - # "-c", '{"Args":{0}}'.format(args), - # "-p", path, - # "configs/{0}/test.file".format(projectDir)], shell=True) - # ccDeploymentSpec = chaincode_pb2.ChaincodeDeploymentSpec() - # with open("test.file", 'rb') as f: - # ccDeploymentSpec.ParseFromString(f.read()) - # return ccDeploymentSpec + def get_chaincode_deploy_spec(self, projectDir, ccType, path, name, args): + subprocess.call(["peer", "chaincode", "package", + "-n", name, + "-c", '{"Args":{0}}'.format(args), + "-p", path, + "configs/{0}/test.file".format(projectDir)], shell=True) + ccDeploymentSpec = chaincode_pb2.ChaincodeDeploymentSpec() + with open("test.file", 'rb') as f: + ccDeploymentSpec.ParseFromString(f.read()) + return ccDeploymentSpec def install_chaincode(self, context, peers, user="Admin"): configDir = "/var/hyperledger/configs/{0}".format(context.composition.projectName) @@ -567,8 +567,10 @@ def instantiate_chaincode(self, context, peer="peer0.org1.example.com", user="Ad def create_channel(self, context, orderer, channelId=TEST_CHANNEL_ID, user="Admin"): configDir = "/var/hyperledger/configs/{0}".format(context.composition.projectName) setup = self.get_env_vars(context, "peer0.org1.example.com", user=user) - # Ideally this would NOT be a 5 minute timeout, but more like a 2 minute timeout. - timeout = 300 + common_util.convertToSeconds(context.composition.environ.get('CONFIGTX_ORDERER_BATCHTIMEOUT', '0s')) + # wait a bit for network to come up + time.sleep(30) + # Ideally this would NOT be a 5 or 3 minute timeout, but more like a 2 or 1 minute timeout. + timeout = 180 + common_util.convertToSeconds(context.composition.environ.get('CONFIGTX_ORDERER_BATCHTIMEOUT', '0s')) command = ["peer", "channel", "create", "--file", "/var/hyperledger/configs/{0}/{1}.tx".format(context.composition.projectName, channelId), "--channelID", channelId, diff --git a/app/platform/fabric/e2e-test/steps/explorer_impl.py b/app/platform/fabric/e2e-test/feature/steps/explorer_impl.py similarity index 67% rename from app/platform/fabric/e2e-test/steps/explorer_impl.py rename to app/platform/fabric/e2e-test/feature/steps/explorer_impl.py index 232acb4a6..570ac9291 100644 --- a/app/platform/fabric/e2e-test/steps/explorer_impl.py +++ b/app/platform/fabric/e2e-test/feature/steps/explorer_impl.py @@ -6,17 +6,37 @@ import os import sys import uuid +import basic_impl import compose_util import common_util import config_util import shutil import subprocess import requests +import json_responses FNULL = open(os.devnull, 'w') +@given(u'For explorer env, I have a bootstrapped fabric network of type {ordererType}') +def step_impl(context, ordererType): + config_util.PROFILE_TYPES.update({"kafka-sd": "SampleInsecureKafka"}) + config_util.ORDERER_TYPES.append("kafka-sd") + basic_impl.bootstrapped_impl(context, ordererType, "leveldb", False) + @when(u'I start explorer') def start_explorer_impl(context): + try: + testConfigs = config_util.makeProjectConfigDir(context) + updated_env = config_util.updateEnviron(context) + cmd = ['find {0} -iregex \'.*_sk$\' -type f | xargs -I[] dirname [] | xargs -I[] bash -c \'pushd [] && ln -s *_sk sk && popd\''.format(testConfigs)] + subprocess.call(cmd, shell=True, env=updated_env) + except: + print("Unable to create symbolic link for secret keys: {0}".format(sys.exc_info()[1])) + + context.headers = {} + context.base_url = "" + context.json_responses = json_responses + curpath = os.path.realpath('.') composeFiles = ["%s/docker-compose/docker-compose-explorer.yaml" % (curpath)] if not hasattr(context, "composition_explorer"): @@ -33,7 +53,6 @@ def start_explorer_impl(context): context.composition_explorer.up() - # context.compose_containers = context.composition.collectServiceNames() @given(u'I start first-network') @given(u'I start first-network orderer network of type {consensus_type}') @@ -152,7 +171,6 @@ def request_to_the_path_described_on_table(context, request_verb): for row in context.table: for x in context.table.headings: path = row[x] - print(path) if path.startswith("context") and path[8:] == "block_height": # TODO messy code # This attribute should be integer @@ -162,7 +180,6 @@ def request_to_the_path_described_on_table(context, request_verb): else: url = url + '/' + path - print(url) context.r = getattr(requests, request_verb.lower())(url, headers=context.headers, verify=context.verify_ssl) log_full(context.r) @@ -184,10 +201,8 @@ def step_impl(context, data, timeout): @when(u'"{container}" is stopped') def step_impl(context, container): if hasattr(context, "composition") and hasattr(context, "composeFilesYaml"): - print('composition') context.composition.stop([container]) elif hasattr(context, "composition_explorer"): - print('composition_explorer') context.composition_explorer.stop([container]) else: assert False, "Failed to stop container {0}".format(container) @@ -197,3 +212,54 @@ def is_in_log(container, keyText): "docker exec " + container + " cat logs/app/app.log | grep " + "\"" + keyText + "\"" + " | wc -l", shell=True) return int(output) + +@step(u'Copy "{srcfile}" to "{dstfile}" on "{peer}"') +def start_explorer_impl(context, srcfile, dstfile, peer): + try: + testConfigs = config_util.makeProjectConfigDir(context) + updated_env = config_util.updateEnviron(context) + cmd = ['docker cp {0} {1}:{2}'.format(srcfile, peer, dstfile)] + subprocess.call(cmd, shell=True, env=updated_env) + except: + print("Unable to copy {0} on {1}: {2}".format(srcfile, peer, sys.exc_info()[1])) + +@step(u'Update "{peer}" of "{org}" as an anchor in "{channel}"') +def step_impl(context, peer, org, channel): + try: + testConfigs = config_util.makeProjectConfigDir(context) + updated_env = config_util.updateEnviron(context) + cmd = ['mkdir -p {0}/channel-artifacts'.format(testConfigs) ] + subprocess.call(cmd, shell=True, env=updated_env) + cmd = ['configtxgen -configPath {1} -profile {0} -outputAnchorPeersUpdate ./{1}/channel-artifacts/{2}_{3}anchor.tx -channelID {2} -asOrg {3}'.format(config_util.CHANNEL_PROFILE, testConfigs, channel, org)] + subprocess.call(cmd, shell=True, env=updated_env) + except: + print("Unable to create anchor tx file for {0} on {1}: {2}".format(peer, channel, sys.exc_info()[1])) + + update_anchor(context, peer, channel, tx_filename='channel-artifacts/{0}_{1}anchor.tx'.format(channel, org)) + +def update_anchor(context, peer, channelId="mychannel", orderer="orderer0.example.com", tx_filename="update.pb", user="Admin"): + configDir = "/var/hyperledger/configs/{0}".format(context.composition.projectName) + + # peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA + peerParts = peer.split('.') + org = '.'.join(peerParts[1:]) + setup = context.interface.get_env_vars(context, peer, includeAll=False, user=user) + command = ["peer", "channel", "update", + "--file", '{0}/{1}'.format(configDir, tx_filename), + "--channelID", channelId, + "--orderer", '{0}:7050'.format(orderer)] + if context.tls: + command = command + ["--tls", + "--cafile", + '{0}/ordererOrganizations/example.com/orderers/{1}/msp/tlscacerts/tlsca.example.com-cert.pem'.format(configDir, orderer)] + if hasattr(context, "mutual_tls") and context.mutual_tls: + command = command + ["--clientauth", + "--certfile", + '{0}/peerOrganizations/{1}/users/{2}@{1}/tls/client.crt'.format(configDir, org, user), + "--keyfile", + '{0}/peerOrganizations/{1}/users/{2}@{1}/tls/client.key'.format(configDir, org, user)] + + command.append('"') + output = context.composition.docker_exec(setup+command, [peer]) + print("[{0}]: {1}".format(" ".join(setup+command), output)) + return output diff --git a/app/platform/fabric/e2e-test/steps/json_responses.py b/app/platform/fabric/e2e-test/feature/steps/json_responses.py similarity index 97% rename from app/platform/fabric/e2e-test/steps/json_responses.py rename to app/platform/fabric/e2e-test/feature/steps/json_responses.py index 3f976cd86..caeeb7da2 100644 --- a/app/platform/fabric/e2e-test/steps/json_responses.py +++ b/app/platform/fabric/e2e-test/feature/steps/json_responses.py @@ -80,7 +80,7 @@ t.Key('txcount'): t.Int, t.Key('datahash'): t.String, t.Key('blockhash'): t.String, - t.Key('prehash'): t.String, + t.Key('prehash'): t.String(allow_blank=True), t.Key('createdt'): t.String, t.Key('txhash'): t.List(t.String(allow_blank=True)), t.Key('channelname'): t.String diff --git a/app/platform/fabric/e2e-test/steps/orderer_impl.py b/app/platform/fabric/e2e-test/feature/steps/orderer_impl.py similarity index 98% rename from app/platform/fabric/e2e-test/steps/orderer_impl.py rename to app/platform/fabric/e2e-test/feature/steps/orderer_impl.py index e1d997965..3deeaf335 100644 --- a/app/platform/fabric/e2e-test/steps/orderer_impl.py +++ b/app/platform/fabric/e2e-test/feature/steps/orderer_impl.py @@ -23,9 +23,9 @@ "solo-msp": "SampleSingleMSPSolo"} -# @given(u'I test the access to the generated python protobuf files') -# def step_impl(context): -# orderer_util._testAccessPBMethods() +@given(u'I test the access to the generated python protobuf files') +def step_impl(context): + orderer_util._testAccessPBMethods() @given(u'a bootstrapped orderer network of type {ordererType}') def step_impl(context, ordererType): diff --git a/app/platform/fabric/e2e-test/steps/orderer_util.py b/app/platform/fabric/e2e-test/feature/steps/orderer_util.py similarity index 71% rename from app/platform/fabric/e2e-test/steps/orderer_util.py rename to app/platform/fabric/e2e-test/feature/steps/orderer_util.py index e200715c1..a6159b7b2 100644 --- a/app/platform/fabric/e2e-test/steps/orderer_util.py +++ b/app/platform/fabric/e2e-test/feature/steps/orderer_util.py @@ -10,13 +10,13 @@ from pykafka import KafkaClient import endorser_util -# try: -# pbFilePath = "../feature-upgrade" -# sys.path.insert(0, pbFilePath) -# from common import common_pb2 -# except: -# print("ERROR! Unable to import the protobuf libraries from the ../feature-upgrade directory: {0}".format(sys.exc_info()[0])) -# sys.exit(1) +try: + pbFilePath = "../feature" + sys.path.insert(0, pbFilePath) + from common import common_pb2 +except: + print("ERROR! Failed to import the protobuf libraries common_pb2 from the ../feature/common/ directory: {0}".format(sys.exc_info()[0])) + sys.exit(1) def getOrdererList(context): # Get the Orderers list from the orderer container name @@ -79,16 +79,16 @@ def getNonISRKafkaBroker(kafkaBrokers=["0.0.0.0:9092"], channel=endorser_util.SY kafka = "kafka{0}".format(kafkaNum) return kafka -# def generateMessageEnvelope(): -# channel_header = common_pb2.ChannelHeader(channel_id=endorser_util.TEST_CHANNEL_ID, -# type=common_pb2.ENDORSER_TRANSACTION) -# header = common_pb2.Header(channel_header=channel_header.SerializeToString(), -# signature_header=common_pb2.SignatureHeader().SerializeToString()) -# payload = common_pb2.Payload(header=header, -# data=str.encode("Functional test: {0}".format(datetime.datetime.utcnow())) ) -# envelope = common_pb2.Envelope(payload=payload.SerializeToString()) -# return envelope +def generateMessageEnvelope(): + channel_header = common_pb2.ChannelHeader(channel_id=endorser_util.TEST_CHANNEL_ID, + type=common_pb2.ENDORSER_TRANSACTION) + header = common_pb2.Header(channel_header=channel_header.SerializeToString(), + signature_header=common_pb2.SignatureHeader().SerializeToString()) + payload = common_pb2.Payload(header=header, + data=str.encode("Functional test: {0}".format(datetime.datetime.utcnow())) ) + envelope = common_pb2.Envelope(payload=payload.SerializeToString()) + return envelope -# def _testAccessPBMethods(): -# envelope = generateMessageEnvelope() -# assert isinstance(envelope, common_pb2.Envelope), "Unable to import protobufs from feature-upgrade directory" +def _testAccessPBMethods(): + envelope = generateMessageEnvelope() + assert isinstance(envelope, common_pb2.Envelope), "Unable to import protobufs from feature-upgrade directory" diff --git a/app/platform/fabric/e2e-test/steps/remote_util.py b/app/platform/fabric/e2e-test/feature/steps/remote_util.py similarity index 100% rename from app/platform/fabric/e2e-test/steps/remote_util.py rename to app/platform/fabric/e2e-test/feature/steps/remote_util.py diff --git a/app/platform/fabric/e2e-test/steps/request_util.py b/app/platform/fabric/e2e-test/feature/steps/request_util.py similarity index 100% rename from app/platform/fabric/e2e-test/steps/request_util.py rename to app/platform/fabric/e2e-test/feature/steps/request_util.py diff --git a/app/platform/fabric/e2e-test/package.json b/app/platform/fabric/e2e-test/package.json deleted file mode 100644 index 834a76970..000000000 --- a/app/platform/fabric/e2e-test/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "Integration", - "version": "1.2.0", - "description": "Behave Node.js SDK Integration", - "keywords": [ - "Behave node-sdk integration", - "Call node-sdk apis from behave" - ], - "engines": { - "node": ">=8.9.4 <9.0", - "npm": ">=5.6.0 <6.0" - }, - "license": "Apache-2.0", - "dependencies": { - "fabric-ca-client": "unstable-1.4", - "fabric-client": "unstable-1.4", - "fabric-network": "unstable-1.4", - "fs-extra": "^2.0.0", - "log4js": "^0.6.38" - }, - "devDependencies": { - "make-runnable": "^1.3.6", - "sync-dir": "^1.5.1" - } -} diff --git a/app/platform/fabric/e2e-test/sdk/node/common.js b/app/platform/fabric/e2e-test/sdk/node/common.js deleted file mode 100644 index 91bc54609..000000000 --- a/app/platform/fabric/e2e-test/sdk/node/common.js +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Copyright IBM Corp All Rights Reserved - * - * SPDX-License-Identifier: Apache-2.0 - */ -'use strict'; -const log4js = require('log4js'); -const logger = log4js.getLogger('SDK_INT'); - -const path = require('path'); -const util = require('util'); -const fs = require('fs-extra'); -const Client = require('fabric-client'); - -function setupPeers(peers, channel, org, client, network_config, tls) { - let nodes = network_config[org]['peers']; - for (let key in nodes) { - if (peers.indexOf(key) >= 0) { - let peer; - if (tls === true) { - let data = fs.readFileSync(nodes[key].tls_cacerts); - peer = client.newPeer(nodes[key].requests, { - pem: Buffer.from(data).toString(), - 'ssl-target-name-override': key - }); - } else { - peer = client.newPeer(nodes[key].requests); - } - peer.setName(key); - channel.addPeer(peer); - } - } -} - -var newPeers = function(names, org, network_config, client) { - return newRemotes(names, true, org, network_config, client); -}; - -var newEventHubs = function(names, org, network_config, client) { - return newRemotes(names, false, org, network_config, client); -}; - -function readAllFiles(dir) { - var files = fs.readdirSync(dir); - var certs = []; - files.forEach(file_name => { - let file_path = path.join(dir, file_name); - let data = fs.readFileSync(file_path); - certs.push(data); - }); - return certs; -} - -function getKeyStoreForOrg(org) { - // console.info("???" + Client.getConfigSetting('keyValueStore') + '_' + org); - return Client.getConfigSetting('keyValueStore') + '_' + org; -} - -function newRemotes(names, forPeers, userOrg, network_config, client) { - let targets = []; - // find the peer that match the names - for (let idx in names) { - let peerName = names[idx]; - let nodes = network_config[userOrg]['peers']; - if (nodes[peerName]) { - // found a peer matching the name - let data = fs.readFileSync(nodes[peerName].tls_cacerts); - let grpcOpts = { - pem: Buffer.from(data).toString(), - 'ssl-target-name-override': '' + peerName - }; - if (forPeers) { - targets.push(client.newPeer(nodes[peerName].requests, grpcOpts)); - } else { - let eh = client.newEventHub(); - eh.setPeerAddr(nodes[peerName].events, grpcOpts); - targets.push(eh); - } - } - } - - if (targets.length === 0) { - logger.error( - util.format('Failed to find peers matching the names %s', names) - ); - } - return targets; -} - -function newOrderer(client, network_config, orderer, tls) { - let url = network_config.orderer.url; - if (tls === true) { - let data = fs.readFileSync(network_config.orderer.tls_cacerts); - let pem = Buffer.from(data).toString(); - return client.newOrderer(url, { - pem: pem, - 'ssl-target-name-override': network_config.orderer['server-hostname'] - }); - } else { - return client.newOrderer(url); - } -} - -var getRegisteredUsers = function(client, username, org, networkID, mspID) { - var keyPath = util.format( - './configs/%s/peerOrganizations/%s/users/%s/msp/keystore/', - networkID, - org, - username - ); - var keyPEM = Buffer.from(readAllFiles(keyPath)[0]).toString(); - var certPath = util.format( - './configs/%s/peerOrganizations/%s/users/%s/msp/signcerts/', - networkID, - org, - username - ); - var certPEM = readAllFiles(certPath)[0].toString(); - - var cryptoSuite = Client.newCryptoSuite(); - cryptoSuite.setCryptoKeyStore( - Client.newCryptoKeyStore({ - path: '/tmp/fabric-client-kvs_' + org.split('.')[0] - }) - ); - client.setCryptoSuite(cryptoSuite); - - return Client.newDefaultKeyValueStore({ - path: getKeyStoreForOrg(org) - }).then(store => { - client.setStateStore(store); - - return client.createUser({ - username: username.split('@')[0], - mspid: mspID, - cryptoContent: { - privateKeyPEM: keyPEM, - signedCertPEM: certPEM - } - }); - }); -}; - -exports.newPeers = newPeers; -exports.newEventHubs = newEventHubs; -exports.setupPeers = setupPeers; -exports.newRemotes = newRemotes; -exports.newOrderer = newOrderer; -exports.getRegisteredUsers = getRegisteredUsers; -exports.getKeyStoreForOrg = getKeyStoreForOrg; -exports.readAllFiles = readAllFiles; diff --git a/app/platform/fabric/e2e-test/sdk/node/invoke.js b/app/platform/fabric/e2e-test/sdk/node/invoke.js deleted file mode 100644 index 17e25fc37..000000000 --- a/app/platform/fabric/e2e-test/sdk/node/invoke.js +++ /dev/null @@ -1,310 +0,0 @@ -/** - * Copyright IBM Corp All Rights Reserved - * - * SPDX-License-Identifier: Apache-2.0 - */ - -'use strict'; -const fs = require('fs'); -const path = require('path'); -const util = require('util'); -const hfc = require('fabric-client'); -const { Gateway, InMemoryWallet, X509WalletMixin } = require('fabric-network'); -const common = require('./common.js'); -const client = new hfc(); - -/** - * Perform an "invoke" action on installed/instantiated chaincode - * @param {String} inputFilePath the file path containing test run information as a JSON object containing - * { - * username: the test user name - * org: the organisation to use - * chaincode: object describing the chaincode parameters - * orderer: the orderer to use - * networkConfigFile: the network configuration file path - * opts: additional test parameters - * } - */ -function invoke(inputFilePath) { - const filePath = path.join(__dirname, inputFilePath); - const inputData = JSON.parse(fs.readFileSync(filePath, { encoding: 'utf-8' })); - - const temptext = - '\n\n Username : ' + - inputData.user + - '\n\n Org: ' + - inputData.org + - '\n\n OrgName: ' + - inputData.orgName + - '\n\n chaincode : ' + - util.format(inputData.chaincode) + - '\n\n peerNames : ' + - inputData.peers + - '\n\n orderer: ' + - inputData.orderer + - '\n\n network_config_path: ' + - inputData.networkConfigFile + - '\n\n opts: ' + - util.format(inputData.opts); - //console.log(temptext); - - // Read Network JSON PATH from behave - let network_config; - try { - network_config = JSON.parse(fs.readFileSync(inputData.networkConfigFile)); - } catch (err) { - console.error(err); - } - - // Node SDK implements transaction as well as invoke, disambiguate on the passed opts - if ( - inputData.opts && - inputData.opts['network-model'] && - inputData.opts['network-model'].localeCompare('true') === 0 - ) { - return _submitTransaction( - inputData.orgName, - inputData.chaincode, - network_config - ); - } else { - return _invoke( - inputData.user, - inputData.org, - inputData.orgName, - inputData.chaincode, - inputData.peers, - inputData.orderer, - network_config - ); - } -} - -/** - * Perform an invoke using the NodeSDK - * @param {Strinrg} username the user name to perform the action under - * @param {String} org the organisation to use - * @param {String} orgName the organisation name - * @param {JSON} chaincode the chaincode descriptor - * @param {[String]} peerNames string array of peers - * @param {String} orderer the orderer - * @param {JSON} network_config the network configuration - */ -function _invoke( - username, - org, - orgName, - chaincode, - peerNames, - orderer, - network_config -) { - let channel; - - let targets = peerNames - ? common.newPeers( - peerNames, - orgName, - network_config['network-config'], - client - ) - : undefined; - - const user = username.split('@')[1] ? username : username + '@' + org; - const userOrg = username.split('@')[1] ? username.split('@')[1] : org; - - let tx_id = null; - return common - .getRegisteredUsers( - client, - user, - userOrg, - network_config['networkID'], - network_config['network-config'][orgName]['mspid'] - ) - .then( - user => { - tx_id = client.newTransactionID(); - - channel = client.newChannel(chaincode.channelId); - channel.addOrderer( - common.newOrderer( - client, - network_config['network-config'], - orderer, - network_config['tls'] - ) - ); - common.setupPeers( - peerNames, - channel, - orgName, - client, - network_config['network-config'], - network_config['tls'] - ); - - // send proposal to endorser - let request = { - chaincodeId: chaincode.chaincodeId, - fcn: chaincode.fcn, - args: chaincode.args, - chainId: chaincode.channelId, - txId: tx_id - }; - - if (targets) { - request.targets = targets; - } - - console.info(JSON.stringify(['ok', 'request is set'])); - return channel.sendTransactionProposal(request, 120000); - }, - err => { - console.error("Failed to enroll user '" + username + "'. " + err); - throw new Error("Failed to enroll user '" + username + "'. " + err); - } - ) - .then( - results => { - console.info(JSON.stringify(['ok', 'proposal sent'])); - let proposalResponses = results[0]; - let proposal = results[1]; - let all_good = true; - for (var i in proposalResponses) { - let one_good = false; - if ( - proposalResponses && - proposalResponses[i].response && - proposalResponses[i].response.status === 200 - ) { - one_good = true; - } else { - console.error('transaction proposal was bad'); - } - all_good = all_good & one_good; - } - if (all_good) { - var request = { - proposalResponses: proposalResponses, - proposal: proposal - }; - // set the transaction listener and set a timeout of 30sec - // if the transaction did not get committed within the timeout period, - // fail the test - let eventPromises = []; - - if (!peerNames) { - peerNames = channel.getPeers().map(function(peer) { - return peer.getName(); - }); - } - - let sendPromise = channel.sendTransaction(request); - return Promise.all([sendPromise].concat(eventPromises)) - .then(results => { - return results[0]; // the first returned value is from the 'sendPromise' which is from the 'sendTransaction()' call - }) - .catch(err => { - console.error( - JSON.stringify([ - 'error', - 'Failed to send transaction and get notifications within the timeout period.' - ]) - ); - return 'Failed to send transaction and get notifications within the timeout period.'; - }); - } else { - console.error( - 'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...' - ); - return 'Failed to send Proposal or receive valid response. Response null or status is not 200. exiting...'; - } - }, - err => { - console.error( - 'Failed to send proposal due to error: ' + err.stack ? err.stack : err - ); - return 'Failed to send proposal due to error: ' + err.stack - ? err.stack - : err; - } - ) - .then( - response => { - if (response.status === 'SUCCESS') { - var jsonResponse = ['ok', tx_id.getTransactionID().toString()]; - console.info(JSON.stringify(jsonResponse)); - return JSON.stringify(jsonResponse); - } else { - console.error( - JSON.stringify([ - 'ok', - 'Failed to order the transaction. Error code: ' + response - ]) - ); - return 'Failed to order the transaction. Error code: ' + response.status; - } - }, - err => { - console.error( - 'Failed to send transaction due to error: ' + err.stack ? err.stack : err - ); - return 'Failed to send transaction due to error: ' + err.stack - ? err.stack - : err; - } - ); -} - -/** - * Perform a transaction invoke using the network APIs - * @param {String} org the organisation to use - * @param {JSON} chaincode the chaincode descriptor - * @param {JSON} network_config the network configuration - */ -async function _submitTransaction(org, chaincode, network_config) { - const ccp = network_config['common-connection-profile']; - const orgConfig = ccp.organizations[org]; - const cert = common.readAllFiles(orgConfig.signedCertPEM)[0]; - const key = common.readAllFiles(orgConfig.adminPrivateKeyPEM)[0]; - const inMemoryWallet = new InMemoryWallet(); - - const gateway = new Gateway(); - - try { - await inMemoryWallet.import( - 'admin', - X509WalletMixin.createIdentity(orgConfig.mspid, cert, key) - ); - - const opts = { - wallet: inMemoryWallet, - identity: 'admin', - discovery: { enabled: false } - }; - - await gateway.connect( - ccp, - opts - ); - - const network = await gateway.getNetwork(chaincode.channelId); - const contract = await network.getContract(chaincode.chaincodeId); - - const args = [chaincode.fcn, ...chaincode.args]; - const result = await contract.submitTransaction(...args); - - gateway.disconnect(); - return result; - } catch (err) { - throw new Error(err); - } -} - -exports.invoke = invoke; -require('make-runnable'); - -// Example test calls -// node invoke.js invoke User1@org1.example.com Org1ExampleCom '{"channelId": "behavesystest", "args": ["a", "b", "10"], "chaincodeId": "mycc", "name": "mycc", "fcn": "invoke"}' ['peer0.org1.example.com'] orderer0.example.com /Users/nkl/go/src/github.com/hyperledger/fabric-test/feature/configs/0be5908ac30011e88d70acbc32c08695/network-config.json '{"transaction": "true"}' -// node invoke.js invoke User1@org1.example.com Org1ExampleCom '{"channelId": "behavesystest", "args": ["a", "b", "10"], "chaincodeId": "mycc", "name": "mycc", "fcn": "invoke"}' ['peer0.org1.example.com'] orderer0.example.com /Users/nkl/go/src/github.com/hyperledger/fabric-test/feature/configs/4fe4f54cc62411e8977eacbc32c08695/network-config.json '{"transaction": "true"}' diff --git a/app/platform/fabric/e2e-test/sdk/node/query.js b/app/platform/fabric/e2e-test/sdk/node/query.js deleted file mode 100644 index eed935c83..000000000 --- a/app/platform/fabric/e2e-test/sdk/node/query.js +++ /dev/null @@ -1,251 +0,0 @@ -/** - * Copyright IBM Corp All Rights Reserved - * - * SPDX-License-Identifier: Apache-2.0 - */ - -const fs = require('fs'); -const path = require('path'); -const util = require('util'); -const common = require('./common.js'); -const { Gateway, InMemoryWallet, X509WalletMixin } = require('fabric-network'); -const Client = require('fabric-client'); -let client = new Client(); - -/** - * Perform a query using installed/instantiated chaincode - * @param {String} inputFilePath the file path containing test run information as a JSON object containing - * { - * username: the test user name - * org: the organisation to use - * chaincode: object describing the chaincode parameters - * peer: array of the peers to use - * networkConfigFile: the network configuration file path - * opts: additional test parameters - * } - */ -function query(inputFilePath) { - const filePath = path.join(__dirname, inputFilePath); - const inputData = JSON.parse(fs.readFileSync(filePath, { encoding: 'utf-8' })); - - const temptext = - '\n\n user : ' + - inputData.user + - '\n\n Org: ' + - inputData.org + - '\n\n OrgName: ' + - inputData.orgName + - '\n\n chaincode : ' + - util.format(inputData.chaincode) + - '\n\n peerNames : ' + - inputData.peers + - '\n\n network_config_path: ' + - inputData.networkConfigFile; - '\n\n opts: ' + util.format(inputData.opts); - //console.log(temptext); - - let network_config; - try { - network_config = JSON.parse(fs.readFileSync(inputData.networkConfigFile)); - } catch (err) { - console.error(err); - } - - // Node SDK implements network and native options, disambiguate on the passed opts - if ( - inputData.opts && - inputData.opts['network-model'] && - inputData.opts['network-model'].localeCompare('true') === 0 - ) { - console.log('evaluating transaction .... '); - return _evaluateTransaction( - inputData.orgName, - inputData.chaincode, - network_config - ); - } else { - console.log('performing query .... '); - return _query( - inputData.user, - inputData.peers[0], - inputData.org, - inputData.orgName, - inputData.chaincode, - network_config - ); - } -} - -/** - * Perform a query using the NodeJS SDK - * @param {String} username the user - * @param {String} peer the peer to use - * @param {String} userOrg the organisation to use - * @param {String} orgName the organisation name - * @param {JSON} chaincode the chaincode descriptor - * @param {JSON} network_config_details the network configuration - */ -async function _query( - username, - peer, - org, - orgName, - chaincode, - network_config_details -) { - const user = username.split('@')[1] ? username : username + '@' + org; - const userOrg = username.split('@')[1] ? username.split('@')[1] : org; - const target = buildTarget( - peer, - orgName, - network_config_details['network-config'] - ); - - Client.setConfigSetting('request-timeout', 60000); - - // this is a transaction, will just use org's identity to - // submit the request. intentionally we are using a different org - // than the one that submitted the "move" transaction, although either org - // should work properly - const channel = client.newChannel(chaincode.channelId); - - const tlsInfo = await common.getRegisteredUsers( - client, - user, - userOrg, - network_config_details['networkID'], - network_config_details['network-config'][orgName]['mspid'] - ); - client.setTlsClientCertAndKey(tlsInfo.certificate, tlsInfo.key); - - const store = await Client.newDefaultKeyValueStore({ - path: common.getKeyStoreForOrg(userOrg) - }); - client.setStateStore(store); - - const admin = await common.getRegisteredUsers( - client, - user, - userOrg, - network_config_details['networkID'], - network_config_details['network-config'][orgName]['mspid'] - ); - - tx_id = client.newTransactionID(); - common.setupPeers( - peer, - channel, - orgName, - client, - network_config_details['network-config'], - network_config_details['tls'] - ); - - let request = { - targets: [target], - txId: tx_id, - chaincodeId: chaincode.chaincodeId, - fcn: chaincode.fcn, - args: chaincode.args - }; - - try { - // send query - const response_payloads = await channel.queryByChaincode(request); - if (response_payloads) { - let stringRespose = formatString(response_payloads.toString()); - var jsonResponse = { response: stringRespose }; - console.info('\n query jsonResponse: ', jsonResponse); - return JSON.stringify(jsonResponse); - } else { - console.error('response_payloads is null'); - return { error: 'response_payloads is null' }; - } - } catch (err) { - console.error([ - 'error', - 'Failed to send query due to error:' + err.stack ? err.stack : err - ]); - return { - Error: 'Failed to send query due to error:' + err.stack ? err.stack : err - }; - } -} - -function buildTarget(peer, org, network_config) { - var target = null; - if (typeof peer !== 'undefined') { - let targets = common.newPeers([peer], org, network_config, client); - if (targets && targets.length > 0) target = targets[0]; - } - return target; -} - -/** - * Conditionally strip the leading/trailing double quotes - */ -function formatString(inputString) { - if ( - inputString.charAt(0) == '"' && - inputString.charAt(inputString.length - 1) == '"' - ) { - return inputString.slice(1, -1); - } else { - return inputString; - } -} - -/** - * Perform a query using the NodeJS Netowrk APIs - * @param {String} org the organisation to use - * @param {JSON} chaincode the chaincode descriptor - * @param {JSON} network_config the network configuration - */ -async function _evaluateTransaction(org, chaincode, network_config) { - const ccp = network_config['common-connection-profile']; - const orgConfig = ccp.organizations[org]; - const cert = common.readAllFiles(orgConfig.signedCertPEM)[0]; - const key = common.readAllFiles(orgConfig.adminPrivateKeyPEM)[0]; - const inMemoryWallet = new InMemoryWallet(); - - const gateway = new Gateway(); - - try { - await inMemoryWallet.import( - 'admin', - X509WalletMixin.createIdentity(orgConfig.mspid, cert, key) - ); - - const opts = { - wallet: inMemoryWallet, - identity: 'admin', - discovery: { enabled: false } - }; - - await gateway.connect( - ccp, - opts - ); - - const network = await gateway.getNetwork(chaincode.channelId); - const contract = await network.getContract(chaincode.chaincodeId); - - const args = [chaincode.fcn, ...chaincode.args]; - const result = await contract.evaluateTransaction(...args); - - gateway.disconnect(); - - let stringRespose = formatString(result.toString()); - let jsonResponse = { response: stringRespose }; - return JSON.stringify(jsonResponse); - } catch (err) { - throw new Error(err); - } -} - -exports.query = query; -require('make-runnable'); - -// Example test calls -// node query.js query User1@org2.example.com Org2ExampleCom' {"args": ["a"], "fcn":"query", "channelId": "behavesystest", "chaincodeId": "mycc"}' ["peer1.org2.example.com"] /opt/gopath/src/github.com/hyperledger/fabric-test/feature/configs/3f09636eb35811e79e510214683e8447/network-config.json; -// node query.js query User1@org1.example.com Org1ExampleCom '{"channelId": "behavesystest", "args": ["a"], "chaincodeId": "mycc", "name": "mycc", "fcn": "query"}' ['peer0.org1.example.com'] /Users/nkl/go/src/github.com/hyperledger/fabric-test/feature/configs/4fe4f54cc62411e8977eacbc32c08695/network-config.json '{"transaction": "true"}' diff --git a/client/test/docker-compose.yaml b/client/test/docker-compose.yaml index 8d24f1198..2cbcde6af 100644 --- a/client/test/docker-compose.yaml +++ b/client/test/docker-compose.yaml @@ -4,7 +4,7 @@ version: '2.1' networks: e2egui-net: external: - name: e2egui_behave + name: ${NETWORK_ID} services: chrome: diff --git a/client/test/e2e-setup.sh b/client/test/e2e-setup.sh index cf04f6546..92dad812d 100755 --- a/client/test/e2e-setup.sh +++ b/client/test/e2e-setup.sh @@ -6,75 +6,77 @@ ROOTDIR="$(cd "$(dirname "$0")"/../.. && pwd)" -export CORE_PEER_NETWORKID=e2egui -export COMPOSE_PROJECT_NAME=$CORE_PEER_NETWORKID -export NETWORK_PROFILE=first-network +# export CORE_PEER_NETWORKID=e2egui +# export COMPOSE_PROJECT_NAME=$CORE_PEER_NETWORKID +# export NETWORK_PROFILE=first-network -docker rm -f $(docker ps -aq) -docker volume rm -f $(docker volume ls -q) +# docker rm -f $(docker ps -aq) +# docker volume rm -f $(docker volume ls -q) TIMEOUT=600 DELAY=10 -# -# Setup fabric-samples/first-network -# -pushd $ROOTDIR/app/platform/fabric/e2e-test/fabric-samples/first-network - -rm -rf ../../configs/$CORE_PEER_NETWORKID -rm -rf channel-artifacts/* ordererOrganizations peerOrganizations - -mkdir -p ../../configs/$CORE_PEER_NETWORKID -./byfn.sh generate -c mychannel - -cp -a channel-artifacts crypto-config/* ../../configs/$CORE_PEER_NETWORKID - -docker-compose -f docker-compose-explorer.yaml down -v -docker-compose -f docker-compose-explorer.yaml up -d -docker exec -d cli scripts/script.sh - -# continue to poll -# we either get a matched keyword, or reach TIMEOUT -rc=1 -starttime=$(date +%s) -while - [[ "$(($(date +%s) - starttime))" -lt "$TIMEOUT" ]] && [[ $rc -ne 0 ]]; -do - sleep $DELAY - set -x - if [ $(docker ps -q --filter name='dev-peer1.org2' | wc -l) -eq 1 ]; then - rc=0 - fi - set +x -done - -popd - -# -# Bring up Explorer -# -pushd $ROOTDIR/app/platform/fabric/e2e-test/docker-compose -docker-compose -f docker-compose-explorer.yaml down -v -docker-compose -f docker-compose-explorer.yaml up -d - -rc=1 -starttime=$(date +%s) -while - [[ "$(($(date +%s) - starttime))" -lt "$TIMEOUT" ]] && [[ $rc -ne 0 ]]; -do - sleep $DELAY - set -x - docker logs explorer.mynetwork.com | grep -q "Please open web browser to access" - rc=$? - set +x -done - -popd +# # +# # Setup fabric-samples/first-network +# # +# pushd $ROOTDIR/app/platform/fabric/e2e-test/fabric-samples/first-network + +# rm -rf ../../configs/$CORE_PEER_NETWORKID +# rm -rf channel-artifacts/* ordererOrganizations peerOrganizations + +# mkdir -p ../../configs/$CORE_PEER_NETWORKID +# ./byfn.sh generate -c mychannel + +# cp -a channel-artifacts crypto-config/* ../../configs/$CORE_PEER_NETWORKID + +# docker-compose -f docker-compose-explorer.yaml down -v +# docker-compose -f docker-compose-explorer.yaml up -d +# docker exec -d cli scripts/script.sh + +# # continue to poll +# # we either get a matched keyword, or reach TIMEOUT +# rc=1 +# starttime=$(date +%s) +# while +# [[ "$(($(date +%s) - starttime))" -lt "$TIMEOUT" ]] && [[ $rc -ne 0 ]]; +# do +# sleep $DELAY +# set -x +# if [ $(docker ps -q --filter name='dev-peer1.org2' | wc -l) -eq 1 ]; then +# rc=0 +# fi +# set +x +# done + +# popd + +# # +# # Bring up Explorer +# # +# pushd $ROOTDIR/app/platform/fabric/e2e-test/docker-compose +# docker-compose -f docker-compose-explorer.yaml down -v +# docker-compose -f docker-compose-explorer.yaml up -d + +# rc=1 +# starttime=$(date +%s) +# while +# [[ "$(($(date +%s) - starttime))" -lt "$TIMEOUT" ]] && [[ $rc -ne 0 ]]; +# do +# sleep $DELAY +# set -x +# docker logs explorer.mynetwork.com | grep -q "Please open web browser to access" +# rc=$? +# set +x +# done + +# popd # # Start selenium standalone server # pushd $ROOTDIR/client/test +sudo apt-get install jq +export NETWORK_ID=$(docker inspect peer0.org1.example.com | jq '.[].NetworkSettings.Networks' | jq -rc 'keys' | jq -r '.[0]') docker-compose down docker-compose up -d diff --git a/client/test/specs/dashboard.js b/client/test/specs/dashboard.js index 80f1a3159..63addd37e 100644 --- a/client/test/specs/dashboard.js +++ b/client/test/specs/dashboard.js @@ -68,7 +68,7 @@ describe('Explorer dashboard', () => { '#root > div > div > div > div > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div > div > div.rt-table > div.rt-tbody' ); var elmNum = peerList.getProperty('childElementCount'); - elmNum.should.be.equal(5); + elmNum.should.be.equal(7); }); it('should have the correct URL for each peer', () => { @@ -82,7 +82,9 @@ describe('Explorer dashboard', () => { expect(peerUrlStrList).to.include('peer1.org1.example.com'); expect(peerUrlStrList).to.include('peer0.org2.example.com'); expect(peerUrlStrList).to.include('peer1.org2.example.com'); - expect(peerUrlStrList).to.include('orderer.example.com'); + expect(peerUrlStrList).to.include('orderer0.example.com'); + expect(peerUrlStrList).to.include('orderer1.example.com'); + expect(peerUrlStrList).to.include('orderer2.example.com'); }); }); diff --git a/client/test/specs/network_view.js b/client/test/specs/network_view.js index 34fcebc03..543321482 100644 --- a/client/test/specs/network_view.js +++ b/client/test/specs/network_view.js @@ -41,7 +41,7 @@ describe('Explorer network view', () => { expect(nodeStrList).to.include('peer1.org1.example.com'); expect(nodeStrList).to.include('peer0.org2.example.com'); expect(nodeStrList).to.include('peer1.org2.example.com'); - expect(nodeStrList).to.include('orderer.example.com'); + expect(nodeStrList).to.include('orderer0.example.com'); }); }); }); diff --git a/package.json b/package.json index 9981f95b1..1b2b496dd 100644 --- a/package.json +++ b/package.json @@ -87,17 +87,18 @@ "precommit": "lint-staged && ./scripts/verify-license.sh", "e2e-test-check-tool": "/bin/bash -c 'if [[ -z $(which configtxgen) ]]; then echo \"### Need to install tools ###\n\"; exit -1; fi'", "e2e-test-check-img": "/bin/bash -c 'if [[ -z $(docker images -q hyperledger/fabric-peer:latest) ]]; then echo \"### Need to pull fabric images ###\n\"; exit -1; fi'", - "e2e-test-setup-tool:ci": "/bin/bash -c 'curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s -- 1.4.2 1.4.2 0.4.15 -s'", - "e2e-test-setup-env": "cd app/platform/fabric/e2e-test; if [ ! -e e2e-test ]; then virtualenv e2e-test; fi && . ./e2e-test/bin/activate && pip install -U setuptools && pip install -r requirement.txt", + "e2e-test-setup-tool:ci": "/bin/bash -c 'which configtxgen >/dev/null; if [[ $? -eq 0 ]] && [[ $(configtxgen -version | grep Version: | sed -e \"s/^.*:\\s*//\") == \"1.4.4\" ]]; then echo Found; else echo Not found; curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s -- 1.4.4 1.4.4 0.4.18 -s; fi'", + "e2e-test-setup-fabric-ca-client:ci": "cd app/platform/fabric/e2e-test/feature; if [ ! -f ./bin/fabric-ca-client ]; then mkdir bin; wget -O - https://github.com/hyperledger/fabric-ca/releases/download/v1.4.4/hyperledger-fabric-ca-linux-amd64-1.4.4.tar.gz | tar --strip-components=1 -zxf - -C bin; fi", + "e2e-test-setup-env": "cd app/platform/fabric/e2e-test/feature; if [ ! -e e2e-test ]; then virtualenv e2e-test; fi && . ./e2e-test/bin/activate && pip install -U setuptools && pip install -r requirement.txt", "e2e-test-setup-img": "./build_docker_image.sh", - "e2e-test-run": "cd app/platform/fabric/e2e-test; . ./e2e-test/bin/activate && behave explorer.feature", - "e2e-test-run-sanitycheck": "cd app/platform/fabric/e2e-test; . ./e2e-test/bin/activate && behave --tags=@sanitycheck --stop --no-skipped explorer.feature", + "e2e-test-run": "cd app/platform/fabric/e2e-test/feature; . ./e2e-test/bin/activate && behave explorer.feature", + "e2e-test-run-sanitycheck": "cd app/platform/fabric/e2e-test/feature; . ./e2e-test/bin/activate && behave --stop --no-skipped --no-capture explorer.feature", "e2e-test": "run-s e2e-test-check-tool e2e-test-check-img e2e-test-setup-env e2e-test-setup-img e2e-test-run", - "e2e-test-sanitycheck:ci": "cross-env PATH=$PATH:$PWD/bin run-s e2e-test-setup-tool:ci e2e-test-check-tool e2e-test-check-img e2e-test-setup-env e2e-test-setup-img e2e-test-run-sanitycheck", + "e2e-test-sanitycheck:ci": "cross-env PATH=$PATH:$PWD/bin run-s e2e-test-setup-tool:ci e2e-test-setup-fabric-ca-client:ci e2e-test-check-tool e2e-test-check-img e2e-test-setup-env e2e-test-setup-img e2e-test-run-sanitycheck", "e2e-gui-test-setup-env": "cd client; npm install", - "e2e-gui-test-setup": "./client/test/e2e-setup.sh", + "e2e-gui-test-setup": "/bin/bash -c 'pushd app/platform/fabric/e2e-test/feature; . ./e2e-test/bin/activate && behave explorer_gui_e2e.feature; popd; ./client/test/e2e-setup.sh'", "e2e-gui-test-run": "cd client; npx wdio ./test/wdio.conf.js", "e2e-gui-test": "run-s e2e-gui-test-setup e2e-gui-test-run", - "e2e-gui-test:ci": "cross-env PATH=$PATH:$PWD/bin run-s e2e-test-setup-tool:ci e2e-test-check-tool e2e-test-setup-img e2e-gui-test-setup-env e2e-gui-test-setup e2e-gui-test-run" + "e2e-gui-test:ci": "cross-env PATH=$PATH:$PWD/bin run-s e2e-test-setup-tool:ci e2e-test-check-tool e2e-test-setup-img e2e-gui-test-setup-env e2e-test-setup-env e2e-gui-test-setup e2e-gui-test-run" } } diff --git a/scripts/verify-license.sh b/scripts/verify-license.sh index c7882e9aa..6c3e8c89c 100755 --- a/scripts/verify-license.sh +++ b/scripts/verify-license.sh @@ -35,7 +35,7 @@ else fi # If you want to exclude some paths, add a keyword with an extended regular expression format to excluded_paths -excluded_paths="\.ico$ \.jpg$ \.json$ \.png$ \.svg$ \.tx$ \.crt$ \.ya*ml$ \.key$ \.pem$ _sk$ \/META-INF\/ LICENSE$ \.xml$ CHANGELOG\.md$ e2e-test/fabric-samples" +excluded_paths="\.ico$ \.jpg$ \.json$ \.png$ \.svg$ \.tx$ \.crt$ \.ya*ml$ \.key$ \.pem$ _sk$ \/META-INF\/ LICENSE$ \.xml$ CHANGELOG\.md$ app/platform/fabric/e2e-test" for check_file in ${check_files}; do

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%0AawZ)&(l@>QOzG#VD{mHsa3;rCRHhv97DLyIHLKj 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