From b1bce5ab9f52f85c1f1dc2088d381ef4890af8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraci=20Paix=C3=A3o=20Kr=C3=B6hling?= Date: Thu, 22 Jun 2017 12:10:39 +0200 Subject: [PATCH] Automated the release process This PR automates the release process, by setting the version to -SNAPSHOT when on a regular build, but to a proper fixed version when building for a tag. This effectively means that releasing is just a matter of tagging the code at a given point. It's still needed to manually bump the version after a tag. At this stage, closing/releasing of the Nexus repository is still manual and will be automated if the main release procedure proves stable enough. --- .travis.yml | 26 +++++-------- RELEASE.md | 45 ++++------------------- build.gradle | 25 ++++++++++++- gradle/wrapper/gradle-wrapper.jar | Bin 54783 -> 54706 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 6 +-- travis/prepare-signing.sh | 34 +++++++++++++++++ travis/signing-key.asc.enc | Bin 0 -> 3600 bytes 8 files changed, 80 insertions(+), 58 deletions(-) create mode 100755 travis/prepare-signing.sh create mode 100644 travis/signing-key.asc.enc diff --git a/.travis.yml b/.travis.yml index 211958bf8..5ab5e1bf3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,6 @@ sudo: required - language: java - dist: trusty - matrix: include: - env: @@ -11,43 +8,40 @@ matrix: - COVERAGE=true - env: - CROSSDOCK=true - services: - docker - env: global: - DOCKER_VERSION=1.11.1-0~trusty - DOCKER_COMPOSE_VERSION=1.7.0 - COMMIT=${TRAVIS_COMMIT::8} # SONATYPE_USERNAME= - - secure: PRiEM4oGX4yjIzQlGMg+C28LdrkikUO8fsCXul0O+mJQ6Yua3b+G9HOC586UvyqAY4mFvSGP/EIefBuRLVQhFKvHpxHtfjpGg3w2Txq9KxiY5DjaYFuihKPz8Zs+PAZXd8rWqQvjZFkpHHmXdQG5I4MRSCb5Pkk/T3uwJqDCpcQeaBxWIglwVm4etM4pBxQT7BCVKvh4CJ6vNJuLPRRqn4CqgnZV9ytcrUoOF3binbdP2S2KImBqimAyLW3ThqTaJ2xkGWTKI7oc3k2NCejIFUPcf9dzzZ4aKKu9x9t94v7QSwLOE+9tQh5F0W3C89qcG9SmPVaTS7QwQhKwFP92BfMbobu056VSxSFielQ5DvPTaAiStGBzr/2Uhn+KITjSRNj6dX6tjaL9q/8TFE+g0QZIP00PhfzzNOde5Nlh8fUu3bo+4X6Y+WPXHEe8SfLdVYIb6+1zvxkNyWHQoeN+uDGIDSOgWYT74tz0HBcpt2WIrOPaSc6m6RaZKC8dOuWODY+HRZXetwvsYa/aw+Y/7aGJgh7oJqNM5/D2Cc9tp/Q81J5pGZZEjNF+lcjMX8A8COk4TKtd9SbL+a5BeNUOcu8wWJZ/5vEHi2MaghfCr0xVDqQVrKbHQS1UH/qnholpUOD35iP4wVl9r3ftee1yuH35ZNFUZIGlAmLhvZ5LQgY= + - secure: PhwgRqJUOAcGnZGp9r7Bti4KSsZHCrPvEXubIpkk0y2JGh4rHiRr0iZOgR4+teBh4c1bsOwbLNtSUjE8pKYi2+vBVxL2IsNSXU/UXOz7aTvNzOMGHUm4rmJKUY70f2Ur9yFkdMQr4x9j7kkMJYEPDTGushRPjE/1TJR7E1WJoZdLB7hzEQEzfxuOlsMhpDtJ8KAVEuFeyxrlJb5YMObwUbnZ+iu92xWzaT7uM4+dIK43t13f7+29U7YHTi2a2lPr4ik3yIzj0OApZlnSX1sDEW0cTzonJH0iWeMHBsiSiUYOWzkLfERq0ABhUuMzMK4JzPRso7sb/GjFnvoCzUCGyFmDjU20lgzTR5uB+98i1fktlb9uF2wY/2y6WqG13vC+jLd8I2k8lPGmhaG5re2YPnmo3n3nLlNkH157hPadgV/p6HuOj8+dx6EKUFP4KZztSuK0cj1cCLZD+6Sv02iUT34yGILYtIqTp7/AeCUqogUsgNnsyOwDow6Y0wppdZ+TfVRuYS9mg4gW8pNo9CfVfKRyhDtgWvF8hkNOTvEyRBy9PeQzDxWQRUmEl94ndOkQcrdAeB4htrYqT4/SF0IVn9MVycL3FJqq00bELW7127awgHClvFoCPIDCyO/J/Lu49OgJPZopNAV6vsb9OmmzyHDWr2mCZcVkcYVbHSCoDsA= # SONATYPE_PASSWORD= - - secure: gqAqV1tCjiqAzbreGsgvlcXCg9M7MLyyc+9v7/booL+eNqjevQ25CEzLSBoQQnJAKNDixHloCwCxRIbCrc3HcAl/8V6NZ8JxzUPoxKzN3yr4SPyD+KcJSNDwPqCHScKnMbuBPGKPcZFng2XyIpKAAAzqmc+zMpKRBdos4l27l5b4NdPHJUPRgFpqyL2oZY5nzeqzB/akP1c0jOZOSbfl4JVdXflYAWiXtA3zesVCJcrsYrQQ/xpL4ziETqy9UFZnMcBH9KADx6gCyoZMsf9OfVCGl0YGBb1LECIUYi/74b8TPp18+oUNYnpZScsOHmUSdmFrkIb/y714OIYPDQPhpny/aPXkBHH2ze+7AQGHNPoNJJZsG/W7/pj4AH91HGLVBxGApuA95WNFoIglHWtII+uvraeiTWaeC6VYOrwDdLHy5Aijtr1lH+zqFOfzSWGyj6Blt8x3aKsZmnFA4b8h+l0y+VjEFqmZIf9yKLlShieyhCWdZtIEwmeB120zbFIJHRfHClOs7Zwel4uE2HCJVSqP24auhA5j7uHYPBBSD/+VZRoeDiDE0qjRO0ZeXAUP6EIrplZecDWZXYZhW6XOHWpHittbCAisz2m43DEXSunISrLS5ONkjeDUfn42q24c80/gwPlG+7zLynwrJ1sO7EHECPhoPmUpilaQ+j4kmt4= + - secure: Lbt9FQrHLa4k+ZJgnNleUrmFw59NNceTYjgX8pSpCkTQyldtfB386PxnFRAT12GCrPRO8u+7U/lFR9QjE2hJtB/y+3VfHldbwTY5nXhMRUac8FKsONkYryQa202oenVrKLg4JgdJdXkpDJEF9YcHLnc39w326/mPVeYWRgv3XZbOa7g3GJjI9BV6ozyN2oEFqtIP6OCx/1FJt+6aAHYOSfc83dWfHL7TW5xg8Dj3IGziItanXfEmM+LXiRPhjiB+JrUhfYD0SovbH3U7WiVTUyRsUTPg2sPSP7iptJ3Mv/y900rBaygdDM4H1QP5aBfB9ycOFiEcQWprvs/J7BDSLR3Nug6qXxdJIinrBXzV2qxxevZAZ9JiWP6oAcFKKsaycQZjdtmmLVWLqtKy0fCS+TvVHTEFMY2cxrATUGsCla4pb16ZXQ/bFcVhUp7uJ82rf5aP/niji4EuYCUOT1E1HUlDFvIEm0+KOornzOKPxUwRk/X5/xI1jfrNEtlRNFdS7mbbXhWIwtgCU8xyNOa7hGpunN9H4LpRtxowtmg3FbXQbH6RzCUfhrDlnYXA3n2frFbkxEjH+aDAhintau/ULyPW+Tyr8yF+0B3BIK3q7h0d9sX1/AnGAdPNYbVdWrdns4IP4w2NV4MtF2Hu6B7jj5lIby59dccyFCcfrn0N+ss= # DOCKER_USERNAME= - secure: q19fJLh2aO583rOALLKor4FeQr5u3EWKtUNhOyrUR9k7FLVk/9cLIrLr77DWdYxn0DE123DeHHm+GB7vEL85DmhJXUy3Bqpkjqr/eOZwtzGuCeDY9q7pO3eJJ8V3Fhw0p9rvGq1yg/nEO6S9whE+IUFxUanSIsjltM93KEfeaOGEvi5vkfKoD1etgGh8tx3d69Q17SyfHl+xRMW4KOVe3vdjUUnFPINhqmjKaYRmbsZ3yx7cuX+i6qbpW3Biypy/zjeu/35CfjQIiB8rgo8G6qtbGj9gfMzt3xmDL2LEOJtIx4nDJ3wPMVsGUGbu8LhNzX71EddbnqdWwjLnyoYAEYynu13q8rHljA+NlT8mPBP4wX00TTtJoWmwCmMnWgRcFPMS50cVBDwLLANZcVPU6iNY/+0AE4ANlzWHDLD/0pTqvYB5Z2UIVbXPuvkys7xBL5pKFnqTXVlWQuTRkSO8PXnSo24QP04AcjlkHnqNPesjkztFh4DSOfyL/6BiLebKDo6C+KNcN6Ep9SYpVfkwYDLV2qtfbiLxu4wjAgQjxPk701VGMfywmMvHaqa7UQpXQfEvHM/kTYJGknqf80WvXo/ilnvb9esANEP6cJZ3Z9h7Sq9P/ytec5NqPRaKVaMmN5bJXNY30g7MLkyD1fAMKIkaUfFdKNFzZVAAmsC7fho= # DOCKER_PASSWORD= - secure: aj5LcCTpFS+e/bgOkyteSj85SplvGAgeje+Rbo8C5jgxScnHutalAEECnlXJBvxdke8OE4s+J8dX4cKoHf0XXial8hwEwfm+r/wPeTpr06L0eleBGfGsiF0dsYApIs3EmIoA+4x3LGB0BTta/XOfNzj9TFkaf3NExn6GClXAzx51tyJm3C8Yt3OP756dga8opU8iIBvKIA7bgn2pOs7xBSd2Dx7J8jBsw3uBXKtpyVLj6n7fl0EaVEVpF9Od7ASeJ0+P9x2pEkiqZhuMHm4mj+BaUqIJABRZ93PqiEDxHG/pnoJiIbXVis3LFTxFKQVYLG53eoZuww1h09TW+m1oDe6cNpkt7TanaKZ8a5oT/sgHUZHzP5Tlvv8UiqcaTQDlxaszYgcOZkfRHctMNVc0Wyr0QEft77c0jsK8lCyudzMhXKxj+MFoYxkUx61vBWQvnToJdP1YHk0c7YWzPADEIwRG2v2rXZvx1CmWcMDtxtcU+gSrtcD/8GMFuKKHDV7EAvApKSLl5OoAioHPVZLNvZbrPFaVV6dpdrGB3kkWNf+WSu6F0IG/CCGStykJbNivyBYv87Ngs6iAVKYUW2uiuICd8Eb+Ak/J2T05t1kJaZRwfzXKVGAOHdn3lloah8bSGRPhbvT3PwkRXPwYRHL/jE5g/el0Bq1LI3tn/6VyDhM= - + # SIGNING_KEY_ID + - secure: lVS7/tiVUjNAhjIS5kSx0vIGJP6JLi6PGHBgHyPvgj4/3SoxJeJ07HKyMmP6oLjvUzDOQZ7fn4VuEb3NOg4rJI5vbKSVw0w2qXTDaiJUSEtLRWgUV1II7hhPXf18ikXcgiCDWv8IMlEUq/7VLyiqyLfgxe457GfUBW+HFjg/BkCHzIveilxU9IAE2vGVB46g4tBl4wSXkY9mCpZVsQHcNdJ2UIzXizWMpMiC138MW+bm3jSug2OnWTL4Bm8alv1r3drRQiIyd3VbkUMKEFWV4NpMZvx8cI4Z54ePi9wmqGn67dcFjjfWroJ9NOK58SQcWMJc5NxI6Y4EdYU3DUZ/vfgSaDgFGbfL1+tIvgllqLuwfnTXM5wx1UDLHx9KbzveHG+JIvfLbIHsKIzAVHoyFo+ZQ3suEu3CL/75mjijnoHJ/sQhqeLeDIFwan+AdKlfofJ/Ztq7rqPysGu4SzYxs3m0pKEPuGnjXVDLAa4HUFz5inI+4Q34Mdr5Plm9E0Ka71PBMxsW92IbVTYCKASLvyGbHPpAFUSBeRtT/wYaKlOxvFJ7fARD//wRAlelD/41IzarwaXtbtVS8TvJ9vQWhbHDx/ssPTify+5zMzJ9QboiUjpcOlN1bhRJ1oi6OrgacH4do+yhWJyar2f+djomWDJ6uvsKqep3T+CjB945EFA= + # SIGNING_KEY_PASSPHRASE + - secure: T5pS+mGSBMntcRvwYU1YZoCiJbBgyPzl67UKa2ivyFeRxd7s+v4UZgdCKxCtvj6HlHjePf0gKBEPq/QrDMNwculzRQ2yuMxS6FVm/MUCcjt8sAnxMsPYLJpHNXTHwPSzHWEQ+iC8GeoZQ17C+SJtYj+wruXSlh/NeL9Ni5dzD3NcpA/WCi7kiWUWlIjKVkseZdHWOS+jBcvbLq9NxzLlES26KzPgB7Pk5PARAKjhbzEr5BDNgOk8K1sX1OskiFlFM5W9QX+cW2kfG9aMm5FfAfA1UjwEWhWYq2R7nTC/MuYhNLwgGV25h2rj6l52ys9B9VpdmXCawXRBmZrTYxHKAc30nNvEtr+4lh4b3ywIh6gm1D0Jvh+LLVeOKDaTPxN3SrmtUN/ORp+4oaF7/qzTqOXCpUO7zdNHl7PKAaCgOKwmedWFZyeDuOeEStGWp/2/RTjEdzozfdiMRrtI3q61uslYyNLMTdQ97cb7FtBlmsljkkgFWMZg2/k5VdWNuaTWGCrpo53IaAauRQBtVmM6KNgL3J97qkKUQr3gDW7ADd0Zy5cStPtybSuk50Rc6rb1cTA0BzkQPWAVGzy4mVeG00m6OuR2Gje0ceidydW0ELoV368e10RJPSlXyZ89aLNbGVk1l64c6/YR/D1dYK7bLc3I/j5e3pnWbkMKI5wsMxc= before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - cache: directories: - - $HOME/.gradle/caches/ - - $HOME/.gradle/wrapper/ - + - "$HOME/.gradle/caches/" + - "$HOME/.gradle/wrapper/" before_install: +- ./travis/prepare-signing.sh $encrypted_677f232983c0_key $encrypted_677f232983c0_iv - if [ "$CROSSDOCK" == true ]; then bash ./travis/install-crossdock-deps.sh ; fi - sudo rm -rf /usr/local/bin/thrift - sudo cp travis/docker-thrift/thrift /usr/local/bin/ - - script: - if [ "$TESTS" == true ]; then make test ; else echo 'skipping tests'; fi - if [ "$COVERAGE" == true ]; then ./gradlew codeCoverageReport ; else echo 'skipping coverage'; fi - if [ "$CROSSDOCK" == true ]; then bash ./travis/build-crossdock.sh ; else echo 'skipping crossdock'; fi - after_success: - if [ "$COVERAGE" == true ]; then bash <(curl -s https://codecov.io/bash) ; fi -- if [ "$CROSSDOCK" == true ]; then ./gradlew uploadArchives -PossrhUsername="${SONATYPE_USERNAME}" -PossrhPassword="${SONATYPE_PASSWORD}" ; fi +- if [ "$CROSSDOCK" == true -a "$TRAVIS_BRANCH" == "master" -a "$TRAVIS_PULL_REQUEST" == false ]; then ./gradlew upload ; fi diff --git a/RELEASE.md b/RELEASE.md index c4ed01661..d4e10dd87 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,45 +1,16 @@ # Release Process -TODO: the release process is too manual and needs to be automated - The release process consists of these steps: - 1. Edit build.gradle and remove the `-SNAPSHOT` suffix from the `version` parameter - 1. Add an entry to CHANGELOG.pm with description of changes in the new release - 1. Commit as "Preparing release" - 1. Run `make release` - * Make sure you have the right version 0.9.2 of Thrift installed: `thrift -version` - 1. Once the artifacts are uploaded to Sonatype staging, release them to Maven Central + 1. Add an entry to [`CHANGELOG.md`](CHANGELOG.rst) with description of changes in the new release + 1. Commit your `CHANGELOG` changes + 1. Tag as a version (`git tag v0.20.0`). Use the one from [`build.gradle`](build.gradle) as reference. + 1. Push the tag (`git push v0.20.0`) + 1. Once the *tag* build finishes in Travis, the artifacts should have been uploaded to Sonatype staging. + At this stage, you'll need to close and release the staging repository. After that, the artifacts should + soon reach Maven Central. * https://oss.sonatype.org/, log in, go to Staging Repositories * In the top-right corner search box type `uber`, and find your uploaded repository * Hit Close button. Monitor status on Activity tab at the bottom, hitting Refresh. * Once Close is successful, the Release button will become available, so hit it * Keep hitting Refresh while sync to Maven is in progress. Once it's complete, the repository will disappear. - 1. Bump the version in `build.gradle` to the next release and add `-SNAPSHOT suffix - 1. Commit as "Back to development" - -The `uploadArchives` step performs signing of the artifacts. For that to work the script -requires private/public keys. - - * install GPG: `brew install gpg` - * generate keys: `gpg --gen-key` - * see installed keys with `gpg --list-keys` or `gpg --list-secret-keys` - * create an account with Sonatype, get repo permissions (e.g. https://issues.sonatype.org/browse/OSSRH-23572) - * create `$HOME/.gradle/gradle.properties` file -``` - signing.keyId={key ID from gpg --list-secret-keys} - signing.password={password you used to encrypt keys via gpg --gen-key} - signing.secretKeyRingFile={e.g. [home path]/.gnupg/secring.gpg} - - ossrhUsername={your user name at Sonatype} - ossrhPassword={your password at Sonatype} -``` - * upload your public key to Ubuntu servers, e.g. - * `gpg --keyserver http://keyserver.ubuntu.com:11371 --send-keys {pub key ID}` - * you can also use Web UI and upload plain test key that you can obtain via - * `gpg --armor --export {your email used for the keys}` - - - [ci-img]: https://travis-ci.org/uber/jaeger-client-java.svg?branch=master - [cov-img]: https://codecov.io/github/uber/jaeger-client-java/coverage.png?branch=master - [ci]: https://travis-ci.org/uber/jaeger-client-java - [cov]: https://codecov.io/github/uber/jaeger-client-java/ + 1. Bump the version in `build.gradle` to the next release and commit it diff --git a/build.gradle b/build.gradle index f3795d95f..fef671817 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,5 @@ +import java.util.regex.Pattern + plugins { id "org.jruyi.thrift" version "0.3.1" id "jacoco" @@ -8,6 +10,9 @@ plugins { id 'ru.vyarus.animalsniffer' version '1.3.0' } +ext.developmentVersion = '0.21.0-SNAPSHOT' + + ext.opentracingVersion = '0.30.0' ext.guavaVersion = '18.0' ext.apacheThriftVersion = '0.9.2' @@ -31,7 +36,7 @@ allprojects { apply plugin: 'jacoco' group = 'com.uber.jaeger' - version = '0.21.0-SNAPSHOT' + version = getVersionForBuild() repositories { mavenCentral() @@ -142,9 +147,27 @@ task codeCoverageReport(type: JacocoReport, group: 'Coverage reports') { } } +task printVersion { + println getVersionForBuild() +} + configure(subprojects.findAll {it.name != 'jaeger-thrift'}) { apply plugin: 'net.ltgt.errorprone' dependencies { errorprone 'com.google.errorprone:error_prone_core:2.0.15' } } + +def getVersionForBuild() { + String candidateVersion = System.env.TRAVIS_TAG + + if (null == candidateVersion || candidateVersion.isEmpty()) { + return ext.developmentVersion + } + + if (Pattern.compile("[v]?((\\d+)\\.(\\d+)\\.(\\d+))").matcher(candidateVersion).matches()) { + return candidateVersion + } + + return ext.developmentVersion +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 026cb5a29ba1f616a79d36a8d0f5ffb4c48e6f7d..35edce0efa04a411a5e82fb38979c6c19893c624 100644 GIT binary patch delta 17149 zcmY(Kb8sh7)9+*3wry)Swr$(yY_iEOPBym9jg5^r=Em6Aw(s8OzIESvrfRCb=S=rG z^GDa5>FQ5^RzWsYLH^){j%WjU3nvI^!e)MJx^V*s`$16ObPtF8;~ISm6$K28h6oId zJjoS?1Yj|DFm-p&(M2@DTJjWDUfsZtl_J%WsWZ7U`-SsDK=_>*NeTl3DiKYOs=>q| zzKPP-l$&yT3c^jFH%@$qOL4u)RYb{*R!Q&C_zZ*%uXI+*>@>gl&g+;IG{^JaVf&&e zYCCtk8Pufbh*j2de-L;P_}Jq=-F?|}f7ttc3`|2T)3e~o{Ot%f?a~<7w6?g_UFl-V z(%w5^J$lLxHXdZPeX@jval-S#?lt?XeeJvQmRbDlx$*`IUc1f&Z7p2s!(?8q!Sp{7 zL-s~*C5`v8W{J*RLqh@)qKT8F;|I|&J)xrPS7lF}D{sEYl7YG-#&}QiZz-UkM^E;U zfc`b_m)`&ZI5A-V_wwqo`3bhm=`ZQECNZbmLEfH{aT2HT{MEEt29Pk>J9e;TaeLYD zjJgtF$n!~${lZH8>G&7wLwbbQ{z&L@rL1WA>Zz+?6|U^qme7|K0c9NpYuvnUbGvWSm|d+LckI|S2y zDP>3DG&e+J=&(36*%5JK7R}-`JEYa#$D`=5G+2|_rU(XckiWZZ1dPd*oi~a3EV#2W z-&wusu3aaor(XI&+!vXTpvEH)nxQ_B;*;{zkikHoycp7+>&Je1#b+1Mx!j`8{u|sE zOAez-hb8icKh|?COM>Qyrn1t?R;6XsUn{5XR7q($d9CC(PJOiWMo1fS@PX7GMw7~| zNf~meXH~U?9uuuB18_Ihwfpfw4m2Wvxk@?c%8eM-88xA)>lo3zYg>!8%w0Fl#Iwnv zKVQl`ROR*OAKKEemJO_c72^HH-Rq=Gn-VI$wrM%qva#;wqC$7AN~R491?&-zIrU2WY&C#(r0)O(I)}) zfwZwJSq?9OfD>WVG&hSe%u<27vbPeh$W9SwZ?=F%JD5&mR?0^|tjJCd zQgD?c*kB6Fpx+F|RYXslw4Jq&;%xBlb(m_{?m@c7lTUv z;{%VeXa+^TOqmQbr7Nhu>!ff2csA_`)*{9_9?johAyoPOD^BMOD(yLrsX9>fdiGf- z))e|YzIE6xPPjvgmg$lHlyDAycC&3{HJHX7j%dw7XLgGtl?_k-x zP0t|Rzf~7^;%nt9YCog>* zzM5`xsi&nQu5FFM9@BB+p>^^so)RD%TVJ3s*nm-4a)W>_YaX+LYOTY^vhvu1ASny% z-?Zf7(9^f2C(0=_bYUbxD}3HSB=8V0DSnm^LJMiC!{|@n$rfTLWM|*s>{|^d_0Ywn zrGd5Uj@8JQ!ltpr&&j!JltvT=DPot>8}FmLX;#h`kMx}Thv@te52tWuwYt_SfBUQ-snP0bB$>~Q(H3Q*KcX4hmd`x8ffNgzYssw*zqb^T zw3;zHi9^*ahZ4)B8MYHgcQ~+|H0TmH%H0cjL+Z zLCeEJ^FpPwqx`wvx`6iWruEF`gRDlle&e#MoZ_m#9Y1DAaNS!IFJYSgiAY!rngFGr zr@JD~`805v6BYh&8Uy7l77x{UbkY^vGR4%9H?o)u8avH2i0A5h3+Z3A_sOC0CpOmH z%033tZ6GcV%EJMy$GNxHi0JphrNFyOaDftB|Jf1Xl|2GH27{cPXc#Jv?Fk0oMmnuIz@d<$>AICKy$9?M;eqZZ1 zxE*lQezgmLm%Czw(FZo@8%j4M>9Am=W-JElF6=eS*L{E-=BX2ZhdcR!Za>%BV)*x~ zxDTow{WZq)1IfZQ)z2O2Dx1JtAq9BOg%_v2mtg z#WdD;p@w+Xj?lf-(>CGF)FGw51C)=A(O$#1&S;<$xBgIW_AmL6OD&Z}%U^K~Xi0QZ z8tS}vUvyx4k8}2;{JImpOxnX54e2$h92(M#cq*5pgsy3I zOI6-9AV7bmqaIA5_5Ju@LP7Bkg>B%&5;1tkCjv&zT#6|JG~(i+`Qo&BP3eYLa>dHX z`dn}*h5Ka4F!oMdx;lgdgrZe3V!A>wwSN;NRnv~^P=c#QcG0>J?_OVp#@wp2s>|m5 zCfe;~Kj<3Kxbcx7UNL#qs_j8O^(}WQO(rRHj(LhkcRh?~ABkukiR7{^d_8`?FMi@n zFai`$YMxXdAhLDiNe6B{R{1lzc^~QM%RmsK!YV5?+ z6A|5&aTtAHEdHG1QlH_jAiCvkv<(|YB$bb|reRs@5{2&qCxz$r{9uz+G5$+iYj^&U$F@{bm zsXh%d_XgM9(65Vg;oUyXRkd2*#sD=kYwLj8I6kp3-7%NuBH5a&?uZt34|b!# zfk{;sqrky-Q&Hhr`}viC>JYETQ~5ERin7?dCuv|Urnal%fG08{K@a_mx=@a&uWhx8 zkeBVw+p^9!bnxa5_Gx8`C&1**BZ&UgA}Gi-lk&K(XVTu6yuVN)CT*f!tc^Ns4^c=~ zS8>9x)Q4OQ{Bc__bsO|L{~IAjVMu3D3bo_=Q(@?$@O(`Dek|sWwgz9C0WcbMD`nc! zdOa`|N^i8K*1vmOIjeR~AVC_GBXg$tz1 z^Gy9QyeCRaVsT-+{FBpg>=&$iQ-UqiXjeg%xlav|ktV#Q(Zs=unP&S}I-zI@Is2Dv zFfEBBb#OW`3H%~_st4uaJ<)G+sSLJ(^6;PdgUDz2@ta}hI~^)@f<~*&SQ_Ys0o1M| z8I#KnR`W3OLPf0u-KB^RR*>O%E%dtAYI7=RR`FL6C--y(>`e^z1iXVGD&F~V@&v1A z^he1N&k?R5FP2Fy1W+UBqD?bVh;;V`4^kw~ zd*{2ZY>G+$oGJ*O5@b_CzTv@D9wI#I2oty4yh9QAvmS`}9(|PIbn@U-ic#X9=0V!Y z>IR=6&ymawNlNB5FHjw6AYHl3il=EExT@dk>VvLd2J8QN@%P$*BE{x!qya~Y0~s~~ zAoAqT;ETJa29Lru>vhZ0();=s)6%T&&ppbE1`EORN@w)xJEI9vTlfY9zwi(wCzp&y zfg(h}5n0J6{Zf06!r^=NEQQUw^~YzVvLvtjGBZyVz9l+lhD)#U==OGD~$sDV%r>mBUsQIq!T6?DC3I* z3cdl2fuFFn*I<(91GWX*NUB7*fpih)eB@sB?U(z8Aa7V#n!Vr99HmkIcUMSUevUKB zan^f%7|v}3rPAoNJt35PlO(GFsn(7%(Igc3re`=GUxcJb3pqYOLb-?2v*sEAZz}gl zxo?;3<@9zHIe_?fC|xFdUp63^|IYH#YNEU!KTf0!Iy@AgkfNF&EUQvhQU7E*)OphQ zh^Y00OMBf;1lj`LxHMoCKv9D^Dt7*{l{1nhj1_T3P*-*rXp*O~*=) zn~WR&@t>W7;|(6)fOlxojn~cArB|cex9Nd+@MSWdie*rzro*88-i=y&mqMQ{HZ_Jp zNE)M080pWuT}`(~JM5o*fN;?I>4-gcmy%@4U}gX5{x+dT7rL|Bl@&HO$`dm~%Wh5L z;o9DfS9_QEP+*&JA0)!&@kl4t(FQ~6t}w!8l^OPCnHl~RosY^8!RWq-Q1RdQpa3yR zVv%x+X!vJt`ZUzheN)lWHy?>G()h7=bA+i%A0kq%YxDq(p^+aP~~512AFI2;8o)H^PGfQ@mH9R7u55! z(_?{!R_nUXpW0+-0DmRv(txWlKLJUdTK%3)mY8IChJwD|9KqZ!zBrkN#O4b3@+R@| z$;5Sqm+HgC=>@^Wm$bHxa)wZonUvmFsN`f@y&U$P)VR}% zroQ+;&wf(7^)BHVGDoB6wr3=S;W1-{RyTb3vLW(_@Gwdx%#`)Cv<&fIM!4{O=?>bk z&EJG1R^6m-fTM^WGQ(e~EN*AxI`uw2Ff8XDKIcUZf|F3^OtD!-MQSV2U4>}%sIuDo zUptftW@9WdfLPp*j}@J{b3@vq;U@k+FTZ69P@%LIr{jjta*(P|B3!wQRKIPi;EjjX z@;r0kEZ`PA?<&Yv=&%qcg0MH2wkA2h@Q+)A!zxiT1Me17c*kfVl%C_NXOIO-&iUV8MsK~bK728<36@C4N2p<*O#!s!k)KDKi$9st48~+NS z2u@;-wpGN}!Sd14atYzK%Cml0x2%=YKO8OU0R94wRLiRB7?-^UM-U6XWX6-ZsV!{@ z*Z6fFYdYkELZx~^elrH)4VIPqy}H?wxG?BZ+o zAcy21(HNN*7#ieBL5fW=6G;PKxB=iCLw8xCKOT`36!F*v2Z*6;B@ zwbB(DVIsH1ov##iv$+vlfjk<8xy~`QjiR|)RM8bPbyzcX<3bz;GTWe98O^>|$Lk-5 zy7OSlcB>kpUbp$08Q%<3jpsYR%;~6av86?~E_mE`ue%HJp+@%{i}>ZXEF5yM0;Kcv z=M}RG{W5yEYRn_rQ&7@oMHyI#_KvD+%sf&?zSIv3?ArE1BOyW@oyXS<1l-kc`mUpQ zv6@13bQeUFF84$%Q9>+dF^?|~=l zvKz|-(IkT5%u!#%Rqn>9M&$T)Sth^FHhvx7_p|js>eYg@2bS&KT};ST+Gzs?sT{+* z9Yk_!wj>S}dFpuG!z~@{33G3i_%`8Pd_;t{IYU+7i1X(?Hkqr+s+cF2ffBRD3Kw#e zp;|ss&@Sxrm>Y;yWG1R@Dm!s2(LJX=EkT`%7xIwC;?OO&NpTwLBA0oT!}l1+bj;UR zwx{kgtv181( z(X)mR-yR;FiD7LzNg8JNZJ+Z5&ii)6vag&}yoC82Ui5pq5A5B>ptye?hAq)`nlB3S zm}T->4daKuKq8ClgvBny{0b)n)#VLbaj#E`<3A4g`lq}?`o1Cn7pMp4jI!i=kf781 z&`@$%`}|^8h@CHl`)EsQgl!PKE`Nxij`$|FI3(D=GGRo|V`(cb?f)>+a=9dBY7u-^ zJ&E9KNVmr-_p;cQL&%pSSp(2o9kh2oHfz6D_HYVcwAY$9up0+Ncn_j%QU>tE&E{FA zi^UjokfC0K^Mjs~Z^4`-vUU7TDT1j2gCIXSM@y24P);lk+`28X&dhzISc;U+&otG^wE>L2AM;aotNU076|&F zEE<;~-7y>FCd>MJBc_C3zfyXn>m7Z9c7IXTX8z&?raH!&l>eS^wp2skP43syFw#Nd zkvT-nd|5CdRks#RIwH`z1lJ!x6Yls1v~KIJ|6%i)9(Mn2%b#hOZrl@ZSd(YPCjTTT zQ3FY=>v7=}0D;|NWf&*0mN6(up}1gct)4F!Z76(N#_lB_bKfl##g%89(u@WFGIh~1 z?WcPM1X_;1zZ?D7s3e{qxP>>CJwi;M3Q6C;`-OOJQ{q}?|41Sj zc|1ETriafaK)=yH_E}0*}vRNj|aHkI?yz${W$UeZ949ow1Bf zrW8AwEjTa?-&36=O)f3kWLCBs_Y<{|ni&ZWIR~*_j0zJB?13H(jO;&uvL>U*K#nea z0QP>fDDC6H)Z}Cx^w+j(N{mqwFD^QQM6!BvGE;W49V+j{n04x@9C?gWEmAGL^Fq&7 zZ13_CO$`h#h8EAIRlS;)#YJoT!1JoWpU%hrKb`3>0V^jbr^GM6_R^fKdiJY7-Ft2W zeea!>h2

pNr7$UBw6_GxNE8fw|C|nLYWUvBNgBlpCKg+NX%EAQlPoTsrflVtTl1 zi(Cpt(}*%R)d;6u+qqEeT#`b1A@PH04Iix^*5N)V_6T_xg~vj?gJm~D$MmTOTw#ad zHYo9^uJCD~^3?IYMuSWQTZY^As48qDw7oC{)g)}%u>0R7PeUyxEl z(g1T0`$mW}etIW`TqJ86e!E6%Ta#Q5#R#t|snjSFrl3xbE}L+Vdv3n`$`=7(`K|cH zh>>`bTp)Z&wozp8@D?Ua|7#Oy1lG4mh*wq}e`m5wavKrLDMeOayeY0VtUQBN!^b~D zFVvaS7;BIC#uw&u-oSeTN7`JT?-+CZ$RHeNoeJa?_9>JVS&F<@|BWIPw&4* z^Zb=)gYmpRnI>mWpN%xDX$&?zJ9uaWKyZIltt&h+j6jc;cYQ)&8X=wbMCeV1Y^WcrWu+nogV4NmwM99Y8HgML%F93OJ5g+JJ zIz5A!gE5QrQ>n2(Al5_r9yG8HCNX@RMr9aEjAnOFIs7t~2aPF(R z`Hyj&_nb5XzbL-xIC~Mu>T7vL%p-CN5$tZz6M7&EgH%EI5RMgbD8YVHEt(N6Eh0X~ zt)8VqY@XC6nLJXJno|rj=_|I&&DX!J1~>#?8XTL+6Tm}t(c+lq*gd z8@1za=<^{0m>bx5@mjnYak=W!UweM~!#%8)w_C>ndo5~<7jBly(#D2qvpt;jJ-T`v zTC2Nu-+yVC)#93ncW)>itB%b3j!KN#@e&Cg5_WG$bvjC9CzvdRVQI{FZU3mLG;Xc- zg-diSIzNafa7Efnx4F@qm}+w>V=}Ksl$yU|8*M5!<-LQ@Xwh-)HXWL9Psn(k2-ESSGbZ+7!WJ#M1JNQFF&mbwOG=m z=R8sC&y`9VQTl;y4mGu88R9Gn12q*j%%`JQ;e;pZFZWv!${vG#2LCW5|AbDSoE2qk_4S%Rw?6qi!hq6AKM>!T&ue(jZm$>yKYKP?+FO3(*(JTrIy#c3*^}$6^2`_j*>Y&k z$n9K!_F6e+y!%r;%mEpFlG)ylQMH&ZplFQuniuWQ3TA^Dw!{&1n6uV1PLJk3u=eDY za`{&CZ<5ZU)o_2#%a-t?aSwb+-okD_2mBnyf`bYe@@mUW}( z2K=LTZ0oyb+c8zVQ`0M#PKUBjyG)e=WetNcfYQuOugA>^ zzpGP7Nrag|o$2(Y$%6+{ipcADUoSi*!nVUozoK|~oH@Tzf}Oc@Zb3!;kIm5N&XbDX zLNQS?d8?rL^@E3__AVcSMU!5c7$Il=4Q0r%w5G`Kc>1@tG3AI|R9DfKlkFy5dtJYO z2wDp45pfFYZ4!ehwe$BY0RLU#2az4;?lBzJlThr&vkvqW+%oc?&GvJ{dZ;M0t(y{g z%^=VtT#B`(NdGkbTVM)6X2L{3Xm1;(7i|h@D&CyEC~PocOAKEnm2~u4&_7-E260Im zwaTtZH1$UE+9X(d6aAJbbKk)AGp0_ZbWHtObMw2|mpAhIyVaQ{AmLBu*w68%l{}+5 z_LM)=YO@iTC!@P`5jB2+3o}U}oQg_)7)dSy6jNs|Y|BL>j*-Jy2XG&A=#3TVkz%q` zRXgS98XxGr1y}K!AMm{uH_FetV_aMeuv;#{g0LKeBXs|B+qol)s>Bp2` zHqFtT3yTT6vW&Q<{`<+bvje4HHZ-nn*M(P`j&E0;g~P=J^b!|z?RC^Uvuk4Hm!0)v zl;jxk7%o1-#BHr|PRb_vB<`psS@g)olpvy5@+vKP40*ITA!D?idZHE69>gk-AWtBC zjq}U3Wd6bp*b(!I%-Q$gFDiCAdz*Nd8>;ub&m?KW6nBdu)!h`Q=UhQMZE+Pr^5C;w z;UA1C=y9y}7rLjvOH{a^PCBq;D?nu-G>?htgd8rB=^Itm04|f{DJ=Nm}H6E{SJuH=bF<|4TRYdkWovpB8tSap8vXyW_HfzHY3P-@Iyt z+L_JUG zT&3zfG#gFz_W~oCm?6_M(DF~|BU=2_za67w5fHl#06$vjVwKm&+Xp?I@^2S zN+nP+Xc1yfNmks2eCf)`Vm3XAN8rk&4xN~eJGO44=nN7aL;lrb!*U_vDp-Wuc}($< zRVhIeNWb<*VvPjf`TYha2CE@BJC+QBmz5p?1|FfaVRl~bKPxHw#-WKn!U2u%6yiRrc|ckyr6$;m+M5u)kdYKUz(eV5md($-YenHZ}rj?d!A zJC8b=)|tGX8%2T<^NQ3TY&9ljtG>{SO!i&h?$t#Hq{DV>7Zaz{A>x^--L zC_?_E%;^%+1Ht`&cNkIU>A8KkyMi)Ld&6%A#s;C^Jx)^VC=72~&QNZ8ikw4Jf*446 z#_cjgA0Q$&NryCfSTb1 zYf3loN1^j!*V;m)+@JMrO8)m|uk>_s))Rir!eEr-W_2fD{NU6S@(r8f9|o$SlZ&0r z!$`Rb@7MxitqkF7VXtt0xl;$G^}zC45{51<~JJa3fjCScR8= zLI9NH2leGN;eFF-D=|sfi7?unJCPpQNnKnYOI;LOX02S<6OodKQkH)Yw_S0WnDWea zgT^zGe2y5QkNC}2cMZ%EH7ObMBws~{k;SK>iF?Gm9gIvt6K4u9nNm2J3HoaJy-nbIoN!abm!97 zuTQb;O{8tF;M1J!glRA8`*)26J)=6eZ&OC&lixj*?Em6dI^JVfhnymu{N;Q4*<<;Q zVEwIy;2F7A@KH$s8-Q2BFXm>`GVk+!zvFl1B6(j}P_}=ZJ^5niL|p7y!vVa5<%o(A zQmHqY^bHe8PPA4u(>zgNhoyu}vMdbrr3S4wK>JE!^g~a++Ek8vF&f=&EForrcg{H+ ztVwgG^@T)VxuJF7QWQQ?#{a%`-9yK9z*R+G^*4FkBz#+Dakws6ES z?lHB_yPbn5>pbJ%ws5Q2s&8g!>r8&JM&W7pHni^%o8Qt%hu2Bxm1n$v`})rZKaAi{ z0}7&^LZTU){lKMR9LRZY4W-F_kAtz>)oCd0SCC&{+A?DfjsZCkB%}r6y85e4HsYIx4u8Yt(PY0zng>iytIO5zFE&lYgz5WKo@>6KAE+fP z9Vpzho<%Lcz1d$#6hk*nZA4H7w8X|6kHjq|;>C{5XI_MzIYo9Uc z0z(2`l;b3Mf05kQZ3M~m20ONzXT39P!HTuQngAboEnzhrINgyS$I%hvkeij(uj|h(Q15j zS^(yFI{zYS`5S*>otjo$4KtrXG89n=ClM%9FzkbSQl$WpUy}%qXsEIB!bkf=e3ur` zsk~0sZBH!hlC8RcO5?)$r1c=~HWM6Sx0VM(S5O zJDwtP=E=L5>TFntuXaIs?TYE!Y>GEU8Z%X84tGDkRf3uN((ev9?N*dyJbi*U2FbLO zB5eB(vnfDt?$@%)k#A#&;9N(BM$6pp$AxOHr__P`v)_{QF64jz<%G|p6pZl%9FWX0^#h*G(2V7- z$ay1R2hx9OXD=U&$3^^X|EP@!ryyZRD&{h5)W&;DIO6$UXP2x2nyoIaBD}Zz!c9sS zhTs~aTU4&mf~~&m5lz4RnmOe1kJ;FlSkaKf=2oq?iS+1eP%N==&X7{%c2sQEinY_6 zm0v%rEFi^D=T1Tbb}jEEj%*sO>_Jm(=#f^a$>P+is&{S_)>)ZGG_$htM}~j2nxgc~ z(l4$j7&7(7cT{F)9-G`YsD5w%wyh(cX~CMOFc3nA#Ln zMi!i;Q0d7*Q$y{tlPBPF9`JC?j_zJUU=Y)f@P?!_rr;AkbdD39iog#p1#QX0k zb;9}MPw-O}sP0uV+H0}sij)P_&wKp?WAX7D)6uVEW4se^uWMpx$zu6GioX>`U;u?t z%So!kJ#dP{;JH!dzstX-ndVD*zqQ0%iYdb5<2c}Z65Z_kgAfg`$0E#vYnR&(Fv8vm zG9Ki-WlAR9x+_n-UdK2ly6m!Ngkptmv}jkSE%*n3r%|7jN9K# zX_TLs63U`%#V_^ev-bXNt9ew4D1MG@yNNewF&-^GT8%#Au^#StFwKkU#qEnFGwdSY zjaVi%#DN#sy&z@?%_}6xi{EDDzf!+m+ z`0zwv^e*5KMA7}!&lD(T0P%_0=d(2bf};w*TEUC1^8|gyPaKe5==sYM#D=`tS_{Uq zi$De!z}5EZV4t@uINJ67Idzsm_SLqR0PziFs}|@B7Hwsmq1hvXTHHl}S=^O~LV@u% z@mBXa_x*CIunz*z1NpT6;bZEZ*^E)~0 z96Jb~rIvQ6qwUufM2~)dF&dF8TL%#wbWp!f_V0T0nAiGS&eDjRa0rx;q_1>j zLatX*r?aBH!+8m?z0ofSC0NO^Y?fvT4Ois*07WWpo%8!{j8&d8{H&XQ&EG>Z0sd(921O|GH8KmrfBmL6pXlOwc_ZNHr%@d{2fZm zd@>1mkj6h`A&h|@8brI8$Psq8nmRjsBsK1Vu=zXqEiN%QMnKJ{Fs@7hMYFBCsIsWE zXzGWPtTxCIB+>3R_2bM(ysvIHrPfC<=PnEYhF?)65e%Jw<+xwSd&Yksz3N87dk_#p zYaxW={ZY_`(LIxP(YC9|(mpLdZO!JmgdH@p{e_Hf+jHr5WO4aWTv`WGS}!!m#k;(+ zXE%uKZH{1!=DSFQ)55T6yMN!$wtW|GhslJ=eVL(BqDzkC+%*-yRIum~+F}PfX-XI? zV9P}G+&JRPvO%1N1MxH-+V)bVJ=dSQX4Da+65tD`g}>X`jZ5WS%g4eDS909Fy-bZ| ztYaaE-{t~o1g~0m|BhNaWr{`rFJ?^XIt8Kuv)^0A9QBdR#9U)(pRXK%c^;zKvR+BV zw#j=F9?$L{zT30<)90^$te1`IY3%4507R~V4*|bSkP<1j<*apTXz76jZ;}&^?kZSu zWnMubg|v9wR1<=o?K;g?He_8e#6s;1-0mKFL6QYx^9wh|`9{3V`BZXVHgh@xLV@Lv z#RfJm$Wkk*>Oa0#6O~<#SVeNs>(t6cBns;TfmAm?%MX+cZuv3pAl?3~@)n=m@%Kvk zJ){l0-(vXwIN3SL}D$qqx2j82U^b)bPN?}`h#xAe-VZ@3oEJSuv_SIzboxw z=}&wfn4AwIWh_7b_c!)$zVL_~5=>*o`iXT+rjk-oxAfI=I=feC7>m>nGBfxuJj^2q zEdU+{v}fKIrp|Dh0hK>)6B}B$zwSf`V0mO4G+UjPUqRNcA{bG9*5lT{&xm1DPm?ze z>bLQOPuc0PN7%a?9G`k*Blas#xtl=NM60D*t<14?iUa(6rXqN`&VJ8XB6PeJn+J3= zul>v@U*&~K3bcNgt(D3n&0oVTT~T+~&jUMJD<=uAW;QL`Tupj^b(O?XJ)tt_J?I`$ z;wJp^z2z68LKR_}uInx7kGq)r(8^gTrLmhFUwKG;_N5$GcC@`Z{-{qHaCu??j?F3mqW* z&@VQ`;fQu4cncF^z4t5yxS;x}rxr#2unP>X4~>Vf&1pT4zmDx5EjD%XZ8|%s?VzLY za0rW$2@1XQ;ez9dTy=N21Z>-XWCOzCSFv#5ly_&lU%kRq3sca(v9H4#i`%JMyrpDQ z9~M@QxL6)PHp8y*Ga4DWnWC*D>FT1Xl9c8VXdO%+%94!fRwu3 z8?a}QqeNbbdTN+=jpmYLi!ptbeJ8{k$13KS*Vra~$n}RQmO^(wf<>(wOEzjDf+)}} z$|rc;xluXg0tx}|-Ej~27ulN7Ni3nX|H2w3$s>~-IM&O*DKcq}&?zYSttJLXPo79a zqe#Hs_v6TsE{VgUQ{Jm}5P(+N6k3kPmEmH~eJ_e}Zoy6|acbcv6$sj1fn zY}%0kGM^=UF26bTZcqAGaC_#wmTW_%8BAm@b3@16AHN#6$3`s)q4&TE=aK7r8XjvC zp+hCQWN}YBFC!Zh3Cz_Bj?p-%w}p2sBW}aaO>bmZOqeWEMn_E@+K=pLEXTPJdco>m z++$T@?Mkl5Wd@@Dwet_lL?iMIlHq%J39okpYGy9_>Z`-|jg$-QLViVD1x{--oU+{V zjw7}I`&?2zXbfPR%9943Du?P7xSi#_ubv2B@RT$>bfp@nO(*wsdMLM36DLbxh|5-+ zO%7s$$^!YdB*?0q$Tq~nPBb1+`rbw03|(m=;fwLrmV7xK-VP_;Qmf~gK-XCvLu_ln zCyfmY(J@bd(NW2a%j8{jABQk^^uZ2}umYq3Z)&w^gF_-0M+B=u2tXEQ9=ZsAzDHjy zqwEFN7VCPnUHIVfeTz~m$fV3CIQ<%@^cqFV!T(y@e&cs;UnbiW`r-LmyVf)s?`ob& zmswf_F1+we4}*{*fN-UXbjxn>%y$4hLEQvkP>Y0V=0?KRct&}_+d5*XqmL4=lgDDV zYg)LZ9a$y}2+zeVprB8CMLN$Y#q7;|y+)jnd|_c*{ungi39+86pk^V;_|7IZiFLd_5?3pS4 zW8^@An*{u3fFNZ4H>66M{wJYX{z;r9^idL`|Kb(?%N?KlKSrjbJP`ge|5@p$3{q0Z zC<6qF{C|cDipWXI@_0#PV+;^@ivKf(nY1#2mZYhHhV;LSNof4%;s04hh%8vrG!j`- zB@!%|cba{2e5CMX-P2l33^7n4dq&>L>rMwS=1l&7+Jlgm`>+R-gsGNvQ)14WQ(&}Oo@45Zo^qiri1xlra%D?P)1<# z=d)5w(@TLuN|WD|a!j^7r^VD<2IhV^$2R$1nds!)^8%AMos(jctbz*LGV#`enMt)W zAXyniJCT9G4aH@FjbMel&j&EQZw52OENNuqL+ce7DeZmnQ(LTLe62pRozJ7$>GW8uWGT`9s!8~0Q)T0hX4Qo delta 17181 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 E0Hadu@c;k- diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9bc65a51e..8f39a6873 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Thu Jun 22 10:25:20 CEST 2017 +#Mon Jun 26 12:27:24 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 4453ccea3..cccdd3d51 100755 --- a/gradlew +++ b/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/travis/prepare-signing.sh b/travis/prepare-signing.sh new file mode 100755 index 000000000..6601a71dc --- /dev/null +++ b/travis/prepare-signing.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +ENCRYPTION_KEY=$1 +ENCRYPTION_IV=$2 + +# some sanity checks first: +if [ "x${ENCRYPTION_KEY}" == "x" ]; then + echo "The encryption key has not been provided. Skipping signing preparation" + exit 0 +fi + +if [ "x${ENCRYPTION_IV}" == "x" ]; then + echo "The encryption initialization vector has not been provided. Skipping signing preparation" + exit 0 +fi + +if [ "${TRAVIS_SECURE_ENV_VARS}" == true ]; then + openssl aes-256-cbc -K "${ENCRYPTION_KEY}" -iv "${ENCRYPTION_IV}" -in travis/signing-key.asc.enc -out travis/signing-key.asc -d + if (( $? == 0 )); then + echo "Failed to decrypt the signing key. Skipping." + exit 1 + fi + + gpg --no-tty --batch --allow-secret-key-import --import travis/signing-key.asc + rm -rf "$HOME/.gradle/gradle.properties" + echo signing.keyId="${SIGNING_KEY_ID}" > "$HOME/.gradle/gradle.properties" + echo signing.password="${SIGNING_KEY_PASSPHRASE}" >> "$HOME/.gradle/gradle.properties" + echo ossrhUsername="${SONATYPE_USERNAME}" >> "$HOME/.gradle/gradle.properties" + echo ossrhPassword="${SONATYPE_PASSWORD}" >> "$HOME/.gradle/gradle.properties" + echo signing.secretKeyRingFile="${HOME}/.gnupg/secring.gpg" >> "$HOME/.gradle/gradle.properties" +else + echo "Travis secure env vars not set. Skipping." + exit 0 +fi diff --git a/travis/signing-key.asc.enc b/travis/signing-key.asc.enc new file mode 100644 index 0000000000000000000000000000000000000000..f6cfd59228e8ac2c1ec2fa830e553c0c9b4174cf GIT binary patch literal 3600 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 WyL63Uza=S#ky7Fh=pxJdrhrp4z7{P2 literal 0 HcmV?d00001