From 5b7f2fcae8faf9e04830b9a714265c30760e82e0 Mon Sep 17 00:00:00 2001 From: nikhil550 Date: Tue, 15 Sep 2020 09:48:16 -0400 Subject: [PATCH] Remove chaincode dev sample (#314) Signed-off-by: NIKHIL E GUPTA Co-authored-by: NIKHIL E GUPTA --- chaincode-docker-devmode/.gitignore | 3 - chaincode-docker-devmode/README.rst | 142 ------------------ .../docker-compose-simple.yaml | 87 ----------- .../msp/admincerts/admincert.pem | 14 -- .../msp/cacerts/cacert.pem | 15 -- chaincode-docker-devmode/msp/keystore/key.pem | 5 - .../msp/signcerts/peer.pem | 14 -- .../msp/tlscacerts/tlsroot.pem | 13 -- .../tlsintermediatecerts/tlsintermediate.pem | 14 -- chaincode-docker-devmode/myc.tx | Bin 274 -> 0 bytes chaincode-docker-devmode/orderer.block | Bin 7902 -> 0 bytes chaincode-docker-devmode/script.sh | 26 ---- 12 files changed, 333 deletions(-) delete mode 100644 chaincode-docker-devmode/.gitignore delete mode 100644 chaincode-docker-devmode/README.rst delete mode 100644 chaincode-docker-devmode/docker-compose-simple.yaml delete mode 100644 chaincode-docker-devmode/msp/admincerts/admincert.pem delete mode 100644 chaincode-docker-devmode/msp/cacerts/cacert.pem delete mode 100755 chaincode-docker-devmode/msp/keystore/key.pem delete mode 100644 chaincode-docker-devmode/msp/signcerts/peer.pem delete mode 100644 chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem delete mode 100644 chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem delete mode 100644 chaincode-docker-devmode/myc.tx delete mode 100644 chaincode-docker-devmode/orderer.block delete mode 100755 chaincode-docker-devmode/script.sh diff --git a/chaincode-docker-devmode/.gitignore b/chaincode-docker-devmode/.gitignore deleted file mode 100644 index 3bb4c8e8..00000000 --- a/chaincode-docker-devmode/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/myc.block -/chaincode/sacc/go/sacc -/chaincode/abstore/go/abstore diff --git a/chaincode-docker-devmode/README.rst b/chaincode-docker-devmode/README.rst deleted file mode 100644 index 315056f2..00000000 --- a/chaincode-docker-devmode/README.rst +++ /dev/null @@ -1,142 +0,0 @@ -Using dev mode -============== - -Normally chaincodes are started and maintained by peer. However in “dev -mode", chaincode is built and started by the user. This mode is useful -during chaincode development phase for rapid code/build/run/debug cycle -turnaround. - -We start "dev mode" by leveraging pre-generated orderer and channel artifacts for -a sample dev network. As such, the user can immediately jump into the process -of compiling chaincode and driving calls. - -Install Fabric Samples ----------------------- - -If you haven't already done so, please `install samples `_. - -Navigate to the ``chaincode-docker-devmode`` directory of the ``fabric-samples`` -clone: - -.. code:: bash - - cd chaincode-docker-devmode - -Download docker images -^^^^^^^^^^^^^^^^^^^^^^ - -We need four docker images in order for "dev mode" to run against the supplied -docker compose script. If you installed the ``fabric-samples`` repo clone and -followed the instructions to `install samples, binaries and docker images `_, then -you should have the necessary Docker images installed locally. - -.. note:: If you choose to manually pull the images then you must retag them as - ``latest``. - -Issue a ``docker images`` command to reveal your local Docker Registry. You -should see something similar to following: - -.. code:: bash - - docker images - REPOSITORY TAG IMAGE ID CREATED SIZE - hyperledger/fabric-tools latest c584c20ac82b 9 days ago 1.42 GB - hyperledger/fabric-tools x86_64-1.1.0-preview c584c20ac82b 9 days ago 1.42 GB - hyperledger/fabric-orderer latest 2fccc91736df 9 days ago 159 MB - hyperledger/fabric-orderer x86_64-1.1.0-preview 2fccc91736df 9 dyas ago 159 MB - hyperledger/fabric-peer latest 337f3d90b452 9 days ago 165 MB - hyperledger/fabric-peer x86_64-1.1.0-preview 337f3d90b452 9 days ago 165 MB - hyperledger/fabric-ccenv latest 82489d1c11e8 9 days ago 1.35 GB - hyperledger/fabric-ccenv x86_64-1.1.0-preview 82489d1c11e8 9 days ago 1.35 GB - -.. note:: If you retrieved the images through the `install samples, binaries and docker images `_, - then you will see additional images listed. However, we are only concerned with - these four. - -Now open three terminals and navigate to your ``chaincode-docker-devmode`` -directory in each. - -Terminal 1 - Start the network ------------------------------- - -.. code:: bash - - docker-compose -f docker-compose-simple.yaml up - -The above starts the network with the ``SingleSampleMSPSolo`` orderer profile and -launches the peer in "dev mode". It also launches two additional containers - -one for the chaincode environment and a CLI to interact with the chaincode. The -commands for create and join channel are embedded in the CLI container, so we -can jump immediately to the chaincode calls. - -.. note:: TLS is not enabled as it is not supported when running chaincode in dev mode. - -Terminal 2 - Build & start the chaincode ----------------------------------------- - -.. code:: bash - - docker exec -it chaincode sh - -You should see the following: - -.. code:: sh - - /opt/gopath/src/chaincode $ - -Now, compile your chaincode: - -.. code:: sh - - cd abstore/go - go build -o abstore - -Now run the chaincode: - -.. code:: sh - - CORE_CHAINCODE_ID_NAME=mycc:0 CORE_PEER_TLS_ENABLED=false ./abstore -peer.address peer:7052 - -The chaincode is started with peer and chaincode logs indicating successful registration with the peer. -Note that at this stage the chaincode is not associated with any channel. This is done in subsequent steps -using the ``instantiate`` command. - -Terminal 3 - Use the chaincode ------------------------------- - -Even though you are in ``--peer-chaincodedev`` mode, you still have to install the -chaincode so the life-cycle system chaincode can go through its checks normally. -This requirement may be removed in future when in ``--peer-chaincodedev`` mode. - -We'll leverage the CLI container to drive these calls. - -.. code:: bash - - docker exec -it cli bash - -.. code:: bash - - peer chaincode install -p chaincodedev/chaincode/abstore/go -n mycc -v 0 - peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","a","100","b","200"]}' -C myc - -Now issue an invoke to move ``10`` from ``a`` to ``b``. - -.. code:: bash - - peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","10"]}' -C myc - -Finally, query ``a``. We should see a value of ``90``. - -.. code:: bash - - peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc - -Testing new chaincode ---------------------- - -By default, we mount only ``abstore``. However, you can easily test different -chaincodes by adding them to the ``chaincode`` subdirectory and relaunching -your network. At this point they will be accessible in your ``chaincode`` container. - -.. Licensed under Creative Commons Attribution 4.0 International License - https://creativecommons.org/licenses/by/4.0/ diff --git a/chaincode-docker-devmode/docker-compose-simple.yaml b/chaincode-docker-devmode/docker-compose-simple.yaml deleted file mode 100644 index 076b6051..00000000 --- a/chaincode-docker-devmode/docker-compose-simple.yaml +++ /dev/null @@ -1,87 +0,0 @@ -version: '2' - -services: - orderer: - container_name: orderer - image: hyperledger/fabric-orderer - environment: - - FABRIC_LOGGING_SPEC=debug - - ORDERER_GENERAL_LISTENADDRESS=orderer - - ORDERER_GENERAL_BOOTSTRAPMETHOD=file - - ORDERER_GENERAL_BOOTSTRAPFILE=orderer.block - - ORDERER_GENERAL_LOCALMSPID=DEFAULT - - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/msp - - GRPC_TRACE=all=true, - - GRPC_VERBOSITY=debug - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: orderer - volumes: - - ./msp:/etc/hyperledger/msp - - ./orderer.block:/etc/hyperledger/fabric/orderer.block - ports: - - 7050:7050 - peer: - container_name: peer - image: hyperledger/fabric-peer - environment: - - CORE_PEER_ID=peer - - CORE_PEER_ADDRESS=peer:7051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer:7051 - - CORE_PEER_LOCALMSPID=DEFAULT - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp - volumes: - - /var/run/:/host/var/run/ - - ./msp:/etc/hyperledger/msp - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: peer node start --peer-chaincodedev=true - ports: - - 7051:7051 - - 7053:7053 - depends_on: - - orderer - - cli: - container_name: cli - image: hyperledger/fabric-tools - tty: true - environment: - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_ID=cli - - CORE_PEER_ADDRESS=peer:7051 - - CORE_PEER_LOCALMSPID=DEFAULT - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp - working_dir: /opt/gopath/src/chaincodedev - command: /bin/bash -c './script.sh' - volumes: - - /var/run/:/host/var/run/ - - ./msp:/etc/hyperledger/msp - - ./../chaincode:/opt/gopath/src/chaincodedev/chaincode - - ./:/opt/gopath/src/chaincodedev/ - depends_on: - - orderer - - peer - - chaincode: - container_name: chaincode - image: hyperledger/fabric-ccenv - tty: true - environment: - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_ID=abstore - - CORE_PEER_ADDRESS=peer:7051 - - CORE_PEER_LOCALMSPID=DEFAULT - - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp - working_dir: /opt/gopath/src/chaincode - command: /bin/sh -c 'sleep 6000000' - volumes: - - /var/run/:/host/var/run/ - - ./msp:/etc/hyperledger/msp - - ./../chaincode:/opt/gopath/src/chaincode - depends_on: - - orderer - - peer diff --git a/chaincode-docker-devmode/msp/admincerts/admincert.pem b/chaincode-docker-devmode/msp/admincerts/admincert.pem deleted file mode 100644 index 415d5617..00000000 --- a/chaincode-docker-devmode/msp/admincerts/admincert.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNjCCAd2gAwIBAgIRAMnf9/dmV9RvCCVw9pZQUfUwCgYIKoZIzj0EAwIwgYEx -CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4g -RnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMQwwCgYDVQQLEwND -T1AxHDAaBgNVBAMTE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcxMTEyMTM0MTEx -WhcNMjcxMTEwMTM0MTExWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv -cm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEMMAoGA1UECxMDQ09QMR8wHQYD -VQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEZ8S4V71OBJpyMIVZdwYdFXAckItrpvSrCf0HQg40WW9XSoOOO76I+Umf -EkmTlIJXP7/AyRRSRU38oI8Ivtu4M6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1Ud -EwEB/wQCMAAwKwYDVR0jBCQwIoAginORIhnPEFZUhXm6eWBkm7K7Zc8R4/z7LW4H -ossDlCswCgYIKoZIzj0EAwIDRwAwRAIgVikIUZzgfuFsGLQHWJUVJCU7pDaETkaz -PzFgsCiLxUACICgzJYlW7nvZxP7b6tbeu3t8mrhMXQs956mD4+BoKuNI ------END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/cacerts/cacert.pem b/chaincode-docker-devmode/msp/cacerts/cacert.pem deleted file mode 100644 index 22dfce98..00000000 --- a/chaincode-docker-devmode/msp/cacerts/cacert.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICYjCCAgigAwIBAgIRAL1fEAnz5zp4moJ8MdSb/lYwCgYIKoZIzj0EAwIwgYEx -CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4g -RnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMQwwCgYDVQQLEwND -T1AxHDAaBgNVBAMTE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcxMTEyMTM0MTEx -WhcNMjcxMTEwMTM0MTExWjCBgTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlm -b3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhh -bXBsZS5jb20xDDAKBgNVBAsTA0NPUDEcMBoGA1UEAxMTY2Eub3JnMS5leGFtcGxl -LmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGrsQ6oJpk6hDWf63HU3OSNd -bou9KNw/VIee1IngPDI4YJU7O+Xa/XLJuwnFv7BpR8Ytl3f+njC8i/RZP2/svO+j -XzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQF -MAMBAf8wKQYDVR0OBCIEIIpzkSIZzxBWVIV5unlgZJuyu2XPEeP8+y1uB6LLA5Qr -MAoGCCqGSM49BAMCA0gAMEUCIQDUh/+CC2dAICnYtACXspwUaaEbiyZxYIx+XDvW -o8VVcgIgGz5S4iC5+xkxgeaISPfxKTTVy6yzTdYGzCw1vPppjzo= ------END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/keystore/key.pem b/chaincode-docker-devmode/msp/keystore/key.pem deleted file mode 100755 index 797d567a..00000000 --- a/chaincode-docker-devmode/msp/keystore/key.pem +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXa3mln4anewXtqrM -hMw6mfZhslkRa/j9P790ToKjlsihRANCAARnxLhXvU4EmnIwhVl3Bh0VcByQi2um -9KsJ/QdCDjRZb1dKg447voj5SZ8SSZOUglc/v8DJFFJFTfygjwi+27gz ------END PRIVATE KEY----- diff --git a/chaincode-docker-devmode/msp/signcerts/peer.pem b/chaincode-docker-devmode/msp/signcerts/peer.pem deleted file mode 100644 index 415d5617..00000000 --- a/chaincode-docker-devmode/msp/signcerts/peer.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICNjCCAd2gAwIBAgIRAMnf9/dmV9RvCCVw9pZQUfUwCgYIKoZIzj0EAwIwgYEx -CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4g -RnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMQwwCgYDVQQLEwND -T1AxHDAaBgNVBAMTE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcxMTEyMTM0MTEx -WhcNMjcxMTEwMTM0MTExWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv -cm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEMMAoGA1UECxMDQ09QMR8wHQYD -VQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D -AQcDQgAEZ8S4V71OBJpyMIVZdwYdFXAckItrpvSrCf0HQg40WW9XSoOOO76I+Umf -EkmTlIJXP7/AyRRSRU38oI8Ivtu4M6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1Ud -EwEB/wQCMAAwKwYDVR0jBCQwIoAginORIhnPEFZUhXm6eWBkm7K7Zc8R4/z7LW4H -ossDlCswCgYIKoZIzj0EAwIDRwAwRAIgVikIUZzgfuFsGLQHWJUVJCU7pDaETkaz -PzFgsCiLxUACICgzJYlW7nvZxP7b6tbeu3t8mrhMXQs956mD4+BoKuNI ------END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem b/chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem deleted file mode 100644 index 10625226..00000000 --- a/chaincode-docker-devmode/msp/tlscacerts/tlsroot.pem +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIB8jCCAZigAwIBAgIRANxd4D3sY0656NqOh8Rha0AwCgYIKoZIzj0EAwIwWDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG -cmFuY2lzY28xDTALBgNVBAoTBE9yZzIxDTALBgNVBAMTBE9yZzIwHhcNMTcwNTA4 -MDkzMDM0WhcNMjcwNTA2MDkzMDM0WjBYMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzENMAsGA1UEChMET3Jn -MjENMAsGA1UEAxMET3JnMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDYy+qzS -J/8CMfhpBFhUhhz+7up4+lwjBWDSS01koszNh8camHTA8vS4ZsN+DZ2DRsSmRZgs -tG2oogLLIdh6Z1CjQzBBMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUA -MA8GA1UdEwEB/wQFMAMBAf8wDQYDVR0OBAYEBAECAwQwCgYIKoZIzj0EAwIDSAAw -RQIgWnMmH0yxAjub3qfzxQioHKQ8+WvUjAXm0ejId9Q+rDICIQDr30UCPj+SXzOb -Cu4psMMBfLujKoiBNdLE1KEpt8lN1g== ------END CERTIFICATE----- diff --git a/chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem b/chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem deleted file mode 100644 index 0feba1a6..00000000 --- a/chaincode-docker-devmode/msp/tlsintermediatecerts/tlsintermediate.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICETCCAbagAwIBAgIQNpgoASE9fi0ooZVKcnwnZzAKBggqhkjOPQQDAjBYMQsw -CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy -YW5jaXNjbzENMAsGA1UEChMET3JnMjENMAsGA1UEAxMET3JnMjAeFw0xNzA1MDgw -OTMwMzRaFw0yNzA1MDYwOTMwMzRaMGYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpD -YWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtPcmcy -LWNoaWxkMTEUMBIGA1UEAxMLT3JnMi1jaGlsZDEwWTATBgcqhkjOPQIBBggqhkjO -PQMBBwNCAARTBJ8/o1tpHPwuixYDgRwcrzAru0cWJJhE6KWHAa0vBCG4nl0zjjRS -og+iAuUcY4Z/gJoHol6dKSHk9h5jrqtEo1QwUjAOBgNVHQ8BAf8EBAMCAaYwDwYD -VR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MA0GA1UdDgQGBAQBAgMEMA8G -A1UdIwQIMAaABAECAwQwCgYIKoZIzj0EAwIDSQAwRgIhAIkPzk7ORV/WhfG7QY/6 -/OJg4++ftz2SZc44NIuogMArAiEAqbnpnmmHnzo2Qc6gnliCegpGnJ18RUT/jZlj -1qXHcvg= ------END CERTIFICATE----- diff --git a/chaincode-docker-devmode/myc.tx b/chaincode-docker-devmode/myc.tx deleted file mode 100644 index a9fb16c9ebe329ddf028ed912d63ba2c601ddf48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmd<;XW|m%;^$zJV&k~^?fgYnCFb19WTBsoT;CYEz)S-nIWBI;f`XjP#UM4|MVTciYM=s0YM`oxB!u{Y#&B^#`2s*sLCn#D T(o#w&P8AUn;u3)P1mOVytTstl diff --git a/chaincode-docker-devmode/orderer.block b/chaincode-docker-devmode/orderer.block deleted file mode 100644 index f69234ca834ee01682ae5a3c0eb142a5ca48ff9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7902 zcmeHMORVEo8E&W3ncFk%^vbBTH`7A76c7_tadPv78L7wiN#Z2OiC=N-N+8Ec>^KkS z#!2j0LK+DPq^c_zY(SzCqO)RA0Ya=;uwaW=QI!oG=W%EHm`5cR2yU)) zC*jt)IX5#^LMVs@(X_ z*Kbolz6pMG6TEp7tih`Xj~+gnxODK{ci;Kl*YvxaibT?P9%x*eU$P`a{#4S%}3j=zP%a_tc>ttXN_foeNAH?M&w zWOFhb_nUK@dM}aq(-C+K%Ps1iBkJuV>eol$GKb1gZ79^cmtKxP465+Li!729zRa^w zK^rT;JkRPb%R+l-!+>X?%}cP69w0c4a?vb1@oGifle?+09bx)#oiNon1kj2$fLK^bnwswhY+x|X$pG_5(^ zi7>M=!U{{Hpd4%*>L_GZ*2D@MlXh0u(m}VPF7-@lfyE$>B;KHb0)Ycc8irL4n%gL_ zf--{BAUhfnS{fb4>2?_3kaKP~LkCsI60l;0#A}TeOq1^rXtB}V7=yi0b6Lh#Py@qJ z1*TQRIGAm>afl))Z8x$Nb|g66%6J00C$*)ip|I>ibvtM&T$>CInTjlw5p8&0vD8}}>ag;fd1pfM3v zU4=0)gDcGXv?Akd3EHT_vb*a5RUyqorZV@%yjPoz@(!mB@+VdGq$vwM(Djz3x)7w= ze7~ROr*@0uvwBS}G?N`O)oIk0!L+<8Ff*yBFUBW>GF+B{k zahN?WKujtS<0N5bE^NiOQ8suY>-~HW-~YPZh{SrkidNyTF1Y9Ao7G5dA-aX zM0KG4pCON#VbKrREs0c6P;09ZQZQk#7>O){>td$to0_o#)+9I66{KNC+zc`y7Sv36 z$s=Q}YdP2K2yQn*IL?jD9@&6rez_?zoSI z;u#Ne0E!kT+7KBHKj31%ljs%{t0@MG9JKocK*0t; zV22$?gv%xwuf7!c`+$eJ3NFf3n4vDkzjOK8Umo8e z?cQaKDaK$j?kZzK*voP!zE0o0L0IvkTZ|cIIQu3>r(f?hP5C*Ffnynk|ZBA#LBhU%`-Gdtkvp3d!-Vxi1)^ zFta@px-Wv5_Z^IQmd{8q1@h8jK+>$aX_~}h+!K+MCGCu<2OObyK=^%3`t*Py{dar~xm|}PZ5k-V zD8xbv1%~vdKybELAw`2s!6?QDh+8y15P1wucuz2hg!^sYf&8cyjS5Yvozk2^r6B65 zJV-Tbb~c$DETW8TSlO(=FFhN>IUFK*+MUj(lSy?Nc^T2l+tcxo?c1};w3aSPs*-Yz zu?y0tovO96?+1p&CD@w`r~Yvo?5?OUP%j)jN*z%L)FtwL;oyKgHV_O3Zss3*?m+&x2^4;K$V zJ_DX&iKRdFm%g%|^{GSZ61eDlV{h+rd<-t{@8DVLse{MjyWAPhe6EA1nXzY$+U9uJ zGviIj$=t*D`0Uu9qpp(W!2a*U3uo(*J@@B)w$9G5_t~El^~dMImG~aK`C_=7_|)y^ zsefJrhg%VQXMp&c*GyxIGuQ z|4rid74XbXn6mT!MliO#@z7cmDgGqUga>;~n0Pj|^GoesQl_?2{QA8Hj$hu-r9Mj? z5Q%<~xeu-BXS zeZTKhU!<;rC%x^<)h`w39DUC)5}yZ$yG`KO_Q(?hXF^f&Ic%R&@3(m