From 554a0cfb8261efb98639c91450531fe9c4614764 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 30 Jul 2020 11:41:36 +0200 Subject: [PATCH 01/18] modify light imports --- go.mod | 13 ++-- go.sum | 22 +++++++ x/ibc/02-client/keeper/client_test.go | 16 ++--- x/ibc/02-client/keeper/keeper_test.go | 18 +++--- x/ibc/02-client/types/genesis_test.go | 12 ++-- x/ibc/07-tendermint/client/cli/tx.go | 4 +- x/ibc/07-tendermint/misbehaviour_test.go | 24 ++++---- x/ibc/07-tendermint/types/client_state.go | 4 +- .../07-tendermint/types/client_state_test.go | 60 +++++++++---------- x/ibc/07-tendermint/types/msgs.go | 4 +- x/ibc/07-tendermint/types/msgs_test.go | 22 +++---- x/ibc/07-tendermint/update.go | 4 +- x/ibc/07-tendermint/update_test.go | 20 +++---- x/ibc/genesis_test.go | 6 +- x/ibc/testing/chain.go | 4 +- 15 files changed, 129 insertions(+), 104 deletions(-) diff --git a/go.mod b/go.mod index 513bd09926f5..574c10c72166 100644 --- a/go.mod +++ b/go.mod @@ -8,13 +8,14 @@ require ( github.com/bgentry/speakeasy v0.1.0 github.com/btcsuite/btcd v0.20.1-beta github.com/confio/ics23-iavl v0.6.0 - github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465 + github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3 github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d + github.com/cosmos/iavl v0.13.4-0.20200714154344-89524cdc51be github.com/cosmos/ledger-cosmos-go v0.11.1 github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 github.com/gibson042/canonicaljson-go v1.0.3 github.com/gogo/protobuf v1.3.1 - github.com/golang/mock v1.4.4 + github.com/golang/mock v1.4.3 github.com/golang/protobuf v1.4.2 github.com/gorilla/handlers v1.4.2 github.com/gorilla/mux v1.7.4 @@ -30,7 +31,7 @@ require ( github.com/spf13/afero v1.2.2 // indirect github.com/spf13/cast v1.3.1 github.com/spf13/cobra v1.0.0 - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect; indirects github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.7.0 github.com/stretchr/testify v1.6.1 @@ -38,10 +39,12 @@ require ( github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 github.com/tendermint/iavl v0.14.0 - github.com/tendermint/tendermint v0.33.6 - github.com/tendermint/tm-db v0.5.1 + github.com/tendermint/tendermint v0.34.0-dev1.0.20200714110441-6ccccb0933d4 + github.com/tendermint/tm-db v0.6.0 google.golang.org/grpc v1.30.0 gopkg.in/yaml.v2 v2.3.0 ) replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.2-alpha.regen.4 + +replace github.com/tendermint/tendermint => ../tendermint diff --git a/go.sum b/go.sum index 62bde23414f7..0cccea499cdf 100644 --- a/go.sum +++ b/go.sum @@ -88,6 +88,8 @@ github.com/confio/ics23-iavl v0.6.0/go.mod h1:mmXAxD1vWoO0VP8YHu6mM1QHGv71NQqa1i github.com/confio/ics23/go v0.0.0-20200323120010-7d9a00f0a2fa/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465 h1:tyK54ttJ14HaHaKjB6sQqkZaUSe/LUXKHjfgJNtcj20= github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= +github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3 h1:h/HM69qj1llEyq9N8+2sm6HfWsE7P9SFyl4CM2hyK98= +github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -99,6 +101,7 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/iavl v0.13.4-0.20200714154344-89524cdc51be/go.mod h1:A9QZVVJuZUBVkvuJQ60QXjRGyxBmHvsXC7ExnwB8wWs= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= @@ -185,6 +188,7 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -345,6 +349,7 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -381,6 +386,8 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -445,6 +452,8 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.2.0 h1:lMqc+fUb7RrFS3gQLtoQsJ7/6TV/pAIFvBsqX73DK8Y= +github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -521,6 +530,8 @@ github.com/tendermint/tm-db v0.4.1/go.mod h1:JsJ6qzYkCGiGwm5GHl/H5GLI9XLb6qZX7PR github.com/tendermint/tm-db v0.5.0/go.mod h1:lSq7q5WRR/njf1LnhiZ/lIJHk2S8Y1Zyq5oP/3o9C2U= github.com/tendermint/tm-db v0.5.1 h1:H9HDq8UEA7Eeg13kdYckkgwwkQLBnJGgX4PgLJRhieY= github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= +github.com/tendermint/tm-db v0.6.0 h1:Us30k7H1UDcdqoSPhmP8ztAW/SWV6c6OfsfeCiboTC4= +github.com/tendermint/tm-db v0.6.0/go.mod h1:xj3AWJ08kBDlCHKijnhJ7mTcDMOikT1r8Poxy2pJn7Q= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -534,6 +545,8 @@ github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWp go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -563,6 +576,7 @@ golang.org/x/crypto v0.0.0-20200406173513-056763e48d71 h1:DOmugCavvUtnUD114C1Wh+ golang.org/x/crypto v0.0.0-20200406173513-056763e48d71/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79 h1:IaQbIIB2X/Mp/DKctl6ROxz1KyMlKp4uyvL6+kQ7C88= golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -641,6 +655,7 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= @@ -706,6 +721,8 @@ google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBr google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73 h1:+yTMTeazSO5iBqU9NR53hgriivQQbYa5Uuaj8r3qKII= google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -731,13 +748,18 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= diff --git a/x/ibc/02-client/keeper/client_test.go b/x/ibc/02-client/keeper/client_test.go index 1578910394a3..be89dcfff5f2 100644 --- a/x/ibc/02-client/keeper/client_test.go +++ b/x/ibc/02-client/keeper/client_test.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" @@ -38,12 +38,12 @@ func (suite *KeeperTestSuite) TestCreateClient() { i := i if tc.expPanic { suite.Require().Panics(func() { - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) suite.Require().NoError(err, "err on client state initialization") suite.keeper.CreateClient(suite.ctx, tc.clientID, clientState, suite.consensusState) }, "Msg %d didn't panic: %s", i, tc.msg) } else { - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if tc.expPass { suite.Require().NoError(err, "errored on initialization") suite.Require().NotNil(clientState, "valid test case %d failed: %s", i, tc.msg) @@ -80,7 +80,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { expPass bool }{ {"valid update", func() error { - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } @@ -114,7 +114,7 @@ func (suite *KeeperTestSuite) TestUpdateClientTendermint() { return nil }, false}, {"invalid header", func() error { - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } @@ -228,7 +228,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.ValidatorSet = bothValSet - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } @@ -248,7 +248,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { }, func() error { suite.consensusState.ValidatorSet = bothValSet - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } @@ -303,7 +303,7 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { ClientID: testClientID, }, func() error { - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) if err != nil { return err } diff --git a/x/ibc/02-client/keeper/keeper_test.go b/x/ibc/02-client/keeper/keeper_test.go index 67d94872f316..0145813c4e8a 100644 --- a/x/ibc/02-client/keeper/keeper_test.go +++ b/x/ibc/02-client/keeper/keeper_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -90,7 +90,7 @@ func TestKeeperTestSuite(t *testing.T) { } func (suite *KeeperTestSuite) TestSetClientState() { - clientState := ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()) + clientState := ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()) suite.keeper.SetClientState(suite.ctx, testClientID, clientState) retrievedState, found := suite.keeper.GetClientState(suite.ctx, testClientID) @@ -124,9 +124,9 @@ func (suite KeeperTestSuite) TestGetAllClients() { testClientID2, testClientID3, testClientID, } expClients := []exported.ClientState{ - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), } for i := range expClients { @@ -148,9 +148,9 @@ func (suite KeeperTestSuite) TestGetAllGenesisClients() { testClientID2, testClientID3, testClientID, } expClients := []exported.ClientState{ - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), } expGenClients := make([]types.GenesisClientState, len(expClients)) @@ -198,7 +198,7 @@ func (suite KeeperTestSuite) TestGetConsensusState() { func (suite KeeperTestSuite) TestConsensusStateHelpers() { // initial setup - clientState, err := ibctmtypes.Initialize(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState, err := ibctmtypes.Initialize(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) suite.Require().NoError(err) suite.keeper.SetClientState(suite.ctx, testClientID, clientState) diff --git a/x/ibc/02-client/types/genesis_test.go b/x/ibc/02-client/types/genesis_test.go index 0b790b8c38a6..398bed3467d4 100644 --- a/x/ibc/02-client/types/genesis_test.go +++ b/x/ibc/02-client/types/genesis_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" @@ -51,7 +51,7 @@ func TestValidateGenesis(t *testing.T) { genState: types.NewGenesisState( []types.GenesisClientState{ types.NewGenesisClientState( - clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + clientID, ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), ), types.NewGenesisClientState( exported.ClientTypeLocalHost, localhosttypes.NewClientState("chainID", 10), @@ -76,7 +76,7 @@ func TestValidateGenesis(t *testing.T) { genState: types.NewGenesisState( []types.GenesisClientState{ types.NewGenesisClientState( - "/~@$*", ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + "/~@$*", ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), ), types.NewGenesisClientState( exported.ClientTypeLocalHost, localhosttypes.NewClientState("chainID", 10), @@ -102,7 +102,7 @@ func TestValidateGenesis(t *testing.T) { genState: types.NewGenesisState( []types.GenesisClientState{ types.NewGenesisClientState( - clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + clientID, ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), ), types.NewGenesisClientState(exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 0)), }, @@ -116,7 +116,7 @@ func TestValidateGenesis(t *testing.T) { genState: types.NewGenesisState( []types.GenesisClientState{ types.NewGenesisClientState( - clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + clientID, ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), ), types.NewGenesisClientState( exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10), @@ -141,7 +141,7 @@ func TestValidateGenesis(t *testing.T) { genState: types.NewGenesisState( []types.GenesisClientState{ types.NewGenesisClientState( - clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), + clientID, ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, header, commitmenttypes.GetSDKSpecs()), ), types.NewGenesisClientState( exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10), diff --git a/x/ibc/07-tendermint/client/cli/tx.go b/x/ibc/07-tendermint/client/cli/tx.go index 7395aad26e6b..cee5249906a1 100644 --- a/x/ibc/07-tendermint/client/cli/tx.go +++ b/x/ibc/07-tendermint/client/cli/tx.go @@ -13,7 +13,7 @@ import ( "github.com/spf13/cobra" tmmath "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -69,7 +69,7 @@ func NewCreateClientCmd() *cobra.Command { lvl, _ := cmd.Flags().GetString(flagTrustLevel) if lvl == "default" { - trustLevel = lite.DefaultTrustLevel + trustLevel = light.DefaultTrustLevel } else { trustLevel, err = parseFraction(lvl) if err != nil { diff --git a/x/ibc/07-tendermint/misbehaviour_test.go b/x/ibc/07-tendermint/misbehaviour_test.go index a207cc89e84e..600f683a8b59 100644 --- a/x/ibc/07-tendermint/misbehaviour_test.go +++ b/x/ibc/07-tendermint/misbehaviour_test.go @@ -6,7 +6,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/tmhash" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" @@ -54,7 +54,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }{ { "valid misbehavior evidence", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -69,7 +69,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "valid misbehavior at height greater than last consensusState", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -84,7 +84,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "consensus state's valset hash different from evidence should still pass", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Height: height - 1, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: suite.valSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -129,7 +129,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "invalid tendermint consensus state", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), nil, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners), @@ -144,7 +144,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "invalid tendermint misbehaviour evidence", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, nil, simapp.DefaultConsensusParams, @@ -154,7 +154,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "rejected misbehaviour due to expired age", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -169,7 +169,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "provided height ≠ header height", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -184,7 +184,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "unbonding period expired", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: time.Time{}, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -199,7 +199,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "first valset has too much change", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners), @@ -214,7 +214,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "second valset has too much change", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, bothValSet, bothSigners), @@ -229,7 +229,7 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviour() { }, { "both valsets have too much change", - ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ibctmtypes.ConsensusState{Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot(tmhash.Sum([]byte("app_hash"))), ValidatorSet: bothValSet}, ibctmtypes.Evidence{ Header1: ibctmtypes.CreateTestHeader(chainID, height, suite.now, altValSet, altSigners), diff --git a/x/ibc/07-tendermint/types/client_state.go b/x/ibc/07-tendermint/types/client_state.go index 9b5bee8f791d..24a88fc9b955 100644 --- a/x/ibc/07-tendermint/types/client_state.go +++ b/x/ibc/07-tendermint/types/client_state.go @@ -5,7 +5,7 @@ import ( ics23 "github.com/confio/ics23/go" tmmath "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -116,7 +116,7 @@ func (cs ClientState) IsFrozen() bool { // Validate performs a basic validation of the client state fields. func (cs ClientState) Validate() error { - if err := lite.ValidateTrustLevel(cs.TrustLevel); err != nil { + if err := light.ValidateTrustLevel(cs.TrustLevel); err != nil { return err } if cs.TrustingPeriod == 0 { diff --git a/x/ibc/07-tendermint/types/client_state_test.go b/x/ibc/07-tendermint/types/client_state_test.go index 1175e8072dff..a7d2be43020f 100644 --- a/x/ibc/07-tendermint/types/client_state_test.go +++ b/x/ibc/07-tendermint/types/client_state_test.go @@ -3,7 +3,7 @@ package types_test import ( ics23 "github.com/confio/ics23/go" tmmath "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" connectiontypes "github.com/cosmos/cosmos-sdk/x/ibc/03-connection/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/types" @@ -28,7 +28,7 @@ func (suite *TendermintTestSuite) TestValidate() { }{ { name: "valid client", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: true, }, { @@ -38,37 +38,37 @@ func (suite *TendermintTestSuite) TestValidate() { }, { name: "invalid trusting period", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "invalid unbonding period", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "invalid max clock drift", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, 0, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "invalid header", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, ibctmtypes.Header{}, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "trusting period not less than unbonding period", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "proof specs is nil", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, nil), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, nil), expPass: false, }, { name: "proof specs contains nil", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, []*ics23.ProofSpec{ics23.TendermintSpec, nil}), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, suite.header, []*ics23.ProofSpec{ics23.TendermintSpec, nil}), expPass: false, }, } @@ -104,7 +104,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -113,7 +113,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -131,7 +131,7 @@ func (suite *TendermintTestSuite) TestVerifyClientConsensusState() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), ValidatorSet: suite.valSet, @@ -183,7 +183,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), connection: conn, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -193,7 +193,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), connection: conn, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -213,7 +213,7 @@ func (suite *TendermintTestSuite) TestVerifyConnectionState() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), connection: conn, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -266,7 +266,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), channel: ch, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -276,7 +276,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), channel: ch, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -296,7 +296,7 @@ func (suite *TendermintTestSuite) TestVerifyChannelState() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), channel: ch, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -346,7 +346,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), commitment: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -356,7 +356,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), commitment: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -376,7 +376,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketCommitment() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), commitment: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -426,7 +426,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ack: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -436,7 +436,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ack: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -456,7 +456,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgement() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ack: []byte{}, consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), @@ -505,7 +505,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -514,7 +514,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -532,7 +532,7 @@ func (suite *TendermintTestSuite) TestVerifyPacketAcknowledgementAbsence() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), ValidatorSet: suite.valSet, @@ -580,7 +580,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { // }, { name: "ApplyPrefix failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -589,7 +589,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { }, { name: "latest client height < height", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), }, @@ -607,7 +607,7 @@ func (suite *TendermintTestSuite) TestVerifyNextSeqRecv() { }, { name: "proof verification failed", - clientState: ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientState: ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), consensusState: ibctmtypes.ConsensusState{ Root: commitmenttypes.NewMerkleRoot(suite.header.AppHash), ValidatorSet: suite.valSet, diff --git a/x/ibc/07-tendermint/types/msgs.go b/x/ibc/07-tendermint/types/msgs.go index 1e5f175b7b57..affeb30be07c 100644 --- a/x/ibc/07-tendermint/types/msgs.go +++ b/x/ibc/07-tendermint/types/msgs.go @@ -5,7 +5,7 @@ import ( ics23 "github.com/confio/ics23/go" tmmath "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -83,7 +83,7 @@ func (msg MsgCreateClient) ValidateBasic() error { if msg.TrustingPeriod == 0 { return sdkerrors.Wrap(ErrInvalidTrustingPeriod, "duration cannot be 0") } - if err := lite.ValidateTrustLevel(msg.TrustLevel); err != nil { + if err := light.ValidateTrustLevel(msg.TrustLevel); err != nil { return err } if msg.UnbondingPeriod == 0 { diff --git a/x/ibc/07-tendermint/types/msgs_test.go b/x/ibc/07-tendermint/types/msgs_test.go index ddf20d9fe89a..2f14cc699948 100644 --- a/x/ibc/07-tendermint/types/msgs_test.go +++ b/x/ibc/07-tendermint/types/msgs_test.go @@ -4,7 +4,7 @@ import ( ics23 "github.com/confio/ics23/go" "github.com/tendermint/tendermint/crypto/secp256k1" "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -24,17 +24,17 @@ func (suite *TendermintTestSuite) TestMsgCreateClientValidateBasic() { expPass bool errMsg string }{ - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), true, "success msg should pass"}, - {ibctmtypes.NewMsgCreateClient("(BADCHAIN)", suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid client id passed"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), true, "success msg should pass"}, + {ibctmtypes.NewMsgCreateClient("(BADCHAIN)", suite.header, light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid client id passed"}, {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, math.Fraction{Numerator: 0, Denominator: 1}, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid trust level"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero trusting period passed"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero unbonding period passed"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), nil), false, "Empty address passed"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, ibctmtypes.Header{}, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "nil header"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, invalidHeader, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid header"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, []*ics23.ProofSpec{nil}, signer), false, "invalid proof specs"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, nil, signer), false, "nil proof specs"}, - {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, lite.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "trusting period not less than unbonding period"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, light.DefaultTrustLevel, 0, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero trusting period passed"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, light.DefaultTrustLevel, trustingPeriod, 0, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "zero unbonding period passed"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), nil), false, "Empty address passed"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, ibctmtypes.Header{}, light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "nil header"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, invalidHeader, light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "invalid header"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, []*ics23.ProofSpec{nil}, signer), false, "invalid proof specs"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, nil, signer), false, "nil proof specs"}, + {ibctmtypes.NewMsgCreateClient(exported.ClientTypeTendermint, suite.header, light.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, commitmenttypes.GetSDKSpecs(), signer), false, "trusting period not less than unbonding period"}, } for i, tc := range cases { diff --git a/x/ibc/07-tendermint/update.go b/x/ibc/07-tendermint/update.go index 728fe1eaa8fe..4b1ec1c44da1 100644 --- a/x/ibc/07-tendermint/update.go +++ b/x/ibc/07-tendermint/update.go @@ -3,7 +3,7 @@ package tendermint import ( "time" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" @@ -88,7 +88,7 @@ func checkValidity( } // Verify next header with the last header's validatorset as trusted validatorset - err := lite.Verify( + err := light.Verify( clientState.GetChainID(), &clientState.LastHeader.SignedHeader, clientState.LastHeader.ValidatorSet, &header.SignedHeader, header.ValidatorSet, clientState.TrustingPeriod, currentTimestamp, clientState.MaxClockDrift, clientState.TrustLevel, diff --git a/x/ibc/07-tendermint/update_test.go b/x/ibc/07-tendermint/update_test.go index 2b21ed089689..3e99e020ec5e 100644 --- a/x/ibc/07-tendermint/update_test.go +++ b/x/ibc/07-tendermint/update_test.go @@ -4,7 +4,7 @@ import ( "bytes" "time" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" tendermint "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint" @@ -54,7 +54,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "successful update with next height and same validator set", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers) currentTime = suite.now }, @@ -63,7 +63,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "successful update with future height and different validator set", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, bothValSet, bothSigners) currentTime = suite.now }, @@ -72,7 +72,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update with next height: update header mismatches nextValSetHash", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, bothValSet, bothSigners) currentTime = suite.now }, @@ -81,7 +81,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update with future height: too much change in validator set", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+5, suite.headerTime, altValSet, altSigners) currentTime = suite.now }, @@ -90,7 +90,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update: trusting period has passed since last client timestamp", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers) // make current time pass trusting period from last timestamp on clientstate currentTime = suite.now.Add(ubdPeriod) @@ -100,7 +100,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update: header timestamp is past current timestamp", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.now.Add(time.Minute), suite.valSet, signers) currentTime = suite.now }, @@ -109,7 +109,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "unsuccessful update: header timestamp is not past last client timestamp", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.clientTime, suite.valSet, signers) currentTime = suite.now }, @@ -118,7 +118,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "header basic validation failed", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) newHeader = ibctmtypes.CreateTestHeader(chainID, height+1, suite.headerTime, suite.valSet, signers) // cause new header to fail validatebasic by changing commit height to mismatch header height newHeader.SignedHeader.Commit.Height = height - 1 @@ -129,7 +129,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { { name: "header height < latest client height", setup: func() { - clientState = ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) + clientState = ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()) // Make new header at height less than latest client state newHeader = ibctmtypes.CreateTestHeader(chainID, height-1, suite.headerTime, suite.valSet, signers) currentTime = suite.now diff --git a/x/ibc/genesis_test.go b/x/ibc/genesis_test.go index 48fc7d1296ee..5ef5c01d81b9 100644 --- a/x/ibc/genesis_test.go +++ b/x/ibc/genesis_test.go @@ -1,7 +1,7 @@ package ibc_test import ( - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/02-client/types" @@ -32,7 +32,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ClientGenesis: clienttypes.NewGenesisState( []clienttypes.GenesisClientState{ clienttypes.NewGenesisClientState( - clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientID, ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ), clienttypes.NewGenesisClientState( exported.ClientTypeLocalHost, localhosttypes.NewClientState("chaindID", 10), @@ -92,7 +92,7 @@ func (suite *IBCTestSuite) TestValidateGenesis() { ClientGenesis: clienttypes.NewGenesisState( []clienttypes.GenesisClientState{ clienttypes.NewGenesisClientState( - clientID, ibctmtypes.NewClientState(lite.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), + clientID, ibctmtypes.NewClientState(light.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, suite.header, commitmenttypes.GetSDKSpecs()), ), clienttypes.NewGenesisClientState( exported.ClientTypeLocalHost, localhosttypes.NewClientState("(chaindID)", 0), diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index d79954990c3f..84a37a07a929 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -14,7 +14,7 @@ import ( "github.com/tendermint/tendermint/crypto/secp256k1" "github.com/tendermint/tendermint/crypto/tmhash" tmmath "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" "github.com/tendermint/tendermint/version" @@ -52,7 +52,7 @@ const ( // Default params variables used to create a TM client var ( - DefaultTrustLevel tmmath.Fraction = lite.DefaultTrustLevel + DefaultTrustLevel tmmath.Fraction = light.DefaultTrustLevel TestHash = []byte("TESTING HASH") ConnectionVersion = connectiontypes.GetCompatibleEncodedVersions()[0] From d3534f010ec468f48c172d2aa52901cb62892dec Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 30 Jul 2020 12:05:58 +0200 Subject: [PATCH 02/18] change abci.header to tmproto.header --- baseapp/abci.go | 3 +- baseapp/baseapp.go | 12 +++--- baseapp/baseapp_test.go | 44 ++++++++++---------- baseapp/helpers.go | 6 +-- docs/core/context.md | 2 +- server/mock/app_test.go | 7 ++-- simapp/app.go | 3 +- simapp/export.go | 3 +- simapp/sim_bench_test.go | 4 +- simapp/sim_test.go | 6 +-- simapp/test_helpers.go | 16 +++---- types/context.go | 11 ++--- types/context_test.go | 30 +++++++------ types/query/pagination_test.go | 21 ++++------ x/auth/ante/integration_test.go | 4 +- x/auth/keeper/integration_test.go | 4 +- x/auth/signing/verify_test.go | 7 ++-- x/auth/types/stdtx_test.go | 15 +++---- x/bank/app_test.go | 34 +++++++-------- x/bank/bench_test.go | 9 ++-- x/bank/handler_test.go | 7 ++-- x/bank/keeper/keeper_test.go | 25 +++++------ x/bank/simulation/operations_test.go | 7 ++-- x/capability/keeper/keeper_test.go | 4 +- x/capability/spec/README.md | 2 +- x/crisis/handler_test.go | 7 ++-- x/crisis/keeper/keeper_test.go | 9 ++-- x/distribution/keeper/allocation_test.go | 8 ++-- x/distribution/keeper/delegation_test.go | 19 ++++----- x/distribution/keeper/grpc_query_test.go | 4 +- x/distribution/keeper/keeper_test.go | 11 +++-- x/distribution/keeper/querier_test.go | 3 +- x/distribution/proposal_handler_test.go | 6 +-- x/distribution/simulation/operations_test.go | 12 +++--- x/distribution/simulation/proposals_test.go | 4 +- x/evidence/genesis_test.go | 4 +- x/evidence/handler_test.go | 4 +- x/evidence/keeper/keeper_test.go | 15 ++++--- x/genutil/gentx_test.go | 11 +++-- x/gov/abci_test.go | 25 +++++------ x/gov/genesis_test.go | 17 ++++---- x/gov/handler_test.go | 4 +- x/gov/keeper/deposit_test.go | 4 +- x/gov/keeper/keeper_test.go | 8 ++-- x/gov/keeper/proposal_test.go | 10 ++--- x/gov/keeper/querier_test.go | 5 ++- x/gov/keeper/tally_test.go | 32 +++++++------- x/gov/keeper/vote_test.go | 4 +- x/gov/simulation/operations_test.go | 10 ++--- x/gov/simulation/proposals_test.go | 4 +- x/ibc/02-client/abci_test.go | 4 +- x/ibc/02-client/keeper/keeper_test.go | 5 +-- x/ibc/05-port/keeper/keeper_test.go | 5 +-- x/ibc/07-tendermint/types/header.go | 4 +- x/ibc/07-tendermint/types/tendermint_test.go | 5 +-- x/ibc/09-localhost/types/localhost_test.go | 5 +-- x/ibc/ibc_test.go | 5 +-- x/ibc/keeper/keeper_test.go | 5 +-- x/ibc/testing/chain.go | 7 ++-- x/mint/keeper/grpc_query_test.go | 4 +- x/mint/keeper/integration_test.go | 4 +- x/params/keeper/common_test.go | 4 +- x/params/keeper/keeper_test.go | 4 +- x/params/proposal_handler_test.go | 5 +-- x/params/simulation/operations_test.go | 4 +- x/params/simulation/proposals_test.go | 4 +- x/params/types/subspace_test.go | 4 +- x/simulation/mock_tendermint.go | 3 +- x/simulation/params_test.go | 5 +-- x/simulation/simulate.go | 7 ++-- x/slashing/abci_test.go | 3 +- x/slashing/app_test.go | 11 ++--- x/slashing/handler_test.go | 14 +++---- x/slashing/keeper/grpc_query_test.go | 4 +- x/slashing/keeper/keeper_test.go | 10 ++--- x/slashing/keeper/querier_test.go | 5 ++- x/slashing/keeper/signing_info_test.go | 11 +++-- x/slashing/simulation/operations_test.go | 5 ++- x/staking/app_test.go | 17 ++++---- x/staking/common_test.go | 4 +- x/staking/handler_test.go | 7 ++-- x/staking/keeper/common_test.go | 4 +- x/staking/keeper/historical_info_test.go | 20 ++++----- x/staking/keeper/keeper_test.go | 8 ++-- x/staking/keeper/querier_test.go | 7 ++-- x/staking/keeper/slash_test.go | 9 ++-- x/staking/keeper/validator_test.go | 4 +- x/staking/simulation/operations_test.go | 13 +++--- x/staking/spec/01_state.md | 2 +- x/staking/types/historical_info.go | 4 +- x/staking/types/historical_info_test.go | 3 +- x/upgrade/abci_test.go | 6 +-- x/upgrade/keeper/grpc_query_test.go | 4 +- x/upgrade/types/plan_test.go | 5 +-- x/upgrade/types/storeloader_test.go | 2 +- 95 files changed, 392 insertions(+), 409 deletions(-) diff --git a/baseapp/abci.go b/baseapp/abci.go index be37b9a4bc4b..9a1722c49eb8 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -9,6 +9,7 @@ import ( "time" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/telemetry" @@ -19,7 +20,7 @@ import ( // InitChain implements the ABCI interface. It runs the initialization logic // directly on the CommitMultiStore. func (app *BaseApp) InitChain(req abci.RequestInitChain) (res abci.ResponseInitChain) { - initHeader := abci.Header{ChainID: req.ChainId, Time: req.Time} + initHeader := tmproto.Header{ChainID: req.ChainId, Time: req.Time} // initialize the deliver state and check state with a correct header app.setDeliverState(initHeader) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 9d5b98585a60..c48220e2899b 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -6,10 +6,10 @@ import ( "strings" "github.com/gogo/protobuf/proto" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/tmhash" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/store" @@ -257,7 +257,7 @@ func (app *BaseApp) init() error { } // needed for the export command which inits from store but never calls initchain - app.setCheckState(abci.Header{}) + app.setCheckState(tmproto.Header{}) app.Seal() return nil @@ -307,7 +307,7 @@ func (app *BaseApp) IsSealed() bool { return app.sealed } // (i.e. a CacheMultiStore) and a new Context with the cache-wrapped multi-store, // provided header, and minimum gas prices set. It is set on InitChain and reset // on Commit. -func (app *BaseApp) setCheckState(header abci.Header) { +func (app *BaseApp) setCheckState(header tmproto.Header) { ms := app.cms.CacheMultiStore() app.checkState = &state{ ms: ms, @@ -319,7 +319,7 @@ func (app *BaseApp) setCheckState(header abci.Header) { // (i.e. a CacheMultiStore) and a new Context with the cache-wrapped multi-store, // and provided header. It is set on InitChain and BeginBlock and set to nil on // Commit. -func (app *BaseApp) setDeliverState(header abci.Header) { +func (app *BaseApp) setDeliverState(header tmproto.Header) { ms := app.cms.CacheMultiStore() app.deliverState = &state{ ms: ms, @@ -344,14 +344,14 @@ func (app *BaseApp) GetConsensusParams(ctx sdk.Context) *abci.ConsensusParams { } if app.paramStore.Has(ctx, ParamStoreKeyEvidenceParams) { - var ep abci.EvidenceParams + var ep tmproto.EvidenceParams app.paramStore.Get(ctx, ParamStoreKeyEvidenceParams, &ep) cp.Evidence = &ep } if app.paramStore.Has(ctx, ParamStoreKeyValidatorParams) { - var vp abci.ValidatorParams + var vp tmproto.ValidatorParams app.paramStore.Get(ctx, ParamStoreKeyValidatorParams, &vp) cp.Validator = &vp diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 3dcef1600b15..4823911c4f1e 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -10,18 +10,18 @@ import ( "sync" "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - "github.com/gogo/protobuf/jsonpb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/store/rootmulti" store "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -137,13 +137,13 @@ func TestLoadVersion(t *testing.T) { require.Equal(t, emptyCommitID, lastID) // execute a block, collect commit ID - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) res := app.Commit() commitID1 := sdk.CommitID{Version: 1, Hash: res.Data} // execute a block, collect commit ID - header = abci.Header{Height: 2} + header = tmproto.Header{Height: 2} app.BeginBlock(abci.RequestBeginBlock{Header: header}) res = app.Commit() commitID2 := sdk.CommitID{Version: 2, Hash: res.Data} @@ -242,7 +242,7 @@ func TestSetLoader(t *testing.T) { require.Nil(t, err) // "execute" one block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2}}) res := app.Commit() require.NotNil(t, res.Data) @@ -287,7 +287,7 @@ func TestLoadVersionInvalid(t *testing.T) { err = app.LoadVersion(-1) require.Error(t, err) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) res := app.Commit() commitID1 := sdk.CommitID{Version: 1, Hash: res.Data} @@ -337,7 +337,7 @@ func TestLoadVersionPruning(t *testing.T) { // Commit seven blocks, of which 7 (latest) is kept in addition to 6, 5 // (keep recent) and 3 (keep every). for i := int64(1); i <= 7; i++ { - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: i}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: i}}) res := app.Commit() lastCommitID = sdk.CommitID{Version: i, Hash: res.Data} } @@ -527,7 +527,7 @@ func TestInitChainer(t *testing.T) { require.Equal(t, value, res.Value) // commit and ensure we can still query - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.Commit() @@ -783,7 +783,7 @@ func TestCheckTx(t *testing.T) { require.Equal(t, nTxs, storedCounter) // If a block is committed, CheckTx state should be reset. - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.EndBlock(abci.RequestEndBlock{}) app.Commit() @@ -818,7 +818,7 @@ func TestDeliverTx(t *testing.T) { txPerHeight := 5 for blockN := 0; blockN < nBlocks; blockN++ { - header := abci.Header{Height: int64(blockN) + 1} + header := tmproto.Header{Height: int64(blockN) + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) for i := 0; i < txPerHeight; i++ { @@ -872,7 +872,7 @@ func TestMultiMsgDeliverTx(t *testing.T) { // run a multi-msg tx // with all msgs the same route - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) tx := newTxCounter(0, 0, 1, 2) txBytes, err := codec.MarshalBinaryBare(tx) @@ -953,7 +953,7 @@ func TestSimulateTx(t *testing.T) { nBlocks := 3 for blockN := 0; blockN < nBlocks; blockN++ { count := int64(blockN + 1) - header := abci.Header{Height: count} + header := tmproto.Header{Height: count} app.BeginBlock(abci.RequestBeginBlock{Header: header}) tx := newTxCounter(count, count) @@ -1008,7 +1008,7 @@ func TestRunInvalidTransaction(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // transaction with no messages @@ -1136,7 +1136,7 @@ func TestTxGasLimits(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) testCases := []struct { @@ -1250,7 +1250,7 @@ func TestMaxBlockGasLimits(t *testing.T) { tx := tc.tx // reset the block gas - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // execute the transaction multiple times @@ -1304,7 +1304,7 @@ func TestCustomRunTxPanicHandler(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.AddRunTxRecoveryHandler(func(recoveryObj interface{}) error { @@ -1346,7 +1346,7 @@ func TestBaseAppAnteHandler(t *testing.T) { app.InitChain(abci.RequestInitChain{}) registerTestCodec(cdc) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // execute a tx that will fail ante handler execution @@ -1454,7 +1454,7 @@ func TestGasConsumptionBadTx(t *testing.T) { app.InitChain(abci.RequestInitChain{}) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) tx := newTxCounter(5, 0) @@ -1519,7 +1519,7 @@ func TestQuery(t *testing.T) { require.Equal(t, 0, len(res.Value)) // query is still empty after a DeliverTx before we commit - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) _, resTx, err = app.Deliver(tx) @@ -1545,7 +1545,7 @@ func TestGRPCQuery(t *testing.T) { app := setupBaseApp(t, grpcQueryOpt) app.InitChain(abci.RequestInitChain{}) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.Commit() @@ -1602,7 +1602,7 @@ func TestP2PQuery(t *testing.T) { func TestGetMaximumBlockGas(t *testing.T) { app := setupBaseApp(t) app.InitChain(abci.RequestInitChain{}) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) app.StoreConsensusParams(ctx, &abci.ConsensusParams{Block: &abci.BlockParams{MaxGas: 0}}) require.Equal(t, uint64(0), app.getMaximumBlockGas(ctx)) @@ -1660,7 +1660,7 @@ func TestWithRouter(t *testing.T) { txPerHeight := 5 for blockN := 0; blockN < nBlocks; blockN++ { - header := abci.Header{Height: int64(blockN) + 1} + header := tmproto.Header{Height: int64(blockN) + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) for i := 0; i < txPerHeight; i++ { diff --git a/baseapp/helpers.go b/baseapp/helpers.go index c69a8ba82925..2fb7cc041a56 100644 --- a/baseapp/helpers.go +++ b/baseapp/helpers.go @@ -1,7 +1,7 @@ package baseapp import ( - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -19,7 +19,7 @@ func (app *BaseApp) Deliver(tx sdk.Tx) (sdk.GasInfo, *sdk.Result, error) { } // Context with current {check, deliver}State of the app used by tests. -func (app *BaseApp) NewContext(isCheckTx bool, header abci.Header) sdk.Context { +func (app *BaseApp) NewContext(isCheckTx bool, header tmproto.Header) sdk.Context { if isCheckTx { return sdk.NewContext(app.checkState.ms, header, true, app.logger). WithMinGasPrices(app.minGasPrices) @@ -28,6 +28,6 @@ func (app *BaseApp) NewContext(isCheckTx bool, header abci.Header) sdk.Context { return sdk.NewContext(app.deliverState.ms, header, false, app.logger) } -func (app *BaseApp) NewUncachedContext(isCheckTx bool, header abci.Header) sdk.Context { +func (app *BaseApp) NewUncachedContext(isCheckTx bool, header tmproto.Header) sdk.Context { return sdk.NewContext(app.cms, header, isCheckTx, app.logger) } diff --git a/docs/core/context.md b/docs/core/context.md index 29af8ebb2262..e7c42bd339d5 100644 --- a/docs/core/context.md +++ b/docs/core/context.md @@ -19,7 +19,7 @@ The SDK `Context` is a custom data structure that contains Go's stdlib [`context type Context struct { ctx context.Context ms MultiStore - header abci.Header + header tmproto.Header chainID string txBytes []byte logger log.Logger diff --git a/server/mock/app_test.go b/server/mock/app_test.go index 3dd451970ccd..2741925df026 100644 --- a/server/mock/app_test.go +++ b/server/mock/app_test.go @@ -3,11 +3,10 @@ package mock import ( "testing" - "github.com/tendermint/tendermint/types" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/tendermint/tendermint/types" ) // TestInitApp makes sure we can initialize this thing without an error @@ -57,7 +56,7 @@ func TestDeliverTx(t *testing.T) { tx := NewTx(key, value) txBytes := tx.GetSignBytes() - header := abci.Header{ + header := tmproto.Header{ AppHash: []byte("apphash"), Height: 1, } diff --git a/simapp/app.go b/simapp/app.go index a5cfa4079df0..c99ed67abbdf 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -9,6 +9,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/baseapp" @@ -385,7 +386,7 @@ func NewSimApp( // sub-keepers. // This must be done during creation of baseapp rather than in InitChain so // that in-memory capabilities get regenerated on app restart - ctx := app.BaseApp.NewUncachedContext(true, abci.Header{}) + ctx := app.BaseApp.NewUncachedContext(true, tmproto.Header{}) app.CapabilityKeeper.InitializeAndSeal(ctx) app.ScopedIBCKeeper = scopedIBCKeeper diff --git a/simapp/export.go b/simapp/export.go index 363bc13954a5..ce5ea4b269a9 100644 --- a/simapp/export.go +++ b/simapp/export.go @@ -5,6 +5,7 @@ import ( "log" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -22,7 +23,7 @@ func (app *SimApp) ExportAppStateAndValidators( ) (appState json.RawMessage, validators []tmtypes.GenesisValidator, cp *abci.ConsensusParams, err error) { // as if they could withdraw from the start of the next block - ctx := app.NewContext(true, abci.Header{Height: app.LastBlockHeight()}) + ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) if forZeroHeight { app.prepForZeroHeightGenesis(ctx, jailWhiteList) diff --git a/simapp/sim_bench_test.go b/simapp/sim_bench_test.go index 6d8ee05dbf77..b50e7627c563 100644 --- a/simapp/sim_bench_test.go +++ b/simapp/sim_bench_test.go @@ -5,7 +5,7 @@ import ( "os" "testing" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/x/simulation" ) @@ -87,7 +87,7 @@ func BenchmarkInvariants(b *testing.B) { PrintStats(db) } - ctx := app.NewContext(true, abci.Header{Height: app.LastBlockHeight() + 1}) + ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight() + 1}) // 3. Benchmark each invariant separately // diff --git a/simapp/sim_test.go b/simapp/sim_test.go index 83acd4a24f06..8b990bb72177 100644 --- a/simapp/sim_test.go +++ b/simapp/sim_test.go @@ -8,9 +8,9 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/baseapp" @@ -140,8 +140,8 @@ func TestAppImportExport(t *testing.T) { err = app.Codec().UnmarshalJSON(appState, &genesisState) require.NoError(t, err) - ctxA := app.NewContext(true, abci.Header{Height: app.LastBlockHeight()}) - ctxB := newApp.NewContext(true, abci.Header{Height: app.LastBlockHeight()}) + ctxA := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) + ctxB := newApp.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) newApp.mm.InitGenesis(ctxB, app.Codec(), genesisState) newApp.StoreConsensusParams(ctxB, consensusParams) diff --git a/simapp/test_helpers.go b/simapp/test_helpers.go index a4ae4e32c041..f415f1f6db69 100644 --- a/simapp/test_helpers.go +++ b/simapp/test_helpers.go @@ -13,6 +13,7 @@ import ( "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" dbm "github.com/tendermint/tm-db" @@ -33,14 +34,13 @@ var DefaultConsensusParams = &abci.ConsensusParams{ MaxBytes: 200000, MaxGas: 2000000, }, - Evidence: &abci.EvidenceParams{ + Evidence: &tmproto.EvidenceParams{ MaxAgeNumBlocks: 302400, MaxAgeDuration: 1814400, }, - Validator: &abci.ValidatorParams{ + Validator: &tmproto.ValidatorParams{ PubKeyTypes: []string{ tmtypes.ABCIPubKeyTypeEd25519, - tmtypes.ABCIPubKeyTypeSecp256k1, }, }, } @@ -136,7 +136,7 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs // commit genesis changes app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) return app } @@ -175,7 +175,7 @@ func SetupWithGenesisAccounts(genAccs []authtypes.GenesisAccount, balances ...ba ) app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1}}) return app } @@ -304,7 +304,7 @@ func TestAddr(addr string, bech string) (sdk.AccAddress, error) { // CheckBalance checks the balance of an account. func CheckBalance(t *testing.T, app *SimApp, addr sdk.AccAddress, balances sdk.Coins) { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) require.True(t, balances.IsEqual(app.BankKeeper.GetAllBalances(ctxCheck, addr))) } @@ -313,7 +313,7 @@ func CheckBalance(t *testing.T, app *SimApp, addr sdk.AccAddress, balances sdk.C // the parameter 'expPass' against the result. A corresponding result is // returned. func SignCheckDeliver( - t *testing.T, txGen client.TxConfig, app *bam.BaseApp, header abci.Header, msgs []sdk.Msg, + t *testing.T, txGen client.TxConfig, app *bam.BaseApp, header tmproto.Header, msgs []sdk.Msg, accNums, seq []uint64, expSimPass, expPass bool, priv ...crypto.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { @@ -415,7 +415,7 @@ func NewPubKeyFromHex(pk string) (res crypto.PubKey) { if err != nil { panic(err) } - var pkEd ed25519.PubKeyEd25519 + var pkEd ed25519.PubKey copy(pkEd[:], pkBytes) return pkEd } diff --git a/types/context.go b/types/context.go index 251ce6828b69..6d326fb73f19 100644 --- a/types/context.go +++ b/types/context.go @@ -7,6 +7,7 @@ import ( "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/store/gaskv" stypes "github.com/cosmos/cosmos-sdk/store/types" @@ -23,7 +24,7 @@ and standard additions here would be better just to add to the Context struct type Context struct { ctx context.Context ms MultiStore - header abci.Header + header tmproto.Header chainID string txBytes []byte logger log.Logger @@ -57,8 +58,8 @@ func (c Context) MinGasPrices() DecCoins { return c.minGasPrice } func (c Context) EventManager() *EventManager { return c.eventManager } // clone the header before returning -func (c Context) BlockHeader() abci.Header { - var msg = proto.Clone(&c.header).(*abci.Header) +func (c Context) BlockHeader() tmproto.Header { + var msg = proto.Clone(&c.header).(*tmproto.Header) return *msg } @@ -67,7 +68,7 @@ func (c Context) ConsensusParams() *abci.ConsensusParams { } // create a new context -func NewContext(ms MultiStore, header abci.Header, isCheckTx bool, logger log.Logger) Context { +func NewContext(ms MultiStore, header tmproto.Header, isCheckTx bool, logger log.Logger) Context { // https://github.com/gogo/protobuf/issues/519 header.Time = header.Time.UTC() return Context{ @@ -96,7 +97,7 @@ func (c Context) WithMultiStore(ms MultiStore) Context { } // WithBlockHeader returns a Context with an updated tendermint block header in UTC time. -func (c Context) WithBlockHeader(header abci.Header) Context { +func (c Context) WithBlockHeader(header tmproto.Header) Context { // https://github.com/gogo/protobuf/issues/519 header.Time = header.Time.UTC() c.header = header diff --git a/types/context_test.go b/types/context_test.go index a33fe65f64e2..0698199a0a6b 100644 --- a/types/context_test.go +++ b/types/context_test.go @@ -6,13 +6,11 @@ import ( "time" "github.com/stretchr/testify/require" - - "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/secp256k1" + "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/types" @@ -51,7 +49,7 @@ func defaultContext(t *testing.T, key types.StoreKey) types.Context { cms.MountStoreWithDB(key, types.StoreTypeIAVL, db) err := cms.LoadLatestVersion() require.NoError(t, err) - ctx := types.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) + ctx := types.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) return ctx } @@ -104,7 +102,7 @@ func TestContextWithCustom(t *testing.T) { var ctx types.Context require.True(t, ctx.IsZero()) - header := abci.Header{} + header := tmproto.Header{} height := int64(1) chainid := "chainid" ischeck := true @@ -164,7 +162,7 @@ func TestContextHeader(t *testing.T) { addr := secp256k1.GenPrivKey().PubKey().Address() proposer := types.ConsAddress(addr) - ctx = types.NewContext(nil, abci.Header{}, false, nil) + ctx = types.NewContext(nil, tmproto.Header{}, false, nil) ctx = ctx. WithBlockHeight(height). @@ -178,35 +176,35 @@ func TestContextHeader(t *testing.T) { func TestContextHeaderClone(t *testing.T) { cases := map[string]struct { - h abci.Header + h tmproto.Header }{ "empty": { - h: abci.Header{}, + h: tmproto.Header{}, }, "height": { - h: abci.Header{ + h: tmproto.Header{ Height: 77, }, }, "time": { - h: abci.Header{ + h: tmproto.Header{ Time: time.Unix(12345677, 12345), }, }, "zero time": { - h: abci.Header{ + h: tmproto.Header{ Time: time.Unix(0, 0), }, }, "many items": { - h: abci.Header{ + h: tmproto.Header{ Height: 823, Time: time.Unix(9999999999, 0), ChainID: "silly-demo", }, }, "many items with hash": { - h: abci.Header{ + h: tmproto.Header{ Height: 823, Time: time.Unix(9999999999, 0), ChainID: "silly-demo", @@ -233,7 +231,7 @@ func TestContextHeaderClone(t *testing.T) { } func TestUnwrapSDKContext(t *testing.T) { - sdkCtx := types.NewContext(nil, abci.Header{}, false, nil) + sdkCtx := types.NewContext(nil, tmproto.Header{}, false, nil) ctx := types.WrapSDKContext(sdkCtx) sdkCtx2 := types.UnwrapSDKContext(ctx) require.Equal(t, sdkCtx, sdkCtx2) diff --git a/types/query/pagination_test.go b/types/query/pagination_test.go index bd33f5dc0df0..5f710f5cbeb7 100644 --- a/types/query/pagination_test.go +++ b/types/query/pagination_test.go @@ -5,24 +5,21 @@ import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/store/prefix" - authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - - "github.com/cosmos/cosmos-sdk/baseapp" - - "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/store" + "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" + authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + "github.com/cosmos/cosmos-sdk/x/bank/types" ) const ( @@ -187,7 +184,7 @@ func ExamplePaginate() { func setupTest() (*simapp.SimApp, sdk.Context, codec.Marshaler) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec := app.AppCodec() db := dbm.NewMemDB() diff --git a/x/auth/ante/integration_test.go b/x/auth/ante/integration_test.go index 4c232b2bbea8..9155b47aabb6 100644 --- a/x/auth/ante/integration_test.go +++ b/x/auth/ante/integration_test.go @@ -1,7 +1,7 @@ package ante_test import ( - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -11,7 +11,7 @@ import ( // returns context and app with params set on account keeper func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) return app, ctx diff --git a/x/auth/keeper/integration_test.go b/x/auth/keeper/integration_test.go index 0b7714453071..d2069d6d3586 100644 --- a/x/auth/keeper/integration_test.go +++ b/x/auth/keeper/integration_test.go @@ -1,7 +1,7 @@ package keeper_test import ( - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -11,7 +11,7 @@ import ( // returns context and app with params set on account keeper func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) return app, ctx diff --git a/x/auth/signing/verify_test.go b/x/auth/signing/verify_test.go index 30f53013a0c1..5564a1a12417 100644 --- a/x/auth/signing/verify_test.go +++ b/x/auth/signing/verify_test.go @@ -3,15 +3,14 @@ package signing_test import ( "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth/ante" "github.com/cosmos/cosmos-sdk/x/auth/signing" @@ -95,7 +94,7 @@ func TestVerifySignature(t *testing.T) { // returns context and app with params set on account keeper func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, types.DefaultParams()) return app, ctx diff --git a/x/auth/types/stdtx_test.go b/x/auth/types/stdtx_test.go index 70d0ff2f746e..07a5167672f2 100644 --- a/x/auth/types/stdtx_test.go +++ b/x/auth/types/stdtx_test.go @@ -4,23 +4,20 @@ import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - - "github.com/cosmos/cosmos-sdk/crypto/types" - "github.com/cosmos/cosmos-sdk/crypto/types/multisig" - - "github.com/cosmos/cosmos-sdk/types/tx/signing" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" yaml "gopkg.in/yaml.v2" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/crypto/types/multisig" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/tx/signing" ) var ( @@ -92,7 +89,7 @@ func TestStdSignBytes(t *testing.T) { } func TestTxValidateBasic(t *testing.T) { - ctx := sdk.NewContext(nil, abci.Header{ChainID: "mychainid"}, false, log.NewNopLogger()) + ctx := sdk.NewContext(nil, tmproto.Header{ChainID: "mychainid"}, false, log.NewNopLogger()) // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() diff --git a/x/bank/app_test.go b/x/bank/app_test.go index d99539e034b4..42122d0bca9b 100644 --- a/x/bank/app_test.go +++ b/x/bank/app_test.go @@ -4,17 +4,15 @@ import ( "testing" "github.com/stretchr/testify/require" - - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/bank/types" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" ) type ( @@ -94,7 +92,7 @@ func TestSendNotEnoughBalance(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67))) require.NoError(t, err) @@ -109,14 +107,14 @@ func TestSendNotEnoughBalance(t *testing.T) { origSeq := res1.GetSequence() sendMsg := types.NewMsgSend(addr1, addr2, sdk.Coins{sdk.NewInt64Coin("foocoin", 100)}) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{sendMsg}, []uint64{origAccNum}, []uint64{origSeq}, false, false, priv1) require.Error(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{sdk.NewInt64Coin("foocoin", 67)}) - res2 := app.AccountKeeper.GetAccount(app.NewContext(true, abci.Header{}), addr1) + res2 := app.AccountKeeper.GetAccount(app.NewContext(true, tmproto.Header{}), addr1) require.NotNil(t, res2) require.Equal(t, res2.GetAccountNumber(), origAccNum) @@ -163,7 +161,7 @@ func TestSendToModuleAcc(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, test.msg.FromAddress, test.fromBalance) require.NoError(t, err) @@ -177,7 +175,7 @@ func TestSendToModuleAcc(t *testing.T) { origAccNum := res1.GetAccountNumber() origSeq := res1.GetSequence() - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{test.msg}, []uint64{origAccNum}, []uint64{origSeq}, test.expSimPass, test.expPass, priv1) if test.expPass { @@ -189,7 +187,7 @@ func TestSendToModuleAcc(t *testing.T) { simapp.CheckBalance(t, app, test.msg.FromAddress, test.expFromBalance) simapp.CheckBalance(t, app, test.msg.ToAddress, test.expToBalance) - res2 := app.AccountKeeper.GetAccount(app.NewContext(true, abci.Header{}), addr1) + res2 := app.AccountKeeper.GetAccount(app.NewContext(true, tmproto.Header{}), addr1) require.NotNil(t, res2) require.Equal(t, res2.GetAccountNumber(), origAccNum) @@ -205,7 +203,7 @@ func TestMsgMultiSendWithAccounts(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67))) require.NoError(t, err) @@ -248,7 +246,7 @@ func TestMsgMultiSendWithAccounts(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) if tc.expPass { @@ -273,7 +271,7 @@ func TestMsgMultiSendMultipleOut(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc1, acc2} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))) require.NoError(t, err) @@ -300,7 +298,7 @@ func TestMsgMultiSendMultipleOut(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) @@ -324,7 +322,7 @@ func TestMsgMultiSendMultipleInOut(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc1, acc2, acc4} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))) require.NoError(t, err) @@ -355,7 +353,7 @@ func TestMsgMultiSendMultipleInOut(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) @@ -374,7 +372,7 @@ func TestMsgMultiSendDependent(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc1, acc2} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err = app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))) require.NoError(t, err) @@ -408,7 +406,7 @@ func TestMsgMultiSendDependent(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) diff --git a/x/bank/bench_test.go b/x/bank/bench_test.go index 67750d6b24c3..deb3f6dd1c6e 100644 --- a/x/bank/bench_test.go +++ b/x/bank/bench_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -25,7 +26,7 @@ func BenchmarkOneBankSendTxPerBlock(b *testing.B) { // construct genesis state genAccs := []types.GenesisAccount{&acc} benchmarkApp := simapp.SetupWithGenesisAccounts(genAccs) - ctx := benchmarkApp.BaseApp.NewContext(false, abci.Header{}) + ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{}) // some value conceivably higher than the benchmarks would ever go err := benchmarkApp.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000))) @@ -44,7 +45,7 @@ func BenchmarkOneBankSendTxPerBlock(b *testing.B) { // Run this with a profiler, so its easy to distinguish what time comes from // Committing, and what time comes from Check/Deliver Tx. for i := 0; i < b.N; i++ { - benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: height}}) + benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height}}) _, _, err := benchmarkApp.Check(txs[i]) if err != nil { panic("something is broken in checking transaction") @@ -67,7 +68,7 @@ func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) { // Construct genesis state genAccs := []authtypes.GenesisAccount{&acc} benchmarkApp := simapp.SetupWithGenesisAccounts(genAccs) - ctx := benchmarkApp.BaseApp.NewContext(false, abci.Header{}) + ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{}) // some value conceivably higher than the benchmarks would ever go err := benchmarkApp.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000))) @@ -86,7 +87,7 @@ func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) { // Run this with a profiler, so its easy to distinguish what time comes from // Committing, and what time comes from Check/Deliver Tx. for i := 0; i < b.N; i++ { - benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: height}}) + benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height}}) _, _, err := benchmarkApp.Check(txs[i]) if err != nil { panic("something is broken in checking transaction") diff --git a/x/bank/handler_test.go b/x/bank/handler_test.go index ef870e4213ec..e16e8590a14e 100644 --- a/x/bank/handler_test.go +++ b/x/bank/handler_test.go @@ -4,11 +4,10 @@ import ( "strings" "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -16,7 +15,7 @@ import ( func TestInvalidMsg(t *testing.T) { h := NewHandler(nil) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) diff --git a/x/bank/keeper/keeper_test.go b/x/bank/keeper/keeper_test.go index 3c67b67158cc..87818e43cd18 100644 --- a/x/bank/keeper/keeper_test.go +++ b/x/bank/keeper/keeper_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" tmkv "github.com/tendermint/tendermint/libs/kv" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/baseapp" @@ -68,7 +69,7 @@ type IntegrationTestSuite struct { func (suite *IntegrationTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) app.BankKeeper.SetParams(ctx, types.DefaultParams()) @@ -97,7 +98,7 @@ func (suite *IntegrationTestSuite) TestSupply() { func (suite *IntegrationTestSuite) TestSupply_SendCoins() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec := app.AppCodec() // add module accounts to supply keeper @@ -160,7 +161,7 @@ func (suite *IntegrationTestSuite) TestSupply_SendCoins() { func (suite *IntegrationTestSuite) TestSupply_MintCoins() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec := app.AppCodec() // add module accounts to supply keeper @@ -214,7 +215,7 @@ func (suite *IntegrationTestSuite) TestSupply_MintCoins() { func (suite *IntegrationTestSuite) TestSupply_BurnCoins() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec, _ := simapp.MakeCodecs() // add module accounts to supply keeper @@ -408,7 +409,7 @@ func (suite *IntegrationTestSuite) TestSendCoins() { func (suite *IntegrationTestSuite) TestValidateBalance() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) addr1 := sdk.AccAddress([]byte("addr1")) @@ -673,7 +674,7 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { func (suite *IntegrationTestSuite) TestSpendableCoins() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -704,7 +705,7 @@ func (suite *IntegrationTestSuite) TestSpendableCoins() { func (suite *IntegrationTestSuite) TestVestingAccountSend() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -734,7 +735,7 @@ func (suite *IntegrationTestSuite) TestVestingAccountSend() { func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) sendCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 50)) @@ -767,7 +768,7 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() { func (suite *IntegrationTestSuite) TestVestingAccountReceive() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -801,7 +802,7 @@ func (suite *IntegrationTestSuite) TestVestingAccountReceive() { func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) sendCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 50)) @@ -840,7 +841,7 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() { func (suite *IntegrationTestSuite) TestDelegateCoins() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -900,7 +901,7 @@ func (suite *IntegrationTestSuite) TestDelegateCoins_Invalid() { func (suite *IntegrationTestSuite) TestUndelegateCoins() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) diff --git a/x/bank/simulation/operations_test.go b/x/bank/simulation/operations_test.go index 2718dde50092..486ea1ca0bf1 100644 --- a/x/bank/simulation/operations_test.go +++ b/x/bank/simulation/operations_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -26,7 +27,7 @@ func (suite *SimTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) suite.app = app - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{}) } // TestWeightedOperations tests the weights of the operations. @@ -70,7 +71,7 @@ func (suite *SimTestSuite) TestSimulateMsgSend() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgSend(suite.app.AccountKeeper, suite.app.BankKeeper) @@ -98,7 +99,7 @@ func (suite *SimTestSuite) TestSimulateMsgMultiSend() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgMultiSend(suite.app.AccountKeeper, suite.app.BankKeeper) diff --git a/x/capability/keeper/keeper_test.go b/x/capability/keeper/keeper_test.go index a09c704b7f28..fdd795341010 100644 --- a/x/capability/keeper/keeper_test.go +++ b/x/capability/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -32,7 +32,7 @@ func (suite *KeeperTestSuite) SetupTest() { keeper := keeper.NewKeeper(cdc, app.GetKey(types.StoreKey), app.GetMemKey(types.MemStoreKey)) suite.app = app - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1}) suite.keeper = keeper } diff --git a/x/capability/spec/README.md b/x/capability/spec/README.md index b5a2db2f8afe..ec612ba97697 100644 --- a/x/capability/spec/README.md +++ b/x/capability/spec/README.md @@ -63,7 +63,7 @@ func NewApp(...) *App { // Initialize and seal the capability keeper so all persistent capabilities // are loaded in-memory and prevent any further modules from creating scoped // sub-keepers. - ctx := app.BaseApp.NewContext(true, abci.Header{}) + ctx := app.BaseApp.NewContext(true, tmproto.Header{}) app.capabilityKeeper.InitializeAndSeal(ctx) return app diff --git a/x/crisis/handler_test.go b/x/crisis/handler_test.go index bd2752704e02..86f277e13ceb 100644 --- a/x/crisis/handler_test.go +++ b/x/crisis/handler_test.go @@ -4,14 +4,13 @@ import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/crisis" @@ -29,7 +28,7 @@ var ( func createTestApp() (*simapp.SimApp, sdk.Context, []sdk.AccAddress) { db := dbm.NewMemDB() app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 1) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) constantFee := sdk.NewInt64Coin(sdk.DefaultBondDenom, 10) app.CrisisKeeper.SetConstantFee(ctx, constantFee) diff --git a/x/crisis/keeper/keeper_test.go b/x/crisis/keeper/keeper_test.go index c3837d2ca600..563c0e4b1096 100644 --- a/x/crisis/keeper/keeper_test.go +++ b/x/crisis/keeper/keeper_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,14 +14,14 @@ import ( func TestLogger(t *testing.T) { app := simapp.Setup(false) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) require.Equal(t, ctx.Logger(), app.CrisisKeeper.Logger(ctx)) } func TestInvariants(t *testing.T) { app := simapp.Setup(false) app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1}}) require.Equal(t, app.CrisisKeeper.InvCheckPeriod(), uint(5)) @@ -33,9 +34,9 @@ func TestInvariants(t *testing.T) { func TestAssertInvariants(t *testing.T) { app := simapp.Setup(false) app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1}}) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) app.CrisisKeeper.RegisterRoute("testModule", "testRoute1", func(sdk.Context) (string, bool) { return "", false }) require.NotPanics(t, func() { app.CrisisKeeper.AssertInvariants(ctx) }) diff --git a/x/distribution/keeper/allocation_test.go b/x/distribution/keeper/allocation_test.go index 726498c60c6d..617cf1d4e583 100644 --- a/x/distribution/keeper/allocation_test.go +++ b/x/distribution/keeper/allocation_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( func TestAllocateTokensToValidatorWithCommission(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1234)) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) @@ -54,7 +54,7 @@ func TestAllocateTokensToValidatorWithCommission(t *testing.T) { func TestAllocateTokensToManyValidators(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) addrs := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1234)) @@ -134,7 +134,7 @@ func TestAllocateTokensToManyValidators(t *testing.T) { func TestAllocateTokensTruncation(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1234)) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) diff --git a/x/distribution/keeper/delegation_test.go b/x/distribution/keeper/delegation_test.go index 8b66b58bb914..44135ce10ff5 100644 --- a/x/distribution/keeper/delegation_test.go +++ b/x/distribution/keeper/delegation_test.go @@ -3,9 +3,8 @@ package keeper_test import ( "testing" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,7 +14,7 @@ import ( func TestCalculateRewardsBasic(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) @@ -77,7 +76,7 @@ func TestCalculateRewardsBasic(t *testing.T) { func TestCalculateRewardsAfterSlash(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(100000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) @@ -147,7 +146,7 @@ func TestCalculateRewardsAfterSlash(t *testing.T) { func TestCalculateRewardsAfterManySlashes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(100000000)) @@ -228,7 +227,7 @@ func TestCalculateRewardsAfterManySlashes(t *testing.T) { func TestCalculateRewardsMultiDelegator(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) @@ -303,7 +302,7 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { balancePower := int64(1000) balanceTokens := sdk.TokensFromConsensusPower(balancePower) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(1000000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) @@ -382,7 +381,7 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(1000000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) @@ -457,7 +456,7 @@ func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1000000000)) @@ -543,7 +542,7 @@ func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) diff --git a/x/distribution/keeper/grpc_query_test.go b/x/distribution/keeper/grpc_query_test.go index f5b48c775090..f6d4406f1a8b 100644 --- a/x/distribution/keeper/grpc_query_test.go +++ b/x/distribution/keeper/grpc_query_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -29,7 +29,7 @@ type KeeperTestSuite struct { func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.DistrKeeper) diff --git a/x/distribution/keeper/keeper_test.go b/x/distribution/keeper/keeper_test.go index 4829bd33be5e..a8205dfdc1db 100644 --- a/x/distribution/keeper/keeper_test.go +++ b/x/distribution/keeper/keeper_test.go @@ -5,8 +5,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,7 +14,7 @@ import ( func TestSetWithdrawAddr(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1000000000)) @@ -37,7 +36,7 @@ func TestSetWithdrawAddr(t *testing.T) { func TestWithdrawValidatorCommission(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valCommission := sdk.DecCoins{ sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), @@ -91,7 +90,7 @@ func TestWithdrawValidatorCommission(t *testing.T) { func TestGetTotalRewards(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valCommission := sdk.DecCoins{ sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), @@ -112,7 +111,7 @@ func TestGetTotalRewards(t *testing.T) { func TestFundCommunityPool(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1000000000)) diff --git a/x/distribution/keeper/querier_test.go b/x/distribution/keeper/querier_test.go index 5934af6a1b73..ca78d9f03329 100644 --- a/x/distribution/keeper/querier_test.go +++ b/x/distribution/keeper/querier_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -116,7 +117,7 @@ func TestQueries(t *testing.T) { legacyQuerierCdc := codec.NewAminoCodec(cdc) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(1000000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) diff --git a/x/distribution/proposal_handler_test.go b/x/distribution/proposal_handler_test.go index d8b21928b8c4..34e99fb27bd3 100644 --- a/x/distribution/proposal_handler_test.go +++ b/x/distribution/proposal_handler_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -26,7 +26,7 @@ func testProposal(recipient sdk.AccAddress, amount sdk.Coins) *types.CommunityPo func TestProposalHandlerPassed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) recipient := delAddr1 @@ -56,7 +56,7 @@ func TestProposalHandlerPassed(t *testing.T) { func TestProposalHandlerFailed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) recipient := delAddr1 diff --git a/x/distribution/simulation/operations_test.go b/x/distribution/simulation/operations_test.go index f7aa17019794..ceebac175e09 100644 --- a/x/distribution/simulation/operations_test.go +++ b/x/distribution/simulation/operations_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -64,7 +64,7 @@ func (suite *SimTestSuite) TestSimulateMsgSetWithdrawAddress() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgSetWithdrawAddress(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper) @@ -105,7 +105,7 @@ func (suite *SimTestSuite) TestSimulateMsgWithdrawDelegatorReward() { suite.setupValidatorRewards(validator0.OperatorAddress) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgWithdrawDelegatorReward(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper, suite.app.StakingKeeper) @@ -163,7 +163,7 @@ func (suite *SimTestSuite) testSimulateMsgWithdrawValidatorCommission(tokenName suite.app.DistrKeeper.SetValidatorAccumulatedCommission(suite.ctx, validator0.OperatorAddress, types.ValidatorAccumulatedCommission{Commission: valCommission}) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgWithdrawValidatorCommission(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper, suite.app.StakingKeeper) @@ -189,7 +189,7 @@ func (suite *SimTestSuite) TestSimulateMsgFundCommunityPool() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgFundCommunityPool(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper, suite.app.StakingKeeper) @@ -218,7 +218,7 @@ func (suite *SimTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) suite.app = app - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{}) } func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Account { diff --git a/x/distribution/simulation/proposals_test.go b/x/distribution/simulation/proposals_test.go index f49293fe8dfc..6d5895ea8dfd 100644 --- a/x/distribution/simulation/proposals_test.go +++ b/x/distribution/simulation/proposals_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -16,7 +16,7 @@ import ( func TestProposalContents(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) // initialize parameters s := rand.NewSource(1) diff --git a/x/evidence/genesis_test.go b/x/evidence/genesis_test.go index 381321224072..c09bc9d95e7b 100644 --- a/x/evidence/genesis_test.go +++ b/x/evidence/genesis_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/simapp" @@ -27,7 +27,7 @@ func (suite *GenesisTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1}) suite.keeper = app.EvidenceKeeper } diff --git a/x/evidence/handler_test.go b/x/evidence/handler_test.go index 1318b8027b01..1d5388b7c88e 100644 --- a/x/evidence/handler_test.go +++ b/x/evidence/handler_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -104,7 +104,7 @@ func (suite *HandlerTestSuite) TestMsgSubmitEvidence() { } for i, tc := range testCases { - ctx := suite.app.BaseApp.NewContext(false, abci.Header{Height: suite.app.LastBlockHeight() + 1}) + ctx := suite.app.BaseApp.NewContext(false, tmproto.Header{Height: suite.app.LastBlockHeight() + 1}) res, err := suite.handler(ctx, tc.msg) if tc.expectErr { diff --git a/x/evidence/keeper/keeper_test.go b/x/evidence/keeper/keeper_test.go index 1aaaca5f38dc..efaeba52ddfb 100644 --- a/x/evidence/keeper/keeper_test.go +++ b/x/evidence/keeper/keeper_test.go @@ -6,9 +6,13 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/codec" + "github.com/stretchr/testify/suite" + "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -16,11 +20,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/evidence/exported" "github.com/cosmos/cosmos-sdk/x/evidence/keeper" "github.com/cosmos/cosmos-sdk/x/evidence/types" - - "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/ed25519" ) var ( @@ -46,7 +45,7 @@ func newPubKey(pk string) (res crypto.PubKey) { panic(err) } - var pubkey ed25519.PubKeyEd25519 + var pubkey ed25519.PubKey copy(pubkey[:], pkBytes) return pubkey @@ -95,7 +94,7 @@ func (suite *KeeperTestSuite) SetupTest() { app.EvidenceKeeper = *evidenceKeeper - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1}) suite.querier = keeper.NewQuerier(*evidenceKeeper, legacyQuerierCdc) suite.app = app diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go index 42b9e7c3eb10..2f690c0ee90c 100644 --- a/x/genutil/gentx_test.go +++ b/x/genutil/gentx_test.go @@ -5,15 +5,14 @@ import ( "fmt" "testing" + "github.com/stretchr/testify/suite" + "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/simapp/helpers" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/secp256k1" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/genutil/types" @@ -48,7 +47,7 @@ type GenTxTestSuite struct { func (suite *GenTxTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{}) suite.app = app suite.encodingConfig = simapp.MakeEncodingConfig() diff --git a/x/gov/abci_test.go b/x/gov/abci_test.go index 79655c5a06fe..5b24b58c9055 100644 --- a/x/gov/abci_test.go +++ b/x/gov/abci_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,10 +17,10 @@ import ( func TestTickExpiredDepositPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -68,10 +69,10 @@ func TestTickExpiredDepositPeriod(t *testing.T) { func TestTickMultipleExpiredDepositPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -145,10 +146,10 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) { func TestTickPassedDepositPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -198,12 +199,12 @@ func TestTickPassedDepositPeriod(t *testing.T) { func TestTickPassedVotingPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) SortAddresses(addrs) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -262,7 +263,7 @@ func TestTickPassedVotingPeriod(t *testing.T) { func TestProposalPassedEndblocker(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) SortAddresses(addrs) @@ -270,7 +271,7 @@ func TestProposalPassedEndblocker(t *testing.T) { handler := gov.NewHandler(app.GovKeeper) stakingHandler := staking.NewHandler(app.StakingKeeper) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) valAddr := sdk.ValAddress(addrs[0]) @@ -315,7 +316,7 @@ func TestProposalPassedEndblocker(t *testing.T) { func TestEndBlockerProposalHandlerFailed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 1, valTokens) SortAddresses(addrs) @@ -323,7 +324,7 @@ func TestEndBlockerProposalHandlerFailed(t *testing.T) { handler := gov.NewHandler(app.GovKeeper) stakingHandler := staking.NewHandler(app.StakingKeeper) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) valAddr := sdk.ValAddress(addrs[0]) diff --git a/x/gov/genesis_test.go b/x/gov/genesis_test.go index 0d1a0d5a9a66..ad34cb5b6d2b 100644 --- a/x/gov/genesis_test.go +++ b/x/gov/genesis_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" @@ -19,15 +20,15 @@ import ( func TestImportExportQueues(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 2, valTokens) SortAddresses(addrs) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) - ctx = app.BaseApp.NewContext(false, abci.Header{}) + ctx = app.BaseApp.NewContext(false, tmproto.Header{}) // Create two proposals, put the second into the voting period proposal := TestProposal @@ -78,12 +79,12 @@ func TestImportExportQueues(t *testing.T) { ) app2.Commit() - app2.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app2.LastBlockHeight() + 1}}) + app2.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app2.LastBlockHeight() + 1}}) - header = abci.Header{Height: app2.LastBlockHeight() + 1} + header = tmproto.Header{Height: app2.LastBlockHeight() + 1} app2.BeginBlock(abci.RequestBeginBlock{Header: header}) - ctx2 := app2.BaseApp.NewContext(false, abci.Header{}) + ctx2 := app2.BaseApp.NewContext(false, tmproto.Header{}) // Jump the time forward past the DepositPeriod and VotingPeriod ctx2 = ctx2.WithBlockTime(ctx2.BlockHeader().Time.Add(app2.GovKeeper.GetDepositParams(ctx2).MaxDepositPeriod).Add(app2.GovKeeper.GetVotingParams(ctx2).VotingPeriod)) @@ -112,12 +113,12 @@ func TestImportExportQueues(t *testing.T) { func TestEqualProposals(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 2, valTokens) SortAddresses(addrs) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // Submit two proposals diff --git a/x/gov/handler_test.go b/x/gov/handler_test.go index 57dde01958c3..a43b6890e58b 100644 --- a/x/gov/handler_test.go +++ b/x/gov/handler_test.go @@ -5,9 +5,9 @@ import ( "testing" "github.com/cosmos/cosmos-sdk/testutil/testdata" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/gov" @@ -18,7 +18,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := gov.NewHandler(k) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized gov message type")) diff --git a/x/gov/keeper/deposit_test.go b/x/gov/keeper/deposit_test.go index 1f70e9a736a7..b94d4edc6d83 100644 --- a/x/gov/keeper/deposit_test.go +++ b/x/gov/keeper/deposit_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,7 +13,7 @@ import ( func TestDeposits(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) TestAddrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(10000000)) diff --git a/x/gov/keeper/keeper_test.go b/x/gov/keeper/keeper_test.go index 3c3d63f82801..9de994e9fa34 100644 --- a/x/gov/keeper/keeper_test.go +++ b/x/gov/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -24,7 +24,7 @@ type KeeperTestSuite struct { func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.GovKeeper) @@ -38,7 +38,7 @@ func (suite *KeeperTestSuite) SetupTest() { func TestIncrementProposalNumber(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) tp := TestProposal _, err := app.GovKeeper.SubmitProposal(ctx, tp) @@ -59,7 +59,7 @@ func TestIncrementProposalNumber(t *testing.T) { func TestProposalQueues(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) // create test proposals tp := TestProposal diff --git a/x/gov/keeper/proposal_test.go b/x/gov/keeper/proposal_test.go index 4f29a6748d1f..d569515b9fa4 100644 --- a/x/gov/keeper/proposal_test.go +++ b/x/gov/keeper/proposal_test.go @@ -7,7 +7,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( func TestGetSetProposal(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) tp := TestProposal proposal, err := app.GovKeeper.SubmitProposal(ctx, tp) @@ -31,7 +31,7 @@ func TestGetSetProposal(t *testing.T) { func TestActivateVotingPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) tp := TestProposal proposal, err := app.GovKeeper.SubmitProposal(ctx, tp) @@ -60,7 +60,7 @@ func (invalidProposalRoute) ProposalRoute() string { return "nonexistingroute" } func TestSubmitProposal(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) testCases := []struct { content types.Content @@ -85,7 +85,7 @@ func TestSubmitProposal(t *testing.T) { func TestGetProposalsFiltered(t *testing.T) { proposalID := uint64(1) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) status := []types.ProposalStatus{types.StatusDepositPeriod, types.StatusVotingPeriod} diff --git a/x/gov/keeper/querier_test.go b/x/gov/keeper/querier_test.go index db86e896795a..23033d803248 100644 --- a/x/gov/keeper/querier_test.go +++ b/x/gov/keeper/querier_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -145,7 +146,7 @@ func getQueriedVotes(t *testing.T, ctx sdk.Context, cdc codec.JSONMarshaler, que func TestQueries(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) appCodec := app.AppCodec() legacyQuerierCdc := codec.NewAminoCodec(app.Codec()) querier := keeper.NewQuerier(app.GovKeeper, legacyQuerierCdc) @@ -293,7 +294,7 @@ func TestQueries(t *testing.T) { func TestPaginatedVotesQuery(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) appCodec := app.AppCodec() proposal := types.Proposal{ diff --git a/x/gov/keeper/tally_test.go b/x/gov/keeper/tally_test.go index 704aa5d0307d..cf8d504b3eb9 100644 --- a/x/gov/keeper/tally_test.go +++ b/x/gov/keeper/tally_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,7 +14,7 @@ import ( func TestTallyNoOneVotes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) createValidators(ctx, app, []int64{5, 5, 5}) @@ -36,7 +36,7 @@ func TestTallyNoOneVotes(t *testing.T) { func TestTallyNoQuorum(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) createValidators(ctx, app, []int64{2, 5, 0}) @@ -61,7 +61,7 @@ func TestTallyNoQuorum(t *testing.T) { func TestTallyOnlyValidatorsAllYes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, _ := createValidators(ctx, app, []int64{5, 5, 5}) tp := TestProposal @@ -87,7 +87,7 @@ func TestTallyOnlyValidatorsAllYes(t *testing.T) { func TestTallyOnlyValidators51No(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{5, 6, 0}) @@ -111,7 +111,7 @@ func TestTallyOnlyValidators51No(t *testing.T) { func TestTallyOnlyValidators51Yes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{5, 6, 0}) @@ -136,7 +136,7 @@ func TestTallyOnlyValidators51Yes(t *testing.T) { func TestTallyOnlyValidatorsVetoed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{6, 6, 7}) @@ -162,7 +162,7 @@ func TestTallyOnlyValidatorsVetoed(t *testing.T) { func TestTallyOnlyValidatorsAbstainPasses(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{6, 6, 7}) @@ -188,7 +188,7 @@ func TestTallyOnlyValidatorsAbstainPasses(t *testing.T) { func TestTallyOnlyValidatorsAbstainFails(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{6, 6, 7}) @@ -214,7 +214,7 @@ func TestTallyOnlyValidatorsAbstainFails(t *testing.T) { func TestTallyOnlyValidatorsNonVoter(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{5, 6, 7}) valAccAddr1, valAccAddr2 := valAccAddrs[0], valAccAddrs[1] @@ -240,7 +240,7 @@ func TestTallyOnlyValidatorsNonVoter(t *testing.T) { func TestTallyDelgatorOverride(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, valAddrs := createValidators(ctx, app, []int64{5, 6, 7}) @@ -276,7 +276,7 @@ func TestTallyDelgatorOverride(t *testing.T) { func TestTallyDelgatorInherit(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, vals := createValidators(ctx, app, []int64{5, 6, 7}) @@ -311,7 +311,7 @@ func TestTallyDelgatorInherit(t *testing.T) { func TestTallyDelgatorMultipleOverride(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, vals := createValidators(ctx, app, []int64{5, 6, 7}) @@ -351,7 +351,7 @@ func TestTallyDelgatorMultipleOverride(t *testing.T) { func TestTallyDelgatorMultipleInherit(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) createValidators(ctx, app, []int64{25, 6, 7}) @@ -392,7 +392,7 @@ func TestTallyDelgatorMultipleInherit(t *testing.T) { func TestTallyJailedValidator(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, valAddrs := createValidators(ctx, app, []int64{25, 6, 7}) @@ -433,7 +433,7 @@ func TestTallyJailedValidator(t *testing.T) { func TestTallyValidatorMultipleDelegations(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, valAddrs := createValidators(ctx, app, []int64{10, 10, 10}) diff --git a/x/gov/keeper/vote_test.go b/x/gov/keeper/vote_test.go index cc2d92a0a697..98d294c2fd84 100644 --- a/x/gov/keeper/vote_test.go +++ b/x/gov/keeper/vote_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,7 +13,7 @@ import ( func TestVotes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrsIncremental(app, ctx, 5, sdk.NewInt(30000000)) diff --git a/x/gov/simulation/operations_test.go b/x/gov/simulation/operations_test.go index c412bd46f1e4..eeaaf46f564f 100644 --- a/x/gov/simulation/operations_test.go +++ b/x/gov/simulation/operations_test.go @@ -7,8 +7,8 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -104,7 +104,7 @@ func TestSimulateMsgSubmitProposal(t *testing.T) { accounts := getTestingAccounts(t, r, app, ctx, 3) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgSubmitProposal(app.AccountKeeper, app.BankKeeper, app.GovKeeper, MockWeightedProposalContent{3}.ContentSimulatorFn()) @@ -147,7 +147,7 @@ func TestSimulateMsgDeposit(t *testing.T) { app.GovKeeper.SetProposal(ctx, proposal) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgDeposit(app.AccountKeeper, app.BankKeeper, app.GovKeeper) @@ -189,7 +189,7 @@ func TestSimulateMsgVote(t *testing.T) { app.GovKeeper.ActivateVotingPeriod(ctx, proposal) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgVote(app.AccountKeeper, app.BankKeeper, app.GovKeeper) @@ -212,7 +212,7 @@ func TestSimulateMsgVote(t *testing.T) { func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, minttypes.DefaultParams()) app.MintKeeper.SetMinter(ctx, minttypes.DefaultInitialMinter()) diff --git a/x/gov/simulation/proposals_test.go b/x/gov/simulation/proposals_test.go index d83edbfb007b..dcd6f3c3f08b 100644 --- a/x/gov/simulation/proposals_test.go +++ b/x/gov/simulation/proposals_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" sdk "github.com/cosmos/cosmos-sdk/types" @@ -18,7 +18,7 @@ func TestProposalContents(t *testing.T) { s := rand.NewSource(1) r := rand.New(s) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) accounts := simtypes.RandomAccounts(r, 3) // execute ProposalContents function diff --git a/x/ibc/02-client/abci_test.go b/x/ibc/02-client/abci_test.go index e61cc2f368a2..9bcbe784b7ad 100644 --- a/x/ibc/02-client/abci_test.go +++ b/x/ibc/02-client/abci_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -26,7 +26,7 @@ func (suite *ClientTestSuite) SetupTest() { suite.app = simapp.Setup(isCheckTx) suite.cdc = suite.app.Codec() - suite.ctx = suite.app.BaseApp.NewContext(isCheckTx, abci.Header{Height: 0, ChainID: "localhost_chain"}) + suite.ctx = suite.app.BaseApp.NewContext(isCheckTx, tmproto.Header{Height: 0, ChainID: "localhost_chain"}) } diff --git a/x/ibc/02-client/keeper/keeper_test.go b/x/ibc/02-client/keeper/keeper_test.go index 0145813c4e8a..6402af06e930 100644 --- a/x/ibc/02-client/keeper/keeper_test.go +++ b/x/ibc/02-client/keeper/keeper_test.go @@ -6,9 +6,8 @@ import ( "time" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/light" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -54,7 +53,7 @@ func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(isCheckTx) suite.cdc = app.Codec() - suite.ctx = app.BaseApp.NewContext(isCheckTx, abci.Header{Height: testClientHeight, ChainID: testClientID, Time: now2}) + suite.ctx = app.BaseApp.NewContext(isCheckTx, tmproto.Header{Height: testClientHeight, ChainID: testClientID, Time: now2}) suite.keeper = &app.IBCKeeper.ClientKeeper suite.privVal = tmtypes.NewMockPV() diff --git a/x/ibc/05-port/keeper/keeper_test.go b/x/ibc/05-port/keeper/keeper_test.go index 68a06bf55fab..ec753a16671b 100644 --- a/x/ibc/05-port/keeper/keeper_test.go +++ b/x/ibc/05-port/keeper/keeper_test.go @@ -5,8 +5,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -29,7 +28,7 @@ func (suite *KeeperTestSuite) SetupTest() { isCheckTx := false app := simapp.Setup(isCheckTx) - suite.ctx = app.BaseApp.NewContext(isCheckTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) suite.keeper = &app.IBCKeeper.PortKeeper } diff --git a/x/ibc/07-tendermint/types/header.go b/x/ibc/07-tendermint/types/header.go index d82df6c3ce07..61b040f5b20c 100644 --- a/x/ibc/07-tendermint/types/header.go +++ b/x/ibc/07-tendermint/types/header.go @@ -3,7 +3,7 @@ package types import ( "bytes" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -59,6 +59,6 @@ func (h Header) ValidateBasic(chainID string) error { // ToABCIHeader parses the header to an ABCI header type. // NOTE: only for testing use. -func (h Header) ToABCIHeader() abci.Header { +func (h Header) ToABCIHeader() tmproto.Header { return tmtypes.TM2PB.Header(h.SignedHeader.Header) } diff --git a/x/ibc/07-tendermint/types/tendermint_test.go b/x/ibc/07-tendermint/types/tendermint_test.go index 395d10d28575..caa081e11a97 100644 --- a/x/ibc/07-tendermint/types/tendermint_test.go +++ b/x/ibc/07-tendermint/types/tendermint_test.go @@ -5,8 +5,7 @@ import ( "time" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -51,7 +50,7 @@ func (suite *TendermintTestSuite) SetupTest() { val := tmtypes.NewValidator(pubKey, 10) suite.valSet = tmtypes.NewValidatorSet([]*tmtypes.Validator{val}) suite.header = ibctmtypes.CreateTestHeader(chainID, height, suite.now, suite.valSet, []tmtypes.PrivValidator{suite.privVal}) - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1, Time: suite.now}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1, Time: suite.now}) } func TestTendermintTestSuite(t *testing.T) { diff --git a/x/ibc/09-localhost/types/localhost_test.go b/x/ibc/09-localhost/types/localhost_test.go index 30111397a17b..349c2e8a533b 100644 --- a/x/ibc/09-localhost/types/localhost_test.go +++ b/x/ibc/09-localhost/types/localhost_test.go @@ -4,8 +4,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -31,7 +30,7 @@ func (suite *LocalhostTestSuite) SetupTest() { suite.aminoCdc = app.Codec() suite.cdc = app.AppCodec() - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{Height: 1}) suite.store = app.IBCKeeper.ClientKeeper.ClientStore(ctx, clientexported.ClientTypeLocalHost) } diff --git a/x/ibc/ibc_test.go b/x/ibc/ibc_test.go index 55f96c2d80c9..225df5bd2de7 100644 --- a/x/ibc/ibc_test.go +++ b/x/ibc/ibc_test.go @@ -5,8 +5,7 @@ import ( "time" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -61,7 +60,7 @@ func (suite *IBCTestSuite) SetupTest() { suite.header = ibctmtypes.CreateTestHeader("chainID", 10, now, valSet, []tmtypes.PrivValidator{privVal}) suite.cdc = suite.app.Codec() - suite.ctx = suite.app.BaseApp.NewContext(isCheckTx, abci.Header{}) + suite.ctx = suite.app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) } func TestIBCTestSuite(t *testing.T) { diff --git a/x/ibc/keeper/keeper_test.go b/x/ibc/keeper/keeper_test.go index 941b20eb7845..bf9a233681a8 100644 --- a/x/ibc/keeper/keeper_test.go +++ b/x/ibc/keeper/keeper_test.go @@ -4,8 +4,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -28,7 +27,7 @@ func (suite *KeeperTestSuite) SetupTest() { legacyQuerierCdc := codec.NewAminoCodec(app.Codec()) suite.cdc = app.Codec() - suite.ctx = app.BaseApp.NewContext(isCheckTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) suite.keeper = app.IBCKeeper suite.querier = keeper.NewQuerier(*app.IBCKeeper, legacyQuerierCdc) } diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index 84a37a07a929..f7272edcfc18 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -15,6 +15,7 @@ import ( "github.com/tendermint/tendermint/crypto/tmhash" tmmath "github.com/tendermint/tendermint/libs/math" "github.com/tendermint/tendermint/light" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/tendermint/tendermint/version" @@ -69,7 +70,7 @@ type TestChain struct { App *simapp.SimApp ChainID string LastHeader ibctmtypes.Header // header for last block height committed - CurrentHeader abci.Header // header for current block height + CurrentHeader tmproto.Header // header for current block height Querier sdk.Querier // TODO: deprecate once clients are migrated to gRPC QueryServer types.QueryServer TxConfig client.TxConfig @@ -116,7 +117,7 @@ func NewTestChain(t *testing.T, chainID string) *TestChain { legacyQuerierCdc := codec.NewAminoCodec(app.Codec()) // create current header and call begin block - header := abci.Header{ + header := tmproto.Header{ Height: 1, Time: globalStartTime, } @@ -196,7 +197,7 @@ func (chain *TestChain) NextBlock() { chain.LastHeader = chain.CreateTMClientHeader() // increment the current header - chain.CurrentHeader = abci.Header{ + chain.CurrentHeader = tmproto.Header{ Height: chain.App.LastBlockHeight() + 1, AppHash: chain.App.LastCommitID().Hash, // NOTE: the time is increased by the coordinator to maintain time synchrony amongst diff --git a/x/mint/keeper/grpc_query_test.go b/x/mint/keeper/grpc_query_test.go index f63b248a288a..11b627669438 100644 --- a/x/mint/keeper/grpc_query_test.go +++ b/x/mint/keeper/grpc_query_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -23,7 +23,7 @@ type MintTestSuite struct { func (suite *MintTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.MintKeeper) diff --git a/x/mint/keeper/integration_test.go b/x/mint/keeper/integration_test.go index db1efaca3f12..df321c33bd0c 100644 --- a/x/mint/keeper/integration_test.go +++ b/x/mint/keeper/integration_test.go @@ -1,7 +1,7 @@ package keeper_test import ( - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -12,7 +12,7 @@ import ( func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, types.DefaultParams()) app.MintKeeper.SetMinter(ctx, types.DefaultInitialMinter()) diff --git a/x/params/keeper/common_test.go b/x/params/keeper/common_test.go index c6c151809c37..8193c6fa0ae2 100644 --- a/x/params/keeper/common_test.go +++ b/x/params/keeper/common_test.go @@ -1,8 +1,8 @@ package keeper_test import ( - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" @@ -45,6 +45,6 @@ func defaultContext(key sdk.StoreKey, tkey sdk.StoreKey) sdk.Context { if err != nil { panic(err) } - ctx := sdk.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) return ctx } diff --git a/x/params/keeper/keeper_test.go b/x/params/keeper/keeper_test.go index b30783fbd80a..44c8223f2c25 100644 --- a/x/params/keeper/keeper_test.go +++ b/x/params/keeper/keeper_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -40,7 +40,7 @@ func TestKeeperTestSuite(t *testing.T) { // returns context and app func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) return app, ctx } diff --git a/x/params/proposal_handler_test.go b/x/params/proposal_handler_test.go index ddbb81fb7cc4..b90cb4450eb2 100644 --- a/x/params/proposal_handler_test.go +++ b/x/params/proposal_handler_test.go @@ -4,9 +4,8 @@ import ( "testing" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" @@ -76,7 +75,7 @@ func newTestInput(t *testing.T) testInput { require.Nil(t, err) keeper := keeper.NewKeeper(proposal.ModuleCdc, keyParams, tKeyParams) - ctx := sdk.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) return testInput{ctx, cdc, keeper} } diff --git a/x/params/simulation/operations_test.go b/x/params/simulation/operations_test.go index a7aecfdbda5e..54c90a6c2e3d 100644 --- a/x/params/simulation/operations_test.go +++ b/x/params/simulation/operations_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -43,7 +43,7 @@ func TestSimulateParamChangeProposalContent(t *testing.T) { s := rand.NewSource(1) r := rand.New(s) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) accounts := simtypes.RandomAccounts(r, 3) paramChangePool := []simtypes.ParamChange{MockParamChange{1}, MockParamChange{2}, MockParamChange{3}} diff --git a/x/params/simulation/proposals_test.go b/x/params/simulation/proposals_test.go index 0b84aa07f99e..e89bb668a489 100644 --- a/x/params/simulation/proposals_test.go +++ b/x/params/simulation/proposals_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" sdk "github.com/cosmos/cosmos-sdk/types" @@ -19,7 +19,7 @@ func TestProposalContents(t *testing.T) { s := rand.NewSource(1) r := rand.New(s) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) accounts := simtypes.RandomAccounts(r, 3) paramChangePool := []simtypes.ParamChange{MockParamChange{1}, MockParamChange{2}, MockParamChange{3}} diff --git a/x/params/types/subspace_test.go b/x/params/types/subspace_test.go index d7c30ba18f65..bd14aa698a26 100644 --- a/x/params/types/subspace_test.go +++ b/x/params/types/subspace_test.go @@ -6,8 +6,8 @@ import ( "time" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" @@ -37,7 +37,7 @@ func (suite *SubspaceTestSuite) SetupTest() { ss := types.NewSubspace(cdc, key, tkey, "testsubspace") suite.cdc = cdc - suite.ctx = sdk.NewContext(ms, abci.Header{}, false, log.NewNopLogger()) + suite.ctx = sdk.NewContext(ms, tmproto.Header{}, false, log.NewNopLogger()) suite.ss = ss.WithKeyTable(paramKeyTable()) } diff --git a/x/simulation/mock_tendermint.go b/x/simulation/mock_tendermint.go index 0a16147d24c9..258f6d561418 100644 --- a/x/simulation/mock_tendermint.go +++ b/x/simulation/mock_tendermint.go @@ -9,6 +9,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" tmbytes "github.com/tendermint/tendermint/libs/bytes" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" ) @@ -119,7 +120,7 @@ func updateValidators(tb testing.TB, r *rand.Rand, params Params, func RandomRequestBeginBlock(r *rand.Rand, params Params, validators mockValidators, pastTimes []time.Time, pastVoteInfos [][]abci.VoteInfo, - event func(route, op, evResult string), header abci.Header) abci.RequestBeginBlock { + event func(route, op, evResult string), header tmproto.Header) abci.RequestBeginBlock { if len(validators) == 0 { return abci.RequestBeginBlock{ Header: header, diff --git a/x/simulation/params_test.go b/x/simulation/params_test.go index 8ba53efd8675..d0b538c26e4d 100644 --- a/x/simulation/params_test.go +++ b/x/simulation/params_test.go @@ -6,8 +6,7 @@ import ( "testing" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -40,7 +39,7 @@ func TestNewWeightedProposalContent(t *testing.T) { require.Equal(t, key, pContent.AppParamsKey()) require.Equal(t, weight, pContent.DefaultWeight()) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) require.Equal(t, content, pContent.ContentSimulatorFn()(nil, ctx, nil)) } diff --git a/x/simulation/simulate.go b/x/simulation/simulate.go index 7e07ade4efdb..636111fc7549 100644 --- a/x/simulation/simulate.go +++ b/x/simulation/simulate.go @@ -11,6 +11,7 @@ import ( "time" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -86,7 +87,7 @@ func SimulateFromSeed( nextValidators := validators - header := abci.Header{ + header := tmproto.Header{ ChainID: config.ChainID, Height: 1, Time: genesisTimestamp, @@ -240,7 +241,7 @@ func SimulateFromSeed( //______________________________________________________________________________ type blockSimFn func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, - accounts []simulation.Account, header abci.Header) (opCount int) + accounts []simulation.Account, header tmproto.Header) (opCount int) // Returns a function to simulate blocks. Written like this to avoid constant // parameters being passed everytime, to minimize memory overhead. @@ -254,7 +255,7 @@ func createBlockSimulator(testingMode bool, tb testing.TB, w io.Writer, params P selectOp := ops.getSelectOpFn() return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accounts []simulation.Account, header abci.Header, + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accounts []simulation.Account, header tmproto.Header, ) (opCount int) { _, _ = fmt.Fprintf( w, "\rSimulating... block %d/%d, operation %d/%d.", diff --git a/x/slashing/abci_test.go b/x/slashing/abci_test.go index fcff517deba9..0b6026bcde66 100644 --- a/x/slashing/abci_test.go +++ b/x/slashing/abci_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +17,7 @@ import ( func TestBeginBlocker(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index bc8f6e03eba0..6b4a33e43e48 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -22,14 +23,14 @@ var ( ) func checkValidator(t *testing.T, app *simapp.SimApp, _ sdk.AccAddress, expFound bool) stakingtypes.Validator { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) validator, found := app.StakingKeeper.GetValidator(ctxCheck, sdk.ValAddress(addr1)) require.Equal(t, expFound, found) return validator } func checkValidatorSigningInfo(t *testing.T, app *simapp.SimApp, addr sdk.ConsAddress, expFound bool) types.ValidatorSigningInfo { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) signingInfo, found := app.SlashingKeeper.GetValidatorSigningInfo(ctxCheck, addr) require.Equal(t, expFound, found) return signingInfo @@ -62,13 +63,13 @@ func TestSlashingMsgs(t *testing.T) { sdk.ValAddress(addr1), priv1.PubKey(), bondCoin, description, commission, sdk.OneInt(), ) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, []uint64{0}, []uint64{0}, true, true, priv1) require.NoError(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin.Sub(bondCoin)}) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) validator := checkValidator(t, app, addr1, true) @@ -80,7 +81,7 @@ func TestSlashingMsgs(t *testing.T) { checkValidatorSigningInfo(t, app, sdk.ConsAddress(addr1), true) // unjail should fail with unknown validator - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, res, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{unjailMsg}, []uint64{0}, []uint64{1}, false, false, priv1) require.Error(t, err) require.Nil(t, res) diff --git a/x/slashing/handler_test.go b/x/slashing/handler_test.go index d2ee849cea15..93b760ee56d2 100644 --- a/x/slashing/handler_test.go +++ b/x/slashing/handler_test.go @@ -7,9 +7,9 @@ import ( "time" "github.com/cosmos/cosmos-sdk/testutil/testdata" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -23,7 +23,7 @@ import ( func TestCannotUnjailUnlessJailed(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) @@ -55,7 +55,7 @@ func TestCannotUnjailUnlessJailed(t *testing.T) { func TestCannotUnjailUnlessMeetMinSelfDelegation(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) @@ -94,7 +94,7 @@ func TestCannotUnjailUnlessMeetMinSelfDelegation(t *testing.T) { func TestJailedValidatorDelegations(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Time: time.Unix(0, 0)}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Time: time.Unix(0, 0)}) pks := simapp.CreateTestPubKeys(3) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(20)) @@ -164,7 +164,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := slashing.NewHandler(k) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized slashing message type")) @@ -175,7 +175,7 @@ func TestInvalidMsg(t *testing.T) { func TestHandleAbsentValidator(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Time: time.Unix(0, 0)}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Time: time.Unix(0, 0)}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) @@ -278,7 +278,7 @@ func TestHandleAbsentValidator(t *testing.T) { require.Nil(t, res) // unrevocation should succeed after jail expiration - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(1, 0).Add(app.SlashingKeeper.DowntimeJailDuration(ctx))}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(1, 0).Add(app.SlashingKeeper.DowntimeJailDuration(ctx))}) res, err = slh(ctx, types.NewMsgUnjail(addr)) require.NoError(t, err) require.NotNil(t, res) diff --git a/x/slashing/keeper/grpc_query_test.go b/x/slashing/keeper/grpc_query_test.go index 5b4667907f4d..ef47b26710c1 100644 --- a/x/slashing/keeper/grpc_query_test.go +++ b/x/slashing/keeper/grpc_query_test.go @@ -6,7 +6,7 @@ import ( "time" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -29,7 +29,7 @@ type SlashingTestSuite struct { func (suite *SlashingTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) app.BankKeeper.SetParams(ctx, banktypes.DefaultParams()) diff --git a/x/slashing/keeper/keeper_test.go b/x/slashing/keeper/keeper_test.go index 1a305728e5f8..5231edc79ae1 100644 --- a/x/slashing/keeper/keeper_test.go +++ b/x/slashing/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( func TestUnJailNotBonded(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) p := app.StakingKeeper.GetParams(ctx) p.MaxValidators = 5 @@ -98,7 +98,7 @@ func TestUnJailNotBonded(t *testing.T) { // and that they are not immediately jailed func TestHandleNewValidator(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) valAddrs := simapp.ConvertAddrsToValAddrs(addrDels) @@ -148,7 +148,7 @@ func TestHandleNewValidator(t *testing.T) { func TestHandleAlreadyJailed(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) power := int64(100) amt := sdk.TokensFromConsensusPower(power) @@ -205,7 +205,7 @@ func TestValidatorDippingInAndOut(t *testing.T) { // initial setup // TestParams set the SignedBlocksWindow to 1000 and MaxMissedBlocksPerWindow to 500 app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) params := app.StakingKeeper.GetParams(ctx) diff --git a/x/slashing/keeper/querier_test.go b/x/slashing/keeper/querier_test.go index 1721fe767042..7fa678ed656c 100644 --- a/x/slashing/keeper/querier_test.go +++ b/x/slashing/keeper/querier_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -15,7 +16,7 @@ import ( func TestNewQuerier(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) legacyQuerierCdc := codec.NewAminoCodec(app.Codec()) querier := keeper.NewQuerier(app.SlashingKeeper, legacyQuerierCdc) @@ -33,7 +34,7 @@ func TestQueryParams(t *testing.T) { cdc := codec.New() legacyQuerierCdc := codec.NewAminoCodec(cdc) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) querier := keeper.NewQuerier(app.SlashingKeeper, legacyQuerierCdc) diff --git a/x/slashing/keeper/signing_info_test.go b/x/slashing/keeper/signing_info_test.go index e10df926c605..1b70c83b9712 100644 --- a/x/slashing/keeper/signing_info_test.go +++ b/x/slashing/keeper/signing_info_test.go @@ -5,8 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,7 +14,7 @@ import ( func TestGetSetValidatorSigningInfo(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) info, found := app.SlashingKeeper.GetValidatorSigningInfo(ctx, sdk.ConsAddress(addrDels[0])) @@ -39,7 +38,7 @@ func TestGetSetValidatorSigningInfo(t *testing.T) { func TestGetSetValidatorMissedBlockBitArray(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) missed := app.SlashingKeeper.GetValidatorMissedBlockBitArray(ctx, sdk.ConsAddress(addrDels[0]), 0) @@ -51,7 +50,7 @@ func TestGetSetValidatorMissedBlockBitArray(t *testing.T) { func TestTombstoned(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) require.Panics(t, func() { app.SlashingKeeper.Tombstone(ctx, sdk.ConsAddress(addrDels[0])) }) @@ -75,7 +74,7 @@ func TestTombstoned(t *testing.T) { func TestJailUntil(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) require.Panics(t, func() { app.SlashingKeeper.JailUntil(ctx, sdk.ConsAddress(addrDels[0]), time.Now()) }) diff --git a/x/slashing/simulation/operations_test.go b/x/slashing/simulation/operations_test.go index 0987daadb2ed..b5d0ac334d0b 100644 --- a/x/slashing/simulation/operations_test.go +++ b/x/slashing/simulation/operations_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -83,7 +84,7 @@ func TestSimulateMsgUnjail(t *testing.T) { app.DistrKeeper.SetDelegatorStartingInfo(ctx, validator0.OperatorAddress, val0AccAddress, distrtypes.NewDelegatorStartingInfo(2, sdk.OneDec(), 200)) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgUnjail(app.AccountKeeper, app.BankKeeper, app.SlashingKeeper, app.StakingKeeper) @@ -103,7 +104,7 @@ func TestSimulateMsgUnjail(t *testing.T) { func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, minttypes.DefaultParams()) app.MintKeeper.SetMinter(ctx, minttypes.DefaultInitialMinter()) diff --git a/x/staking/app_test.go b/x/staking/app_test.go index 457003475e14..062413ee978c 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,7 +15,7 @@ import ( ) func checkValidator(t *testing.T, app *simapp.SimApp, addr sdk.ValAddress, expFound bool) types.Validator { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) validator, found := app.StakingKeeper.GetValidator(ctxCheck, addr) require.Equal(t, expFound, found) @@ -26,7 +27,7 @@ func checkDelegation( validatorAddr sdk.ValAddress, expFound bool, expShares sdk.Dec, ) { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) delegation, found := app.StakingKeeper.GetDelegation(ctxCheck, delegatorAddr, validatorAddr) if expFound { require.True(t, found) @@ -68,13 +69,13 @@ func TestStakingMsgs(t *testing.T) { sdk.ValAddress(addr1), priv1.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(), ) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, []uint64{0}, []uint64{0}, true, true, priv1) require.NoError(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin.Sub(bondCoin)}) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) validator := checkValidator(t, app, sdk.ValAddress(addr1), true) @@ -82,14 +83,14 @@ func TestStakingMsgs(t *testing.T) { require.Equal(t, sdk.Bonded, validator.Status) require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // edit the validator description = types.NewDescription("bar_moniker", "", "", "", "") editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{editValidatorMsg}, []uint64{0}, []uint64{1}, true, true, priv1) require.NoError(t, err) @@ -100,7 +101,7 @@ func TestStakingMsgs(t *testing.T) { simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin}) delegateMsg := types.NewMsgDelegate(addr2, sdk.ValAddress(addr1), bondCoin) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{delegateMsg}, []uint64{1}, []uint64{0}, true, true, priv2) require.NoError(t, err) @@ -109,7 +110,7 @@ func TestStakingMsgs(t *testing.T) { // begin unbonding beginUnbondingMsg := types.NewMsgUndelegate(addr2, sdk.ValAddress(addr1), bondCoin) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{beginUnbondingMsg}, []uint64{1}, []uint64{1}, true, true, priv2) require.NoError(t, err) diff --git a/x/staking/common_test.go b/x/staking/common_test.go index a19969df7eaa..e552bf0c8bcf 100644 --- a/x/staking/common_test.go +++ b/x/staking/common_test.go @@ -1,9 +1,9 @@ package staking_test import ( - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -39,7 +39,7 @@ func NewTestMsgDelegate(delAddr sdk.AccAddress, valAddr sdk.ValAddress, amt sdk. // to avoid messing with the hooks. func getBaseSimappWithCustomKeeper() (*codec.Codec, *simapp.SimApp, sdk.Context) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) appCodec := app.AppCodec() diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go index 488fa6b8b5ec..97132af98336 100644 --- a/x/staking/handler_test.go +++ b/x/staking/handler_test.go @@ -5,17 +5,16 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/staking" @@ -1441,7 +1440,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := staking.NewHandler(k) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized staking message type")) diff --git a/x/staking/keeper/common_test.go b/x/staking/keeper/common_test.go index b4c98a011c46..334803520218 100644 --- a/x/staking/keeper/common_test.go +++ b/x/staking/keeper/common_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "testing" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -20,7 +20,7 @@ var ( // to avoid messing with the hooks. func createTestInput() (*codec.Codec, *simapp.SimApp, sdk.Context) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) appCodec := app.AppCodec() diff --git a/x/staking/keeper/historical_info_test.go b/x/staking/keeper/historical_info_test.go index 37e3b7237f58..c4aa2415f5fa 100644 --- a/x/staking/keeper/historical_info_test.go +++ b/x/staking/keeper/historical_info_test.go @@ -4,14 +4,12 @@ import ( "sort" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" - + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" - - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" ) func TestHistoricalInfo(t *testing.T) { @@ -55,11 +53,11 @@ func TestTrackHistoricalInfo(t *testing.T) { // set historical info at 5, 4 which should be pruned // and check that it has been stored - h4 := abci.Header{ + h4 := tmproto.Header{ ChainID: "HelloChain", Height: 4, } - h5 := abci.Header{ + h5 := tmproto.Header{ ChainID: "HelloChain", Height: 5, } @@ -89,7 +87,7 @@ func TestTrackHistoricalInfo(t *testing.T) { app.StakingKeeper.SetLastValidatorPower(ctx, val2.OperatorAddress, 8) // Set Header for BeginBlock context - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 10, } @@ -126,9 +124,9 @@ func TestGetAllHistoricalInfo(t *testing.T) { types.NewValidator(addrVals[1], PKs[1], types.Description{}), } - header1 := abci.Header{ChainID: "HelloChain", Height: 10} - header2 := abci.Header{ChainID: "HelloChain", Height: 11} - header3 := abci.Header{ChainID: "HelloChain", Height: 12} + header1 := tmproto.Header{ChainID: "HelloChain", Height: 10} + header2 := tmproto.Header{ChainID: "HelloChain", Height: 11} + header3 := tmproto.Header{ChainID: "HelloChain", Height: 12} hist1 := types.HistoricalInfo{Header: header1, Valset: valSet} hist2 := types.HistoricalInfo{Header: header2, Valset: valSet} diff --git a/x/staking/keeper/keeper_test.go b/x/staking/keeper/keeper_test.go index b3764d0776d8..43b91e9ea31d 100644 --- a/x/staking/keeper/keeper_test.go +++ b/x/staking/keeper/keeper_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -27,7 +27,7 @@ type KeeperTestSuite struct { func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) querier := keeper.Querier{Keeper: app.StakingKeeper} @@ -36,7 +36,7 @@ func (suite *KeeperTestSuite) SetupTest() { queryClient := types.NewQueryClient(queryHelper) addrs, _, validators := createValidators(ctx, app, []int64{9, 8, 7}) - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 5, } @@ -48,7 +48,7 @@ func (suite *KeeperTestSuite) SetupTest() { } func TestParams(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) expParams := types.DefaultParams() diff --git a/x/staking/keeper/querier_test.go b/x/staking/keeper/querier_test.go index 165589224673..6df37ad32db5 100644 --- a/x/staking/keeper/querier_test.go +++ b/x/staking/keeper/querier_test.go @@ -5,10 +5,9 @@ import ( "testing" "github.com/cosmos/cosmos-sdk/codec" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -33,7 +32,7 @@ func TestNewQuerier(t *testing.T) { app.StakingKeeper.SetValidatorByPowerIndex(ctx, validators[i]) } - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 5, } @@ -721,7 +720,7 @@ func TestQueryHistoricalInfo(t *testing.T) { app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetValidator(ctx, val2) - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 5, } diff --git a/x/staking/keeper/slash_test.go b/x/staking/keeper/slash_test.go index d6f1e06a7e86..6b96e43b0a53 100644 --- a/x/staking/keeper/slash_test.go +++ b/x/staking/keeper/slash_test.go @@ -6,7 +6,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -92,7 +91,7 @@ func TestSlashUnbondingDelegation(t *testing.T) { require.Equal(t, int64(0), slashAmount.Int64()) // after the expiration time, no longer eligible for slashing - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(10, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(10, 0)}) app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) slashAmount = app.StakingKeeper.SlashUnbondingDelegation(ctx, ubd, 0, fraction) require.Equal(t, int64(0), slashAmount.Int64()) @@ -100,7 +99,7 @@ func TestSlashUnbondingDelegation(t *testing.T) { // test valid slash, before expiration timestamp and to which stake contributed notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) oldUnbondedPoolBalances := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress()) - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(0, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(0, 0)}) app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) slashAmount = app.StakingKeeper.SlashUnbondingDelegation(ctx, ubd, 0, fraction) require.Equal(t, int64(5), slashAmount.Int64()) @@ -149,7 +148,7 @@ func TestSlashRedelegation(t *testing.T) { require.Equal(t, int64(0), slashAmount.Int64()) // after the expiration time, no longer eligible for slashing - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(10, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(10, 0)}) app.StakingKeeper.SetRedelegation(ctx, rd) validator, found = app.StakingKeeper.GetValidator(ctx, addrVals[1]) require.True(t, found) @@ -159,7 +158,7 @@ func TestSlashRedelegation(t *testing.T) { balances = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress()) // test valid slash, before expiration timestamp and to which stake contributed - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(0, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(0, 0)}) app.StakingKeeper.SetRedelegation(ctx, rd) validator, found = app.StakingKeeper.GetValidator(ctx, addrVals[1]) require.True(t, found) diff --git a/x/staking/keeper/validator_test.go b/x/staking/keeper/validator_test.go index ce34b0d23439..d507544b81b0 100644 --- a/x/staking/keeper/validator_test.go +++ b/x/staking/keeper/validator_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -1075,7 +1075,7 @@ func TestApplyAndReturnValidatorSetUpdatesBondTransition(t *testing.T) { func TestUpdateValidatorCommission(t *testing.T) { app, ctx, _, addrVals := bootstrapValidatorTest(t, 1000, 20) - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Now().UTC()}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Now().UTC()}) commission1 := types.NewCommissionWithTime( sdk.NewDecWithPrec(1, 1), sdk.NewDecWithPrec(3, 1), diff --git a/x/staking/simulation/operations_test.go b/x/staking/simulation/operations_test.go index 8d2afdfa59af..ff10d321bb6e 100644 --- a/x/staking/simulation/operations_test.go +++ b/x/staking/simulation/operations_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -69,7 +70,7 @@ func TestSimulateMsgCreateValidator(t *testing.T) { accounts := getTestingAccounts(t, r, app, ctx, 3) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgCreateValidator(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -106,7 +107,7 @@ func TestSimulateMsgEditValidator(t *testing.T) { _ = getTestingValidator0(t, app, ctx, accounts) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgEditValidator(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -144,7 +145,7 @@ func TestSimulateMsgDelegate(t *testing.T) { setupValidatorRewards(app, ctx, validator0.OperatorAddress) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgDelegate(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -189,7 +190,7 @@ func TestSimulateMsgUndelegate(t *testing.T) { setupValidatorRewards(app, ctx, validator0.OperatorAddress) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgUndelegate(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -238,7 +239,7 @@ func TestSimulateMsgBeginRedelegate(t *testing.T) { setupValidatorRewards(app, ctx, validator1.OperatorAddress) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgBeginRedelegate(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -263,7 +264,7 @@ func TestSimulateMsgBeginRedelegate(t *testing.T) { func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, minttypes.DefaultParams()) app.MintKeeper.SetMinter(ctx, minttypes.DefaultInitialMinter()) diff --git a/x/staking/spec/01_state.md b/x/staking/spec/01_state.md index 3ee6c7992ebf..c5f7376d7655 100644 --- a/x/staking/spec/01_state.md +++ b/x/staking/spec/01_state.md @@ -290,7 +290,7 @@ the `n` most recent historical info defined by staking module parameter: `Histor ```go type HistoricalInfo struct { - Header abci.Header + Header tmproto.Header ValSet []types.Validator } ``` diff --git a/x/staking/types/historical_info.go b/x/staking/types/historical_info.go index 7af34d13c5e9..51ec219a29cb 100644 --- a/x/staking/types/historical_info.go +++ b/x/staking/types/historical_info.go @@ -3,15 +3,13 @@ package types import ( "sort" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/codec" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) // NewHistoricalInfo will create a historical information struct from header and valset // it will first sort valset before inclusion into historical info -func NewHistoricalInfo(header abci.Header, valSet Validators) HistoricalInfo { +func NewHistoricalInfo(header tmproto.Header, valSet Validators) HistoricalInfo { sort.Sort(valSet) return HistoricalInfo{ diff --git a/x/staking/types/historical_info_test.go b/x/staking/types/historical_info_test.go index 32e149af56a9..91a47f554cb5 100644 --- a/x/staking/types/historical_info_test.go +++ b/x/staking/types/historical_info_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" ) var ( @@ -15,7 +14,7 @@ var ( NewValidator(valAddr2, pk2, Description{}), NewValidator(valAddr3, pk3, Description{}), } - header = abci.Header{ + header = tmproto.Header{ ChainID: "hello", Height: 5, } diff --git a/x/upgrade/abci_test.go b/x/upgrade/abci_test.go index 2f7cbdf3a708..3b2ee331f3f6 100644 --- a/x/upgrade/abci_test.go +++ b/x/upgrade/abci_test.go @@ -8,15 +8,15 @@ import ( "testing" "time" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/module" @@ -52,7 +52,7 @@ func setupTest(height int64, skip map[int64]bool) TestSuite { ) s.keeper = app.UpgradeKeeper - s.ctx = app.BaseApp.NewContext(false, abci.Header{Height: height, Time: time.Now()}) + s.ctx = app.BaseApp.NewContext(false, tmproto.Header{Height: height, Time: time.Now()}) s.module = upgrade.NewAppModule(s.keeper) s.querier = s.module.LegacyQuerierHandler(codec.NewAminoCodec(app.Codec())) diff --git a/x/upgrade/keeper/grpc_query_test.go b/x/upgrade/keeper/grpc_query_test.go index 1ffb0038f6cd..470f22420acb 100644 --- a/x/upgrade/keeper/grpc_query_test.go +++ b/x/upgrade/keeper/grpc_query_test.go @@ -7,8 +7,6 @@ import ( "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -25,7 +23,7 @@ type UpgradeTestSuite struct { func (suite *UpgradeTestSuite) SetupTest() { suite.app = simapp.Setup(false) - suite.ctx = suite.app.BaseApp.NewContext(false, abci.Header{}) + suite.ctx = suite.app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, suite.app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, suite.app.UpgradeKeeper) diff --git a/x/upgrade/types/plan_test.go b/x/upgrade/types/plan_test.go index 57e025a0398d..47ed2ca7ecc1 100644 --- a/x/upgrade/types/plan_test.go +++ b/x/upgrade/types/plan_test.go @@ -6,9 +6,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -179,7 +178,7 @@ func TestShouldExecute(t *testing.T) { for name, tc := range cases { tc := tc // copy to local variable for scopelint t.Run(name, func(t *testing.T) { - ctx := sdk.NewContext(nil, abci.Header{Height: tc.ctxHeight, Time: tc.ctxTime}, false, log.NewNopLogger()) + ctx := sdk.NewContext(nil, tmproto.Header{Height: tc.ctxHeight, Time: tc.ctxTime}, false, log.NewNopLogger()) should := tc.p.ShouldExecute(ctx) assert.Equal(t, tc.expected, should) }) diff --git a/x/upgrade/types/storeloader_test.go b/x/upgrade/types/storeloader_test.go index a77b7593e288..fa7742133e67 100644 --- a/x/upgrade/types/storeloader_test.go +++ b/x/upgrade/types/storeloader_test.go @@ -128,7 +128,7 @@ func TestSetLoader(t *testing.T) { require.Nil(t, err) // "execute" one block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2}}) res := app.Commit() require.NotNil(t, res.Data) From f781527454cb4e466969db44dfdc888fa33faf32 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 30 Jul 2020 13:42:55 +0200 Subject: [PATCH 03/18] use rc --- go.mod | 4 +--- go.sum | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 24f52797f997..b1a5f5c88843 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 github.com/tendermint/iavl v0.14.0 - github.com/tendermint/tendermint v0.34.0-dev1.0.20200714110441-6ccccb0933d4 + github.com/tendermint/tendermint v0.34.0-rc1 github.com/tendermint/tm-db v0.6.0 google.golang.org/grpc v1.30.0 google.golang.org/protobuf v1.24.0 @@ -47,5 +47,3 @@ require ( ) replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.2-alpha.regen.4 - -replace github.com/tendermint/tendermint => ../tendermint diff --git a/go.sum b/go.sum index 99484931fc29..fb416a129b38 100644 --- a/go.sum +++ b/go.sum @@ -171,6 +171,8 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -347,6 +349,7 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= @@ -658,6 +661,7 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20u golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= @@ -756,6 +760,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -784,5 +789,7 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From 11d3f78c05763a3a26be95a500306c7853bf3c3a Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 30 Jul 2020 14:26:03 +0200 Subject: [PATCH 04/18] rc --- crypto/keyring/keyring.go | 2 +- go.sum | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 43631d36f8dd..56ed1f1cabb4 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -16,10 +16,10 @@ import ( "github.com/pkg/errors" "github.com/tendermint/crypto/bcrypt" tmcrypto "github.com/tendermint/tendermint/crypto" - cryptoamino "github.com/tendermint/tendermint/crypto/encoding/amino" "github.com/cosmos/cosmos-sdk/client/input" "github.com/cosmos/cosmos-sdk/crypto" + cryptoamino "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/ledger" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/go.sum b/go.sum index fb416a129b38..6bfab0f668c7 100644 --- a/go.sum +++ b/go.sum @@ -527,6 +527,9 @@ github.com/tendermint/tendermint v0.33.5 h1:jYgRd9ImkzA9iOyhpmgreYsqSB6tpDa6/rXY github.com/tendermint/tendermint v0.33.5/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= github.com/tendermint/tendermint v0.33.6 h1:W4UOsXY4ROJZ3TLLGVVv71VXD4WK2gJRb3gzeced+mg= github.com/tendermint/tendermint v0.33.6/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= +github.com/tendermint/tendermint v0.34.0-dev1.0.20200714110441-6ccccb0933d4/go.mod h1:sMOYRN9Sc+vnasY8HjSLlQx2/kL686dlOXtwcFmqpnE= +github.com/tendermint/tendermint v0.34.0-rc1 h1:DwGGbiqs9iWkWw7pVjVZdx0YhwRhlOhgoCAPf3/p1Ug= +github.com/tendermint/tendermint v0.34.0-rc1/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= github.com/tendermint/tm-db v0.4.1/go.mod h1:JsJ6qzYkCGiGwm5GHl/H5GLI9XLb6qZX7PRe425dHAY= github.com/tendermint/tm-db v0.5.0/go.mod h1:lSq7q5WRR/njf1LnhiZ/lIJHk2S8Y1Zyq5oP/3o9C2U= github.com/tendermint/tm-db v0.5.1 h1:H9HDq8UEA7Eeg13kdYckkgwwkQLBnJGgX4PgLJRhieY= From f98e70a7a9b1d567aa0c78220089a29c245a9495 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 30 Jul 2020 14:28:02 +0200 Subject: [PATCH 05/18] fix import --- x/staking/keeper/querier_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/staking/keeper/querier_test.go b/x/staking/keeper/querier_test.go index 6df37ad32db5..f38833d296f9 100644 --- a/x/staking/keeper/querier_test.go +++ b/x/staking/keeper/querier_test.go @@ -4,11 +4,11 @@ import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/codec" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/keeper" From 331ba70a4734e917534dde2887e1b3ca2fc39e2f Mon Sep 17 00:00:00 2001 From: Marko Date: Thu, 30 Jul 2020 16:42:37 +0200 Subject: [PATCH 06/18] Merge PR #6893: fix key imports --- client/debug/main.go | 4 ++-- crypto/codec/amino.go | 24 ++++++++++++------------ crypto/keyring/types_test.go | 2 +- crypto/ledger/ledger_mock.go | 2 +- crypto/ledger/ledger_secp256k1.go | 4 ++-- crypto/types/multisig/codec.go | 12 ++++++------ go.sum | 1 - std/pubkey.go | 24 ++++++++++++------------ types/address_bench_test.go | 4 ++-- types/address_test.go | 14 +++++++------- x/auth/ante/ante_test.go | 2 +- x/auth/ante/sigverify.go | 6 +++--- x/evidence/keeper/keeper_test.go | 4 ++-- 13 files changed, 51 insertions(+), 52 deletions(-) diff --git a/client/debug/main.go b/client/debug/main.go index eb2a3ecb2f5f..782531745b4f 100644 --- a/client/debug/main.go +++ b/client/debug/main.go @@ -34,7 +34,7 @@ func Cmd() *cobra.Command { // to decode the pubkey string from hex, base64, and finally bech32. If all // encodings fail, an error is returned. func getPubKeyFromString(pkstr string) (crypto.PubKey, error) { - var pubKey ed25519.PubKeyEd25519 + var pubKey ed25519.PubKey bz, err := hex.DecodeString(pkstr) if err == nil { @@ -85,7 +85,7 @@ $ %s debug pubkey cosmos1e0jnq2sun3dzjh8p2xq95kk0expwmd7shwjpfg return err } - edPK, ok := pk.(ed25519.PubKeyEd25519) + edPK, ok := pk.(ed25519.PubKey) if !ok { return fmt.Errorf("invalid pubkey type; expected ED25519") } diff --git a/crypto/codec/amino.go b/crypto/codec/amino.go index 9ef14fe93d8d..13a311361e88 100644 --- a/crypto/codec/amino.go +++ b/crypto/codec/amino.go @@ -21,22 +21,22 @@ func init() { // codec. func RegisterCrypto(cdc *codec.Codec) { cdc.RegisterInterface((*crypto.PubKey)(nil), nil) - cdc.RegisterConcrete(ed25519.PubKeyEd25519{}, - ed25519.PubKeyAminoName, nil) - cdc.RegisterConcrete(sr25519.PubKeySr25519{}, - sr25519.PubKeyAminoName, nil) - cdc.RegisterConcrete(secp256k1.PubKeySecp256k1{}, - secp256k1.PubKeyAminoName, nil) + cdc.RegisterConcrete(ed25519.PubKey{}, + ed25519.PubKeyName, nil) + cdc.RegisterConcrete(sr25519.PubKey{}, + sr25519.PubKeyName, nil) + cdc.RegisterConcrete(secp256k1.PubKey{}, + secp256k1.PubKeyName, nil) cdc.RegisterConcrete(multisig.PubKeyMultisigThreshold{}, multisig.PubKeyAminoRoute, nil) cdc.RegisterInterface((*crypto.PrivKey)(nil), nil) - cdc.RegisterConcrete(ed25519.PrivKeyEd25519{}, - ed25519.PrivKeyAminoName, nil) - cdc.RegisterConcrete(sr25519.PrivKeySr25519{}, - sr25519.PrivKeyAminoName, nil) - cdc.RegisterConcrete(secp256k1.PrivKeySecp256k1{}, - secp256k1.PrivKeyAminoName, nil) + cdc.RegisterConcrete(ed25519.PrivKey{}, + ed25519.PrivKeyName, nil) + cdc.RegisterConcrete(sr25519.PrivKey{}, + sr25519.PrivKeyName, nil) + cdc.RegisterConcrete(secp256k1.PrivKey{}, + secp256k1.PrivKeyName, nil) } // PrivKeyFromBytes unmarshals private key bytes and returns a PrivKey diff --git a/crypto/keyring/types_test.go b/crypto/keyring/types_test.go index cf935d906c85..0ee5c75c431b 100644 --- a/crypto/keyring/types_test.go +++ b/crypto/keyring/types_test.go @@ -12,7 +12,7 @@ import ( ) func Test_writeReadLedgerInfo(t *testing.T) { - var tmpKey secp256k1.PubKeySecp256k1 + var tmpKey secp256k1.PubKey bz, _ := hex.DecodeString("035AD6810A47F073553FF30D2FCC7E0D3B1C0B74B61A1AAA2582344037151E143A") copy(tmpKey[:], bz) diff --git a/crypto/ledger/ledger_mock.go b/crypto/ledger/ledger_mock.go index 9af22bb7fb82..16b44745d46b 100644 --- a/crypto/ledger/ledger_mock.go +++ b/crypto/ledger/ledger_mock.go @@ -77,7 +77,7 @@ func (mock LedgerSECP256K1Mock) GetAddressPubKeySECP256K1(derivationPath []uint3 return nil, "", fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKeySecp256k1 + var compressedPublicKey tmsecp256k1.PubKey copy(compressedPublicKey[:], cmp.SerializeCompressed()) // Generate the bech32 addr using existing tmcrypto/etc. diff --git a/crypto/ledger/ledger_secp256k1.go b/crypto/ledger/ledger_secp256k1.go index f25cdff3b830..23dc12be9c80 100644 --- a/crypto/ledger/ledger_secp256k1.go +++ b/crypto/ledger/ledger_secp256k1.go @@ -244,7 +244,7 @@ func getPubKeyUnsafe(device SECP256K1, path hd.BIP44Params) (tmcrypto.PubKey, er return nil, fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKeySecp256k1 + var compressedPublicKey tmsecp256k1.PubKey copy(compressedPublicKey[:], cmp.SerializeCompressed()) return compressedPublicKey, nil @@ -268,7 +268,7 @@ func getPubKeyAddrSafe(device SECP256K1, path hd.BIP44Params, hrp string) (tmcry return nil, "", fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKeySecp256k1 + var compressedPublicKey tmsecp256k1.PubKey copy(compressedPublicKey[:], cmp.SerializeCompressed()) return compressedPublicKey, addr, nil diff --git a/crypto/types/multisig/codec.go b/crypto/types/multisig/codec.go index 970601dc2bf9..a18c6968a72a 100644 --- a/crypto/types/multisig/codec.go +++ b/crypto/types/multisig/codec.go @@ -21,10 +21,10 @@ func init() { Cdc.RegisterInterface((*crypto.PubKey)(nil), nil) Cdc.RegisterConcrete(PubKeyMultisigThreshold{}, PubKeyAminoRoute, nil) - Cdc.RegisterConcrete(ed25519.PubKeyEd25519{}, - ed25519.PubKeyAminoName, nil) - Cdc.RegisterConcrete(sr25519.PubKeySr25519{}, - sr25519.PubKeyAminoName, nil) - Cdc.RegisterConcrete(secp256k1.PubKeySecp256k1{}, - secp256k1.PubKeyAminoName, nil) + Cdc.RegisterConcrete(ed25519.PubKey{}, + ed25519.PubKeyName, nil) + Cdc.RegisterConcrete(sr25519.PubKey{}, + sr25519.PubKeyName, nil) + Cdc.RegisterConcrete(secp256k1.PubKey{}, + secp256k1.PubKeyName, nil) } diff --git a/go.sum b/go.sum index 6bfab0f668c7..02ee658e6851 100644 --- a/go.sum +++ b/go.sum @@ -171,7 +171,6 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= diff --git a/std/pubkey.go b/std/pubkey.go index 35d72bbc731e..0069fd5f0aeb 100644 --- a/std/pubkey.go +++ b/std/pubkey.go @@ -23,27 +23,27 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er switch key := key.Sum.(type) { case *types.PublicKey_Secp256K1: n := len(key.Secp256K1) - if n != secp256k1.PubKeySecp256k1Size { + if n != secp256k1.PubKeySize { return nil, fmt.Errorf("wrong length %d for secp256k1 public key", n) } - var res secp256k1.PubKeySecp256k1 - copy(res[:], key.Secp256K1) + res := make(secp256k1.PubKey, secp256k1.PubKeySize) + copy(res, key.Secp256K1) return res, nil case *types.PublicKey_Ed25519: n := len(key.Ed25519) - if n != ed255192.PubKeyEd25519Size { + if n != ed255192.PubKeySize { return nil, fmt.Errorf("wrong length %d for ed25519 public key", n) } - var res ed255192.PubKeyEd25519 - copy(res[:], key.Ed25519) + res := make(ed255192.PubKey, ed255192.PubKeySize) + copy(res, key.Ed25519) return res, nil case *types.PublicKey_Sr25519: n := len(key.Sr25519) - if n != sr25519.PubKeySr25519Size { + if n != sr25519.PubKeySize { return nil, fmt.Errorf("wrong length %d for sr25519 public key", n) } - var res sr25519.PubKeySr25519 - copy(res[:], key.Sr25519) + res := make(sr25519.PubKey, sr25519.PubKeySize) + copy(res, key.Sr25519) return res, nil case *types.PublicKey_Multisig: @@ -66,11 +66,11 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er // Encode implements the PublicKeyCodec.Encode method func (cdc DefaultPublicKeyCodec) Encode(key crypto.PubKey) (*types.PublicKey, error) { switch key := key.(type) { - case secp256k1.PubKeySecp256k1: + case secp256k1.PubKey: return &types.PublicKey{Sum: &types.PublicKey_Secp256K1{Secp256K1: key[:]}}, nil - case ed255192.PubKeyEd25519: + case ed255192.PubKey: return &types.PublicKey{Sum: &types.PublicKey_Ed25519{Ed25519: key[:]}}, nil - case sr25519.PubKeySr25519: + case sr25519.PubKey: return &types.PublicKey{Sum: &types.PublicKey_Sr25519{Sr25519: key[:]}}, nil case multisig.PubKeyMultisigThreshold: pubKeys := key.PubKeys diff --git a/types/address_bench_test.go b/types/address_bench_test.go index 1bb0d15f6153..205954280774 100644 --- a/types/address_bench_test.go +++ b/types/address_bench_test.go @@ -13,7 +13,7 @@ import ( ) func BenchmarkBech32ifyPubKey(b *testing.B) { - var pk ed25519.PubKeyEd25519 + var pk ed25519.PubKey rng := rand.New(rand.NewSource(time.Now().Unix())) b.ResetTimer() @@ -29,7 +29,7 @@ func BenchmarkBech32ifyPubKey(b *testing.B) { } func BenchmarkGetPubKeyFromBech32(b *testing.B) { - var pk ed25519.PubKeyEd25519 + var pk ed25519.PubKey rng := rand.New(rand.NewSource(time.Now().Unix())) b.ResetTimer() diff --git a/types/address_test.go b/types/address_test.go index 8a928a43c923..f8331c4fc689 100644 --- a/types/address_test.go +++ b/types/address_test.go @@ -58,7 +58,7 @@ func TestEmptyAddresses(t *testing.T) { } func TestRandBech32PubkeyConsistency(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 1000; i++ { rand.Read(pub[:]) @@ -116,7 +116,7 @@ func TestYAMLMarshalers(t *testing.T) { } func TestRandBech32AccAddrConsistency(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 1000; i++ { rand.Read(pub[:]) @@ -154,7 +154,7 @@ func TestRandBech32AccAddrConsistency(t *testing.T) { } func TestValAddr(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 20; i++ { rand.Read(pub[:]) @@ -194,7 +194,7 @@ func TestValAddr(t *testing.T) { } func TestConsAddress(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 20; i++ { rand.Read(pub[:]) @@ -243,7 +243,7 @@ func RandString(n int) string { } func TestConfiguredPrefix(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for length := 1; length < 10; length++ { for times := 1; times < 20; times++ { rand.Read(pub[:]) @@ -298,8 +298,8 @@ func TestConfiguredPrefix(t *testing.T) { } func TestAddressInterface(t *testing.T) { - var pub ed25519.PubKeyEd25519 - rand.Read(pub[:]) + pub := make(ed25519.PubKey, ed25519.PubKeySize) + rand.Read(pub) addrs := []types.Address{ types.ConsAddress(pub.Address()), diff --git a/x/auth/ante/ante_test.go b/x/auth/ante/ante_test.go index d3165d52618c..e5c701c8bae3 100644 --- a/x/auth/ante/ante_test.go +++ b/x/auth/ante/ante_test.go @@ -1002,7 +1002,7 @@ func (suite *AnteTestSuite) TestCustomSignatureVerificationGasConsumer() { // setup an ante handler that only accepts PubKeyEd25519 suite.anteHandler = ante.NewAnteHandler(suite.app.AccountKeeper, suite.app.BankKeeper, func(meter sdk.GasMeter, sig signing.SignatureV2, params types.Params) error { switch pubkey := sig.PubKey.(type) { - case ed25519.PubKeyEd25519: + case ed25519.PubKey: meter.ConsumeGas(params.SigVerifyCostED25519, "ante verify: ed25519") return nil default: diff --git a/x/auth/ante/sigverify.go b/x/auth/ante/sigverify.go index a33d5fb0fc83..e8be3934d5f5 100644 --- a/x/auth/ante/sigverify.go +++ b/x/auth/ante/sigverify.go @@ -20,7 +20,7 @@ import ( var ( // simulation signature values used to estimate gas consumption - simSecp256k1Pubkey secp256k1.PubKeySecp256k1 + simSecp256k1Pubkey secp256k1.PubKey simSecp256k1Sig [64]byte _ authsigning.SigVerifiableTx = (*types.StdTx)(nil) // assert StdTx implements SigVerifiableTx @@ -320,11 +320,11 @@ func DefaultSigVerificationGasConsumer( pubkey := sig.PubKey switch pubkey := pubkey.(type) { - case ed25519.PubKeyEd25519: + case ed25519.PubKey: meter.ConsumeGas(params.SigVerifyCostED25519, "ante verify: ed25519") return sdkerrors.Wrap(sdkerrors.ErrInvalidPubKey, "ED25519 public keys are unsupported") - case secp256k1.PubKeySecp256k1: + case secp256k1.PubKey: meter.ConsumeGas(params.SigVerifyCostSecp256k1, "ante verify: secp256k1") return nil diff --git a/x/evidence/keeper/keeper_test.go b/x/evidence/keeper/keeper_test.go index efaeba52ddfb..58dcd25c3d25 100644 --- a/x/evidence/keeper/keeper_test.go +++ b/x/evidence/keeper/keeper_test.go @@ -45,8 +45,8 @@ func newPubKey(pk string) (res crypto.PubKey) { panic(err) } - var pubkey ed25519.PubKey - copy(pubkey[:], pkBytes) + pubkey := make(ed25519.PubKey, ed25519.PubKeySize) + copy(pubkey, pkBytes) return pubkey } From 96d8a51954c8b0295b2e0b53c372c31ba934b734 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 30 Jul 2020 16:44:47 +0200 Subject: [PATCH 07/18] fix rc2 --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index b1a5f5c88843..e32c44133420 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 github.com/tendermint/iavl v0.14.0 - github.com/tendermint/tendermint v0.34.0-rc1 + github.com/tendermint/tendermint v0.34.0-rc2 github.com/tendermint/tm-db v0.6.0 google.golang.org/grpc v1.30.0 google.golang.org/protobuf v1.24.0 diff --git a/go.sum b/go.sum index 02ee658e6851..7757c4c3188e 100644 --- a/go.sum +++ b/go.sum @@ -529,6 +529,8 @@ github.com/tendermint/tendermint v0.33.6/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcE github.com/tendermint/tendermint v0.34.0-dev1.0.20200714110441-6ccccb0933d4/go.mod h1:sMOYRN9Sc+vnasY8HjSLlQx2/kL686dlOXtwcFmqpnE= github.com/tendermint/tendermint v0.34.0-rc1 h1:DwGGbiqs9iWkWw7pVjVZdx0YhwRhlOhgoCAPf3/p1Ug= github.com/tendermint/tendermint v0.34.0-rc1/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= +github.com/tendermint/tendermint v0.34.0-rc2 h1:kYyHum2Ys05qv0i5j/X47icRSO1zVbQrvVK6hjllQnY= +github.com/tendermint/tendermint v0.34.0-rc2/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= github.com/tendermint/tm-db v0.4.1/go.mod h1:JsJ6qzYkCGiGwm5GHl/H5GLI9XLb6qZX7PRe425dHAY= github.com/tendermint/tm-db v0.5.0/go.mod h1:lSq7q5WRR/njf1LnhiZ/lIJHk2S8Y1Zyq5oP/3o9C2U= github.com/tendermint/tm-db v0.5.1 h1:H9HDq8UEA7Eeg13kdYckkgwwkQLBnJGgX4PgLJRhieY= From 0dcc665c7ea49be6796a582fa7e4d49b5a045e22 Mon Sep 17 00:00:00 2001 From: Marko Date: Thu, 30 Jul 2020 20:40:40 +0200 Subject: [PATCH 08/18] tendermint: update 3 (#6899) --- Makefile | 39 +- baseapp/abci.go | 16 + baseapp/params.go | 5 +- go.mod | 4 +- go.sum | 13 +- proto/cosmos/cosmos.proto | 36 +- proto/cosmos/staking/staking.proto | 41 +- proto/ibc/commitment/commitment.proto | 4 +- store/cache/cache_test.go | 8 +- store/iavl/store.go | 2 +- store/iavl/store_test.go | 2 +- store/iavl/tree.go | 2 +- store/iavl/tree_test.go | 2 +- store/prefix/store_test.go | 9 +- store/rootmulti/store.go | 2 +- third_party/proto/tendermint/abci/types.proto | 396 +++++ .../proto/tendermint/abci/types/types.proto | 346 ---- .../proto/tendermint/crypto/keys.proto | 24 + .../tendermint/crypto/merkle/merkle.proto | 31 - .../proto/tendermint/crypto/proof.proto | 41 + .../proto/tendermint/libs/bits/types.proto | 9 + .../proto/tendermint/libs/kv/types.proto | 29 - .../proto/tendermint/types/evidence.proto | 65 + .../proto/tendermint/types/params.proto | 86 + .../proto/tendermint/types/types.proto | 156 ++ .../proto/tendermint/version/types.proto | 24 + types/cosmos.pb.go | 109 +- types/events.go | 5 +- x/bank/keeper/keeper_test.go | 33 +- x/ibc/23-commitment/types/commitment.pb.go | 72 +- x/staking/types/staking.pb.go | 1558 +++++++++-------- 31 files changed, 1843 insertions(+), 1326 deletions(-) create mode 100644 third_party/proto/tendermint/abci/types.proto delete mode 100644 third_party/proto/tendermint/abci/types/types.proto create mode 100644 third_party/proto/tendermint/crypto/keys.proto delete mode 100644 third_party/proto/tendermint/crypto/merkle/merkle.proto create mode 100644 third_party/proto/tendermint/crypto/proof.proto create mode 100644 third_party/proto/tendermint/libs/bits/types.proto delete mode 100644 third_party/proto/tendermint/libs/kv/types.proto create mode 100644 third_party/proto/tendermint/types/evidence.proto create mode 100644 third_party/proto/tendermint/types/params.proto create mode 100644 third_party/proto/tendermint/types/types.proto create mode 100644 third_party/proto/tendermint/version/types.proto diff --git a/Makefile b/Makefile index 9121980a4de0..b985b3f4d45a 100644 --- a/Makefile +++ b/Makefile @@ -335,13 +335,16 @@ proto-check-breaking-docker: @$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master .PHONY: proto-check-breaking-ci -TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.33.1 +TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc2/proto/tendermint GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master -TM_KV_TYPES = third_party/proto/tendermint/libs/kv -TM_MERKLE_TYPES = third_party/proto/tendermint/crypto/merkle -TM_ABCI_TYPES = third_party/proto/tendermint/abci/types +TM_CRYPTO_TYPES = third_party/proto/tendermint/crypto +TM_ABCI_TYPES = third_party/proto/tendermint/abci +TM_TYPES = third_party/proto/tendermint/types +TM_VERSION = third_party/proto/tendermint/version +TM_LIBS = third_party/proto/tendermint/libs/bits + GOGO_PROTO_TYPES = third_party/proto/gogoproto COSMOS_PROTO_TYPES = third_party/proto/cosmos_proto @@ -357,18 +360,22 @@ proto-update-deps: ## (which is the standard Buf.build FILE_LAYOUT) ## Issue link: https://github.com/tendermint/tendermint/issues/5021 @mkdir -p $(TM_ABCI_TYPES) - @curl -sSL $(TM_URL)/abci/types/types.proto > $(TM_ABCI_TYPES)/types.proto - @sed -i '' '7 s|third_party/proto/||g' $(TM_ABCI_TYPES)/types.proto - @sed -i '' '8 s|crypto/merkle/merkle.proto|tendermint/crypto/merkle/merkle.proto|g' $(TM_ABCI_TYPES)/types.proto - @sed -i '' '9 s|libs/kv/types.proto|tendermint/libs/kv/types.proto|g' $(TM_ABCI_TYPES)/types.proto - - @mkdir -p $(TM_KV_TYPES) - @curl -sSL $(TM_URL)/libs/kv/types.proto > $(TM_KV_TYPES)/types.proto - @sed -i '' '5 s|third_party/proto/||g' $(TM_KV_TYPES)/types.proto - - @mkdir -p $(TM_MERKLE_TYPES) - @curl -sSL $(TM_URL)/crypto/merkle/merkle.proto > $(TM_MERKLE_TYPES)/merkle.proto - @sed -i '' '7 s|third_party/proto/||g' $(TM_MERKLE_TYPES)/merkle.proto + @curl -sSL $(TM_URL)/abci/types.proto > $(TM_ABCI_TYPES)/types.proto + + @mkdir -p $(TM_VERSION) + @curl -sSL $(TM_URL)/version/types.proto > $(TM_VERSION)/types.proto + + @mkdir -p $(TM_TYPES) + @curl -sSL $(TM_URL)/types/types.proto > $(TM_TYPES)/types.proto + @curl -sSL $(TM_URL)/types/evidence.proto > $(TM_TYPES)/evidence.proto + @curl -sSL $(TM_URL)/types/params.proto > $(TM_TYPES)/params.proto + + @mkdir -p $(TM_CRYPTO_TYPES) + @curl -sSL $(TM_URL)/crypto/proof.proto > $(TM_CRYPTO_TYPES)/proof.proto + @curl -sSL $(TM_URL)/crypto/keys.proto > $(TM_CRYPTO_TYPES)/keys.proto + + @mkdir -p $(TM_LIBS) + @curl -sSL $(TM_URL)/libs/bits/types.proto > $(TM_LIBS)/types.proto .PHONY: proto-all proto-gen proto-lint proto-check-breaking proto-update-deps diff --git a/baseapp/abci.go b/baseapp/abci.go index 9a1722c49eb8..cd384447406a 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -555,3 +555,19 @@ func splitPath(requestPath string) (path []string) { return path } + +func (app *BaseApp) ListSnapshots(abci.RequestListSnapshots) abci.ResponseListSnapshots { + return abci.ResponseListSnapshots{} +} + +func (app *BaseApp) OfferSnapshot(abci.RequestOfferSnapshot) abci.ResponseOfferSnapshot { + return abci.ResponseOfferSnapshot{} +} + +func (app *BaseApp) LoadSnapshotChunk(abci.RequestLoadSnapshotChunk) abci.ResponseLoadSnapshotChunk { + return abci.ResponseLoadSnapshotChunk{} +} + +func (app *BaseApp) ApplySnapshotChunk(abci.RequestApplySnapshotChunk) abci.ResponseApplySnapshotChunk { + return abci.ResponseApplySnapshotChunk{} +} diff --git a/baseapp/params.go b/baseapp/params.go index 832397fb81e9..a49145fb1418 100644 --- a/baseapp/params.go +++ b/baseapp/params.go @@ -5,6 +5,7 @@ import ( "fmt" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -49,7 +50,7 @@ func ValidateBlockParams(i interface{}) error { // ValidateEvidenceParams defines a stateless validation on EvidenceParams. This // function is called whenever the parameters are updated or stored. func ValidateEvidenceParams(i interface{}) error { - v, ok := i.(abci.EvidenceParams) + v, ok := i.(tmproto.EvidenceParams) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } @@ -68,7 +69,7 @@ func ValidateEvidenceParams(i interface{}) error { // ValidateValidatorParams defines a stateless validation on ValidatorParams. This // function is called whenever the parameters are updated or stored. func ValidateValidatorParams(i interface{}) error { - v, ok := i.(abci.ValidatorParams) + v, ok := i.(tmproto.ValidatorParams) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } diff --git a/go.mod b/go.mod index 3db9690c63e6..b60fafd1b5bb 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/confio/ics23-iavl v0.6.0 github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3 github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d - github.com/cosmos/iavl v0.13.4-0.20200714154344-89524cdc51be + github.com/cosmos/iavl v0.15.0-rc1 github.com/cosmos/ledger-cosmos-go v0.11.1 github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 github.com/gibson042/canonicaljson-go v1.0.3 @@ -38,7 +38,7 @@ require ( github.com/tendermint/btcd v0.1.1 github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 - github.com/tendermint/iavl v0.14.0 + github.com/tendermint/iavl v0.14.0 // indirect github.com/tendermint/tendermint v0.34.0-rc2 github.com/tendermint/tm-db v0.6.0 google.golang.org/grpc v1.30.0 diff --git a/go.sum b/go.sum index 04aa4d0d53ac..a37e186e999a 100644 --- a/go.sum +++ b/go.sum @@ -86,8 +86,6 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE github.com/confio/ics23-iavl v0.6.0 h1:vVRCuVaP38FCw1kTeEdFuGuiY+2vAGTBQoH7Zxkq/ws= github.com/confio/ics23-iavl v0.6.0/go.mod h1:mmXAxD1vWoO0VP8YHu6mM1QHGv71NQqa1iSVm4HeKcY= github.com/confio/ics23/go v0.0.0-20200323120010-7d9a00f0a2fa/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= -github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465 h1:tyK54ttJ14HaHaKjB6sQqkZaUSe/LUXKHjfgJNtcj20= -github.com/confio/ics23/go v0.0.0-20200604202538-6e2c36a74465/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3 h1:h/HM69qj1llEyq9N8+2sm6HfWsE7P9SFyl4CM2hyK98= github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -101,7 +99,8 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -github.com/cosmos/iavl v0.13.4-0.20200714154344-89524cdc51be/go.mod h1:A9QZVVJuZUBVkvuJQ60QXjRGyxBmHvsXC7ExnwB8wWs= +github.com/cosmos/iavl v0.15.0-rc1 h1:cYMPAxu5xpGPhGYvGlpeCmgmgH7oY+kebZm2oHfh2nE= +github.com/cosmos/iavl v0.15.0-rc1/go.mod h1:qFTkoCC00sBKWCG3Ws8GAUaYR1jIOtwNZ9p8uFOu4Jo= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= @@ -171,9 +170,8 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -525,11 +523,6 @@ github.com/tendermint/tendermint v0.33.2 h1:NzvRMTuXJxqSsFed2J7uHmMU5N1CVzSpfi3n github.com/tendermint/tendermint v0.33.2/go.mod h1:25DqB7YvV1tN3tHsjWoc2vFtlwICfrub9XO6UBO+4xk= github.com/tendermint/tendermint v0.33.5 h1:jYgRd9ImkzA9iOyhpmgreYsqSB6tpDa6/rXYPb8HKE8= github.com/tendermint/tendermint v0.33.5/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= -github.com/tendermint/tendermint v0.33.6 h1:W4UOsXY4ROJZ3TLLGVVv71VXD4WK2gJRb3gzeced+mg= -github.com/tendermint/tendermint v0.33.6/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= -github.com/tendermint/tendermint v0.34.0-dev1.0.20200714110441-6ccccb0933d4/go.mod h1:sMOYRN9Sc+vnasY8HjSLlQx2/kL686dlOXtwcFmqpnE= -github.com/tendermint/tendermint v0.34.0-rc1 h1:DwGGbiqs9iWkWw7pVjVZdx0YhwRhlOhgoCAPf3/p1Ug= -github.com/tendermint/tendermint v0.34.0-rc1/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= github.com/tendermint/tendermint v0.34.0-rc2 h1:kYyHum2Ys05qv0i5j/X47icRSO1zVbQrvVK6hjllQnY= github.com/tendermint/tendermint v0.34.0-rc2/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= github.com/tendermint/tm-db v0.4.1/go.mod h1:JsJ6qzYkCGiGwm5GHl/H5GLI9XLb6qZX7PRe425dHAY= diff --git a/proto/cosmos/cosmos.proto b/proto/cosmos/cosmos.proto index 595d23c5f2bb..0b02a559d172 100644 --- a/proto/cosmos/cosmos.proto +++ b/proto/cosmos/cosmos.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package cosmos; import "gogoproto/gogo.proto"; -import "tendermint/abci/types/types.proto"; +import "tendermint/abci/types.proto"; import "google/protobuf/any.proto"; option go_package = "github.com/cosmos/cosmos-sdk/types"; @@ -70,7 +70,7 @@ message Result { // Events contains a slice of Event objects that were emitted during message or // handler execution. - repeated tendermint.abci.types.Event events = 3 [(gogoproto.nullable) = false]; + repeated tendermint.abci.Event events = 3 [(gogoproto.nullable) = false]; } // SimulationResponse defines the response generated when a transaction is @@ -101,18 +101,18 @@ message TxData { message TxResponse { option (gogoproto.goproto_getters) = false; - int64 height = 1; - string txhash = 2 [(gogoproto.customname) = "TxHash"]; - string codespace = 3; - uint32 code = 4; - string data = 5; - string raw_log = 6; - repeated ABCIMessageLog logs = 7 [(gogoproto.castrepeated) = "ABCIMessageLogs", (gogoproto.nullable) = false]; - string info = 8; - int64 gas_wanted = 9; - int64 gas_used = 10; - google.protobuf.Any tx = 11; - string timestamp = 12; + int64 height = 1; + string txhash = 2 [(gogoproto.customname) = "TxHash"]; + string codespace = 3; + uint32 code = 4; + string data = 5; + string raw_log = 6; + repeated ABCIMessageLog logs = 7 [(gogoproto.castrepeated) = "ABCIMessageLogs", (gogoproto.nullable) = false]; + string info = 8; + int64 gas_wanted = 9; + int64 gas_used = 10; + google.protobuf.Any tx = 11; + string timestamp = 12; } // ABCIMessageLog defines a structure containing an indexed tx ABCI message log. @@ -120,7 +120,7 @@ message ABCIMessageLog { option (gogoproto.stringer) = true; uint32 msg_index = 1; - string log = 2; + string log = 2; // Events contains a slice of Event objects that were emitted during some // execution. @@ -132,13 +132,13 @@ message ABCIMessageLog { message StringEvent { option (gogoproto.stringer) = true; - string type = 1; + string type = 1; repeated Attribute attributes = 2 [(gogoproto.nullable) = false]; } // Attribute defines an attribute wrapper where the key and value are // strings instead of raw bytes. message Attribute { - string key = 1; + string key = 1; string value = 2; -} \ No newline at end of file +} diff --git a/proto/cosmos/staking/staking.proto b/proto/cosmos/staking/staking.proto index d375ff8f21d5..b8b3aa56988b 100644 --- a/proto/cosmos/staking/staking.proto +++ b/proto/cosmos/staking/staking.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package cosmos.staking; import "gogoproto/gogo.proto"; -import "tendermint/abci/types/types.proto"; +import "tendermint/types/types.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.proto"; import "cosmos/cosmos.proto"; @@ -28,7 +28,7 @@ message MsgCreateValidator { (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ValAddress", (gogoproto.moretags) = "yaml:\"validator_address\"" ]; - string pubkey = 6; + string pubkey = 6; cosmos.Coin value = 7 [(gogoproto.nullable) = false]; } @@ -114,8 +114,8 @@ message MsgUndelegate { message HistoricalInfo { option (gogoproto.equal) = true; - tendermint.abci.types.Header header = 1 [(gogoproto.nullable) = false]; - repeated Validator valset = 2 [(gogoproto.nullable) = false]; + tendermint.types.Header header = 1 [(gogoproto.nullable) = false]; + repeated Validator valset = 2 [(gogoproto.nullable) = false]; } // CommissionRates defines the initial commission rates to be used for creating @@ -145,8 +145,8 @@ message Commission { option (gogoproto.equal) = true; option (gogoproto.goproto_stringer) = false; - CommissionRates commission_rates = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; - google.protobuf.Timestamp update_time = 2 [ + CommissionRates commission_rates = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp update_time = 2 [ (gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"update_time\"" @@ -183,8 +183,8 @@ message Validator { ]; string consensus_pubkey = 2 [(gogoproto.moretags) = "yaml:\"consensus_pubkey\""]; bool jailed = 3; - int32 status = 4 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.BondStatus"]; - string tokens = 5 [ + int32 status = 4 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.BondStatus"]; + string tokens = 5 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false ]; @@ -193,9 +193,9 @@ message Validator { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; - Description description = 7 [(gogoproto.nullable) = false]; - int64 unbonding_height = 8 [(gogoproto.moretags) = "yaml:\"unbonding_height\""]; - google.protobuf.Timestamp unbonding_time = 9 [ + Description description = 7 [(gogoproto.nullable) = false]; + int64 unbonding_height = 8 [(gogoproto.moretags) = "yaml:\"unbonding_height\""]; + google.protobuf.Timestamp unbonding_time = 9 [ (gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"unbonding_time\"" @@ -395,10 +395,10 @@ message RedelegationEntryResponse { option (gogoproto.equal) = true; RedelegationEntry redelegation_entry = 1 [(gogoproto.nullable) = false]; - string balance = 4 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (gogoproto.nullable) = false - ]; + string balance = 4 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false + ]; } // RedelegationResponse is equivalent to a Redelegation except that its entries @@ -407,20 +407,19 @@ message RedelegationEntryResponse { message RedelegationResponse { option (gogoproto.equal) = true; - Redelegation redelegation = 1 [(gogoproto.nullable) = false]; - repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false]; + Redelegation redelegation = 1 [(gogoproto.nullable) = false]; + repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false]; } // Pool - tracking bonded and not-bonded token supply of the bond denomination message Pool { option (gogoproto.description) = true; - option (gogoproto.equal) = true; - string not_bonded_tokens = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + option (gogoproto.equal) = true; + string not_bonded_tokens = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.jsontag) = "not_bonded_tokens", (gogoproto.nullable) = false]; - string bonded_tokens = 2 [(gogoproto.jsontag) = "bonded_tokens", + string bonded_tokens = 2 [(gogoproto.jsontag) = "bonded_tokens", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"bonded_tokens\""]; } - diff --git a/proto/ibc/commitment/commitment.proto b/proto/ibc/commitment/commitment.proto index 99062d4f1c02..0c550fbb9a1c 100644 --- a/proto/ibc/commitment/commitment.proto +++ b/proto/ibc/commitment/commitment.proto @@ -4,7 +4,7 @@ package ibc.commitment; option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"; import "gogoproto/gogo.proto"; -import "tendermint/crypto/merkle/merkle.proto"; +import "tendermint/crypto/proof.proto"; // MerkleRoot defines a merkle root hash. // In the Cosmos SDK, the AppHash of a block header becomes the root. @@ -38,7 +38,7 @@ message MerklePath { message MerkleProof { option (gogoproto.equal) = true; - tendermint.crypto.merkle.Proof proof = 1; + tendermint.crypto.ProofOps proof = 1; } // KeyPath defines a slice of keys diff --git a/store/cache/cache_test.go b/store/cache/cache_test.go index 93ece75083ed..45c5d147a4ca 100644 --- a/store/cache/cache_test.go +++ b/store/cache/cache_test.go @@ -4,13 +4,13 @@ import ( "fmt" "testing" + "github.com/cosmos/iavl" + "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/store/cache" iavlstore "github.com/cosmos/cosmos-sdk/store/iavl" "github.com/cosmos/cosmos-sdk/store/types" - - "github.com/stretchr/testify/require" - "github.com/tendermint/iavl" - dbm "github.com/tendermint/tm-db" ) func TestGetOrSetStoreCache(t *testing.T) { diff --git a/store/iavl/store.go b/store/iavl/store.go index f31a33ea0d6c..f1e96f82a119 100644 --- a/store/iavl/store.go +++ b/store/iavl/store.go @@ -8,7 +8,7 @@ import ( ics23iavl "github.com/confio/ics23-iavl" ics23 "github.com/confio/ics23/go" - "github.com/tendermint/iavl" + "github.com/cosmos/iavl" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/merkle" dbm "github.com/tendermint/tm-db" diff --git a/store/iavl/store_test.go b/store/iavl/store_test.go index 27ebc4dbdd5d..aacc147d6caa 100644 --- a/store/iavl/store_test.go +++ b/store/iavl/store_test.go @@ -5,8 +5,8 @@ import ( "fmt" "testing" + "github.com/cosmos/iavl" "github.com/stretchr/testify/require" - "github.com/tendermint/iavl" abci "github.com/tendermint/tendermint/abci/types" dbm "github.com/tendermint/tm-db" diff --git a/store/iavl/tree.go b/store/iavl/tree.go index 9873034fa550..66e209bcdd50 100644 --- a/store/iavl/tree.go +++ b/store/iavl/tree.go @@ -3,7 +3,7 @@ package iavl import ( "fmt" - "github.com/tendermint/iavl" + "github.com/cosmos/iavl" ) var ( diff --git a/store/iavl/tree_test.go b/store/iavl/tree_test.go index bf67088300d4..24332b42e06a 100644 --- a/store/iavl/tree_test.go +++ b/store/iavl/tree_test.go @@ -3,8 +3,8 @@ package iavl import ( "testing" + "github.com/cosmos/iavl" "github.com/stretchr/testify/require" - "github.com/tendermint/iavl" dbm "github.com/tendermint/tm-db" ) diff --git a/store/prefix/store_test.go b/store/prefix/store_test.go index c46aec6f1a71..f045d2cd8253 100644 --- a/store/prefix/store_test.go +++ b/store/prefix/store_test.go @@ -4,16 +4,15 @@ import ( "crypto/rand" "testing" + "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/store/dbadapter" "github.com/cosmos/cosmos-sdk/store/gaskv" "github.com/cosmos/cosmos-sdk/store/iavl" "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/stretchr/testify/require" - - tiavl "github.com/tendermint/iavl" - dbm "github.com/tendermint/tm-db" + tiavl "github.com/cosmos/iavl" ) // copied from iavl/store_test.go diff --git a/store/rootmulti/store.go b/store/rootmulti/store.go index 2db747a28da3..2e348a371a49 100644 --- a/store/rootmulti/store.go +++ b/store/rootmulti/store.go @@ -6,8 +6,8 @@ import ( "strings" ics23 "github.com/confio/ics23/go" + iavltree "github.com/cosmos/iavl" "github.com/pkg/errors" - iavltree "github.com/tendermint/iavl" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/merkle" dbm "github.com/tendermint/tm-db" diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto new file mode 100644 index 000000000000..59309f0709a7 --- /dev/null +++ b/third_party/proto/tendermint/abci/types.proto @@ -0,0 +1,396 @@ +syntax = "proto3"; +package tendermint.abci; + +option go_package = "github.com/tendermint/tendermint/abci/types"; + +// For more information on gogo.proto, see: +// https://github.com/gogo/protobuf/blob/master/extensions.md +import "tendermint/crypto/proof.proto"; +import "tendermint/types/types.proto"; +import "tendermint/crypto/keys.proto"; +import "tendermint/types/params.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; + +// This file is copied from http://github.com/tendermint/abci +// NOTE: When using custom types, mind the warnings. +// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues + +//---------------------------------------- +// Request types + +message Request { + oneof value { + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestSetOption set_option = 4; + RequestInitChain init_chain = 5; + RequestQuery query = 6; + RequestBeginBlock begin_block = 7; + RequestCheckTx check_tx = 8; + RequestDeliverTx deliver_tx = 9; + RequestEndBlock end_block = 10; + RequestCommit commit = 11; + RequestListSnapshots list_snapshots = 12; + RequestOfferSnapshot offer_snapshot = 13; + RequestLoadSnapshotChunk load_snapshot_chunk = 14; + RequestApplySnapshotChunk apply_snapshot_chunk = 15; + } +} + +message RequestEcho { + string message = 1; +} + +message RequestFlush {} + +message RequestInfo { + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; +} + +// nondeterministic +message RequestSetOption { + string key = 1; + string value = 2; +} + +message RequestInitChain { + google.protobuf.Timestamp time = 1 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 2; + ConsensusParams consensus_params = 3; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; +} + +message RequestQuery { + bytes data = 1; + string path = 2; + int64 height = 3; + bool prove = 4; +} + +message RequestBeginBlock { + bytes hash = 1; + tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; + LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; + repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; +} + +enum CheckTxType { + NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; + RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; +} + +message RequestCheckTx { + bytes tx = 1; + CheckTxType type = 2; +} + +message RequestDeliverTx { + bytes tx = 1; +} + +message RequestEndBlock { + int64 height = 1; +} + +message RequestCommit {} + +// lists available snapshots +message RequestListSnapshots { +} + +// offers a snapshot to the application +message RequestOfferSnapshot { + Snapshot snapshot = 1; // snapshot offered by peers + bytes app_hash = 2; // light client-verified app hash for snapshot height +} + +// loads a snapshot chunk +message RequestLoadSnapshotChunk { + uint64 height = 1; + uint32 format = 2; + uint32 chunk = 3; +} + +// Applies a snapshot chunk +message RequestApplySnapshotChunk { + uint32 index = 1; + bytes chunk = 2; + string sender = 3; +} + +//---------------------------------------- +// Response types + +message Response { + oneof value { + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseSetOption set_option = 5; + ResponseInitChain init_chain = 6; + ResponseQuery query = 7; + ResponseBeginBlock begin_block = 8; + ResponseCheckTx check_tx = 9; + ResponseDeliverTx deliver_tx = 10; + ResponseEndBlock end_block = 11; + ResponseCommit commit = 12; + ResponseListSnapshots list_snapshots = 13; + ResponseOfferSnapshot offer_snapshot = 14; + ResponseLoadSnapshotChunk load_snapshot_chunk = 15; + ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + } +} + +// nondeterministic +message ResponseException { + string error = 1; +} + +message ResponseEcho { + string message = 1; +} + +message ResponseFlush {} + +message ResponseInfo { + string data = 1; + + string version = 2; + uint64 app_version = 3; + + int64 last_block_height = 4; + bytes last_block_app_hash = 5; +} + +// nondeterministic +message ResponseSetOption { + uint32 code = 1; + // bytes data = 2; + string log = 3; + string info = 4; +} + +message ResponseInitChain { + ConsensusParams consensus_params = 1; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; +} + +message ResponseQuery { + uint32 code = 1; + // bytes data = 2; // use "value" instead. + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 index = 5; + bytes key = 6; + bytes value = 7; + tendermint.crypto.ProofOps proof_ops = 8; + int64 height = 9; + string codespace = 10; +} + +message ResponseBeginBlock { + repeated Event events = 1 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; +} + +message ResponseCheckTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; +} + +message ResponseDeliverTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; +} + +message ResponseEndBlock { + repeated ValidatorUpdate validator_updates = 1 + [(gogoproto.nullable) = false]; + ConsensusParams consensus_param_updates = 2; + repeated Event events = 3 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; +} + +message ResponseCommit { + // reserve 1 + bytes data = 2; + int64 retain_height = 3; +} + +message ResponseListSnapshots { + repeated Snapshot snapshots = 1; +} + +message ResponseOfferSnapshot { + Result result = 1; + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Snapshot accepted, apply chunks + ABORT = 2; // Abort all snapshot restoration + REJECT = 3; // Reject this specific snapshot, try others + REJECT_FORMAT = 4; // Reject all snapshots of this format, try others + REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others + } +} + +message ResponseLoadSnapshotChunk { + bytes chunk = 1; +} + +message ResponseApplySnapshotChunk { + Result result = 1; + repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply + repeated string reject_senders = 3; // Chunk senders to reject and ban + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Chunk successfully accepted + ABORT = 2; // Abort all snapshot restoration + RETRY = 3; // Retry chunk (combine with refetch and reject) + RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) + REJECT_SNAPSHOT = 5; // Reject this snapshot, try others + } +} + +//---------------------------------------- +// Misc. + +// ConsensusParams contains all consensus-relevant parameters +// that can be adjusted by the abci app +message ConsensusParams { + BlockParams block = 1; + tendermint.types.EvidenceParams evidence = 2; + tendermint.types.ValidatorParams validator = 3; + tendermint.types.VersionParams version = 4; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Note: must be greater than 0 + int64 max_bytes = 1; + // Note: must be greater or equal to -1 + int64 max_gas = 2; +} + +message LastCommitInfo { + int32 round = 1; + repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + +// Event allows application developers to attach additional information to +// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx. +// Later, transactions may be queried using these events. +message Event { + string type = 1; + repeated EventAttribute attributes = 2 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "attributes,omitempty" + ]; +} + +// EventAttribute is a single key-value pair, associated with an event. +message EventAttribute { + bytes key = 1; + bytes value = 2; + bool index = 3; // nondeterministic +} + +// TxResult contains results of executing the transaction. +// +// One usage is indexing transaction results. +message TxResult { + int64 height = 1; + uint32 index = 2; + bytes tx = 3; + ResponseDeliverTx result = 4 [(gogoproto.nullable) = false]; +} + +//---------------------------------------- +// Blockchain Types + +// Validator +message Validator { + bytes address = 1; // The first 20 bytes of SHA256(public key) + // PubKey pub_key = 2 [(gogoproto.nullable)=false]; + int64 power = 3; // The voting power +} + +// ValidatorUpdate +message ValidatorUpdate { + tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; + int64 power = 2; +} + +// VoteInfo +message VoteInfo { + Validator validator = 1 [(gogoproto.nullable) = false]; + bool signed_last_block = 2; +} + +message Evidence { + string type = 1; + Validator validator = 2 [(gogoproto.nullable) = false]; + int64 height = 3; + google.protobuf.Timestamp time = 4 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; + // Total voting power of the validator set in case the ABCI application does + // not store historical validators. + // https://github.com/tendermint/tendermint/issues/4581 + int64 total_voting_power = 5; +} + +//---------------------------------------- +// State Sync Types + +message Snapshot { + uint64 height = 1; // The height at which the snapshot was taken + uint32 format = 2; // The application-specific snapshot format + uint32 chunks = 3; // Number of chunks in the snapshot + bytes hash = 4; // Arbitrary snapshot hash, equal only if identical + bytes metadata = 5; // Arbitrary application metadata +} + +//---------------------------------------- +// Service Definition + +service ABCIApplication { + rpc Echo(RequestEcho) returns (ResponseEcho); + rpc Flush(RequestFlush) returns (ResponseFlush); + rpc Info(RequestInfo) returns (ResponseInfo); + rpc SetOption(RequestSetOption) returns (ResponseSetOption); + rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); + rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); + rpc Query(RequestQuery) returns (ResponseQuery); + rpc Commit(RequestCommit) returns (ResponseCommit); + rpc InitChain(RequestInitChain) returns (ResponseInitChain); + rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); + rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); + rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); + rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); + rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); + rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); +} diff --git a/third_party/proto/tendermint/abci/types/types.proto b/third_party/proto/tendermint/abci/types/types.proto deleted file mode 100644 index 317a6cd4b68e..000000000000 --- a/third_party/proto/tendermint/abci/types/types.proto +++ /dev/null @@ -1,346 +0,0 @@ -syntax = "proto3"; -package tendermint.abci.types; -option go_package = "github.com/tendermint/tendermint/abci/types"; - -// For more information on gogo.proto, see: -// https://github.com/gogo/protobuf/blob/master/extensions.md -import "gogoproto/gogo.proto"; -import "tendermint/crypto/merkle/merkle.proto"; -import "tendermint/libs/kv/types.proto"; -import "google/protobuf/timestamp.proto"; -import "google/protobuf/duration.proto"; - -// This file is copied from http://github.com/tendermint/abci -// NOTE: When using custom types, mind the warnings. -// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues - -option (gogoproto.marshaler_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.goproto_registration) = true; -// Generate tests -option (gogoproto.populate_all) = true; -option (gogoproto.equal_all) = true; -option (gogoproto.testgen_all) = true; - -//---------------------------------------- -// Request types - -message Request { - oneof value { - RequestEcho echo = 2; - RequestFlush flush = 3; - RequestInfo info = 4; - RequestSetOption set_option = 5; - RequestInitChain init_chain = 6; - RequestQuery query = 7; - RequestBeginBlock begin_block = 8; - RequestCheckTx check_tx = 9; - RequestDeliverTx deliver_tx = 19; - RequestEndBlock end_block = 11; - RequestCommit commit = 12; - } -} - -message RequestEcho { - string message = 1; -} - -message RequestFlush {} - -message RequestInfo { - string version = 1; - uint64 block_version = 2; - uint64 p2p_version = 3; -} - -// nondeterministic -message RequestSetOption { - string key = 1; - string value = 2; -} - -message RequestInitChain { - google.protobuf.Timestamp time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - string chain_id = 2; - ConsensusParams consensus_params = 3; - repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; - bytes app_state_bytes = 5; -} - -message RequestQuery { - bytes data = 1; - string path = 2; - int64 height = 3; - bool prove = 4; -} - -message RequestBeginBlock { - bytes hash = 1; - Header header = 2 [(gogoproto.nullable) = false]; - LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; - repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; -} - -enum CheckTxType { - New = 0; - Recheck = 1; -} - -message RequestCheckTx { - bytes tx = 1; - CheckTxType type = 2; -} - -message RequestDeliverTx { - bytes tx = 1; -} - -message RequestEndBlock { - int64 height = 1; -} - -message RequestCommit {} - -//---------------------------------------- -// Response types - -message Response { - oneof value { - ResponseException exception = 1; - ResponseEcho echo = 2; - ResponseFlush flush = 3; - ResponseInfo info = 4; - ResponseSetOption set_option = 5; - ResponseInitChain init_chain = 6; - ResponseQuery query = 7; - ResponseBeginBlock begin_block = 8; - ResponseCheckTx check_tx = 9; - ResponseDeliverTx deliver_tx = 10; - ResponseEndBlock end_block = 11; - ResponseCommit commit = 12; - } -} - -// nondeterministic -message ResponseException { - string error = 1; -} - -message ResponseEcho { - string message = 1; -} - -message ResponseFlush {} - -message ResponseInfo { - string data = 1; - - string version = 2; - uint64 app_version = 3; - - int64 last_block_height = 4; - bytes last_block_app_hash = 5; -} - -// nondeterministic -message ResponseSetOption { - uint32 code = 1; - // bytes data = 2; - string log = 3; - string info = 4; -} - -message ResponseInitChain { - ConsensusParams consensus_params = 1; - repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; -} - -message ResponseQuery { - uint32 code = 1; - // bytes data = 2; // use "value" instead. - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 index = 5; - bytes key = 6; - bytes value = 7; - tendermint.crypto.merkle.Proof proof = 8; - int64 height = 9; - string codespace = 10; -} - -message ResponseBeginBlock { - repeated Event events = 1 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; -} - -message ResponseCheckTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5; - int64 gas_used = 6; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; -} - -message ResponseDeliverTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5; - int64 gas_used = 6; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; -} - -message ResponseEndBlock { - repeated ValidatorUpdate validator_updates = 1 [(gogoproto.nullable) = false]; - ConsensusParams consensus_param_updates = 2; - repeated Event events = 3 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; -} - -message ResponseCommit { - // reserve 1 - bytes data = 2; -} - -//---------------------------------------- -// Misc. - -// ConsensusParams contains all consensus-relevant parameters -// that can be adjusted by the abci app -message ConsensusParams { - BlockParams block = 1; - EvidenceParams evidence = 2; - ValidatorParams validator = 3; -} - -// BlockParams contains limits on the block size. -message BlockParams { - // Note: must be greater than 0 - int64 max_bytes = 1; - // Note: must be greater or equal to -1 - int64 max_gas = 2; -} - -message EvidenceParams { - // Note: must be greater than 0 - int64 max_age_num_blocks = 1; - google.protobuf.Duration max_age_duration = 2 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; -} - -// ValidatorParams contains limits on validators. -message ValidatorParams { - repeated string pub_key_types = 1; -} - -message LastCommitInfo { - int32 round = 1; - repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; -} - -message Event { - string type = 1; - repeated tendermint.libs.kv.Pair attributes = 2 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "attributes,omitempty"]; -} - -//---------------------------------------- -// Blockchain Types - -message Header { - // basic block info - Version version = 1 [(gogoproto.nullable) = false]; - string chain_id = 2 [(gogoproto.customname) = "ChainID"]; - int64 height = 3; - google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - - // prev block info - BlockID last_block_id = 5 [(gogoproto.nullable) = false]; - - // hashes of block data - bytes last_commit_hash = 6; // commit from validators from the last block - bytes data_hash = 7; // transactions - - // hashes from the app output from the prev block - bytes validators_hash = 8; // validators for the current block - bytes next_validators_hash = 9; // validators for the next block - bytes consensus_hash = 10; // consensus params for current block - bytes app_hash = 11; // state after txs from the previous block - bytes last_results_hash = 12; // root hash of all results from the txs from the previous block - - // consensus info - bytes evidence_hash = 13; // evidence included in the block - bytes proposer_address = 14; // original proposer of the block -} - -message Version { - uint64 Block = 1; - uint64 App = 2; -} - -message BlockID { - bytes hash = 1; - PartSetHeader parts_header = 2 [(gogoproto.nullable) = false]; -} - -message PartSetHeader { - int32 total = 1; - bytes hash = 2; -} - -// Validator -message Validator { - bytes address = 1; - // PubKey pub_key = 2 [(gogoproto.nullable)=false]; - int64 power = 3; -} - -// ValidatorUpdate -message ValidatorUpdate { - PubKey pub_key = 1 [(gogoproto.nullable) = false]; - int64 power = 2; -} - -// VoteInfo -message VoteInfo { - Validator validator = 1 [(gogoproto.nullable) = false]; - bool signed_last_block = 2; -} - -message PubKey { - string type = 1; - bytes data = 2; -} - -message Evidence { - string type = 1; - Validator validator = 2 [(gogoproto.nullable) = false]; - int64 height = 3; - google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - int64 total_voting_power = 5; -} - -//---------------------------------------- -// Service Definition - -service ABCIApplication { - rpc Echo(RequestEcho) returns (ResponseEcho); - rpc Flush(RequestFlush) returns (ResponseFlush); - rpc Info(RequestInfo) returns (ResponseInfo); - rpc SetOption(RequestSetOption) returns (ResponseSetOption); - rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); - rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); - rpc Query(RequestQuery) returns (ResponseQuery); - rpc Commit(RequestCommit) returns (ResponseCommit); - rpc InitChain(RequestInitChain) returns (ResponseInitChain); - rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); - rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); -} diff --git a/third_party/proto/tendermint/crypto/keys.proto b/third_party/proto/tendermint/crypto/keys.proto new file mode 100644 index 000000000000..e3a8ce93473f --- /dev/null +++ b/third_party/proto/tendermint/crypto/keys.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +// PublicKey defines the keys available for use with Tendermint Validators +message PublicKey { + option (gogoproto.compare) = true; + option (gogoproto.equal) = true; + + oneof sum { + bytes ed25519 = 1; + } +} + +// PrivateKey defines the keys available for use with Tendermint Validators +// WARNING PrivateKey is used for internal purposes only +message PrivateKey { + oneof sum { + bytes ed25519 = 1; + } +} diff --git a/third_party/proto/tendermint/crypto/merkle/merkle.proto b/third_party/proto/tendermint/crypto/merkle/merkle.proto deleted file mode 100644 index d0b657ef04b3..000000000000 --- a/third_party/proto/tendermint/crypto/merkle/merkle.proto +++ /dev/null @@ -1,31 +0,0 @@ -syntax = "proto3"; -package tendermint.crypto.merkle; -option go_package = "github.com/tendermint/tendermint/crypto/merkle"; - -// For more information on gogo.proto, see: -// https://github.com/gogo/protobuf/blob/master/extensions.md -import "gogoproto/gogo.proto"; - -option (gogoproto.marshaler_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.sizer_all) = true; - -option (gogoproto.populate_all) = true; -option (gogoproto.equal_all) = true; - -//---------------------------------------- -// Message types - -// ProofOp defines an operation used for calculating Merkle root -// The data could be arbitrary format, providing nessecary data -// for example neighbouring node hash -message ProofOp { - string type = 1; - bytes key = 2; - bytes data = 3; -} - -// Proof is Merkle proof defined by the list of ProofOps -message Proof { - repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; -} diff --git a/third_party/proto/tendermint/crypto/proof.proto b/third_party/proto/tendermint/crypto/proof.proto new file mode 100644 index 000000000000..975df7685397 --- /dev/null +++ b/third_party/proto/tendermint/crypto/proof.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +message Proof { + int64 total = 1; + int64 index = 2; + bytes leaf_hash = 3; + repeated bytes aunts = 4; +} + +message ValueOp { + // Encoded in ProofOp.Key. + bytes key = 1; + + // To encode in ProofOp.Data + Proof proof = 2; +} + +message DominoOp { + string key = 1; + string input = 2; + string output = 3; +} + +// ProofOp defines an operation used for calculating Merkle root +// The data could be arbitrary format, providing nessecary data +// for example neighbouring node hash +message ProofOp { + string type = 1; + bytes key = 2; + bytes data = 3; +} + +// ProofOps is Merkle proof defined by the list of ProofOps +message ProofOps { + repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/tendermint/libs/bits/types.proto b/third_party/proto/tendermint/libs/bits/types.proto new file mode 100644 index 000000000000..3111d113a5b1 --- /dev/null +++ b/third_party/proto/tendermint/libs/bits/types.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package tendermint.libs.bits; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; + +message BitArray { + int64 bits = 1; + repeated uint64 elems = 2; +} diff --git a/third_party/proto/tendermint/libs/kv/types.proto b/third_party/proto/tendermint/libs/kv/types.proto deleted file mode 100644 index 334eab5ac30b..000000000000 --- a/third_party/proto/tendermint/libs/kv/types.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto3"; -package tendermint.libs.kv; -option go_package = "github.com/tendermint/tendermint/libs/kv"; - -import "gogoproto/gogo.proto"; - -option (gogoproto.marshaler_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.goproto_registration) = true; -// Generate tests -option (gogoproto.populate_all) = true; -option (gogoproto.equal_all) = true; -option (gogoproto.testgen_all) = true; - -//---------------------------------------- -// Abstract types - -// Define these here for compatibility but use tmlibs/kv.Pair. -message Pair { - bytes key = 1; - bytes value = 2; -} - -// Define these here for compatibility but use tmlibs/kv.KI64Pair. -message KI64Pair { - bytes key = 1; - int64 value = 2; -} diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto new file mode 100644 index 000000000000..782f4cdcb823 --- /dev/null +++ b/third_party/proto/tendermint/types/evidence.proto @@ -0,0 +1,65 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "tendermint/types/types.proto"; +import "tendermint/crypto/keys.proto"; + +// DuplicateVoteEvidence contains evidence a validator signed two conflicting +// votes. +message DuplicateVoteEvidence { + Vote vote_a = 1; + Vote vote_b = 2; +} + +message PotentialAmnesiaEvidence { + Vote vote_a = 1; + Vote vote_b = 2; + + int64 height_stamp = 3; +} + +message AmnesiaEvidence { + PotentialAmnesiaEvidence potential_amnesia_evidence = 1; + ProofOfLockChange polc = 2; +} + +message ConflictingHeadersEvidence { + SignedHeader h1 = 1; + SignedHeader h2 = 2; +} + +message LunaticValidatorEvidence { + Header header = 1; + Vote vote = 2; + string invalid_header_field = 3; +} + +message PhantomValidatorEvidence { + Vote vote = 1; + int64 last_height_validator_was_in_set = 2; +} + +message Evidence { + oneof sum { + DuplicateVoteEvidence duplicate_vote_evidence = 1; + ConflictingHeadersEvidence conflicting_headers_evidence = 2; + LunaticValidatorEvidence lunatic_validator_evidence = 3; + PotentialAmnesiaEvidence potential_amnesia_evidence = 4; + AmnesiaEvidence amnesia_evidence = 5; + PhantomValidatorEvidence phantom_validator_evidence = 6; + } +} + +// EvidenceData contains any evidence of malicious wrong-doing by validators +message EvidenceData { + repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; + bytes hash = 2; +} + +message ProofOfLockChange { + repeated Vote votes = 1; + tendermint.crypto.PublicKey pub_key = 2; +} diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto new file mode 100644 index 000000000000..33ed4f77354c --- /dev/null +++ b/third_party/proto/tendermint/types/params.proto @@ -0,0 +1,86 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option (gogoproto.equal_all) = true; + +// ConsensusParams contains consensus critical parameters that determine the +// validity of blocks. +message ConsensusParams { + BlockParams block = 1 [(gogoproto.nullable) = false]; + EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; + ValidatorParams validator = 3 [(gogoproto.nullable) = false]; + VersionParams version = 4 [(gogoproto.nullable) = false]; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Max block size, in bytes. + // Note: must be greater than 0 + int64 max_bytes = 1; + // Max gas per block. + // Note: must be greater or equal to -1 + int64 max_gas = 2; + // Minimum time increment between consecutive blocks (in milliseconds) If the + // block header timestamp is ahead of the system clock, decrease this value. + // + // Not exposed to the application. + int64 time_iota_ms = 3; +} + +// EvidenceParams determine how we handle evidence of malfeasance. +message EvidenceParams { + // Max age of evidence, in blocks. + // + // The basic formula for calculating this is: MaxAgeDuration / {average block + // time}. + int64 max_age_num_blocks = 1; + + // Max age of evidence, in time. + // + // It should correspond with an app's "unbonding period" or other similar + // mechanism for handling [Nothing-At-Stake + // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + google.protobuf.Duration max_age_duration = 2 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + + // This sets the maximum number of evidence that can be committed in a single block. + // and should fall comfortably under the max block bytes when we consider the size of + // each evidence (See MaxEvidenceBytes). The maximum number is MaxEvidencePerBlock. + // Default is 50 + uint32 max_num = 3; + + // Proof trial period dictates the time given for nodes accused of amnesia evidence, incorrectly + // voting twice in two different rounds to respond with their respective proofs. + // Default is half the max age in blocks: 50,000 + int64 proof_trial_period = 4; +} + +// ValidatorParams restrict the public key types validators can use. +// NOTE: uses ABCI pubkey naming, not Amino names. +message ValidatorParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + repeated string pub_key_types = 1; +} + +// VersionParams contains the ABCI application version. +message VersionParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + uint64 app_version = 1; +} + +// HashedParams is a subset of ConsensusParams. +// +// It is hashed into the Header.ConsensusHash. +message HashedParams { + int64 block_max_bytes = 1; + int64 block_max_gas = 2; +} diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto new file mode 100644 index 000000000000..7ba7de8bdfd9 --- /dev/null +++ b/third_party/proto/tendermint/types/types.proto @@ -0,0 +1,156 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "tendermint/libs/bits/types.proto"; +import "tendermint/crypto/proof.proto"; +import "tendermint/version/types.proto"; + +// BlockIdFlag indicates which BlcokID the signature is for +enum BlockIDFlag { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; + BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; + BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; + BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; +} + +// SignedMsgType is a type of signed message in the consensus. +enum SignedMsgType { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + SIGNED_MSG_TYPE_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "UnknownType"]; + // Votes + SIGNED_MSG_TYPE_PREVOTE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; + SIGNED_MSG_TYPE_PRECOMMIT = 2 [(gogoproto.enumvalue_customname) = "PrecommitType"]; + + // Proposals + SIGNED_MSG_TYPE_PROPOSAL = 32 [(gogoproto.enumvalue_customname) = "ProposalType"]; +} + +// PartsetHeader +message PartSetHeader { + uint32 total = 1; + bytes hash = 2; +} + +message Part { + uint32 index = 1; + bytes bytes = 2; + tendermint.crypto.Proof proof = 3 [(gogoproto.nullable) = false]; +} + +// BlockID +message BlockID { + bytes hash = 1; + PartSetHeader part_set_header = 2 [(gogoproto.nullable) = false]; +} + +// -------------------------------- + +// Header defines the structure of a Tendermint block header. +message Header { + // basic block info + tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; + string chain_id = 2 [(gogoproto.customname) = "ChainID"]; + int64 height = 3; + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + + // prev block info + BlockID last_block_id = 5 [(gogoproto.nullable) = false]; + + // hashes of block data + bytes last_commit_hash = 6; // commit from validators from the last block + bytes data_hash = 7; // transactions + + // hashes from the app output from the prev block + bytes validators_hash = 8; // validators for the current block + bytes next_validators_hash = 9; // validators for the next block + bytes consensus_hash = 10; // consensus params for current block + bytes app_hash = 11; // state after txs from the previous block + bytes last_results_hash = 12; // root hash of all results from the txs from the previous block + + // consensus info + bytes evidence_hash = 13; // evidence included in the block + bytes proposer_address = 14; // original proposer of the block +} + +// Data contains the set of transactions included in the block +message Data { + // Txs that will be applied by state @ block.Height+1. + // NOTE: not all txs here are valid. We're just agreeing on the order first. + // This means that block.AppHash does not include these txs. + repeated bytes txs = 1; + // Volatile + bytes hash = 2; +} + +// Vote represents a prevote, precommit, or commit vote from validators for +// consensus. +message Vote { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + BlockID block_id = 4 + [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. + google.protobuf.Timestamp timestamp = 5 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes validator_address = 6; + int32 validator_index = 7; + bytes signature = 8; +} + +// Commit contains the evidence that a block was committed by a set of validators. +message Commit { + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; + bytes hash = 5; + tendermint.libs.bits.BitArray bit_array = 6; +} + +// CommitSig is a part of the Vote included in a Commit. +message CommitSig { + BlockIDFlag block_id_flag = 1; + bytes validator_address = 2; + google.protobuf.Timestamp timestamp = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 4; +} + +message Proposal { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + int32 pol_round = 4; + BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + google.protobuf.Timestamp timestamp = 6 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 7; +} + +message SignedHeader { + Header header = 1; + Commit commit = 2; +} + +message BlockMeta { + BlockID block_id = 1 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + int64 block_size = 2; + Header header = 3 [(gogoproto.nullable) = false]; + int64 num_txs = 4; +} + +// TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree. +message TxProof { + bytes root_hash = 1; + bytes data = 2; + tendermint.crypto.Proof proof = 3; +} diff --git a/third_party/proto/tendermint/version/types.proto b/third_party/proto/tendermint/version/types.proto new file mode 100644 index 000000000000..6061868bd439 --- /dev/null +++ b/third_party/proto/tendermint/version/types.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package tendermint.version; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/version"; + +import "gogoproto/gogo.proto"; + +// App includes the protocol and software version for the application. +// This information is included in ResponseInfo. The App.Protocol can be +// updated in ResponseEndBlock. +message App { + uint64 protocol = 1; + string software = 2; +} + +// Consensus captures the consensus rules for processing a block in the blockchain, +// including all blockchain data structures and the rules of the application's +// state transition machine. +message Consensus { + option (gogoproto.equal) = true; + + uint64 block = 1; + uint64 app = 2; +} diff --git a/types/cosmos.pb.go b/types/cosmos.pb.go index 7ef27a510176..dcf8df80ae03 100644 --- a/types/cosmos.pb.go +++ b/types/cosmos.pb.go @@ -719,63 +719,62 @@ func init() { func init() { proto.RegisterFile("cosmos/cosmos.proto", fileDescriptor_809e58c688fefd51) } var fileDescriptor_809e58c688fefd51 = []byte{ - // 884 bytes of a gzipped FileDescriptorProto + // 879 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xf6, 0x7a, 0xb7, 0x6b, 0xfb, 0xb5, 0x9b, 0xd0, 0x49, 0x68, 0x37, 0xa5, 0xf5, 0x9a, 0x2d, - 0x42, 0x41, 0x82, 0xb5, 0x94, 0x56, 0x42, 0xf2, 0x01, 0x29, 0x1b, 0xa3, 0x62, 0xd4, 0x4a, 0x68, - 0x1b, 0x40, 0xe2, 0x12, 0xc6, 0xde, 0xc9, 0x78, 0x55, 0xef, 0x8c, 0xe5, 0x19, 0x37, 0xf6, 0xad, + 0x18, 0xf6, 0x7a, 0xb7, 0x6b, 0xfb, 0xb5, 0x9b, 0xd0, 0x49, 0x68, 0x37, 0x29, 0xf5, 0x5a, 0x5b, + 0x84, 0x82, 0x04, 0x6b, 0x29, 0x8d, 0x84, 0x94, 0x03, 0x52, 0x36, 0x46, 0xc5, 0xa8, 0x95, 0xd0, + 0x36, 0x80, 0xc4, 0x25, 0x8c, 0xbd, 0x93, 0xf1, 0x52, 0xef, 0x8c, 0xe5, 0x19, 0x37, 0xf6, 0xad, 0x07, 0x0e, 0x3d, 0xf2, 0x13, 0x7a, 0xe6, 0x97, 0xf4, 0x98, 0x63, 0x85, 0x90, 0x01, 0xe7, 0xc2, - 0xb9, 0x47, 0x4e, 0x68, 0x66, 0xd6, 0x6b, 0x3b, 0xe2, 0xd4, 0x4b, 0xf2, 0x7e, 0x7f, 0x3c, 0xef, - 0xe3, 0x59, 0xd8, 0x1b, 0x70, 0x91, 0x71, 0xd1, 0x36, 0xff, 0xc2, 0xf1, 0x84, 0x4b, 0x8e, 0x5c, - 0xa3, 0xdd, 0xdd, 0xa7, 0x9c, 0x72, 0x6d, 0x6a, 0x2b, 0xc9, 0x78, 0xef, 0x7e, 0x2c, 0x09, 0x4b, - 0xc8, 0x24, 0x4b, 0x99, 0x6c, 0xe3, 0xfe, 0x20, 0x6d, 0xcb, 0xf9, 0x98, 0x08, 0xf3, 0x37, 0x0f, - 0x39, 0xa0, 0x9c, 0xd3, 0x11, 0x69, 0x6b, 0xad, 0x3f, 0x3d, 0x6f, 0x63, 0x36, 0x37, 0xae, 0xe0, - 0x31, 0x38, 0x27, 0x3c, 0x65, 0x68, 0x1f, 0x6e, 0x24, 0x84, 0xf1, 0xcc, 0xb3, 0x5a, 0xd6, 0x61, - 0x2d, 0x36, 0x0a, 0x7a, 0x00, 0x2e, 0xce, 0xf8, 0x94, 0x49, 0xaf, 0xac, 0xcc, 0x51, 0xfd, 0xcd, - 0xc2, 0x2f, 0xfd, 0xbe, 0xf0, 0xed, 0x1e, 0x93, 0x71, 0xee, 0xea, 0x38, 0xff, 0xbc, 0xf6, 0xad, - 0xe0, 0x5b, 0xa8, 0x74, 0xc9, 0xe0, 0x7d, 0x6a, 0x75, 0xc9, 0xe0, 0x5a, 0xad, 0xcf, 0xa0, 0xda, - 0x63, 0xf2, 0x3b, 0xbd, 0xfc, 0x7d, 0xb0, 0x53, 0x26, 0x4d, 0xa9, 0xed, 0xfe, 0xca, 0xae, 0x42, - 0xbb, 0x64, 0x50, 0x84, 0x26, 0x64, 0x70, 0x3d, 0x54, 0x95, 0x57, 0xf6, 0x20, 0x82, 0xc6, 0x0f, - 0x78, 0x74, 0x9c, 0x24, 0x13, 0x22, 0x04, 0x11, 0xe8, 0x73, 0xa8, 0xe1, 0x95, 0xe2, 0x59, 0x2d, - 0xfb, 0xb0, 0x11, 0xed, 0xfc, 0xbb, 0xf0, 0x61, 0x1d, 0x14, 0xaf, 0x03, 0x3a, 0xce, 0xcb, 0x3f, - 0x5a, 0x56, 0xc0, 0xa1, 0xf2, 0x18, 0x8b, 0x1e, 0x3b, 0xe7, 0xe8, 0x11, 0x00, 0xc5, 0xe2, 0xec, - 0x02, 0x33, 0x49, 0x12, 0xdd, 0xd4, 0x89, 0x3e, 0x7c, 0xb7, 0xf0, 0x6f, 0xcd, 0x71, 0x36, 0xea, - 0x04, 0x6b, 0x5f, 0x10, 0xd7, 0x28, 0x16, 0x3f, 0x6a, 0x19, 0x85, 0x50, 0x55, 0x9e, 0xa9, 0x20, - 0x89, 0xc6, 0xc1, 0x89, 0xf6, 0xde, 0x2d, 0xfc, 0xdd, 0x75, 0x8e, 0xf2, 0x04, 0x71, 0x85, 0x62, - 0xf1, 0xbd, 0x92, 0xc6, 0xe0, 0xc6, 0x44, 0x4c, 0x47, 0x12, 0x21, 0x70, 0x12, 0x2c, 0xb1, 0xee, - 0xd4, 0x88, 0xb5, 0x8c, 0x3e, 0x00, 0x7b, 0xc4, 0xa9, 0x01, 0x34, 0x56, 0x22, 0xea, 0x80, 0x4b, - 0x5e, 0x10, 0x26, 0x85, 0x67, 0xb7, 0xec, 0xc3, 0xfa, 0xd1, 0xbd, 0x70, 0x4d, 0x8f, 0x50, 0xd1, - 0x23, 0x34, 0xc4, 0xf8, 0x5a, 0x05, 0x45, 0x8e, 0x02, 0x29, 0xce, 0x33, 0x3a, 0xce, 0xab, 0xd7, - 0x7e, 0x29, 0x98, 0x00, 0x7a, 0x96, 0x66, 0xd3, 0x11, 0x96, 0x29, 0x67, 0x31, 0x11, 0x63, 0xce, - 0x04, 0x41, 0x8f, 0xcc, 0xdc, 0x29, 0x3b, 0xe7, 0x7a, 0x82, 0xfa, 0xd1, 0x6e, 0x98, 0x93, 0x34, - 0x07, 0x24, 0xaa, 0xaa, 0x62, 0x97, 0x0b, 0xdf, 0xd2, 0xd3, 0x6b, 0x8c, 0x3e, 0x05, 0x77, 0xa2, - 0xa7, 0xd7, 0x23, 0xd6, 0x8f, 0x76, 0x56, 0x39, 0x66, 0xa7, 0x38, 0xf7, 0x06, 0x5f, 0x41, 0xe5, - 0xa9, 0xa0, 0x5d, 0xb5, 0xd2, 0x01, 0x54, 0x33, 0x41, 0xcf, 0xd4, 0x94, 0x39, 0x7f, 0x2a, 0x99, - 0xa0, 0xa7, 0xf3, 0x31, 0x29, 0x10, 0x28, 0xaf, 0x11, 0xc8, 0xcf, 0xf2, 0x10, 0xdc, 0xd3, 0x99, - 0x4e, 0x7f, 0x50, 0xa0, 0x64, 0x6f, 0xce, 0x98, 0x57, 0xdf, 0x4a, 0xfa, 0xc5, 0x06, 0x38, 0x9d, - 0x15, 0x1b, 0xde, 0x06, 0x77, 0x48, 0x52, 0x3a, 0x34, 0x5c, 0xb3, 0xe3, 0x5c, 0x43, 0x01, 0xb8, - 0x72, 0x36, 0xc4, 0x62, 0x98, 0xf3, 0x16, 0x96, 0x0b, 0xdf, 0x3d, 0x9d, 0x7d, 0x83, 0xc5, 0x30, - 0xce, 0x3d, 0xe8, 0x1e, 0xd4, 0x06, 0x3c, 0x21, 0x62, 0x8c, 0x07, 0xc4, 0xb3, 0xf5, 0xd4, 0x6b, - 0x83, 0x9a, 0x5b, 0x29, 0x9e, 0xd3, 0xb2, 0x0e, 0x6f, 0xc6, 0x5a, 0x2e, 0x76, 0xb9, 0xa1, 0x83, - 0xcd, 0x35, 0xef, 0x40, 0x65, 0x82, 0x2f, 0xce, 0xd4, 0x45, 0x5d, 0x6d, 0x76, 0x27, 0xf8, 0xe2, - 0x09, 0xa7, 0xe8, 0x04, 0x9c, 0x11, 0xa7, 0xc2, 0xab, 0xe8, 0xa5, 0x6e, 0xaf, 0x96, 0x3a, 0x8e, - 0x4e, 0x7a, 0x4f, 0x89, 0x10, 0x98, 0x92, 0x27, 0x9c, 0x46, 0x77, 0x14, 0xfe, 0xbf, 0xfd, 0xe9, - 0xef, 0x6e, 0xdb, 0x45, 0xac, 0x93, 0x55, 0x47, 0x7d, 0xbd, 0xaa, 0xe9, 0xa8, 0x64, 0x74, 0x7f, - 0x8b, 0xc3, 0x35, 0xbd, 0xf7, 0x06, 0x59, 0x0f, 0x36, 0xc8, 0x0a, 0xda, 0xb9, 0xe2, 0x25, 0xfa, - 0x04, 0xca, 0x72, 0xe6, 0xd5, 0xf5, 0x55, 0xf7, 0x43, 0xf3, 0xbe, 0x84, 0xab, 0xf7, 0x25, 0x3c, - 0x66, 0xf3, 0xb8, 0x2c, 0x67, 0x0a, 0x17, 0x99, 0x66, 0x44, 0x48, 0x9c, 0x8d, 0xbd, 0x86, 0xc1, - 0xa5, 0x30, 0xe4, 0x7c, 0x7b, 0x65, 0xc1, 0xce, 0xf6, 0xc4, 0xe8, 0x23, 0xa8, 0x29, 0x0e, 0xa4, - 0x2c, 0x21, 0x33, 0x7d, 0x8d, 0x9b, 0xb1, 0x22, 0x45, 0x4f, 0xe9, 0xff, 0xc3, 0xf9, 0xe3, 0x6b, - 0x9c, 0xdf, 0x5b, 0x01, 0xf4, 0x4c, 0x4e, 0x52, 0x46, 0x0d, 0xd5, 0xf7, 0x73, 0x74, 0x1a, 0x1b, - 0x46, 0xb1, 0xa6, 0xbe, 0x66, 0xc4, 0xcf, 0x50, 0xdf, 0xf0, 0x2a, 0xc4, 0x36, 0x68, 0xa8, 0x65, - 0xf4, 0x25, 0x00, 0x96, 0x72, 0x92, 0xf6, 0xa7, 0x92, 0x08, 0xaf, 0xac, 0xfb, 0xdd, 0x2a, 0x0e, - 0xb2, 0xf2, 0xe4, 0x3f, 0xac, 0x8d, 0xd0, 0x82, 0xa8, 0xb5, 0x22, 0x48, 0x6d, 0xf2, 0x9c, 0xcc, - 0xf3, 0xf2, 0x4a, 0x54, 0x2f, 0xe7, 0x0b, 0x3c, 0x9a, 0x92, 0x7c, 0x3b, 0xa3, 0x44, 0xdd, 0xb7, - 0x7f, 0x37, 0x4b, 0x2f, 0x97, 0xcd, 0xd2, 0x9b, 0x65, 0xd3, 0xba, 0x5c, 0x36, 0xad, 0xbf, 0x96, - 0x4d, 0xeb, 0xd7, 0xab, 0x66, 0xe9, 0xf2, 0xaa, 0x59, 0x7a, 0x7b, 0xd5, 0x2c, 0xfd, 0x14, 0xd0, - 0x54, 0x0e, 0xa7, 0xfd, 0x70, 0xc0, 0xb3, 0xf6, 0xd6, 0x17, 0xe4, 0x0b, 0x91, 0x3c, 0x37, 0x9f, - 0x82, 0xbe, 0xab, 0xaf, 0xf3, 0xf0, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x86, 0x78, 0x6d, - 0x63, 0x06, 0x00, 0x00, + 0xb9, 0x47, 0x4e, 0x68, 0x66, 0xc7, 0x6b, 0x3b, 0xe2, 0xd4, 0x93, 0xdf, 0xef, 0x8f, 0xe7, 0x7d, + 0x3c, 0x0b, 0x3b, 0x7d, 0x2e, 0x32, 0x2e, 0xda, 0xf9, 0x4f, 0x38, 0x1a, 0x73, 0xc9, 0x91, 0x9b, + 0x6b, 0xfb, 0xbb, 0x94, 0x53, 0xae, 0x4d, 0x6d, 0x25, 0xe5, 0xde, 0xfd, 0xfb, 0x92, 0xb0, 0x84, + 0x8c, 0xb3, 0x94, 0xc9, 0x36, 0xee, 0xf5, 0xd3, 0xb6, 0x9c, 0x8d, 0x88, 0x49, 0xdd, 0xdf, 0xa3, + 0x9c, 0xd3, 0x21, 0x69, 0x6b, 0xad, 0x37, 0xb9, 0x68, 0x63, 0x36, 0xcb, 0x5d, 0xc1, 0x63, 0x70, + 0x4e, 0x79, 0xca, 0xd0, 0x2e, 0xdc, 0x4a, 0x08, 0xe3, 0x99, 0x67, 0xb5, 0xac, 0x83, 0x5a, 0x9c, + 0x2b, 0xe8, 0x21, 0xb8, 0x38, 0xe3, 0x13, 0x26, 0xbd, 0xb2, 0x32, 0x47, 0xf5, 0x37, 0x73, 0xbf, + 0xf4, 0xfb, 0xdc, 0xb7, 0xbb, 0x4c, 0xc6, 0xc6, 0x75, 0xec, 0xfc, 0xf3, 0xda, 0xb7, 0x82, 0x6f, + 0xa0, 0xd2, 0x21, 0xfd, 0xf7, 0xa9, 0xd5, 0x21, 0xfd, 0x1b, 0xb5, 0x3e, 0x85, 0x6a, 0x97, 0xc9, + 0x6f, 0xf5, 0xda, 0x0f, 0xc0, 0x4e, 0x99, 0xcc, 0x4b, 0x6d, 0xf6, 0x57, 0x76, 0x15, 0xda, 0x21, + 0xfd, 0x22, 0x34, 0x21, 0xfd, 0x9b, 0xa1, 0xaa, 0xbc, 0xb2, 0x07, 0x11, 0x34, 0xbe, 0xc7, 0xc3, + 0x93, 0x24, 0x19, 0x13, 0x21, 0x88, 0x40, 0x9f, 0x41, 0x0d, 0x2f, 0x15, 0xcf, 0x6a, 0xd9, 0x07, + 0x8d, 0x68, 0xeb, 0xdf, 0xb9, 0x0f, 0xab, 0xa0, 0x78, 0x15, 0x70, 0xec, 0xbc, 0xfc, 0xa3, 0x65, + 0x05, 0x1c, 0x2a, 0x8f, 0xb1, 0xe8, 0xb2, 0x0b, 0x8e, 0x8e, 0x00, 0x28, 0x16, 0xe7, 0x97, 0x98, + 0x49, 0x92, 0xe8, 0xa6, 0x4e, 0xf4, 0xe1, 0xbb, 0xb9, 0x7f, 0x67, 0x86, 0xb3, 0xe1, 0x71, 0xb0, + 0xf2, 0x05, 0x71, 0x8d, 0x62, 0xf1, 0x83, 0x96, 0x51, 0x08, 0x55, 0xe5, 0x99, 0x08, 0x92, 0x68, + 0x1c, 0x9c, 0x68, 0xe7, 0xdd, 0xdc, 0xdf, 0x5e, 0xe5, 0x28, 0x4f, 0x10, 0x57, 0x28, 0x16, 0xdf, + 0x29, 0xe9, 0x67, 0x70, 0x63, 0x22, 0x26, 0x43, 0x89, 0x10, 0x38, 0x09, 0x96, 0x58, 0x77, 0x6a, + 0xc4, 0x5a, 0x46, 0x1f, 0x80, 0x3d, 0xe4, 0x34, 0x07, 0x34, 0x56, 0x22, 0x3a, 0x02, 0x97, 0xbc, + 0x20, 0x4c, 0x0a, 0xcf, 0x6e, 0xd9, 0x07, 0xf5, 0xc3, 0xbb, 0xe1, 0x8a, 0x18, 0xa1, 0x22, 0x46, + 0xf8, 0x95, 0x72, 0x47, 0x8e, 0x82, 0x27, 0x36, 0xb1, 0xc7, 0xce, 0xab, 0xd7, 0x7e, 0x29, 0x18, + 0x03, 0x7a, 0x96, 0x66, 0x93, 0x21, 0x96, 0x29, 0x67, 0x31, 0x11, 0x23, 0xce, 0x04, 0x41, 0x47, + 0xf9, 0xc4, 0x29, 0xbb, 0xe0, 0xba, 0x77, 0xfd, 0x70, 0x3b, 0x34, 0xc4, 0x34, 0x50, 0x44, 0x55, + 0x55, 0xec, 0x6a, 0xee, 0x5b, 0x7a, 0x6e, 0x8d, 0xce, 0x27, 0xe0, 0x8e, 0xf5, 0xdc, 0x7a, 0xb8, + 0xfa, 0xe1, 0xd6, 0x32, 0x27, 0xdf, 0x26, 0x36, 0xde, 0xe0, 0x4b, 0xa8, 0x3c, 0x15, 0xb4, 0xa3, + 0x96, 0xd9, 0x83, 0x6a, 0x26, 0xe8, 0xb9, 0x22, 0xae, 0x61, 0x4e, 0x25, 0x13, 0xf4, 0x6c, 0x36, + 0x22, 0xc5, 0xee, 0xe5, 0xd5, 0xee, 0xe6, 0x20, 0x8f, 0xc0, 0x3d, 0x9b, 0xea, 0xf4, 0x87, 0x05, + 0x3e, 0xf6, 0xfa, 0x8c, 0xa6, 0xfa, 0x46, 0xd2, 0x2f, 0x36, 0xc0, 0xd9, 0xb4, 0xd8, 0xf0, 0x2e, + 0xb8, 0x03, 0x92, 0xd2, 0x41, 0xce, 0x32, 0x3b, 0x36, 0x1a, 0x0a, 0xc0, 0x95, 0xd3, 0x01, 0x16, + 0x03, 0xc3, 0x58, 0x58, 0xcc, 0x7d, 0xf7, 0x6c, 0xfa, 0x35, 0x16, 0x83, 0xd8, 0x78, 0xd0, 0x47, + 0x50, 0xeb, 0xf3, 0x84, 0x88, 0x11, 0xee, 0x13, 0xcf, 0xd6, 0x53, 0xaf, 0x0c, 0x6a, 0x6e, 0xa5, + 0x78, 0x4e, 0xcb, 0x3a, 0xb8, 0x1d, 0x6b, 0xb9, 0xd8, 0xe5, 0x96, 0x0e, 0xce, 0xef, 0x78, 0x0f, + 0x2a, 0x63, 0x7c, 0x79, 0xae, 0x6e, 0xe9, 0x6a, 0xb3, 0x3b, 0xc6, 0x97, 0x4f, 0x38, 0x45, 0xa7, + 0xe0, 0x0c, 0x39, 0x15, 0x5e, 0xc5, 0x1c, 0xd3, 0x2c, 0x75, 0x12, 0x9d, 0x76, 0x9f, 0x12, 0x21, + 0x30, 0x25, 0x4f, 0x38, 0x8d, 0xee, 0x29, 0xfc, 0x7f, 0xfb, 0xd3, 0xdf, 0xde, 0xb4, 0x8b, 0x58, + 0x27, 0xab, 0x8e, 0xfa, 0x7a, 0xd5, 0xbc, 0xa3, 0x92, 0xd1, 0x83, 0x0d, 0xf6, 0xd6, 0xf4, 0xde, + 0x6b, 0x34, 0xdd, 0x5b, 0xa3, 0x29, 0x68, 0xe7, 0x92, 0x91, 0xe8, 0x63, 0x28, 0xcb, 0xa9, 0x57, + 0xd7, 0x57, 0xdd, 0x0d, 0xf3, 0x97, 0x25, 0x5c, 0xbe, 0x2c, 0xe1, 0x09, 0x9b, 0xc5, 0x65, 0x39, + 0x55, 0xb8, 0xc8, 0x34, 0x23, 0x42, 0xe2, 0x6c, 0xe4, 0x35, 0x72, 0x5c, 0x0a, 0x83, 0xe1, 0xdb, + 0x2b, 0x0b, 0xb6, 0x36, 0x27, 0x46, 0xf7, 0xa1, 0xa6, 0x38, 0x90, 0xb2, 0x84, 0x4c, 0xf5, 0x35, + 0x6e, 0xc7, 0x8a, 0x14, 0x5d, 0xa5, 0xff, 0x0f, 0xdb, 0x4f, 0x6e, 0xb0, 0x7d, 0x67, 0x09, 0xd0, + 0x33, 0x39, 0x4e, 0x19, 0xcd, 0xa9, 0xbe, 0x6b, 0xd0, 0x69, 0xac, 0x19, 0xc5, 0x8a, 0xfa, 0x9a, + 0x11, 0x3f, 0x41, 0x7d, 0xcd, 0xab, 0x10, 0x5b, 0xa3, 0xa1, 0x96, 0xd1, 0x17, 0x00, 0x58, 0xca, + 0x71, 0xda, 0x9b, 0x48, 0x22, 0xbc, 0xb2, 0xee, 0x77, 0xa7, 0x38, 0xc8, 0xd2, 0x63, 0xfe, 0x58, + 0x6b, 0xa1, 0x05, 0x51, 0x6b, 0x45, 0x90, 0xda, 0xe4, 0x39, 0x99, 0x99, 0xf2, 0x4a, 0x54, 0x6f, + 0xe6, 0x0b, 0x3c, 0x9c, 0x10, 0xb3, 0x5d, 0xae, 0x44, 0x9d, 0xb7, 0x7f, 0x37, 0x4b, 0x2f, 0x17, + 0xcd, 0xd2, 0x9b, 0x45, 0xd3, 0xba, 0x5a, 0x34, 0xad, 0xbf, 0x16, 0x4d, 0xeb, 0xd7, 0xeb, 0x66, + 0xe9, 0xea, 0xba, 0x59, 0x7a, 0x7b, 0xdd, 0x2c, 0xfd, 0x18, 0xd0, 0x54, 0x0e, 0x26, 0xbd, 0xb0, + 0xcf, 0xb3, 0xf6, 0xc6, 0x57, 0xe3, 0x73, 0x91, 0x3c, 0xcf, 0x3f, 0x02, 0x3d, 0x57, 0x5f, 0xe7, + 0xd1, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x55, 0xed, 0xe5, 0xfa, 0x57, 0x06, 0x00, 0x00, } func (this *Coin) Equal(that interface{}) bool { diff --git a/types/events.go b/types/events.go index 30fe1ee39de2..04c4c41e389a 100644 --- a/types/events.go +++ b/types/events.go @@ -6,7 +6,6 @@ import ( "strings" abci "github.com/tendermint/tendermint/abci/types" - tmkv "github.com/tendermint/tendermint/libs/kv" ) // ---------------------------------------------------------------------------- @@ -79,8 +78,8 @@ func (a Attribute) String() string { } // ToKVPair converts an Attribute object into a Tendermint key/value pair. -func (a Attribute) ToKVPair() tmkv.Pair { - return tmkv.Pair{Key: toBytes(a.Key), Value: toBytes(a.Value)} +func (a Attribute) ToKVPair() abci.EventAttribute { + return abci.EventAttribute{Key: toBytes(a.Key), Value: toBytes(a.Value)} } // AppendAttributes adds one or more attributes to an Event. diff --git a/x/bank/keeper/keeper_test.go b/x/bank/keeper/keeper_test.go index 87818e43cd18..8cc1b126ecc8 100644 --- a/x/bank/keeper/keeper_test.go +++ b/x/bank/keeper/keeper_test.go @@ -6,7 +6,6 @@ import ( "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" - tmkv "github.com/tendermint/tendermint/libs/kv" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtime "github.com/tendermint/tendermint/types/time" @@ -535,27 +534,27 @@ func (suite *IntegrationTestSuite) TestMsgSendEvents() { event1 := sdk.Event{ Type: types.EventTypeTransfer, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr2.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr2.String())}, ) event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, ) event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}, + abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}, ) event2 := sdk.Event{ Type: sdk.EventTypeMessage, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event2.Attributes = append( event2.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, ) suite.Require().Equal(abci.Event(event1), events[0]) @@ -613,11 +612,11 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { event1 := sdk.Event{ Type: sdk.EventTypeMessage, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, ) suite.Require().Equal(abci.Event(event1), events[0]) @@ -635,34 +634,34 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { event2 := sdk.Event{ Type: sdk.EventTypeMessage, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event2.Attributes = append( event2.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr2.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr2.String())}, ) event3 := sdk.Event{ Type: types.EventTypeTransfer, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event3.Attributes = append( event3.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr3.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr3.String())}, ) event3.Attributes = append( event3.Attributes, - tmkv.Pair{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}) + abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}) event4 := sdk.Event{ Type: types.EventTypeTransfer, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event4.Attributes = append( event4.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr4.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr4.String())}, ) event4.Attributes = append( event4.Attributes, - tmkv.Pair{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins2.String())}, + abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins2.String())}, ) suite.Require().Equal(abci.Event(event1), events[1]) diff --git a/x/ibc/23-commitment/types/commitment.pb.go b/x/ibc/23-commitment/types/commitment.pb.go index f5c8784e0e22..e7f81ccbbdf4 100644 --- a/x/ibc/23-commitment/types/commitment.pb.go +++ b/x/ibc/23-commitment/types/commitment.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - merkle "github.com/tendermint/tendermint/crypto/merkle" + crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" io "io" math "math" math_bits "math/bits" @@ -183,7 +183,7 @@ func (m *MerklePath) GetKeyPath() KeyPath { // verifiable in conjunction with a known commitment root. Proofs should be // succinct. type MerkleProof struct { - Proof *merkle.Proof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` + Proof *crypto.ProofOps `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` } func (m *MerkleProof) Reset() { *m = MerkleProof{} } @@ -219,7 +219,7 @@ func (m *MerkleProof) XXX_DiscardUnknown() { var xxx_messageInfo_MerkleProof proto.InternalMessageInfo -func (m *MerkleProof) GetProof() *merkle.Proof { +func (m *MerkleProof) GetProof() *crypto.ProofOps { if m != nil { return m.Proof } @@ -315,39 +315,39 @@ func init() { func init() { proto.RegisterFile("ibc/commitment/commitment.proto", fileDescriptor_71f36b3839a24c54) } var fileDescriptor_71f36b3839a24c54 = []byte{ - // 509 bytes of a gzipped FileDescriptorProto + // 510 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0x6d, 0x62, 0x48, 0xb8, 0x54, 0x25, 0x1c, 0xa0, 0x46, 0xa1, 0xd8, 0x91, 0x25, 0x20, - 0x20, 0xd5, 0x96, 0x52, 0xe8, 0x10, 0x31, 0xa5, 0x31, 0x34, 0xa4, 0x84, 0xe8, 0x50, 0xa4, 0xc2, - 0x12, 0x39, 0xce, 0x35, 0xb6, 0x5c, 0xfb, 0x2c, 0xfb, 0x90, 0xea, 0x6f, 0x50, 0x31, 0x31, 0xb2, - 0x20, 0x55, 0x82, 0x81, 0x8f, 0xd2, 0xb1, 0x23, 0x93, 0x85, 0x9c, 0x85, 0xb9, 0x9f, 0xa0, 0xba, - 0x3b, 0x57, 0x49, 0xa5, 0x2e, 0x77, 0xef, 0xf9, 0xfd, 0xfc, 0xde, 0xdf, 0x7f, 0x3f, 0xa0, 0x79, - 0x53, 0xc7, 0x74, 0x48, 0x10, 0x78, 0x34, 0xc0, 0x21, 0x5d, 0x09, 0x8d, 0x28, 0x26, 0x94, 0xc0, - 0x75, 0x6f, 0xea, 0x18, 0xcb, 0xa7, 0x8d, 0x87, 0x73, 0x32, 0x27, 0xbc, 0x64, 0xb2, 0x48, 0x50, - 0x8d, 0xa7, 0x14, 0x87, 0x33, 0x1c, 0x07, 0x1e, 0x6b, 0x11, 0xa7, 0x11, 0x25, 0x66, 0x80, 0x63, - 0xff, 0x08, 0x17, 0x97, 0xc0, 0xf4, 0x67, 0x00, 0x7c, 0xe0, 0x39, 0x22, 0x84, 0x42, 0x08, 0x14, - 0xd7, 0x4e, 0xdc, 0xba, 0xdc, 0x94, 0x5b, 0x6b, 0x88, 0xc7, 0x1d, 0xe5, 0xe4, 0x54, 0x93, 0xf4, - 0x1e, 0x58, 0x13, 0xdc, 0x28, 0xc6, 0x87, 0xde, 0x31, 0x7c, 0x05, 0x80, 0x8f, 0xd3, 0x49, 0xc4, - 0x33, 0xc1, 0x77, 0x1f, 0x5d, 0x64, 0xda, 0xfd, 0xd4, 0x0e, 0x8e, 0x3a, 0xfa, 0xb2, 0xa6, 0xa3, - 0xbb, 0x3e, 0x4e, 0xc5, 0x5b, 0xfa, 0xe4, 0x6a, 0xda, 0xc8, 0xa6, 0x2e, 0x1c, 0x80, 0x0a, 0xe7, - 0x6c, 0x2a, 0x26, 0x56, 0xdb, 0x1b, 0xc6, 0xf5, 0x6f, 0x33, 0x06, 0x38, 0x65, 0x68, 0x77, 0xe3, - 0x2c, 0xd3, 0xa4, 0x8b, 0x4c, 0xbb, 0xb7, 0xd2, 0xde, 0xa6, 0xae, 0x8e, 0xca, 0xbe, 0x20, 0x3a, - 0xca, 0x0f, 0x26, 0xf3, 0x3d, 0xa8, 0x5e, 0xc9, 0x24, 0xe4, 0x10, 0xbe, 0x06, 0xb7, 0x23, 0x16, - 0x14, 0xed, 0x35, 0x63, 0x69, 0x8a, 0x21, 0x4c, 0x31, 0x0a, 0x37, 0x38, 0x8f, 0x04, 0xdd, 0x51, - 0xfe, 0x9f, 0x6a, 0xb2, 0xfe, 0x06, 0x94, 0x8b, 0xf1, 0xf0, 0x39, 0x50, 0x7c, 0x9c, 0x26, 0x75, - 0xb9, 0x59, 0x6a, 0x55, 0xdb, 0x0f, 0x6e, 0x50, 0x89, 0x38, 0xd0, 0xa9, 0x30, 0xb3, 0xb8, 0x12, - 0x1b, 0x94, 0x06, 0x38, 0x85, 0x9b, 0x40, 0x09, 0xed, 0x00, 0x17, 0x0e, 0x55, 0xf2, 0x4c, 0xe3, - 0x39, 0xe2, 0x27, 0xdc, 0x01, 0x25, 0x1c, 0x3a, 0xf5, 0x5b, 0x4d, 0xb9, 0xb5, 0xde, 0x7e, 0x7c, - 0x43, 0x5b, 0x2b, 0x74, 0xc8, 0xcc, 0x0b, 0xe7, 0xdd, 0x72, 0x9e, 0x69, 0x8c, 0x45, 0xec, 0x10, - 0xff, 0xe4, 0xa5, 0x0d, 0xaa, 0x2b, 0x08, 0x7c, 0x01, 0x36, 0x07, 0xd6, 0xe7, 0x89, 0x35, 0xdc, - 0xfd, 0xd8, 0xeb, 0x0f, 0xdf, 0x4d, 0xc6, 0x68, 0x7f, 0x32, 0x1e, 0x7e, 0x1a, 0x59, 0xbb, 0xfd, - 0xb7, 0x7d, 0xab, 0x57, 0x93, 0x1a, 0xe5, 0x6f, 0x3f, 0x9b, 0xa5, 0x31, 0xda, 0x87, 0x4f, 0x40, - 0xed, 0x1a, 0xba, 0x67, 0x1d, 0xd4, 0x64, 0x51, 0xde, 0xb3, 0x0e, 0x1a, 0x95, 0x93, 0x5f, 0xaa, - 0xf4, 0xe7, 0xb7, 0x2a, 0x75, 0x47, 0x67, 0xb9, 0x2a, 0x9f, 0xe7, 0xaa, 0xfc, 0x2f, 0x57, 0xe5, - 0xef, 0x0b, 0x55, 0x3a, 0x5f, 0xa8, 0xd2, 0xdf, 0x85, 0x2a, 0x7d, 0xd9, 0x99, 0x7b, 0xd4, 0xfd, - 0x3a, 0x65, 0x7a, 0x4d, 0x87, 0x24, 0x01, 0x49, 0x8a, 0x6b, 0x2b, 0x99, 0xf9, 0xe6, 0xb1, 0xc9, - 0xb6, 0xb8, 0xbd, 0xbd, 0xb5, 0xb2, 0xc8, 0x34, 0x8d, 0x70, 0x32, 0xbd, 0xc3, 0xf7, 0x6e, 0xfb, - 0x32, 0x00, 0x00, 0xff, 0xff, 0xef, 0xa1, 0xaa, 0x6d, 0xe7, 0x02, 0x00, 0x00, + 0x14, 0xc7, 0x6d, 0x62, 0x48, 0xb8, 0x54, 0x25, 0x1c, 0xa0, 0x46, 0x69, 0x6b, 0x47, 0x1e, 0x20, + 0x20, 0xd5, 0x16, 0x29, 0xea, 0x60, 0x31, 0xa5, 0x71, 0x69, 0x94, 0x92, 0x46, 0x87, 0x22, 0x15, + 0x16, 0xcb, 0x71, 0x2e, 0xb1, 0xe5, 0xda, 0x67, 0xd9, 0x87, 0x54, 0x7f, 0x83, 0x8a, 0x89, 0x91, + 0x05, 0xa9, 0x12, 0x0c, 0x7c, 0x94, 0x8e, 0x1d, 0x99, 0x2c, 0xe4, 0x2c, 0xcc, 0xfd, 0x04, 0x95, + 0xef, 0x52, 0x25, 0x95, 0xba, 0x9c, 0xdf, 0xf9, 0xfd, 0xfc, 0xde, 0xff, 0xfd, 0xfd, 0x80, 0xe2, + 0x8d, 0x1d, 0xdd, 0x21, 0x41, 0xe0, 0xd1, 0x00, 0x87, 0x74, 0x25, 0xd4, 0xa2, 0x98, 0x50, 0x02, + 0xd7, 0xbd, 0xb1, 0xa3, 0x2d, 0xdf, 0x36, 0x9e, 0xcf, 0xc8, 0x8c, 0xb0, 0x94, 0x5e, 0x44, 0x9c, + 0x6a, 0x6c, 0x53, 0x1c, 0x4e, 0x70, 0x1c, 0x78, 0x45, 0x89, 0x38, 0x8d, 0x28, 0xd1, 0xa3, 0x98, + 0x90, 0x29, 0x4f, 0xab, 0x2f, 0x01, 0xf8, 0x88, 0x63, 0xff, 0x14, 0x23, 0x42, 0x28, 0x84, 0x40, + 0x72, 0xed, 0xc4, 0xad, 0x8b, 0x4d, 0xb1, 0xb5, 0x86, 0x58, 0x6c, 0x48, 0xe7, 0x17, 0x8a, 0xa0, + 0x76, 0xc1, 0x1a, 0xe7, 0x86, 0x31, 0x9e, 0x7a, 0x67, 0xf0, 0x1d, 0x00, 0x3e, 0x4e, 0xad, 0x88, + 0xdd, 0x38, 0xdf, 0x79, 0x71, 0x9d, 0x29, 0x4f, 0x53, 0x3b, 0x38, 0x35, 0xd4, 0x65, 0x4e, 0x45, + 0x8f, 0x7d, 0x9c, 0xf2, 0xaf, 0x54, 0xeb, 0xb6, 0xdb, 0xd0, 0xa6, 0x2e, 0xec, 0x83, 0x0a, 0xe3, + 0x6c, 0xca, 0x3b, 0x56, 0xdb, 0x1b, 0xda, 0xdd, 0x99, 0xb4, 0x3e, 0x4e, 0x0b, 0xb4, 0xb3, 0x71, + 0x99, 0x29, 0xc2, 0x75, 0xa6, 0x3c, 0x59, 0x29, 0x6f, 0x53, 0x57, 0x45, 0x65, 0x9f, 0x13, 0x86, + 0xf4, 0xa3, 0x90, 0x79, 0x00, 0xaa, 0xb7, 0x32, 0x09, 0x99, 0xc2, 0xb7, 0xe0, 0x21, 0x1b, 0x76, + 0x51, 0x7e, 0x53, 0x5b, 0x9a, 0xa1, 0x71, 0x33, 0x34, 0x06, 0x1e, 0x47, 0x09, 0xe2, 0xa4, 0x21, + 0xfd, 0xbf, 0x50, 0x44, 0xf5, 0x3d, 0x28, 0x2f, 0x5a, 0xc3, 0x57, 0x40, 0xf2, 0x71, 0x9a, 0xd4, + 0xc5, 0x66, 0xa9, 0x55, 0x6d, 0x3f, 0xbb, 0x47, 0x21, 0x62, 0x80, 0x51, 0x29, 0x8c, 0x62, 0x2a, + 0x6c, 0x50, 0xea, 0xe3, 0x14, 0x6e, 0x01, 0x29, 0xb4, 0x03, 0xbc, 0x70, 0xa7, 0x92, 0x67, 0x0a, + 0xbb, 0x23, 0x76, 0xc2, 0x3d, 0x50, 0xc2, 0xa1, 0x53, 0x7f, 0xd0, 0x14, 0x5b, 0xeb, 0xed, 0xcd, + 0x7b, 0xca, 0x9a, 0xa1, 0x43, 0x26, 0x5e, 0x38, 0xeb, 0x94, 0xf3, 0x4c, 0x29, 0x58, 0x54, 0x1c, + 0xfc, 0x7f, 0xbc, 0xb1, 0x41, 0x75, 0x05, 0x81, 0xaf, 0xc1, 0x56, 0xdf, 0xfc, 0x6c, 0x99, 0x83, + 0xfd, 0xe3, 0x6e, 0x6f, 0xf0, 0xc1, 0x1a, 0xa1, 0x23, 0x6b, 0x34, 0xf8, 0x34, 0x34, 0xf7, 0x7b, + 0x07, 0x3d, 0xb3, 0x5b, 0x13, 0x1a, 0xe5, 0x6f, 0x3f, 0x9b, 0xa5, 0x11, 0x3a, 0x82, 0xdb, 0xa0, + 0x76, 0x07, 0x3d, 0x34, 0x4f, 0x6a, 0x22, 0x4f, 0x1f, 0x9a, 0x27, 0x8d, 0xca, 0xf9, 0x2f, 0x59, + 0xf8, 0xf3, 0x5b, 0x16, 0x3a, 0xc3, 0xcb, 0x5c, 0x16, 0xaf, 0x72, 0x59, 0xfc, 0x97, 0xcb, 0xe2, + 0xf7, 0xb9, 0x2c, 0x5c, 0xcd, 0x65, 0xe1, 0xef, 0x5c, 0x16, 0xbe, 0xec, 0xcd, 0x3c, 0xea, 0x7e, + 0x1d, 0x17, 0x7a, 0x75, 0x87, 0x24, 0x01, 0x49, 0x16, 0x8f, 0x9d, 0x64, 0xe2, 0xeb, 0x67, 0x7a, + 0xb1, 0xb9, 0xed, 0xdd, 0x9d, 0x95, 0xe5, 0xa5, 0x69, 0x84, 0x93, 0xf1, 0x23, 0xb6, 0x73, 0xbb, + 0x37, 0x01, 0x00, 0x00, 0xff, 0xff, 0x84, 0x40, 0x88, 0xd1, 0xdb, 0x02, 0x00, 0x00, } func (this *MerkleProof) Equal(that interface{}) bool { @@ -991,7 +991,7 @@ func (m *MerkleProof) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Proof == nil { - m.Proof = &merkle.Proof{} + m.Proof = &crypto.ProofOps{} } if err := m.Proof.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 8169b56ec933..34347e2ecb72 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -16,7 +16,7 @@ import ( github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" - types1 "github.com/tendermint/tendermint/abci/types" + types1 "github.com/tendermint/tendermint/proto/tendermint/types" io "io" io_ioutil "io/ioutil" math "math" @@ -1445,122 +1445,122 @@ func init() { func init() { proto.RegisterFile("cosmos/staking/staking.proto", fileDescriptor_146003fcdb99b683) } var fileDescriptor_146003fcdb99b683 = []byte{ - // 1836 bytes of a gzipped FileDescriptorProto + // 1829 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x19, 0xcd, 0x6f, 0x1b, 0x59, - 0x3d, 0x63, 0xbb, 0x4e, 0xf2, 0x73, 0x62, 0x27, 0xaf, 0x6d, 0xd6, 0xc9, 0x76, 0x33, 0xe9, 0x1c, - 0x50, 0x40, 0xbb, 0x8e, 0x28, 0x48, 0x2b, 0x05, 0x90, 0xa8, 0xed, 0x46, 0x89, 0x68, 0xa4, 0x32, - 0xed, 0x06, 0x09, 0x90, 0xac, 0xe7, 0x99, 0x57, 0x67, 0xc8, 0x7c, 0x98, 0x79, 0xcf, 0xdd, 0x04, - 0xed, 0x15, 0x09, 0x21, 0x3e, 0xf6, 0xb8, 0xc7, 0x8a, 0x3f, 0x00, 0x8e, 0xc0, 0x99, 0xcb, 0x72, - 0xab, 0x38, 0x20, 0xc4, 0x61, 0x80, 0xf6, 0x00, 0xe2, 0x84, 0x7c, 0xe0, 0xc0, 0x05, 0xf4, 0x3e, - 0xe6, 0xc3, 0x63, 0x67, 0x63, 0x87, 0xb2, 0x54, 0x6a, 0x2e, 0xad, 0xdf, 0x6f, 0x7e, 0x5f, 0xef, - 0xf7, 0xfd, 0x7e, 0x81, 0x5b, 0x56, 0x40, 0xbd, 0x80, 0xee, 0x50, 0x86, 0x4f, 0x1c, 0xbf, 0x17, - 0xff, 0xdf, 0xe8, 0x87, 0x01, 0x0b, 0x50, 0x55, 0x7e, 0x6d, 0x28, 0xe8, 0xc6, 0x8d, 0x5e, 0xd0, - 0x0b, 0xc4, 0xa7, 0x1d, 0xfe, 0x4b, 0x62, 0x6d, 0xdc, 0x66, 0xc4, 0xb7, 0x49, 0xe8, 0x39, 0x3e, - 0xdb, 0xc1, 0x5d, 0xcb, 0xd9, 0x61, 0x67, 0x7d, 0x42, 0xe5, 0xbf, 0x0a, 0x45, 0xef, 0x05, 0x41, - 0xcf, 0x25, 0x3b, 0xe2, 0xd4, 0x1d, 0x3c, 0xde, 0x61, 0x8e, 0x47, 0x28, 0xc3, 0x5e, 0x5f, 0x21, - 0x6c, 0xe6, 0x11, 0xec, 0x41, 0x88, 0x99, 0x13, 0xf8, 0xea, 0xfb, 0x75, 0xa5, 0xa7, 0x52, 0x48, - 0x00, 0x8d, 0xa8, 0x04, 0xe8, 0x90, 0xf6, 0x5a, 0x21, 0xc1, 0x8c, 0x1c, 0x61, 0xd7, 0xb1, 0x31, - 0x0b, 0x42, 0xd4, 0x82, 0x8a, 0x4d, 0xa8, 0x15, 0x3a, 0x7d, 0xce, 0xa0, 0xae, 0x6d, 0x69, 0xdb, - 0x95, 0x3b, 0x6f, 0x36, 0x46, 0xef, 0xd2, 0x68, 0xa7, 0x28, 0xcd, 0xd2, 0xc7, 0x91, 0x3e, 0x67, - 0x66, 0xa9, 0xd0, 0x3d, 0x00, 0x2b, 0xf0, 0x3c, 0x87, 0x52, 0xce, 0xa3, 0x20, 0x78, 0xe8, 0x79, - 0x1e, 0xad, 0x04, 0xc3, 0xc4, 0x8c, 0x50, 0xc5, 0x27, 0x43, 0x88, 0x3e, 0x80, 0xeb, 0x9e, 0xe3, - 0x77, 0x28, 0x71, 0x1f, 0x77, 0x6c, 0xe2, 0x92, 0x9e, 0xb8, 0x54, 0xbd, 0xb8, 0xa5, 0x6d, 0x2f, - 0x36, 0xef, 0x73, 0xf4, 0x3f, 0x46, 0xfa, 0x67, 0x7a, 0x0e, 0x3b, 0x1e, 0x74, 0x1b, 0x56, 0xe0, - 0xed, 0x8c, 0xdc, 0xf3, 0x1d, 0x6a, 0x9f, 0x28, 0x3b, 0x1e, 0xf8, 0x6c, 0x18, 0xe9, 0x1b, 0x67, - 0xd8, 0x73, 0x77, 0x8d, 0x09, 0x2c, 0x0d, 0x73, 0xd5, 0x73, 0xfc, 0x87, 0xc4, 0x7d, 0xdc, 0x4e, - 0x60, 0xe8, 0x7b, 0xb0, 0xaa, 0x30, 0x82, 0xb0, 0x83, 0x6d, 0x3b, 0x24, 0x94, 0xd6, 0x4b, 0x5b, - 0xda, 0xf6, 0x52, 0xf3, 0x70, 0x18, 0xe9, 0x75, 0xc9, 0x6d, 0x0c, 0xc5, 0xf8, 0x57, 0xa4, 0xbf, - 0x33, 0x85, 0x4e, 0x77, 0x2d, 0xeb, 0xae, 0xa4, 0x30, 0x57, 0x12, 0x26, 0x0a, 0xc2, 0x65, 0x3f, - 0x89, 0x5d, 0x92, 0xc8, 0xbe, 0x96, 0x97, 0x3d, 0x86, 0x32, 0xad, 0xec, 0x23, 0xec, 0x26, 0xb2, - 0x13, 0x26, 0xb1, 0xec, 0x35, 0x28, 0xf7, 0x07, 0xdd, 0x13, 0x72, 0x56, 0x2f, 0x73, 0x43, 0x9b, - 0xea, 0x84, 0xb6, 0xe1, 0xda, 0x13, 0xec, 0x0e, 0x48, 0x7d, 0x5e, 0xf8, 0x73, 0x29, 0xf6, 0x67, - 0x2b, 0x70, 0xe2, 0x20, 0x90, 0x08, 0xbb, 0xa5, 0xbf, 0x3d, 0xd5, 0x35, 0xe3, 0x57, 0x45, 0x58, - 0x39, 0xa4, 0xbd, 0x7b, 0xb6, 0xc3, 0x5e, 0x72, 0x78, 0xf5, 0x27, 0x59, 0xa7, 0x20, 0xac, 0xd3, - 0x1a, 0x46, 0x7a, 0x55, 0x5a, 0xe7, 0x65, 0xda, 0xc4, 0x83, 0x5a, 0x1a, 0x97, 0x9d, 0x10, 0x33, - 0xa2, 0xa2, 0xb0, 0x3d, 0x65, 0x04, 0xb6, 0x89, 0x35, 0x8c, 0xf4, 0x35, 0xa9, 0x59, 0x8e, 0x95, - 0x61, 0x56, 0xad, 0x91, 0x5c, 0x40, 0xa7, 0x93, 0x03, 0xbf, 0x24, 0x44, 0xee, 0xff, 0x0f, 0x83, - 0x5e, 0xb9, 0xee, 0x97, 0x05, 0xa8, 0x1c, 0xd2, 0x9e, 0x82, 0x93, 0xc9, 0xa9, 0xa0, 0xfd, 0x1f, - 0x53, 0xa1, 0xf0, 0xe9, 0xa4, 0xc2, 0xe7, 0xa0, 0x8c, 0xbd, 0x60, 0xe0, 0x33, 0xe1, 0xed, 0xc9, - 0x31, 0xaf, 0x30, 0x94, 0xe5, 0x7e, 0x57, 0x14, 0x55, 0xb5, 0x49, 0x7a, 0x8e, 0x6f, 0x12, 0xfb, - 0x55, 0x30, 0xe0, 0xf7, 0x35, 0xb8, 0x99, 0x9a, 0x87, 0x86, 0x56, 0xce, 0x8a, 0x5f, 0x1f, 0x46, - 0xfa, 0xad, 0xbc, 0x15, 0x33, 0x68, 0x97, 0xb0, 0xe4, 0xf5, 0x84, 0xd1, 0xc3, 0xd0, 0x9a, 0xac, - 0x87, 0x4d, 0x59, 0xa2, 0x47, 0xf1, 0x7c, 0x3d, 0x32, 0x68, 0xff, 0x95, 0x1e, 0x6d, 0xca, 0xc6, - 0x9d, 0x5a, 0x9a, 0xd2, 0xa9, 0xbf, 0x2e, 0xc0, 0xf2, 0x21, 0xed, 0xbd, 0xe7, 0xdb, 0x57, 0x09, - 0x31, 0x6b, 0x42, 0xfc, 0x48, 0x83, 0xea, 0xbe, 0x43, 0x59, 0x10, 0x3a, 0x16, 0x76, 0x0f, 0xfc, - 0xc7, 0x01, 0xfa, 0x12, 0x94, 0x8f, 0x09, 0xb6, 0x49, 0xa8, 0xca, 0xff, 0x5b, 0x8d, 0x74, 0x06, - 0x6a, 0xf0, 0x19, 0xa8, 0x21, 0x35, 0xd9, 0x17, 0x48, 0x31, 0x57, 0x49, 0x82, 0xde, 0x85, 0xf2, - 0x13, 0xec, 0x52, 0xc2, 0xea, 0x85, 0xad, 0xe2, 0x76, 0xe5, 0xce, 0x7a, 0xbe, 0x77, 0x24, 0xbd, - 0x26, 0x26, 0x94, 0xe8, 0x4a, 0x9d, 0x5f, 0x14, 0xa0, 0x96, 0x1b, 0x3c, 0x50, 0x13, 0x4a, 0xa2, - 0xa2, 0x6b, 0xa2, 0xbc, 0x36, 0x66, 0x98, 0x2b, 0xda, 0xc4, 0x32, 0x05, 0x2d, 0xfa, 0x36, 0x2c, - 0x78, 0xf8, 0x54, 0x76, 0x86, 0x82, 0xe0, 0x73, 0x77, 0x36, 0x3e, 0xc3, 0x48, 0xaf, 0xa9, 0x52, - 0xad, 0xf8, 0x18, 0xe6, 0xbc, 0x87, 0x4f, 0x45, 0x3f, 0xe8, 0x43, 0x8d, 0x43, 0xad, 0x63, 0xec, - 0xf7, 0x48, 0xb6, 0xfd, 0xec, 0xcf, 0x2c, 0x64, 0x2d, 0x15, 0x92, 0x61, 0x67, 0x98, 0xcb, 0x1e, - 0x3e, 0x6d, 0x09, 0x00, 0x97, 0xb8, 0xbb, 0xf0, 0xd1, 0x53, 0x7d, 0x4e, 0x58, 0xec, 0xb7, 0x1a, - 0x40, 0x6a, 0x31, 0xf4, 0x08, 0x56, 0x72, 0xed, 0x8b, 0x2a, 0x37, 0x5e, 0x38, 0xe0, 0x2d, 0x70, - 0x65, 0x9f, 0x45, 0xba, 0x66, 0xd6, 0xac, 0x9c, 0x0b, 0xbe, 0x05, 0x95, 0x41, 0xdf, 0xc6, 0x8c, - 0x74, 0xf8, 0x6c, 0xab, 0x26, 0xc6, 0x8d, 0x86, 0x9c, 0x6b, 0x1b, 0xf1, 0x5c, 0xdb, 0x78, 0x14, - 0x0f, 0xbe, 0xcd, 0x4d, 0xce, 0x6b, 0x18, 0xe9, 0x48, 0x5e, 0x27, 0x43, 0x6c, 0x7c, 0xf8, 0x27, - 0x5d, 0x33, 0x41, 0x42, 0x38, 0xc1, 0xe8, 0x5d, 0x2a, 0x99, 0xd9, 0x02, 0xd5, 0x61, 0xde, 0x0b, - 0x7c, 0xe7, 0x44, 0x85, 0xe2, 0xa2, 0x19, 0x1f, 0xd1, 0x06, 0x2c, 0x38, 0x36, 0xf1, 0x99, 0xc3, - 0xce, 0xa4, 0x3f, 0xcd, 0xe4, 0xcc, 0xa9, 0xde, 0x27, 0x5d, 0xea, 0xc4, 0x5e, 0x30, 0xe3, 0x23, - 0xda, 0x83, 0x15, 0x4a, 0xac, 0x41, 0xe8, 0xb0, 0xb3, 0x8e, 0x15, 0xf8, 0x0c, 0x5b, 0x4c, 0x35, - 0xed, 0x37, 0x87, 0x91, 0xfe, 0x86, 0xd4, 0x35, 0x8f, 0x61, 0x98, 0xb5, 0x18, 0xd4, 0x92, 0x10, - 0x2e, 0xc1, 0x26, 0x0c, 0x3b, 0xae, 0x1c, 0xfa, 0x16, 0xcd, 0xf8, 0x98, 0xb9, 0xcb, 0xcf, 0xe7, - 0x61, 0x31, 0x9d, 0xab, 0xde, 0x87, 0x95, 0xa0, 0x4f, 0xc2, 0x09, 0xf5, 0xe8, 0x7e, 0x2a, 0x39, - 0x8f, 0x71, 0x89, 0x92, 0x50, 0x8b, 0x79, 0xc4, 0x15, 0x61, 0x8f, 0xc7, 0x83, 0x4f, 0x89, 0x4f, - 0x07, 0xb4, 0xa3, 0xe6, 0xc6, 0x42, 0xfe, 0xca, 0x79, 0x0c, 0x83, 0x47, 0x80, 0x02, 0x3d, 0x90, - 0xd3, 0xe5, 0x1a, 0x94, 0xbf, 0x83, 0x1d, 0x97, 0xd8, 0xc2, 0xa6, 0x0b, 0xa6, 0x3a, 0xa1, 0x03, - 0x28, 0x53, 0x86, 0xd9, 0x40, 0x8e, 0xde, 0xd7, 0x9a, 0x9f, 0x9f, 0x52, 0xe7, 0x66, 0xe0, 0xdb, - 0x0f, 0x05, 0xa1, 0xa9, 0x18, 0xa0, 0x3d, 0x28, 0xb3, 0xe0, 0x84, 0xf8, 0xca, 0xa8, 0x33, 0x65, - 0xfa, 0x81, 0xcf, 0x4c, 0x45, 0x8d, 0x18, 0xa4, 0x45, 0xb9, 0x43, 0x8f, 0x71, 0x48, 0xa8, 0x1c, - 0x95, 0x9b, 0x07, 0x33, 0xa7, 0xe3, 0x1b, 0xf9, 0x4e, 0x21, 0xf9, 0x19, 0x66, 0x2d, 0x01, 0x3d, - 0x14, 0x90, 0xfc, 0xe4, 0x3c, 0x7f, 0xa9, 0xc9, 0x79, 0x0f, 0x56, 0x06, 0x7e, 0x37, 0xf0, 0x6d, - 0xc7, 0xef, 0x75, 0x8e, 0x89, 0xd3, 0x3b, 0x66, 0xf5, 0x85, 0x2d, 0x6d, 0xbb, 0x98, 0xf5, 0x56, - 0x1e, 0xc3, 0x30, 0x6b, 0x09, 0x68, 0x5f, 0x40, 0x90, 0x0d, 0xd5, 0x14, 0x4b, 0xa4, 0xec, 0xe2, - 0x85, 0x29, 0x7b, 0x5b, 0xa5, 0xec, 0xcd, 0xbc, 0x94, 0x34, 0x6b, 0x97, 0x13, 0x20, 0x27, 0x43, - 0x5f, 0x1d, 0x79, 0x46, 0x82, 0x92, 0x70, 0x6e, 0x95, 0x99, 0xfe, 0x05, 0x59, 0xf9, 0x54, 0x5e, - 0x90, 0xbb, 0x4b, 0x3f, 0x78, 0xaa, 0xcf, 0x25, 0x09, 0xfb, 0xc3, 0x02, 0x94, 0xdb, 0x47, 0x0f, - 0xb0, 0x13, 0xbe, 0xae, 0xe3, 0x43, 0xa6, 0x7a, 0x7d, 0x05, 0xe6, 0xa5, 0x2d, 0x28, 0xba, 0x03, - 0xd7, 0xfa, 0xfc, 0x47, 0x5d, 0x13, 0x0d, 0x7d, 0x6d, 0x2c, 0xa4, 0x05, 0x5e, 0xfc, 0xc2, 0x14, - 0xa8, 0xc6, 0xcf, 0x8a, 0x00, 0xed, 0xa3, 0xa3, 0x47, 0xa1, 0xd3, 0x77, 0x09, 0xbb, 0x1a, 0xaf, - 0x5f, 0x9d, 0xf1, 0x3a, 0xe3, 0xe3, 0xaf, 0x41, 0x25, 0xf5, 0x11, 0x45, 0x5f, 0x86, 0x05, 0xa6, - 0x7e, 0x2b, 0x57, 0x6f, 0x8c, 0xbb, 0x3a, 0x46, 0x57, 0xee, 0x4e, 0x28, 0x8c, 0xdf, 0x17, 0x00, - 0x2e, 0x5a, 0xce, 0xbc, 0x06, 0x03, 0xf8, 0x1e, 0x94, 0x55, 0xc7, 0x29, 0x5e, 0x6a, 0x5a, 0x55, - 0xd4, 0x19, 0x2f, 0xfd, 0xa5, 0x00, 0xd7, 0xdf, 0x8b, 0xcb, 0xee, 0x95, 0x85, 0xd1, 0x3e, 0xcc, - 0x13, 0x9f, 0x85, 0x8e, 0x30, 0x31, 0x8f, 0xd2, 0xed, 0x7c, 0x94, 0x4e, 0xb0, 0xd6, 0x3d, 0x9f, - 0x85, 0x67, 0x2a, 0x66, 0x63, 0xf2, 0x8c, 0x8d, 0x7f, 0x5a, 0x84, 0xfa, 0x79, 0x54, 0xa8, 0x05, - 0x35, 0x2b, 0x24, 0x02, 0x10, 0xb7, 0x64, 0x4d, 0xb4, 0xe4, 0x8d, 0xcc, 0xc6, 0x68, 0x14, 0xc1, - 0x30, 0xab, 0x31, 0x44, 0x35, 0xe4, 0x9e, 0x58, 0x50, 0xf1, 0x54, 0xe1, 0x58, 0x53, 0x0e, 0xd1, - 0x86, 0xea, 0xc8, 0xe9, 0x5a, 0x2a, 0xcb, 0x40, 0xb6, 0xe4, 0x6a, 0x0a, 0x15, 0x3d, 0xf9, 0xbb, - 0x50, 0x73, 0x7c, 0x87, 0x39, 0xd8, 0xed, 0x74, 0xb1, 0x8b, 0x7d, 0xeb, 0x32, 0x4f, 0x11, 0xd9, - 0x4d, 0x95, 0xd8, 0x1c, 0x3b, 0xc3, 0xac, 0x2a, 0x48, 0x53, 0x02, 0xb8, 0x47, 0x62, 0x51, 0xa5, - 0x4b, 0x0d, 0x6e, 0x31, 0x79, 0xc6, 0x23, 0x3f, 0x2e, 0xc2, 0x6a, 0xb2, 0x9f, 0xb9, 0x72, 0xc5, - 0xb4, 0xae, 0x38, 0x04, 0x90, 0x05, 0x84, 0x77, 0x8e, 0x4b, 0x78, 0x83, 0x97, 0xa0, 0x45, 0xc9, - 0xa1, 0x4d, 0x59, 0xc6, 0x1f, 0x7f, 0x2d, 0xc2, 0x52, 0xd6, 0x1f, 0x57, 0x2d, 0xfd, 0x15, 0xda, - 0x98, 0xdd, 0x4d, 0x4b, 0x62, 0x49, 0x94, 0xc4, 0xdb, 0xf9, 0x92, 0x38, 0x96, 0x4a, 0xe7, 0xd7, - 0xc2, 0x7f, 0x16, 0xa0, 0xfc, 0x00, 0x87, 0xd8, 0xa3, 0xc8, 0x1a, 0x7b, 0x45, 0xc8, 0x4d, 0xc2, - 0xfa, 0x58, 0xa2, 0xb4, 0xd5, 0x1f, 0xb4, 0x2e, 0x78, 0x44, 0x7c, 0x34, 0xf1, 0x11, 0x51, 0xf5, - 0xf0, 0x69, 0x27, 0xb9, 0x97, 0x74, 0xe2, 0x72, 0x73, 0x3d, 0xe5, 0x32, 0xfa, 0x5d, 0xee, 0x42, - 0x92, 0xa7, 0x35, 0x45, 0xef, 0x42, 0x85, 0x63, 0xa4, 0x5d, 0x81, 0x93, 0xaf, 0xa5, 0xcb, 0x87, - 0xcc, 0x47, 0xc3, 0x04, 0x0f, 0x9f, 0xde, 0x93, 0x07, 0x74, 0x1f, 0xd0, 0x71, 0xb2, 0xfa, 0xea, - 0xa4, 0x26, 0xe4, 0xf4, 0x6f, 0x0d, 0x23, 0x7d, 0x5d, 0xd2, 0x8f, 0xe3, 0x18, 0xe6, 0x6a, 0x0a, - 0x8c, 0xb9, 0x7d, 0x11, 0x80, 0xdf, 0xab, 0x63, 0x13, 0x3f, 0xf0, 0xd4, 0x13, 0xf6, 0xe6, 0x30, - 0xd2, 0x57, 0x25, 0x97, 0xf4, 0x9b, 0x61, 0x2e, 0xf2, 0x43, 0x9b, 0xff, 0xce, 0x18, 0xfe, 0x27, - 0x1a, 0xa0, 0xb4, 0xf7, 0x98, 0x84, 0xf6, 0xf9, 0x13, 0x9c, 0x3f, 0xb2, 0x32, 0x2f, 0x23, 0x6d, - 0xf2, 0x23, 0x2b, 0xa5, 0x8b, 0x1f, 0x59, 0x99, 0x54, 0x7d, 0x3b, 0xad, 0xcf, 0x85, 0x73, 0xb7, - 0x82, 0x13, 0x6a, 0xf0, 0x6f, 0x34, 0x58, 0x1f, 0x0b, 0x9c, 0x44, 0xaf, 0x23, 0x40, 0x61, 0xe6, - 0xa3, 0x30, 0xcd, 0x99, 0xd2, 0x6f, 0xea, 0xf8, 0x5b, 0x0d, 0xc7, 0x6a, 0xfc, 0xcb, 0xeb, 0x26, - 0x6a, 0xa3, 0xa8, 0xc1, 0x8d, 0xac, 0xf8, 0xe4, 0x02, 0x7b, 0xb0, 0x94, 0x95, 0xae, 0x54, 0xbf, - 0xf5, 0x49, 0xaa, 0x2b, 0xad, 0x47, 0xe8, 0xd0, 0x41, 0x9a, 0x7d, 0x72, 0xe5, 0xf9, 0xd9, 0x0b, - 0x6f, 0x1f, 0xeb, 0x90, 0xcf, 0x42, 0xa9, 0xf1, 0xbf, 0x35, 0x28, 0x3d, 0x08, 0x02, 0x17, 0x05, - 0xb0, 0xea, 0x07, 0xac, 0xc3, 0x83, 0x85, 0xd8, 0x1d, 0xb5, 0x1b, 0x91, 0x5b, 0xd0, 0xd6, 0x6c, - 0x46, 0xf9, 0x7b, 0xa4, 0x8f, 0xb3, 0x32, 0x6b, 0x7e, 0xc0, 0x9a, 0x02, 0xf2, 0x48, 0x6e, 0x4e, - 0x3e, 0x80, 0xe5, 0x51, 0x61, 0x72, 0x53, 0xf4, 0x8d, 0x99, 0x85, 0x8d, 0xb2, 0x19, 0x46, 0xfa, - 0x8d, 0x34, 0x09, 0x12, 0xb0, 0x61, 0x2e, 0x75, 0x33, 0xd2, 0x77, 0x17, 0xf8, 0xed, 0xff, 0xf1, - 0x54, 0xd7, 0x9a, 0x7b, 0x1f, 0x3f, 0xdf, 0xd4, 0x9e, 0x3d, 0xdf, 0xd4, 0xfe, 0xfc, 0x7c, 0x53, - 0xfb, 0xf0, 0xc5, 0xe6, 0xdc, 0xb3, 0x17, 0x9b, 0x73, 0x7f, 0x78, 0xb1, 0x39, 0xf7, 0xcd, 0xb7, - 0x3f, 0x51, 0x85, 0xd3, 0xe4, 0x4f, 0xfd, 0x42, 0x99, 0x6e, 0x59, 0x14, 0xa8, 0x2f, 0xfc, 0x27, - 0x00, 0x00, 0xff, 0xff, 0xb2, 0x69, 0x31, 0x7c, 0x09, 0x20, 0x00, 0x00, + 0x3d, 0x63, 0xbb, 0x4e, 0xf2, 0x73, 0x62, 0x27, 0xaf, 0x6d, 0xd6, 0xc9, 0x96, 0x4c, 0x76, 0x0e, + 0x28, 0xa0, 0x5d, 0x47, 0x14, 0xc4, 0x4a, 0x11, 0x48, 0xd4, 0x76, 0xa3, 0x44, 0x34, 0x52, 0x99, + 0x76, 0x83, 0x04, 0x48, 0xd6, 0xcb, 0xcc, 0xeb, 0x64, 0xc8, 0x7c, 0x98, 0x79, 0xcf, 0xdd, 0x04, + 0xed, 0x15, 0x81, 0x90, 0x80, 0x3d, 0xee, 0x31, 0xe2, 0x0f, 0x80, 0x23, 0x70, 0xe6, 0xb2, 0xdc, + 0x2a, 0x0e, 0x08, 0x71, 0x18, 0xa0, 0x3d, 0x80, 0x38, 0x21, 0x1f, 0x38, 0x70, 0x01, 0xbd, 0x8f, + 0xf9, 0xf0, 0xd8, 0xd9, 0x38, 0xa1, 0xec, 0x56, 0xda, 0x5c, 0x5a, 0xcf, 0xef, 0xfd, 0xbe, 0xde, + 0xef, 0xfb, 0xfd, 0x02, 0x77, 0xac, 0x90, 0xfa, 0x21, 0xdd, 0xa2, 0x0c, 0x1f, 0xbb, 0x81, 0x93, + 0xfc, 0xdf, 0xea, 0x47, 0x21, 0x0b, 0x51, 0x5d, 0x9e, 0xb6, 0x14, 0x74, 0xed, 0x96, 0x13, 0x3a, + 0xa1, 0x38, 0xda, 0xe2, 0xbf, 0x24, 0xd6, 0xda, 0x1d, 0x46, 0x02, 0x9b, 0x44, 0xbe, 0x1b, 0xb0, + 0x2d, 0x76, 0xda, 0x27, 0x54, 0xfe, 0xab, 0x4e, 0x75, 0x27, 0x0c, 0x1d, 0x8f, 0x6c, 0x89, 0xaf, + 0xc3, 0xc1, 0x93, 0x2d, 0xe6, 0xfa, 0x84, 0x32, 0xec, 0xf7, 0x15, 0xc2, 0x7a, 0x11, 0xc1, 0x1e, + 0x44, 0x98, 0xb9, 0x61, 0xa0, 0xce, 0x6f, 0x2a, 0x15, 0x95, 0x2e, 0x02, 0x68, 0xc4, 0x15, 0x40, + 0xfb, 0xd4, 0xe9, 0x44, 0x04, 0x33, 0x72, 0x80, 0x3d, 0xd7, 0xc6, 0x2c, 0x8c, 0x50, 0x07, 0x6a, + 0x36, 0xa1, 0x56, 0xe4, 0xf6, 0x39, 0x83, 0xa6, 0xb6, 0xa1, 0x6d, 0xd6, 0xee, 0xbe, 0xde, 0x1a, + 0xbd, 0x46, 0xab, 0x9b, 0xa1, 0xb4, 0x2b, 0x1f, 0xc6, 0xfa, 0x8c, 0x99, 0xa7, 0x42, 0xf7, 0x01, + 0xac, 0xd0, 0xf7, 0x5d, 0x4a, 0x39, 0x8f, 0x92, 0xe0, 0xa1, 0x17, 0x79, 0x74, 0x52, 0x0c, 0x13, + 0x33, 0x42, 0x15, 0x9f, 0x1c, 0x21, 0x7a, 0x0f, 0x6e, 0xfa, 0x6e, 0xd0, 0xa3, 0xc4, 0x7b, 0xd2, + 0xb3, 0x89, 0x47, 0x1c, 0x71, 0xa9, 0x66, 0x79, 0x43, 0xdb, 0x9c, 0x6f, 0x3f, 0xe0, 0xe8, 0x7f, + 0x8a, 0xf5, 0xcf, 0x3a, 0x2e, 0x3b, 0x1a, 0x1c, 0xb6, 0xac, 0xd0, 0xdf, 0x1a, 0xb9, 0xe7, 0x5b, + 0xd4, 0x3e, 0x56, 0x76, 0xdc, 0x0b, 0xd8, 0x30, 0xd6, 0xd7, 0x4e, 0xb1, 0xef, 0x6d, 0x1b, 0x13, + 0x58, 0x1a, 0xe6, 0xb2, 0xef, 0x06, 0x8f, 0x88, 0xf7, 0xa4, 0x9b, 0xc2, 0xd0, 0xf7, 0x61, 0x59, + 0x61, 0x84, 0x51, 0x0f, 0xdb, 0x76, 0x44, 0x28, 0x6d, 0x56, 0x36, 0xb4, 0xcd, 0x85, 0xf6, 0xfe, + 0x30, 0xd6, 0x9b, 0x92, 0xdb, 0x18, 0x8a, 0xf1, 0xef, 0x58, 0x7f, 0x6b, 0x0a, 0x9d, 0xee, 0x59, + 0xd6, 0x3d, 0x49, 0x61, 0x2e, 0xa5, 0x4c, 0x14, 0x84, 0xcb, 0x7e, 0x9a, 0xb8, 0x24, 0x95, 0x7d, + 0xa3, 0x28, 0x7b, 0x0c, 0x65, 0x5a, 0xd9, 0x07, 0xd8, 0x4b, 0x65, 0xa7, 0x4c, 0x12, 0xd9, 0x2b, + 0x50, 0xed, 0x0f, 0x0e, 0x8f, 0xc9, 0x69, 0xb3, 0xca, 0x0d, 0x6d, 0xaa, 0x2f, 0xb4, 0x09, 0x37, + 0x9e, 0x62, 0x6f, 0x40, 0x9a, 0xb3, 0xc2, 0x9f, 0x0b, 0x89, 0x3f, 0x3b, 0xa1, 0x9b, 0x04, 0x81, + 0x44, 0xd8, 0xae, 0xfc, 0xfd, 0x4c, 0xd7, 0x8c, 0x5f, 0x97, 0x61, 0x69, 0x9f, 0x3a, 0xf7, 0x6d, + 0x97, 0xbd, 0xe4, 0xf0, 0xea, 0x4f, 0xb2, 0x4e, 0x49, 0x58, 0xa7, 0x33, 0x8c, 0xf5, 0xba, 0xb4, + 0xce, 0xcb, 0xb4, 0x89, 0x0f, 0x8d, 0x2c, 0x2e, 0x7b, 0x11, 0x66, 0x44, 0x45, 0x61, 0x77, 0xca, + 0x08, 0xec, 0x12, 0x6b, 0x18, 0xeb, 0x2b, 0x52, 0xb3, 0x02, 0x2b, 0xc3, 0xac, 0x5b, 0x23, 0xb9, + 0x80, 0x4e, 0x26, 0x07, 0x7e, 0x45, 0x88, 0xdc, 0xfd, 0x3f, 0x06, 0xbd, 0x72, 0xdd, 0xaf, 0x4a, + 0x50, 0xdb, 0xa7, 0x8e, 0x82, 0x93, 0xc9, 0xa9, 0xa0, 0x7d, 0x82, 0xa9, 0x50, 0xfa, 0x78, 0x52, + 0xe1, 0xf3, 0x50, 0xc5, 0x7e, 0x38, 0x08, 0x98, 0xf0, 0xf6, 0xe4, 0x98, 0x57, 0x18, 0xca, 0x72, + 0xbf, 0x2f, 0x8b, 0xaa, 0xda, 0x26, 0x8e, 0x1b, 0x98, 0xc4, 0x7e, 0x15, 0x0c, 0xf8, 0x03, 0x0d, + 0x6e, 0x67, 0xe6, 0xa1, 0x91, 0x55, 0xb0, 0xe2, 0x37, 0x86, 0xb1, 0x7e, 0xa7, 0x68, 0xc5, 0x1c, + 0xda, 0x15, 0x2c, 0x79, 0x33, 0x65, 0xf4, 0x28, 0xb2, 0x26, 0xeb, 0x61, 0x53, 0x96, 0xea, 0x51, + 0x3e, 0x5f, 0x8f, 0x1c, 0xda, 0xff, 0xa4, 0x47, 0x97, 0xb2, 0x71, 0xa7, 0x56, 0xa6, 0x74, 0xea, + 0x6f, 0x4a, 0xb0, 0xb8, 0x4f, 0x9d, 0x77, 0x02, 0xfb, 0x3a, 0x21, 0x2e, 0x9b, 0x10, 0x3f, 0xd4, + 0xa0, 0xbe, 0xeb, 0x52, 0x16, 0x46, 0xae, 0x85, 0xbd, 0xbd, 0xe0, 0x49, 0x88, 0xbe, 0x0c, 0xd5, + 0x23, 0x82, 0x6d, 0x12, 0xa9, 0xf2, 0xdf, 0x6c, 0x65, 0xe3, 0x4f, 0x4b, 0x2a, 0xb1, 0x2b, 0xce, + 0x13, 0x86, 0x12, 0x1b, 0xbd, 0x0d, 0xd5, 0xa7, 0xd8, 0xa3, 0x84, 0x35, 0x4b, 0x1b, 0xe5, 0xcd, + 0xda, 0xdd, 0xd5, 0x62, 0xdb, 0x48, 0xdb, 0x4c, 0x42, 0x28, 0xd1, 0x95, 0x26, 0xbf, 0x2c, 0x41, + 0xa3, 0x30, 0x73, 0xa0, 0x36, 0x54, 0x44, 0x31, 0xd7, 0x44, 0x65, 0x6d, 0x5d, 0x62, 0xa4, 0xe8, + 0x12, 0xcb, 0x14, 0xb4, 0xe8, 0x3b, 0x30, 0xe7, 0xe3, 0x13, 0xd9, 0x14, 0x4a, 0x82, 0xcf, 0xbd, + 0xcb, 0xf1, 0x19, 0xc6, 0x7a, 0x43, 0x55, 0x69, 0xc5, 0xc7, 0x30, 0x67, 0x7d, 0x7c, 0x22, 0x5a, + 0x41, 0x1f, 0x1a, 0x1c, 0x6a, 0x1d, 0xe1, 0xc0, 0x21, 0xf9, 0xce, 0xb3, 0x7b, 0x69, 0x21, 0x2b, + 0x99, 0x90, 0x1c, 0x3b, 0xc3, 0x5c, 0xf4, 0xf1, 0x49, 0x47, 0x00, 0xb8, 0xc4, 0xed, 0xb9, 0x0f, + 0xce, 0xf4, 0x19, 0x61, 0xb1, 0xdf, 0x69, 0x00, 0x99, 0xc5, 0xd0, 0x63, 0x58, 0x2a, 0x74, 0x2e, + 0xaa, 0x3c, 0x78, 0xe1, 0x6c, 0x37, 0xc7, 0x95, 0x7d, 0x16, 0xeb, 0x9a, 0xd9, 0xb0, 0x0a, 0x2e, + 0xf8, 0x36, 0xd4, 0x06, 0x7d, 0x1b, 0x33, 0xd2, 0xe3, 0x63, 0xad, 0x1a, 0x16, 0xd7, 0x5a, 0x72, + 0xa4, 0x6d, 0x25, 0x23, 0x6d, 0xeb, 0x71, 0x32, 0xf3, 0xb6, 0xd7, 0x39, 0xaf, 0x61, 0xac, 0x23, + 0x79, 0x9d, 0x1c, 0xb1, 0xf1, 0xfe, 0x9f, 0x75, 0xcd, 0x04, 0x09, 0xe1, 0x04, 0xa3, 0x77, 0xa9, + 0xe5, 0xc6, 0x0a, 0xd4, 0x84, 0x59, 0x3f, 0x0c, 0xdc, 0x63, 0x15, 0x85, 0xf3, 0x66, 0xf2, 0x89, + 0xd6, 0x60, 0xce, 0xb5, 0x49, 0xc0, 0x5c, 0x76, 0x2a, 0xfd, 0x69, 0xa6, 0xdf, 0x9c, 0xea, 0x5d, + 0x72, 0x48, 0xdd, 0xc4, 0x0b, 0x66, 0xf2, 0x89, 0x76, 0x60, 0x89, 0x12, 0x6b, 0x10, 0xb9, 0xec, + 0xb4, 0x67, 0x85, 0x01, 0xc3, 0x16, 0x53, 0xfd, 0xfa, 0xf5, 0x61, 0xac, 0xbf, 0x26, 0x75, 0x2d, + 0x62, 0x18, 0x66, 0x23, 0x01, 0x75, 0x24, 0x84, 0x4b, 0xb0, 0x09, 0xc3, 0xae, 0x27, 0xe7, 0xbd, + 0x79, 0x33, 0xf9, 0xcc, 0xdd, 0xe5, 0x17, 0xb3, 0x30, 0x9f, 0x8d, 0x54, 0xef, 0xc2, 0x52, 0xd8, + 0x27, 0xd1, 0x84, 0x52, 0xf4, 0x20, 0x93, 0x5c, 0xc4, 0xb8, 0x42, 0x35, 0x68, 0x24, 0x3c, 0x92, + 0x62, 0xb0, 0xc3, 0xe3, 0x21, 0xa0, 0x24, 0xa0, 0x03, 0xda, 0x53, 0x23, 0x63, 0xa9, 0x78, 0xe5, + 0x22, 0x86, 0xc1, 0x23, 0x40, 0x81, 0x1e, 0xca, 0xc1, 0x72, 0x05, 0xaa, 0xdf, 0xc5, 0xae, 0x47, + 0x6c, 0x61, 0xd3, 0x39, 0x53, 0x7d, 0xa1, 0x3d, 0xa8, 0x52, 0x86, 0xd9, 0x40, 0x4e, 0xdd, 0x37, + 0xda, 0x5f, 0x98, 0x52, 0xe7, 0x76, 0x18, 0xd8, 0x8f, 0x04, 0xa1, 0xa9, 0x18, 0xa0, 0x1d, 0xa8, + 0xb2, 0xf0, 0x98, 0x04, 0xca, 0xa8, 0x97, 0xca, 0xf4, 0xbd, 0x80, 0x99, 0x8a, 0x1a, 0x31, 0xc8, + 0xea, 0x71, 0x8f, 0x1e, 0xe1, 0x88, 0x50, 0x39, 0x25, 0xb7, 0xf7, 0x2e, 0x9d, 0x8e, 0xaf, 0x15, + 0x9b, 0x84, 0xe4, 0x67, 0x98, 0x8d, 0x14, 0xf4, 0x48, 0x40, 0x8a, 0x43, 0xf3, 0xec, 0x95, 0x86, + 0xe6, 0x1d, 0x58, 0x1a, 0x04, 0x87, 0x61, 0x60, 0xbb, 0x81, 0xd3, 0x3b, 0x22, 0xae, 0x73, 0xc4, + 0x9a, 0x73, 0x1b, 0xda, 0x66, 0x39, 0xef, 0xad, 0x22, 0x86, 0x61, 0x36, 0x52, 0xd0, 0xae, 0x80, + 0x20, 0x1b, 0xea, 0x19, 0x96, 0x48, 0xd9, 0xf9, 0x0b, 0x53, 0xf6, 0x0d, 0x95, 0xb2, 0xb7, 0x8b, + 0x52, 0xb2, 0xac, 0x5d, 0x4c, 0x81, 0x9c, 0x0c, 0x7d, 0x6d, 0xe4, 0x05, 0x09, 0x4a, 0xc2, 0xb9, + 0x55, 0x66, 0xfa, 0xc7, 0x63, 0xed, 0x63, 0x79, 0x3c, 0x6e, 0x2f, 0xfc, 0xe8, 0x4c, 0x9f, 0x49, + 0x13, 0xf6, 0xc7, 0x25, 0xa8, 0x76, 0x0f, 0x1e, 0x62, 0x37, 0xfa, 0xb4, 0x4e, 0x0e, 0xb9, 0xea, + 0xf5, 0x55, 0x98, 0x95, 0xb6, 0xa0, 0xe8, 0x2e, 0xdc, 0xe8, 0xf3, 0x1f, 0x4d, 0x4d, 0x34, 0xf4, + 0x95, 0xb1, 0x90, 0x16, 0x78, 0xc9, 0xe3, 0x52, 0xa0, 0x1a, 0x3f, 0x2f, 0x03, 0x74, 0x0f, 0x0e, + 0x1e, 0x47, 0x6e, 0xdf, 0x23, 0xec, 0x7a, 0xb2, 0x7e, 0x75, 0x26, 0xeb, 0x9c, 0x8f, 0xbf, 0x0e, + 0xb5, 0xcc, 0x47, 0x14, 0x7d, 0x05, 0xe6, 0x98, 0xfa, 0xad, 0x5c, 0xbd, 0x36, 0xee, 0xea, 0x04, + 0x5d, 0xb9, 0x3b, 0xa5, 0x30, 0xfe, 0x50, 0x02, 0xb8, 0x68, 0x2f, 0xf3, 0x29, 0x98, 0xbd, 0x77, + 0xa0, 0xaa, 0x3a, 0x4e, 0xf9, 0x4a, 0xd3, 0xaa, 0xa2, 0xce, 0x79, 0xe9, 0xaf, 0x25, 0xb8, 0xf9, + 0x4e, 0x52, 0x76, 0xaf, 0x2d, 0x8c, 0x76, 0x61, 0x96, 0x04, 0x2c, 0x72, 0x85, 0x89, 0x79, 0x94, + 0x6e, 0x16, 0xa3, 0x74, 0x82, 0xb5, 0xee, 0x07, 0x2c, 0x3a, 0x55, 0x31, 0x9b, 0x90, 0xe7, 0x6c, + 0xfc, 0xb3, 0x32, 0x34, 0xcf, 0xa3, 0x42, 0x1d, 0x68, 0x58, 0x11, 0x11, 0x80, 0xa4, 0x25, 0x6b, + 0xa2, 0x25, 0xaf, 0xe5, 0x96, 0x45, 0xa3, 0x08, 0x86, 0x59, 0x4f, 0x20, 0xaa, 0x21, 0x3b, 0x62, + 0x37, 0xc5, 0x53, 0x85, 0x63, 0x4d, 0x39, 0x44, 0x1b, 0xaa, 0x23, 0x67, 0x1b, 0xa9, 0x3c, 0x03, + 0xd9, 0x92, 0xeb, 0x19, 0x54, 0xf4, 0xe4, 0xef, 0x41, 0xc3, 0x0d, 0x5c, 0xe6, 0x62, 0xaf, 0x77, + 0x88, 0x3d, 0x1c, 0x58, 0x57, 0x79, 0x8a, 0xc8, 0x6e, 0xaa, 0xc4, 0x16, 0xd8, 0x19, 0x66, 0x5d, + 0x41, 0xda, 0x12, 0xc0, 0x3d, 0x92, 0x88, 0xaa, 0x5c, 0x69, 0x70, 0x4b, 0xc8, 0x73, 0x1e, 0xf9, + 0x49, 0x19, 0x96, 0xd3, 0xd5, 0xcc, 0xb5, 0x2b, 0xa6, 0x75, 0xc5, 0x3e, 0x80, 0x2c, 0x20, 0xbc, + 0x73, 0x5c, 0xc1, 0x1b, 0xbc, 0x04, 0xcd, 0x4b, 0x0e, 0x5d, 0xca, 0x72, 0xfe, 0xf8, 0x5b, 0x19, + 0x16, 0xf2, 0xfe, 0xb8, 0x6e, 0xe9, 0xaf, 0xd0, 0xb2, 0xec, 0x5e, 0x56, 0x12, 0x2b, 0xa2, 0x24, + 0xbe, 0x51, 0x2c, 0x89, 0x63, 0xa9, 0x74, 0x7e, 0x2d, 0xfc, 0x57, 0x09, 0xaa, 0x0f, 0x71, 0x84, + 0x7d, 0x8a, 0xac, 0xb1, 0x57, 0x84, 0xdc, 0x24, 0xac, 0x8e, 0x25, 0x4a, 0x57, 0xfd, 0x2d, 0xeb, + 0x82, 0x47, 0xc4, 0x07, 0x13, 0x1f, 0x11, 0x75, 0x1f, 0x9f, 0xf4, 0xd2, 0x7b, 0x49, 0x27, 0x2e, + 0xb6, 0x57, 0x33, 0x2e, 0xa3, 0xe7, 0x72, 0x17, 0x92, 0x3e, 0xad, 0x29, 0x7a, 0x1b, 0x6a, 0x1c, + 0x23, 0xeb, 0x0a, 0x9c, 0x7c, 0x25, 0x5b, 0x3e, 0xe4, 0x0e, 0x0d, 0x13, 0x7c, 0x7c, 0x72, 0x5f, + 0x7e, 0xa0, 0x07, 0x80, 0x8e, 0xd2, 0xad, 0x57, 0x2f, 0x33, 0x21, 0xa7, 0xff, 0xcc, 0x30, 0xd6, + 0x57, 0x25, 0xfd, 0x38, 0x8e, 0x61, 0x2e, 0x67, 0xc0, 0x84, 0xdb, 0x97, 0x00, 0xf8, 0xbd, 0x7a, + 0x36, 0x09, 0x42, 0x5f, 0x3d, 0x61, 0x6f, 0x0f, 0x63, 0x7d, 0x59, 0x72, 0xc9, 0xce, 0x0c, 0x73, + 0x9e, 0x7f, 0x74, 0xf9, 0xef, 0x9c, 0xe1, 0x7f, 0xaa, 0x01, 0xca, 0x7a, 0x8f, 0x49, 0x68, 0x9f, + 0x3f, 0xc1, 0xf9, 0x23, 0x2b, 0xf7, 0x32, 0xd2, 0x26, 0x3f, 0xb2, 0x32, 0xba, 0xe4, 0x91, 0x95, + 0x4b, 0xd5, 0x37, 0xb3, 0xfa, 0x5c, 0x3a, 0x77, 0x21, 0x38, 0xa1, 0x06, 0xff, 0x56, 0x83, 0xd5, + 0xb1, 0xc0, 0x49, 0xf5, 0x3a, 0x00, 0x14, 0xe5, 0x0e, 0x85, 0x69, 0x4e, 0x95, 0x7e, 0x53, 0xc7, + 0xdf, 0x72, 0x34, 0x56, 0xe3, 0x5f, 0x5e, 0x37, 0x51, 0x1b, 0x45, 0x0d, 0x6e, 0xe5, 0xc5, 0xa7, + 0x17, 0xd8, 0x81, 0x85, 0xbc, 0x74, 0xa5, 0xfa, 0x9d, 0x8f, 0x52, 0x5d, 0x69, 0x3d, 0x42, 0x87, + 0xf6, 0xb2, 0xec, 0x93, 0x2b, 0xcf, 0xcf, 0x5d, 0x78, 0xfb, 0x44, 0x87, 0x62, 0x16, 0x4a, 0x8d, + 0xff, 0xa3, 0x41, 0xe5, 0x61, 0x18, 0x7a, 0x28, 0x84, 0xe5, 0x20, 0x64, 0x3d, 0x1e, 0x2c, 0xc4, + 0xee, 0xa9, 0xdd, 0x88, 0xdc, 0x82, 0x76, 0x2e, 0x67, 0x94, 0x7f, 0xc4, 0xfa, 0x38, 0x2b, 0xb3, + 0x11, 0x84, 0xac, 0x2d, 0x20, 0x8f, 0xe5, 0xe6, 0xe4, 0x3d, 0x58, 0x1c, 0x15, 0x26, 0x37, 0x45, + 0xdf, 0xbc, 0xb4, 0xb0, 0x51, 0x36, 0xc3, 0x58, 0xbf, 0x95, 0x25, 0x41, 0x0a, 0x36, 0xcc, 0x85, + 0xc3, 0x9c, 0xf4, 0xed, 0x39, 0x7e, 0xfb, 0x7f, 0x9e, 0xe9, 0x5a, 0x7b, 0xe7, 0xc3, 0xe7, 0xeb, + 0xda, 0xb3, 0xe7, 0xeb, 0xda, 0x5f, 0x9e, 0xaf, 0x6b, 0xef, 0xbf, 0x58, 0x9f, 0x79, 0xf6, 0x62, + 0x7d, 0xe6, 0x8f, 0x2f, 0xd6, 0x67, 0xbe, 0xf5, 0xe6, 0x47, 0xaa, 0x70, 0x92, 0xfe, 0x81, 0x5f, + 0x28, 0x73, 0x58, 0x15, 0x05, 0xea, 0x8b, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xba, 0x75, 0x81, + 0xcf, 0xff, 0x1f, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1569,614 +1569,724 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9698 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x7b, 0x70, 0x24, 0xc7, - 0x79, 0x1f, 0xf6, 0x81, 0xc5, 0xee, 0xb7, 0x8b, 0xc5, 0xa2, 0x81, 0xbb, 0xc3, 0x2d, 0xc9, 0xdb, - 0xe3, 0x1c, 0x1f, 0x38, 0x3e, 0x70, 0xd4, 0x89, 0xcf, 0x3d, 0x8a, 0x14, 0x16, 0xc0, 0xdd, 0x81, - 0x04, 0xee, 0xc0, 0x01, 0x70, 0xa4, 0x28, 0xdb, 0xe3, 0xc1, 0x6c, 0x63, 0x31, 0xc4, 0xee, 0xcc, - 0x72, 0x66, 0xf6, 0x0e, 0x60, 0x29, 0x55, 0x4c, 0xf9, 0x21, 0xc9, 0x91, 0x2d, 0x45, 0xb1, 0x1d, - 0x5a, 0x96, 0x64, 0x4a, 0xa9, 0x44, 0x8e, 0x92, 0xf8, 0x91, 0x28, 0x7a, 0xd8, 0xf9, 0x43, 0x55, - 0x79, 0x58, 0xa9, 0x72, 0xa5, 0xa4, 0xc4, 0x49, 0xb9, 0x52, 0x29, 0xd8, 0x22, 0x55, 0x65, 0x45, - 0x61, 0x12, 0xe5, 0x42, 0xbb, 0x5c, 0xd2, 0x1f, 0x49, 0xf5, 0x6b, 0x5e, 0x3b, 0xbb, 0x33, 0x38, - 0x1e, 0x29, 0xba, 0xa4, 0xbf, 0xb0, 0xd3, 0xf3, 0x7d, 0xbf, 0xee, 0xfe, 0xfa, 0xeb, 0xef, 0xfb, - 0xfa, 0xeb, 0xee, 0x01, 0x7c, 0x31, 0x0d, 0xb7, 0x69, 0xa6, 0xdd, 0x31, 0xed, 0x33, 0x2f, 0xf6, - 0xb0, 0xb5, 0x7f, 0xa6, 0xab, 0xb6, 0x74, 0x43, 0x75, 0x74, 0xd3, 0x98, 0xeb, 0x5a, 0xa6, 0x63, - 0xa2, 0x12, 0x7b, 0x3d, 0x47, 0x5f, 0x4b, 0x06, 0x14, 0xd7, 0xd4, 0x16, 0x96, 0xf1, 0x8b, 0x3d, - 0x6c, 0x3b, 0xa8, 0x02, 0x99, 0x5d, 0xbc, 0x3f, 0x93, 0x3a, 0x99, 0x9a, 0x2d, 0xc9, 0xe4, 0x27, - 0x3a, 0x0a, 0x39, 0x73, 0x7b, 0xdb, 0xc6, 0xce, 0x4c, 0xfa, 0x64, 0x6a, 0x36, 0x2b, 0xf3, 0x27, - 0x34, 0x0d, 0xa3, 0x6d, 0xbd, 0xa3, 0x3b, 0x33, 0x19, 0x5a, 0xcc, 0x1e, 0x50, 0x0d, 0x8a, 0x9a, - 0xd9, 0x33, 0x1c, 0xc5, 0x31, 0x1d, 0xb5, 0x3d, 0x93, 0x3d, 0x99, 0x9a, 0xcd, 0xcb, 0x40, 0x8b, - 0x36, 0x48, 0x89, 0xf4, 0x24, 0x94, 0x58, 0x7d, 0x76, 0xd7, 0x34, 0x6c, 0x8c, 0x8e, 0x43, 0xde, - 0xc0, 0x7b, 0x8e, 0xe2, 0xd5, 0x3a, 0x46, 0x9e, 0x9f, 0xc6, 0xfb, 0xa4, 0x06, 0x86, 0xc2, 0x2a, - 0x66, 0x0f, 0x8d, 0xc6, 0x37, 0x5e, 0x3b, 0x91, 0xfa, 0xe6, 0x6b, 0x27, 0x52, 0x7f, 0xfe, 0xda, - 0x89, 0xd4, 0x27, 0x5e, 0x3f, 0x31, 0xf2, 0xcd, 0xd7, 0x4f, 0x8c, 0xfc, 0xe9, 0xeb, 0x27, 0x46, - 0x9e, 0x9f, 0x6d, 0xe9, 0xce, 0x4e, 0x6f, 0x6b, 0x4e, 0x33, 0x3b, 0x67, 0xb8, 0x08, 0xd8, 0x9f, - 0xfb, 0xed, 0xe6, 0xee, 0x19, 0x67, 0xbf, 0x8b, 0xb9, 0x4c, 0xb6, 0x72, 0x54, 0x12, 0xef, 0x85, - 0xdf, 0x3c, 0x07, 0x27, 0x5b, 0xa6, 0xd9, 0x6a, 0xe3, 0x33, 0xb4, 0x64, 0xab, 0xb7, 0x7d, 0xa6, - 0x89, 0x6d, 0xcd, 0xd2, 0xbb, 0x8e, 0x69, 0x71, 0x79, 0x4d, 0x30, 0x8a, 0x39, 0x41, 0x21, 0xad, - 0xc2, 0xe4, 0x79, 0xbd, 0x8d, 0x17, 0x5d, 0xc2, 0x75, 0xec, 0xa0, 0x47, 0x21, 0xbb, 0xad, 0xb7, - 0xf1, 0x4c, 0xea, 0x64, 0x66, 0xb6, 0x78, 0xf6, 0x8e, 0xb9, 0x10, 0xd3, 0x5c, 0x90, 0x63, 0x8d, - 0x14, 0xcb, 0x94, 0x43, 0xfa, 0x4e, 0x16, 0xa6, 0x22, 0xde, 0x22, 0x04, 0x59, 0x43, 0xed, 0x60, - 0x2a, 0x95, 0x82, 0x4c, 0x7f, 0xa3, 0x19, 0x18, 0xeb, 0xaa, 0xda, 0xae, 0xda, 0xc2, 0x54, 0x28, - 0x05, 0x59, 0x3c, 0xa2, 0x13, 0x00, 0x4d, 0xdc, 0xc5, 0x46, 0x13, 0x1b, 0xda, 0xfe, 0x4c, 0xe6, - 0x64, 0x66, 0xb6, 0x20, 0xfb, 0x4a, 0xd0, 0xbd, 0x30, 0xd9, 0xed, 0x6d, 0xb5, 0x75, 0x4d, 0xf1, - 0x91, 0xc1, 0xc9, 0xcc, 0xec, 0xa8, 0x5c, 0x61, 0x2f, 0x16, 0x3d, 0xe2, 0xbb, 0x61, 0xe2, 0x1a, - 0x56, 0x77, 0xfd, 0xa4, 0x45, 0x4a, 0x5a, 0x26, 0xc5, 0x3e, 0xc2, 0x05, 0x28, 0x75, 0xb0, 0x6d, - 0xab, 0x2d, 0xac, 0x10, 0xf9, 0xce, 0x64, 0x69, 0xef, 0x4f, 0xf6, 0xf5, 0x3e, 0xdc, 0xf3, 0x22, - 0xe7, 0xda, 0xd8, 0xef, 0x62, 0x34, 0x0f, 0x05, 0x6c, 0xf4, 0x3a, 0x0c, 0x61, 0x74, 0x80, 0xfc, - 0x96, 0x8c, 0x5e, 0x27, 0x8c, 0x92, 0x27, 0x6c, 0x1c, 0x62, 0xcc, 0xc6, 0xd6, 0x55, 0x5d, 0xc3, - 0x33, 0x39, 0x0a, 0x70, 0x77, 0x1f, 0xc0, 0x3a, 0x7b, 0x1f, 0xc6, 0x10, 0x7c, 0x68, 0x01, 0x0a, - 0x78, 0xcf, 0xc1, 0x86, 0xad, 0x9b, 0xc6, 0xcc, 0x18, 0x05, 0xb9, 0x33, 0x62, 0x14, 0x71, 0xbb, - 0x19, 0x86, 0xf0, 0xf8, 0xd0, 0xc3, 0x30, 0x66, 0x76, 0xc9, 0x5c, 0xb3, 0x67, 0xf2, 0x27, 0x53, - 0xb3, 0xc5, 0xb3, 0xb7, 0x46, 0x2a, 0xc2, 0x65, 0x46, 0x23, 0x0b, 0x62, 0xb4, 0x0c, 0x15, 0xdb, - 0xec, 0x59, 0x1a, 0x56, 0x34, 0xb3, 0x89, 0x15, 0xdd, 0xd8, 0x36, 0x67, 0x0a, 0x14, 0xa0, 0xd6, - 0xdf, 0x11, 0x4a, 0xb8, 0x60, 0x36, 0xf1, 0xb2, 0xb1, 0x6d, 0xca, 0x65, 0x3b, 0xf0, 0x4c, 0xe6, - 0xab, 0xbd, 0x6f, 0x38, 0xea, 0xde, 0x4c, 0x89, 0x6a, 0x08, 0x7f, 0x92, 0xbe, 0x96, 0x83, 0x89, - 0x24, 0x2a, 0x76, 0x0e, 0x46, 0xb7, 0x49, 0x2f, 0x67, 0xd2, 0x87, 0x91, 0x01, 0xe3, 0x09, 0x0a, - 0x31, 0x77, 0x83, 0x42, 0x9c, 0x87, 0xa2, 0x81, 0x6d, 0x07, 0x37, 0x99, 0x46, 0x64, 0x12, 0xea, - 0x14, 0x30, 0xa6, 0x7e, 0x95, 0xca, 0xde, 0x90, 0x4a, 0x3d, 0x07, 0x13, 0x6e, 0x93, 0x14, 0x4b, - 0x35, 0x5a, 0x42, 0x37, 0xcf, 0xc4, 0xb5, 0x64, 0x6e, 0x49, 0xf0, 0xc9, 0x84, 0x4d, 0x2e, 0xe3, - 0xc0, 0x33, 0x5a, 0x04, 0x30, 0x0d, 0x6c, 0x6e, 0x2b, 0x4d, 0xac, 0xb5, 0x67, 0xf2, 0x03, 0xa4, - 0x74, 0x99, 0x90, 0xf4, 0x49, 0xc9, 0x64, 0xa5, 0x5a, 0x1b, 0x3d, 0xe6, 0xa9, 0xda, 0xd8, 0x00, - 0x4d, 0x59, 0x65, 0x93, 0xac, 0x4f, 0xdb, 0x36, 0xa1, 0x6c, 0x61, 0xa2, 0xf7, 0xb8, 0xc9, 0x7b, - 0x56, 0xa0, 0x8d, 0x98, 0x8b, 0xed, 0x99, 0xcc, 0xd9, 0x58, 0xc7, 0xc6, 0x2d, 0xff, 0x23, 0x3a, - 0x05, 0x6e, 0x81, 0x42, 0xd5, 0x0a, 0xa8, 0x15, 0x2a, 0x89, 0xc2, 0x4b, 0x6a, 0x07, 0x57, 0x5f, - 0x82, 0x72, 0x50, 0x3c, 0xc4, 0xcc, 0xdb, 0x8e, 0x6a, 0x39, 0x54, 0x0b, 0x47, 0x65, 0xf6, 0x40, - 0x1c, 0x11, 0x36, 0x9a, 0xd4, 0xca, 0x8d, 0xca, 0xe4, 0x27, 0x7a, 0xbf, 0xd7, 0xe1, 0x0c, 0xed, - 0xf0, 0x5d, 0xfd, 0x23, 0x1a, 0x40, 0x0e, 0xf7, 0xbb, 0xfa, 0x08, 0x8c, 0x07, 0x3a, 0x90, 0xb4, - 0x6a, 0xe9, 0x43, 0x70, 0x24, 0x12, 0x1a, 0x3d, 0x07, 0xd3, 0x3d, 0x43, 0x37, 0x1c, 0x6c, 0x75, - 0x2d, 0x4c, 0x34, 0x96, 0x55, 0x35, 0xf3, 0x17, 0x63, 0x03, 0x74, 0x6e, 0xd3, 0x4f, 0xcd, 0x50, - 0xe4, 0xa9, 0x5e, 0x7f, 0xe1, 0x3d, 0x85, 0xfc, 0x77, 0xc7, 0x2a, 0x2f, 0xbf, 0xfc, 0xf2, 0xcb, - 0x69, 0xe9, 0x95, 0x1c, 0x4c, 0x47, 0xcd, 0x99, 0xc8, 0xe9, 0x7b, 0x14, 0x72, 0x46, 0xaf, 0xb3, - 0x85, 0x2d, 0x2a, 0xa4, 0x51, 0x99, 0x3f, 0xa1, 0x79, 0x18, 0x6d, 0xab, 0x5b, 0x98, 0xb9, 0xe4, - 0xf2, 0xd9, 0x7b, 0x13, 0xcd, 0xca, 0xb9, 0x15, 0xc2, 0x22, 0x33, 0x4e, 0xf4, 0x04, 0x64, 0xb9, - 0x89, 0x26, 0x08, 0xf7, 0x24, 0x43, 0x20, 0x73, 0x49, 0xa6, 0x7c, 0xe8, 0x16, 0x28, 0x90, 0xbf, - 0x4c, 0x37, 0x72, 0xb4, 0xcd, 0x79, 0x52, 0x40, 0xf4, 0x02, 0x55, 0x21, 0x4f, 0xa7, 0x49, 0x13, - 0x0b, 0xd7, 0xe6, 0x3e, 0x13, 0xc5, 0x6a, 0xe2, 0x6d, 0xb5, 0xd7, 0x76, 0x94, 0xab, 0x6a, 0xbb, - 0x87, 0xa9, 0xc2, 0x17, 0xe4, 0x12, 0x2f, 0xbc, 0x42, 0xca, 0x48, 0xe4, 0xc1, 0x66, 0x95, 0x6e, - 0x34, 0xf1, 0x1e, 0xb5, 0x9e, 0xa3, 0x32, 0x9b, 0x68, 0xcb, 0xa4, 0x84, 0x54, 0xff, 0x82, 0x6d, - 0x1a, 0x42, 0x35, 0x69, 0x15, 0xa4, 0x80, 0x56, 0xff, 0x48, 0xd8, 0x70, 0xdf, 0x16, 0xdd, 0xbd, - 0xb0, 0x4e, 0x49, 0x5f, 0x4e, 0x43, 0x96, 0xda, 0x8b, 0x09, 0x28, 0x6e, 0x7c, 0x60, 0x6d, 0x49, - 0x59, 0xbc, 0xbc, 0xd9, 0x58, 0x59, 0xaa, 0xa4, 0x50, 0x19, 0x80, 0x16, 0x9c, 0x5f, 0xb9, 0x3c, - 0xbf, 0x51, 0x49, 0xbb, 0xcf, 0xcb, 0x97, 0x36, 0x1e, 0x7e, 0xb0, 0x92, 0x71, 0x19, 0x36, 0x59, - 0x41, 0xd6, 0x4f, 0xf0, 0xde, 0xb3, 0x95, 0x51, 0x54, 0x81, 0x12, 0x03, 0x58, 0x7e, 0x6e, 0x69, - 0xf1, 0xe1, 0x07, 0x2b, 0xb9, 0x60, 0xc9, 0x7b, 0xcf, 0x56, 0xc6, 0xd0, 0x38, 0x14, 0x68, 0x49, - 0xe3, 0xf2, 0xe5, 0x95, 0x4a, 0xde, 0xc5, 0x5c, 0xdf, 0x90, 0x97, 0x2f, 0x5d, 0xa8, 0x14, 0x5c, - 0xcc, 0x0b, 0xf2, 0xe5, 0xcd, 0xb5, 0x0a, 0xb8, 0x08, 0xab, 0x4b, 0xeb, 0xeb, 0xf3, 0x17, 0x96, - 0x2a, 0x45, 0x97, 0xa2, 0xf1, 0x81, 0x8d, 0xa5, 0xf5, 0x4a, 0x29, 0xd0, 0xac, 0xf7, 0x9e, 0xad, - 0x8c, 0xbb, 0x55, 0x2c, 0x5d, 0xda, 0x5c, 0xad, 0x94, 0xd1, 0x24, 0x8c, 0xb3, 0x2a, 0x44, 0x23, - 0x26, 0x42, 0x45, 0x0f, 0x3f, 0x58, 0xa9, 0x78, 0x0d, 0x61, 0x28, 0x93, 0x81, 0x82, 0x87, 0x1f, - 0xac, 0x20, 0x69, 0x01, 0x46, 0xa9, 0x76, 0x21, 0x04, 0xe5, 0x95, 0xf9, 0xc6, 0xd2, 0x8a, 0x72, - 0x79, 0x6d, 0x63, 0xf9, 0xf2, 0xa5, 0xf9, 0x95, 0x4a, 0xca, 0x2b, 0x93, 0x97, 0x9e, 0xd9, 0x5c, - 0x96, 0x97, 0x16, 0x2b, 0x69, 0x7f, 0xd9, 0xda, 0xd2, 0xfc, 0xc6, 0xd2, 0x62, 0x25, 0x23, 0x69, - 0x30, 0x1d, 0x65, 0x27, 0x23, 0x67, 0x86, 0x6f, 0x88, 0xd3, 0x03, 0x86, 0x98, 0x62, 0xf5, 0x0d, - 0xf1, 0xeb, 0x69, 0x98, 0x8a, 0xf0, 0x15, 0x91, 0x95, 0x3c, 0x09, 0xa3, 0x4c, 0x45, 0x99, 0xf7, - 0x3c, 0x1d, 0xe9, 0x74, 0xa8, 0xc2, 0xf6, 0x79, 0x50, 0xca, 0xe7, 0x8f, 0x20, 0x32, 0x03, 0x22, - 0x08, 0x02, 0xd1, 0x67, 0xd3, 0x7f, 0xba, 0xcf, 0xa6, 0x33, 0xb7, 0xf7, 0x70, 0x12, 0xb7, 0x47, - 0xcb, 0x0e, 0x67, 0xdb, 0x47, 0x23, 0x6c, 0xfb, 0x39, 0x98, 0xec, 0x03, 0x4a, 0x6c, 0x63, 0x7f, - 0x2e, 0x05, 0x33, 0x83, 0x84, 0x13, 0x63, 0xe9, 0xd2, 0x01, 0x4b, 0x77, 0x2e, 0x2c, 0xc1, 0xdb, - 0x07, 0x0f, 0x42, 0xdf, 0x58, 0x7f, 0x21, 0x05, 0x47, 0xa3, 0x23, 0xc5, 0xc8, 0x36, 0x3c, 0x01, - 0xb9, 0x0e, 0x76, 0x76, 0x4c, 0x11, 0x2d, 0xdd, 0x15, 0xe1, 0x83, 0xc9, 0xeb, 0xf0, 0x60, 0x73, - 0x2e, 0xbf, 0x13, 0xcf, 0x0c, 0x0a, 0xf7, 0x58, 0x6b, 0xfa, 0x5a, 0xfa, 0xd1, 0x34, 0x1c, 0x89, - 0x04, 0x8f, 0x6c, 0xe8, 0x6d, 0x00, 0xba, 0xd1, 0xed, 0x39, 0x2c, 0x22, 0x62, 0x06, 0xb6, 0x40, - 0x4b, 0xa8, 0xf1, 0x22, 0xc6, 0xb3, 0xe7, 0xb8, 0xef, 0x33, 0xf4, 0x3d, 0xb0, 0x22, 0x4a, 0xf0, - 0xa8, 0xd7, 0xd0, 0x2c, 0x6d, 0xe8, 0x89, 0x01, 0x3d, 0xed, 0x53, 0xcc, 0x07, 0xa0, 0xa2, 0xb5, - 0x75, 0x6c, 0x38, 0x8a, 0xed, 0x58, 0x58, 0xed, 0xe8, 0x46, 0x8b, 0x7a, 0x90, 0x7c, 0x7d, 0x74, - 0x5b, 0x6d, 0xdb, 0x58, 0x9e, 0x60, 0xaf, 0xd7, 0xc5, 0x5b, 0xc2, 0x41, 0x15, 0xc8, 0xf2, 0x71, - 0xe4, 0x02, 0x1c, 0xec, 0xb5, 0xcb, 0x21, 0x7d, 0xb2, 0x00, 0x45, 0x5f, 0x5c, 0x8d, 0x6e, 0x87, - 0xd2, 0x0b, 0xea, 0x55, 0x55, 0x11, 0x6b, 0x25, 0x26, 0x89, 0x22, 0x29, 0x5b, 0xe3, 0xeb, 0xa5, - 0x07, 0x60, 0x9a, 0x92, 0x98, 0x3d, 0x07, 0x5b, 0x8a, 0xd6, 0x56, 0x6d, 0x9b, 0x0a, 0x2d, 0x4f, - 0x49, 0x11, 0x79, 0x77, 0x99, 0xbc, 0x5a, 0x10, 0x6f, 0xd0, 0x43, 0x30, 0x45, 0x39, 0x3a, 0xbd, - 0xb6, 0xa3, 0x77, 0xdb, 0x58, 0x21, 0xab, 0x37, 0x9b, 0x7a, 0x12, 0xb7, 0x65, 0x93, 0x84, 0x62, - 0x95, 0x13, 0x90, 0x16, 0xd9, 0x68, 0x11, 0x6e, 0xa3, 0x6c, 0x2d, 0x6c, 0x60, 0x4b, 0x75, 0xb0, - 0x82, 0x5f, 0xec, 0xa9, 0x6d, 0x5b, 0x51, 0x8d, 0xa6, 0xb2, 0xa3, 0xda, 0x3b, 0x33, 0xd3, 0x04, - 0xa0, 0x91, 0x9e, 0x49, 0xc9, 0xc7, 0x09, 0xe1, 0x05, 0x4e, 0xb7, 0x44, 0xc9, 0xe6, 0x8d, 0xe6, - 0x45, 0xd5, 0xde, 0x41, 0x75, 0x38, 0x4a, 0x51, 0x6c, 0xc7, 0xd2, 0x8d, 0x96, 0xa2, 0xed, 0x60, - 0x6d, 0x57, 0xe9, 0x39, 0xdb, 0x8f, 0xce, 0xdc, 0xe2, 0xaf, 0x9f, 0xb6, 0x70, 0x9d, 0xd2, 0x2c, - 0x10, 0x92, 0x4d, 0x67, 0xfb, 0x51, 0xb4, 0x0e, 0x25, 0x32, 0x18, 0x1d, 0xfd, 0x25, 0xac, 0x6c, - 0x9b, 0x16, 0x75, 0x8d, 0xe5, 0x08, 0xd3, 0xe4, 0x93, 0xe0, 0xdc, 0x65, 0xce, 0xb0, 0x6a, 0x36, - 0x71, 0x7d, 0x74, 0x7d, 0x6d, 0x69, 0x69, 0x51, 0x2e, 0x0a, 0x94, 0xf3, 0xa6, 0x45, 0x14, 0xaa, - 0x65, 0xba, 0x02, 0x2e, 0x32, 0x85, 0x6a, 0x99, 0x42, 0xbc, 0x0f, 0xc1, 0x94, 0xa6, 0xb1, 0x3e, - 0xeb, 0x9a, 0xc2, 0xd7, 0x58, 0xf6, 0x4c, 0x25, 0x20, 0x2c, 0x4d, 0xbb, 0xc0, 0x08, 0xb8, 0x8e, - 0xdb, 0xe8, 0x31, 0x38, 0xe2, 0x09, 0xcb, 0xcf, 0x38, 0xd9, 0xd7, 0xcb, 0x30, 0xeb, 0x43, 0x30, - 0xd5, 0xdd, 0xef, 0x67, 0x44, 0x81, 0x1a, 0xbb, 0xfb, 0x61, 0xb6, 0x47, 0x60, 0xba, 0xbb, 0xd3, - 0xed, 0xe7, 0xbb, 0xc7, 0xcf, 0x87, 0xba, 0x3b, 0xdd, 0x30, 0xe3, 0x9d, 0x74, 0xc1, 0x6d, 0x61, - 0x4d, 0x75, 0x70, 0x73, 0xe6, 0x98, 0x9f, 0xdc, 0xf7, 0x02, 0x9d, 0x81, 0x8a, 0xa6, 0x29, 0xd8, - 0x50, 0xb7, 0xda, 0x58, 0x51, 0x2d, 0x6c, 0xa8, 0xf6, 0x4c, 0xcd, 0x4f, 0x5c, 0xd6, 0xb4, 0x25, - 0xfa, 0x76, 0x9e, 0xbe, 0x44, 0xf7, 0xc0, 0xa4, 0xb9, 0xf5, 0x82, 0xc6, 0x54, 0x52, 0xe9, 0x5a, - 0x78, 0x5b, 0xdf, 0x9b, 0xb9, 0x83, 0xca, 0x77, 0x82, 0xbc, 0xa0, 0x0a, 0xb9, 0x46, 0x8b, 0xd1, - 0x69, 0xa8, 0x68, 0xf6, 0x8e, 0x6a, 0x75, 0xa9, 0x4d, 0xb6, 0xbb, 0xaa, 0x86, 0x67, 0xee, 0x64, - 0xa4, 0xac, 0xfc, 0x92, 0x28, 0x26, 0x53, 0xc2, 0xbe, 0xa6, 0x6f, 0x3b, 0x02, 0xf1, 0x6e, 0x36, - 0x25, 0x68, 0x19, 0x47, 0x9b, 0x85, 0x0a, 0x11, 0x45, 0xa0, 0xe2, 0x59, 0x4a, 0x56, 0xee, 0xee, - 0x74, 0xfd, 0xf5, 0x9e, 0x82, 0x71, 0x42, 0xe9, 0x55, 0x7a, 0x9a, 0x05, 0x64, 0xdd, 0x1d, 0x5f, - 0x8d, 0x0f, 0xc2, 0x51, 0x42, 0xd4, 0xc1, 0x8e, 0xda, 0x54, 0x1d, 0xd5, 0x47, 0x7d, 0x1f, 0xa5, - 0x26, 0x72, 0x5f, 0xe5, 0x2f, 0x03, 0xed, 0xb4, 0x7a, 0x5b, 0xfb, 0xae, 0x66, 0xdd, 0xcf, 0xda, - 0x49, 0xca, 0x84, 0x6e, 0xbd, 0x6d, 0x41, 0xb7, 0x54, 0x87, 0x92, 0x5f, 0xf1, 0x51, 0x01, 0x98, - 0xea, 0x57, 0x52, 0x24, 0x0a, 0x5a, 0xb8, 0xbc, 0x48, 0xe2, 0x97, 0xe7, 0x97, 0x2a, 0x69, 0x12, - 0x47, 0xad, 0x2c, 0x6f, 0x2c, 0x29, 0xf2, 0xe6, 0xa5, 0x8d, 0xe5, 0xd5, 0xa5, 0x4a, 0xc6, 0x17, - 0xb0, 0x3f, 0x95, 0xcd, 0xdf, 0x55, 0xb9, 0x5b, 0xfa, 0x56, 0x1a, 0xca, 0xc1, 0x15, 0x18, 0x7a, - 0x1c, 0x8e, 0x89, 0x74, 0x89, 0x8d, 0x1d, 0xe5, 0x9a, 0x6e, 0xd1, 0x19, 0xd9, 0x51, 0x99, 0x77, - 0x74, 0x75, 0x62, 0x9a, 0x53, 0xad, 0x63, 0xe7, 0x59, 0xdd, 0x22, 0xf3, 0xad, 0xa3, 0x3a, 0x68, - 0x05, 0x6a, 0x86, 0xa9, 0xd8, 0x8e, 0x6a, 0x34, 0x55, 0xab, 0xa9, 0x78, 0x89, 0x2a, 0x45, 0xd5, - 0x34, 0x6c, 0xdb, 0x26, 0xf3, 0x84, 0x2e, 0xca, 0xad, 0x86, 0xb9, 0xce, 0x89, 0x3d, 0x17, 0x31, - 0xcf, 0x49, 0x43, 0xfa, 0x9b, 0x19, 0xa4, 0xbf, 0xb7, 0x40, 0xa1, 0xa3, 0x76, 0x15, 0x6c, 0x38, - 0xd6, 0x3e, 0x8d, 0xbb, 0xf3, 0x72, 0xbe, 0xa3, 0x76, 0x97, 0xc8, 0xf3, 0x3b, 0xb2, 0xfc, 0x79, - 0x2a, 0x9b, 0xcf, 0x57, 0x0a, 0x4f, 0x65, 0xf3, 0x85, 0x0a, 0x48, 0xaf, 0x65, 0xa0, 0xe4, 0x8f, - 0xc3, 0xc9, 0xb2, 0x46, 0xa3, 0x2e, 0x2b, 0x45, 0x8d, 0xda, 0xa9, 0xa1, 0x51, 0xfb, 0xdc, 0x02, - 0xf1, 0x65, 0xf5, 0x1c, 0x8b, 0x8e, 0x65, 0xc6, 0x49, 0xe2, 0x08, 0xa2, 0x6c, 0x98, 0x45, 0x23, - 0x79, 0x99, 0x3f, 0xa1, 0x0b, 0x90, 0x7b, 0xc1, 0xa6, 0xd8, 0x39, 0x8a, 0x7d, 0xc7, 0x70, 0xec, - 0xa7, 0xd6, 0x29, 0x78, 0xe1, 0xa9, 0x75, 0xe5, 0xd2, 0x65, 0x79, 0x75, 0x7e, 0x45, 0xe6, 0xec, - 0xe8, 0x38, 0x64, 0xdb, 0xea, 0x4b, 0xfb, 0x41, 0xaf, 0x47, 0x8b, 0x92, 0x0e, 0xc2, 0x71, 0xc8, - 0x5e, 0xc3, 0xea, 0x6e, 0xd0, 0xd7, 0xd0, 0xa2, 0xb7, 0x71, 0x32, 0x9c, 0x81, 0x51, 0x2a, 0x2f, - 0x04, 0xc0, 0x25, 0x56, 0x19, 0x41, 0x79, 0xc8, 0x2e, 0x5c, 0x96, 0xc9, 0x84, 0xa8, 0x40, 0x89, - 0x95, 0x2a, 0x6b, 0xcb, 0x4b, 0x0b, 0x4b, 0x95, 0xb4, 0xf4, 0x10, 0xe4, 0x98, 0x10, 0xc8, 0x64, - 0x71, 0xc5, 0x50, 0x19, 0xe1, 0x8f, 0x1c, 0x23, 0x25, 0xde, 0x6e, 0xae, 0x36, 0x96, 0xe4, 0x4a, - 0x3a, 0x38, 0xd4, 0xd9, 0xca, 0xa8, 0x64, 0x43, 0xc9, 0x1f, 0x88, 0xbf, 0x33, 0x8b, 0xec, 0xaf, - 0xa7, 0xa0, 0xe8, 0x0b, 0xac, 0x49, 0x44, 0xa4, 0xb6, 0xdb, 0xe6, 0x35, 0x45, 0x6d, 0xeb, 0xaa, - 0xcd, 0x55, 0x03, 0x68, 0xd1, 0x3c, 0x29, 0x49, 0x3a, 0x74, 0xef, 0xd0, 0x14, 0x19, 0xad, 0xe4, - 0xa4, 0xcf, 0xa6, 0xa0, 0x12, 0x8e, 0x6c, 0x43, 0xcd, 0x4c, 0xfd, 0x28, 0x9b, 0x29, 0x7d, 0x3a, - 0x05, 0xe5, 0x60, 0x38, 0x1b, 0x6a, 0xde, 0xed, 0x3f, 0xd2, 0xe6, 0xfd, 0x79, 0x1a, 0xc6, 0x03, - 0x41, 0x6c, 0xd2, 0xd6, 0xbd, 0x08, 0x93, 0x7a, 0x13, 0x77, 0xba, 0xa6, 0x83, 0x0d, 0x6d, 0x5f, - 0x69, 0xe3, 0xab, 0xb8, 0x3d, 0x23, 0x51, 0xa3, 0x71, 0x66, 0x78, 0x98, 0x3c, 0xb7, 0xec, 0xf1, - 0xad, 0x10, 0xb6, 0xfa, 0xd4, 0xf2, 0xe2, 0xd2, 0xea, 0xda, 0xe5, 0x8d, 0xa5, 0x4b, 0x0b, 0x1f, - 0x50, 0x36, 0x2f, 0x3d, 0x7d, 0xe9, 0xf2, 0xb3, 0x97, 0xe4, 0x8a, 0x1e, 0x22, 0x7b, 0x1b, 0xa7, - 0xfd, 0x1a, 0x54, 0xc2, 0x8d, 0x42, 0xc7, 0x20, 0xaa, 0x59, 0x95, 0x11, 0x34, 0x05, 0x13, 0x97, - 0x2e, 0x2b, 0xeb, 0xcb, 0x8b, 0x4b, 0xca, 0xd2, 0xf9, 0xf3, 0x4b, 0x0b, 0x1b, 0xeb, 0x2c, 0xf1, - 0xe1, 0x52, 0x6f, 0x04, 0x26, 0xb8, 0xf4, 0xa9, 0x0c, 0x4c, 0x45, 0xb4, 0x04, 0xcd, 0xf3, 0x25, - 0x0b, 0x5b, 0x45, 0xdd, 0x9f, 0xa4, 0xf5, 0x73, 0x24, 0x66, 0x58, 0x53, 0x2d, 0x87, 0xaf, 0x70, - 0x4e, 0x03, 0x91, 0x92, 0xe1, 0xe8, 0xdb, 0x3a, 0xb6, 0x78, 0x9e, 0x88, 0xad, 0x63, 0x26, 0xbc, - 0x72, 0x96, 0x2a, 0xba, 0x0f, 0x50, 0xd7, 0xb4, 0x75, 0x47, 0xbf, 0x8a, 0x15, 0xdd, 0x10, 0x49, - 0xa5, 0x2c, 0xdd, 0x65, 0xaa, 0x88, 0x37, 0xcb, 0x86, 0xe3, 0x52, 0x1b, 0xb8, 0xa5, 0x86, 0xa8, - 0x89, 0x31, 0xcf, 0xc8, 0x15, 0xf1, 0xc6, 0xa5, 0xbe, 0x1d, 0x4a, 0x4d, 0xb3, 0x47, 0x82, 0x3d, - 0x46, 0x47, 0x7c, 0x47, 0x4a, 0x2e, 0xb2, 0x32, 0x97, 0x84, 0x87, 0xf1, 0x5e, 0x36, 0xab, 0x24, - 0x17, 0x59, 0x19, 0x23, 0xb9, 0x1b, 0x26, 0xd4, 0x56, 0xcb, 0x22, 0xe0, 0x02, 0x88, 0x2d, 0x4c, - 0xca, 0x6e, 0x31, 0x25, 0xac, 0x3e, 0x05, 0x79, 0x21, 0x07, 0xe2, 0xaa, 0x89, 0x24, 0x94, 0x2e, - 0x5b, 0x6d, 0xa7, 0x67, 0x0b, 0x72, 0xde, 0x10, 0x2f, 0x6f, 0x87, 0x92, 0x6e, 0x2b, 0x5e, 0x72, - 0x3e, 0x7d, 0x32, 0x3d, 0x9b, 0x97, 0x8b, 0xba, 0xed, 0x26, 0x36, 0xa5, 0x2f, 0xa4, 0xa1, 0x1c, - 0xdc, 0x5c, 0x40, 0x8b, 0x90, 0x6f, 0x9b, 0x1a, 0xdd, 0x3d, 0xe4, 0x3b, 0x5b, 0xb3, 0x31, 0xfb, - 0x11, 0x73, 0x2b, 0x9c, 0x5e, 0x76, 0x39, 0xab, 0xff, 0x21, 0x05, 0x79, 0x51, 0x8c, 0x8e, 0x42, - 0xb6, 0xab, 0x3a, 0x3b, 0x14, 0x6e, 0xb4, 0x91, 0xae, 0xa4, 0x64, 0xfa, 0x4c, 0xca, 0xed, 0xae, - 0x6a, 0x50, 0x15, 0xe0, 0xe5, 0xe4, 0x99, 0x8c, 0x6b, 0x1b, 0xab, 0x4d, 0xba, 0xea, 0x31, 0x3b, - 0x1d, 0x6c, 0x38, 0xb6, 0x18, 0x57, 0x5e, 0xbe, 0xc0, 0x8b, 0xd1, 0xbd, 0x30, 0xe9, 0x58, 0xaa, - 0xde, 0x0e, 0xd0, 0x66, 0x29, 0x6d, 0x45, 0xbc, 0x70, 0x89, 0xeb, 0x70, 0x5c, 0xe0, 0x36, 0xb1, - 0xa3, 0x6a, 0x3b, 0xb8, 0xe9, 0x31, 0xe5, 0x68, 0x76, 0xe3, 0x18, 0x27, 0x58, 0xe4, 0xef, 0x05, - 0xaf, 0xf4, 0xad, 0x14, 0x4c, 0x8a, 0x75, 0x5a, 0xd3, 0x15, 0xd6, 0x2a, 0x80, 0x6a, 0x18, 0xa6, - 0xe3, 0x17, 0x57, 0xbf, 0x2a, 0xf7, 0xf1, 0xcd, 0xcd, 0xbb, 0x4c, 0xb2, 0x0f, 0xa0, 0xda, 0x01, - 0xf0, 0xde, 0x0c, 0x14, 0x5b, 0x0d, 0x8a, 0x7c, 0xe7, 0x88, 0x6e, 0x3f, 0xb2, 0x95, 0x3d, 0xb0, - 0x22, 0xb2, 0xa0, 0x43, 0xd3, 0x30, 0xba, 0x85, 0x5b, 0xba, 0xc1, 0xf3, 0xc1, 0xec, 0x41, 0xe4, - 0x5f, 0xb2, 0x6e, 0xfe, 0xa5, 0xf1, 0xf1, 0x14, 0x4c, 0x69, 0x66, 0x27, 0xdc, 0xde, 0x46, 0x25, - 0x94, 0x5e, 0xb0, 0x2f, 0xa6, 0x9e, 0x7f, 0xc2, 0xb7, 0xd3, 0xda, 0x32, 0xdb, 0xaa, 0xd1, 0xf2, - 0xf6, 0x4f, 0xe9, 0x0f, 0xed, 0xfe, 0x16, 0x36, 0xee, 0x6f, 0x99, 0xbe, 0xdd, 0xd4, 0x73, 0xde, - 0xcf, 0xbf, 0x4e, 0xa5, 0x3e, 0x9f, 0xce, 0x5c, 0x58, 0x6b, 0x7c, 0x31, 0x5d, 0xbd, 0xc0, 0xaa, - 0x5b, 0x13, 0xe2, 0x91, 0xf1, 0x76, 0x1b, 0x6b, 0xa4, 0xcb, 0xf0, 0xbd, 0x7b, 0x61, 0xba, 0x65, - 0xb6, 0x4c, 0x8a, 0x78, 0x86, 0xfc, 0xe2, 0x3b, 0xb2, 0x05, 0xb7, 0xb4, 0x1a, 0xbb, 0x7d, 0x5b, - 0xbf, 0x04, 0x53, 0x9c, 0x58, 0xa1, 0x5b, 0x42, 0x6c, 0x61, 0x83, 0x86, 0xa6, 0xd5, 0x66, 0x7e, - 0xff, 0x3b, 0xd4, 0xa1, 0xcb, 0x93, 0x9c, 0x95, 0xbc, 0x63, 0x6b, 0x9f, 0xba, 0x0c, 0x47, 0x02, - 0x78, 0x6c, 0xda, 0x62, 0x2b, 0x06, 0xf1, 0xdf, 0x72, 0xc4, 0x29, 0x1f, 0xe2, 0x3a, 0x67, 0xad, - 0x2f, 0xc0, 0xf8, 0x61, 0xb0, 0xfe, 0x1d, 0xc7, 0x2a, 0x61, 0x3f, 0xc8, 0x05, 0x98, 0xa0, 0x20, - 0x5a, 0xcf, 0x76, 0xcc, 0x0e, 0xb5, 0x89, 0xc3, 0x61, 0xfe, 0xe8, 0x3b, 0x6c, 0x1e, 0x95, 0x09, - 0xdb, 0x82, 0xcb, 0x55, 0xaf, 0x03, 0xdd, 0x05, 0x6b, 0x62, 0xad, 0x1d, 0x83, 0xf0, 0x0d, 0xde, - 0x10, 0x97, 0xbe, 0x7e, 0x05, 0xa6, 0xc9, 0x6f, 0x6a, 0xb2, 0xfc, 0x2d, 0x89, 0xcf, 0xc1, 0xcd, - 0x7c, 0xeb, 0xe7, 0xd8, 0x54, 0x9d, 0x72, 0x01, 0x7c, 0x6d, 0xf2, 0x8d, 0x62, 0x0b, 0x3b, 0x0e, - 0xb6, 0x6c, 0x45, 0x6d, 0x47, 0x35, 0xcf, 0x97, 0xc4, 0x98, 0xf9, 0x8d, 0x37, 0x82, 0xa3, 0x78, - 0x81, 0x71, 0xce, 0xb7, 0xdb, 0xf5, 0x4d, 0x38, 0x16, 0xa1, 0x15, 0x09, 0x30, 0x3f, 0xc5, 0x31, - 0xa7, 0xfb, 0x34, 0x83, 0xc0, 0xae, 0x81, 0x28, 0x77, 0xc7, 0x32, 0x01, 0xe6, 0x6f, 0x72, 0x4c, - 0xc4, 0x79, 0xc5, 0x90, 0x12, 0xc4, 0xa7, 0x60, 0xf2, 0x2a, 0xb6, 0xb6, 0x4c, 0x9b, 0x27, 0x8e, - 0x12, 0xc0, 0x7d, 0x9a, 0xc3, 0x4d, 0x70, 0x46, 0x9a, 0x49, 0x22, 0x58, 0x8f, 0x41, 0x7e, 0x5b, - 0xd5, 0x70, 0x02, 0x88, 0xcf, 0x70, 0x88, 0x31, 0x42, 0x4f, 0x58, 0xe7, 0xa1, 0xd4, 0x32, 0xb9, - 0xd7, 0x8a, 0x67, 0xff, 0x2c, 0x67, 0x2f, 0x0a, 0x1e, 0x0e, 0xd1, 0x35, 0xbb, 0xbd, 0x36, 0x71, - 0x69, 0xf1, 0x10, 0xbf, 0x25, 0x20, 0x04, 0x0f, 0x87, 0x38, 0x84, 0x58, 0x5f, 0x15, 0x10, 0xb6, - 0x4f, 0x9e, 0x4f, 0x42, 0xd1, 0x34, 0xda, 0xfb, 0xa6, 0x91, 0xa4, 0x11, 0x9f, 0xe3, 0x08, 0xc0, - 0x59, 0x08, 0xc0, 0x39, 0x28, 0x24, 0x1d, 0x88, 0x7f, 0xf8, 0x86, 0x98, 0x1e, 0x62, 0x04, 0x2e, - 0xc0, 0x84, 0x30, 0x50, 0xba, 0x69, 0x24, 0x80, 0xf8, 0x47, 0x1c, 0xa2, 0xec, 0x63, 0xe3, 0xdd, - 0x70, 0xb0, 0xed, 0xb4, 0x70, 0x12, 0x90, 0x2f, 0x88, 0x6e, 0x70, 0x16, 0x2e, 0xca, 0x2d, 0x6c, - 0x68, 0x3b, 0xc9, 0x10, 0x7e, 0x5b, 0x88, 0x52, 0xf0, 0x10, 0x88, 0x05, 0x18, 0xef, 0xa8, 0x96, - 0xbd, 0xa3, 0xb6, 0x13, 0x0d, 0xc7, 0x3f, 0xe6, 0x18, 0x25, 0x97, 0x89, 0x4b, 0xa4, 0x67, 0x1c, - 0x06, 0xe6, 0x8b, 0x42, 0x22, 0x3e, 0x36, 0x3e, 0xf5, 0x6c, 0x87, 0x66, 0xd9, 0x0e, 0x83, 0xf6, - 0x4f, 0xc4, 0xd4, 0x63, 0xbc, 0xab, 0x7e, 0xc4, 0x73, 0x50, 0xb0, 0xf5, 0x97, 0x12, 0xc1, 0xfc, - 0x53, 0x31, 0xd2, 0x94, 0x81, 0x30, 0x7f, 0x00, 0x8e, 0x47, 0xba, 0x89, 0x04, 0x60, 0xff, 0x8c, - 0x83, 0x1d, 0x8d, 0x70, 0x15, 0xdc, 0x24, 0x1c, 0x16, 0xf2, 0x77, 0x84, 0x49, 0xc0, 0x21, 0xac, - 0x35, 0xb2, 0x8e, 0xb0, 0xd5, 0xed, 0xc3, 0x49, 0xed, 0x77, 0x85, 0xd4, 0x18, 0x6f, 0x40, 0x6a, - 0x1b, 0x70, 0x94, 0x23, 0x1e, 0x6e, 0x5c, 0x7f, 0x4f, 0x18, 0x56, 0xc6, 0xbd, 0x19, 0x1c, 0xdd, - 0x0f, 0x42, 0xd5, 0x15, 0xa7, 0x08, 0x58, 0x6d, 0xa5, 0xa3, 0x76, 0x13, 0x20, 0xff, 0x3e, 0x47, - 0x16, 0x16, 0xdf, 0x8d, 0x78, 0xed, 0x55, 0xb5, 0x4b, 0xc0, 0x9f, 0x83, 0x19, 0x01, 0xde, 0x33, - 0x2c, 0xac, 0x99, 0x2d, 0x43, 0x7f, 0x09, 0x37, 0x13, 0x40, 0xff, 0xf3, 0xd0, 0x50, 0x6d, 0xfa, - 0xd8, 0x09, 0xf2, 0x32, 0x54, 0xdc, 0x58, 0x45, 0xd1, 0x3b, 0x5d, 0xd3, 0x72, 0x62, 0x10, 0xff, - 0x85, 0x18, 0x29, 0x97, 0x6f, 0x99, 0xb2, 0xd5, 0x97, 0xa0, 0x4c, 0x1f, 0x93, 0xaa, 0xe4, 0x97, - 0x38, 0xd0, 0xb8, 0xc7, 0xc5, 0x0d, 0x87, 0x66, 0x76, 0xba, 0xaa, 0x95, 0xc4, 0xfe, 0xfd, 0x4b, - 0x61, 0x38, 0x38, 0x0b, 0x37, 0x1c, 0xce, 0x7e, 0x17, 0x13, 0x6f, 0x9f, 0x00, 0xe1, 0xcb, 0xc2, - 0x70, 0x08, 0x1e, 0x0e, 0x21, 0x02, 0x86, 0x04, 0x10, 0x5f, 0x11, 0x10, 0x82, 0x87, 0x40, 0x3c, - 0xe3, 0x39, 0x5a, 0x0b, 0xb7, 0x74, 0xdb, 0xb1, 0x58, 0x98, 0x3c, 0x1c, 0xea, 0xab, 0x6f, 0x04, - 0x83, 0x30, 0xd9, 0xc7, 0x4a, 0x2c, 0x11, 0x4f, 0xbb, 0xd2, 0x55, 0x54, 0x7c, 0xc3, 0xbe, 0x26, - 0x2c, 0x91, 0x8f, 0x8d, 0xb4, 0xcd, 0x17, 0x21, 0x12, 0xb1, 0x6b, 0x64, 0xed, 0x90, 0x00, 0xee, - 0x0f, 0x42, 0x8d, 0x5b, 0x17, 0xbc, 0x04, 0xd3, 0x17, 0xff, 0xf4, 0x8c, 0x5d, 0xbc, 0x9f, 0x48, - 0x3b, 0xff, 0x30, 0x14, 0xff, 0x6c, 0x32, 0x4e, 0x66, 0x43, 0x26, 0x42, 0xf1, 0x14, 0x8a, 0x3b, - 0x3f, 0x34, 0xf3, 0xb7, 0xdf, 0xe4, 0xfd, 0x0d, 0x86, 0x53, 0xf5, 0x15, 0xa2, 0xe4, 0xc1, 0xa0, - 0x27, 0x1e, 0xec, 0xe7, 0xde, 0x74, 0xf5, 0x3c, 0x10, 0xf3, 0xd4, 0xcf, 0xc3, 0x78, 0x20, 0xe0, - 0x89, 0x87, 0xfa, 0x79, 0x0e, 0x55, 0xf2, 0xc7, 0x3b, 0xf5, 0x87, 0x20, 0x4b, 0x82, 0x97, 0x78, - 0xf6, 0x5f, 0xe0, 0xec, 0x94, 0xbc, 0xfe, 0x3e, 0xc8, 0x8b, 0xa0, 0x25, 0x9e, 0xf5, 0x17, 0x39, - 0xab, 0xcb, 0x42, 0xd8, 0x45, 0xc0, 0x12, 0xcf, 0xfe, 0x61, 0xc1, 0x2e, 0x58, 0x08, 0x7b, 0x72, - 0x11, 0x7e, 0xfd, 0xef, 0x64, 0xb9, 0xd3, 0x11, 0xb2, 0x3b, 0x07, 0x63, 0x3c, 0x52, 0x89, 0xe7, - 0xfe, 0x28, 0xaf, 0x5c, 0x70, 0xd4, 0x1f, 0x81, 0xd1, 0x84, 0x02, 0xff, 0x65, 0xce, 0xca, 0xe8, - 0xeb, 0x0b, 0x50, 0xf4, 0x45, 0x27, 0xf1, 0xec, 0xbf, 0xc2, 0xd9, 0xfd, 0x5c, 0xa4, 0xe9, 0x3c, - 0x3a, 0x89, 0x07, 0xf8, 0xb8, 0x68, 0x3a, 0xe7, 0x20, 0x62, 0x13, 0x81, 0x49, 0x3c, 0xf7, 0x27, - 0x84, 0xd4, 0x05, 0x4b, 0xfd, 0x49, 0x28, 0xb8, 0xce, 0x26, 0x9e, 0xff, 0xef, 0x72, 0x7e, 0x8f, - 0x87, 0x48, 0xc0, 0xe7, 0xec, 0xe2, 0x21, 0x3e, 0x29, 0x24, 0xe0, 0xe3, 0x22, 0xd3, 0x28, 0x1c, - 0xc0, 0xc4, 0x23, 0xfd, 0x3d, 0x31, 0x8d, 0x42, 0xf1, 0x0b, 0x19, 0x4d, 0x6a, 0xf3, 0xe3, 0x21, - 0x7e, 0x55, 0x8c, 0x26, 0xa5, 0x27, 0xcd, 0x08, 0x47, 0x04, 0xf1, 0x18, 0x7f, 0x5f, 0x34, 0x23, - 0x14, 0x10, 0xd4, 0xd7, 0x00, 0xf5, 0x47, 0x03, 0xf1, 0x78, 0xaf, 0x70, 0xbc, 0xc9, 0xbe, 0x60, - 0xa0, 0xfe, 0x2c, 0x1c, 0x8d, 0x8e, 0x04, 0xe2, 0x51, 0x7f, 0xe3, 0xcd, 0xd0, 0xda, 0xcd, 0x1f, - 0x08, 0xd4, 0x37, 0x3c, 0x97, 0xe2, 0x8f, 0x02, 0xe2, 0x61, 0x3f, 0xf5, 0x66, 0xd0, 0x70, 0xfb, - 0x83, 0x80, 0xfa, 0x3c, 0x80, 0xe7, 0x80, 0xe3, 0xb1, 0x3e, 0xcd, 0xb1, 0x7c, 0x4c, 0x64, 0x6a, - 0x70, 0xff, 0x1b, 0xcf, 0xff, 0x19, 0x31, 0x35, 0x38, 0x07, 0x99, 0x1a, 0xc2, 0xf5, 0xc6, 0x73, - 0x7f, 0x56, 0x4c, 0x0d, 0xc1, 0x42, 0x34, 0xdb, 0xe7, 0xdd, 0xe2, 0x11, 0x3e, 0x27, 0x34, 0xdb, - 0xc7, 0x55, 0xbf, 0x04, 0x93, 0x7d, 0x0e, 0x31, 0x1e, 0xea, 0xf3, 0x1c, 0xaa, 0x12, 0xf6, 0x87, - 0x7e, 0xe7, 0xc5, 0x9d, 0x61, 0x3c, 0xda, 0x3f, 0x08, 0x39, 0x2f, 0xee, 0x0b, 0xeb, 0xe7, 0x20, - 0x6f, 0xf4, 0xda, 0x6d, 0x32, 0x79, 0xd0, 0xf0, 0x33, 0x7f, 0x33, 0xff, 0xfd, 0x87, 0x5c, 0x3a, - 0x82, 0xa1, 0xfe, 0x10, 0x8c, 0xe2, 0xce, 0x16, 0x6e, 0xc6, 0x71, 0x7e, 0xef, 0x87, 0xc2, 0x60, - 0x12, 0xea, 0xfa, 0x93, 0x00, 0x2c, 0x35, 0x42, 0xb7, 0x07, 0x63, 0x78, 0xff, 0xc7, 0x0f, 0xf9, - 0x69, 0x1c, 0x8f, 0xc5, 0x03, 0x60, 0x67, 0x7b, 0x86, 0x03, 0xbc, 0x11, 0x04, 0xa0, 0x23, 0xf2, - 0x18, 0x8c, 0xbd, 0x60, 0x9b, 0x86, 0xa3, 0xb6, 0xe2, 0xb8, 0xff, 0x27, 0xe7, 0x16, 0xf4, 0x44, - 0x60, 0x1d, 0xd3, 0xc2, 0x8e, 0xda, 0xb2, 0xe3, 0x78, 0xff, 0x17, 0xe7, 0x75, 0x19, 0x08, 0xb3, - 0xa6, 0xda, 0x4e, 0x92, 0x7e, 0xff, 0x6f, 0xc1, 0x2c, 0x18, 0x48, 0xa3, 0xc9, 0xef, 0x5d, 0xbc, - 0x1f, 0xc7, 0xfb, 0x7d, 0xd1, 0x68, 0x4e, 0x5f, 0x7f, 0x1f, 0x14, 0xc8, 0x4f, 0x76, 0xc4, 0x2e, - 0x86, 0xf9, 0xff, 0x70, 0x66, 0x8f, 0x83, 0xd4, 0x6c, 0x3b, 0x4d, 0x47, 0x8f, 0x17, 0xf6, 0x75, - 0x3e, 0xd2, 0x82, 0xbe, 0x3e, 0x0f, 0x45, 0xdb, 0x69, 0x36, 0x7b, 0x3c, 0x3e, 0x8d, 0x61, 0xff, - 0xbf, 0x3f, 0x74, 0x53, 0x16, 0x2e, 0x0f, 0x19, 0xed, 0x6b, 0xbb, 0x4e, 0xd7, 0xa4, 0x5b, 0x20, - 0x71, 0x08, 0x6f, 0x72, 0x04, 0x1f, 0x4b, 0x7d, 0x01, 0x4a, 0xa4, 0x2f, 0x16, 0xee, 0x62, 0xba, - 0x5f, 0x15, 0x03, 0xf1, 0x97, 0x5c, 0x00, 0x01, 0xa6, 0xc6, 0x4f, 0x0f, 0xba, 0x77, 0x13, 0x9d, - 0x36, 0x86, 0x0b, 0xe6, 0x05, 0x93, 0x25, 0x8c, 0x9f, 0x97, 0x02, 0xe9, 0xe2, 0x96, 0xe9, 0x65, - 0x6b, 0xdd, 0x45, 0x0e, 0xfc, 0x41, 0x1a, 0xee, 0xa4, 0xc7, 0x7d, 0xad, 0x8e, 0x6e, 0x38, 0x67, - 0x34, 0x6b, 0xbf, 0xeb, 0x98, 0x67, 0x3a, 0xd8, 0xda, 0x6d, 0x63, 0xfe, 0x87, 0x67, 0x7f, 0x67, - 0x3c, 0xb2, 0x39, 0x46, 0x36, 0xc7, 0xde, 0x57, 0x23, 0xb3, 0xc5, 0xd2, 0x02, 0x8c, 0xad, 0x59, - 0xa6, 0xb9, 0x7d, 0xb9, 0x8b, 0x10, 0x3f, 0xc1, 0xcc, 0x4f, 0xc6, 0x51, 0x35, 0xe4, 0x37, 0x9e, - 0xd2, 0xde, 0x8d, 0x27, 0x04, 0xd9, 0xa6, 0xea, 0xa8, 0x34, 0x61, 0x5e, 0x92, 0xe9, 0x6f, 0xa9, - 0x01, 0xa3, 0x14, 0x04, 0x3d, 0x06, 0x19, 0xb3, 0x6b, 0xf3, 0xec, 0xfe, 0xed, 0x73, 0x83, 0xda, - 0x32, 0xc7, 0xab, 0x6c, 0x64, 0xbf, 0x71, 0x50, 0x1b, 0x91, 0x09, 0x4f, 0x63, 0xed, 0xaf, 0xbf, - 0x7d, 0x22, 0xf5, 0xdb, 0xaf, 0x9d, 0x48, 0x0d, 0xbc, 0xc1, 0x34, 0xe7, 0x13, 0x94, 0x4f, 0x18, - 0x83, 0xe4, 0xe2, 0xde, 0x63, 0xfa, 0xa5, 0x34, 0x9c, 0xf0, 0x11, 0xb5, 0xf5, 0x2d, 0xfb, 0xcc, - 0xee, 0x55, 0x76, 0xe5, 0x89, 0x4b, 0x0d, 0xf9, 0x5a, 0x4a, 0xde, 0xcf, 0xed, 0x5e, 0x1d, 0x20, - 0xaf, 0x39, 0xc8, 0xae, 0xa9, 0xba, 0x15, 0x71, 0x15, 0x6c, 0xda, 0x3b, 0xdc, 0x4a, 0xca, 0xd8, - 0x83, 0x74, 0x16, 0xf2, 0x4f, 0x2f, 0x3f, 0xfc, 0x60, 0x12, 0x9e, 0x0c, 0xe7, 0x69, 0xc8, 0x42, - 0x14, 0x5f, 0x8d, 0x10, 0xc7, 0xd7, 0x5f, 0x3f, 0x91, 0x8a, 0xbc, 0xd4, 0x15, 0x2d, 0x12, 0xde, - 0x5b, 0x57, 0x18, 0x9f, 0x48, 0x43, 0x2d, 0xbc, 0x2b, 0x40, 0xa6, 0xa2, 0xed, 0xa8, 0x9d, 0xee, - 0xa0, 0x3b, 0x5d, 0xe7, 0xa0, 0xb0, 0x21, 0x68, 0xd0, 0x0c, 0x8c, 0xd9, 0x58, 0x33, 0x8d, 0xa6, - 0x4d, 0x7b, 0x92, 0x91, 0xc5, 0x23, 0xe9, 0x8d, 0xa1, 0x1a, 0xa6, 0xcd, 0x8f, 0x9c, 0xb2, 0x87, - 0xc6, 0xaf, 0xa7, 0x0e, 0x37, 0x37, 0xca, 0x6e, 0x55, 0x74, 0x82, 0xac, 0xa5, 0x9e, 0xbf, 0x77, - 0xd8, 0x86, 0x0a, 0xbb, 0xb9, 0xe6, 0x76, 0xc1, 0xb7, 0x7b, 0x72, 0x22, 0xbc, 0x7b, 0xf2, 0x2c, - 0x6e, 0xb7, 0x9f, 0x36, 0xcc, 0x6b, 0xc6, 0x06, 0xe1, 0x71, 0x45, 0xf2, 0xb1, 0x34, 0x9c, 0xe8, - 0xdb, 0x28, 0xe1, 0xe6, 0x65, 0x90, 0x44, 0xea, 0x90, 0x5f, 0x14, 0x56, 0xeb, 0xb0, 0x02, 0xf9, - 0xd5, 0x43, 0x0a, 0x64, 0x5c, 0xd4, 0x24, 0xe4, 0x71, 0x4f, 0xbc, 0x3c, 0x44, 0xfb, 0x6f, 0x40, - 0x1c, 0x3f, 0xff, 0x04, 0xdc, 0xee, 0x53, 0x20, 0x75, 0x4b, 0xd3, 0xf9, 0xf5, 0x40, 0xff, 0x8c, - 0x39, 0xe2, 0x9b, 0x31, 0x84, 0x64, 0x8e, 0xbe, 0x8c, 0x9e, 0x34, 0xd5, 0x64, 0xb6, 0xab, 0x1a, - 0x33, 0x4b, 0xab, 0x71, 0x8a, 0x5b, 0x8d, 0x19, 0x46, 0xe9, 0xaf, 0x46, 0x61, 0x4c, 0xdc, 0xe5, - 0x7c, 0x14, 0xb2, 0x58, 0xdb, 0x31, 0xf9, 0x69, 0x77, 0x69, 0x2e, 0xb2, 0x3f, 0x73, 0x9c, 0x7a, - 0x49, 0xdb, 0x31, 0x2f, 0x8e, 0xc8, 0x94, 0x83, 0xde, 0x01, 0x6b, 0xf7, 0xec, 0x1d, 0x7e, 0x28, - 0xf9, 0xd4, 0x70, 0xd6, 0xf3, 0x84, 0xf4, 0xe2, 0x88, 0xcc, 0x78, 0x48, 0xb5, 0xf4, 0xfe, 0x5a, - 0x36, 0x49, 0xb5, 0xcb, 0xc6, 0x36, 0xad, 0x96, 0x70, 0xa0, 0x8b, 0x00, 0x36, 0x76, 0xc4, 0x51, - 0x86, 0x51, 0xca, 0x7f, 0xf7, 0x70, 0xfe, 0x75, 0xec, 0x30, 0xb7, 0x75, 0x71, 0x44, 0x2e, 0xd8, - 0xe2, 0x81, 0x20, 0xe9, 0x86, 0xee, 0x28, 0xda, 0x8e, 0xaa, 0x1b, 0x74, 0x0f, 0x3e, 0x16, 0x69, - 0xd9, 0xd0, 0x9d, 0x05, 0x42, 0x4e, 0x90, 0x74, 0xf1, 0x40, 0x44, 0x41, 0xef, 0x8c, 0xf2, 0x4b, - 0x56, 0x31, 0xa2, 0x78, 0x86, 0x90, 0x12, 0x51, 0x50, 0x1e, 0xf4, 0x34, 0x14, 0xe9, 0x76, 0xab, - 0xb2, 0xd5, 0x36, 0xb5, 0x5d, 0x7e, 0xb3, 0x64, 0x76, 0x38, 0x44, 0x83, 0x30, 0x34, 0x08, 0xfd, - 0xc5, 0x11, 0x19, 0xb6, 0xdc, 0x27, 0xd4, 0x80, 0x3c, 0x3b, 0xf6, 0xeb, 0xec, 0xf1, 0xbb, 0x81, - 0x77, 0x0e, 0x47, 0xa2, 0x27, 0x80, 0x37, 0xf6, 0x2e, 0x8e, 0xc8, 0x63, 0x1a, 0xfb, 0x89, 0x96, - 0xa0, 0x80, 0x8d, 0x26, 0x6f, 0x4e, 0x91, 0xdf, 0xa2, 0x1a, 0xae, 0x17, 0x46, 0x53, 0x34, 0x26, - 0x8f, 0xf9, 0x6f, 0xf4, 0x04, 0xe4, 0x34, 0xb3, 0xd3, 0xd1, 0x1d, 0x7a, 0xc7, 0xb0, 0x78, 0xf6, - 0x8e, 0x98, 0x86, 0x50, 0xda, 0x8b, 0x23, 0x32, 0xe7, 0x22, 0xc3, 0xd3, 0xc4, 0x6d, 0xfd, 0x2a, - 0xb6, 0x48, 0x67, 0xa6, 0x92, 0x0c, 0xcf, 0x22, 0xa3, 0xa7, 0xdd, 0x29, 0x34, 0xc5, 0x43, 0x63, - 0x8c, 0xbb, 0x17, 0xe9, 0x6e, 0x28, 0xfa, 0x34, 0x99, 0x58, 0x2c, 0xbe, 0x02, 0xe1, 0xce, 0x5e, - 0x3c, 0x4a, 0x65, 0x28, 0xf9, 0xf5, 0x56, 0xea, 0xb8, 0x8c, 0x74, 0x13, 0x7f, 0x06, 0xc6, 0xae, - 0x62, 0xcb, 0x66, 0x3b, 0xf8, 0x94, 0x91, 0x3f, 0xa2, 0x53, 0x30, 0x4e, 0xe5, 0xa6, 0x88, 0xf7, - 0xec, 0x5a, 0x72, 0x89, 0x16, 0x5e, 0xe1, 0x44, 0x35, 0x28, 0x76, 0xcf, 0x76, 0x5d, 0x12, 0x76, - 0x37, 0x1a, 0xba, 0x67, 0xbb, 0x9c, 0x40, 0xaa, 0x43, 0x25, 0xac, 0xba, 0x7e, 0xaf, 0x59, 0x88, - 0xf0, 0x9a, 0x05, 0xe1, 0x69, 0x7f, 0x2f, 0xed, 0x32, 0xbb, 0xda, 0x4a, 0xa6, 0x1b, 0x31, 0x12, - 0x94, 0xbb, 0x78, 0xb6, 0xda, 0x17, 0xda, 0xb9, 0xbe, 0xa6, 0x91, 0x27, 0xa1, 0xc8, 0x27, 0xfe, - 0xac, 0x96, 0x92, 0x29, 0x07, 0x3a, 0x4e, 0x14, 0x4a, 0xd5, 0x0d, 0x45, 0x6f, 0x8a, 0xdb, 0xc4, - 0xf4, 0x79, 0xb9, 0x89, 0x9e, 0x81, 0x8a, 0x66, 0x1a, 0x36, 0x36, 0xec, 0x9e, 0xad, 0x74, 0x55, - 0x4b, 0xed, 0x78, 0x97, 0xee, 0xa2, 0x87, 0x69, 0x41, 0x90, 0xaf, 0x51, 0x6a, 0x79, 0x42, 0x0b, - 0x16, 0xa0, 0x15, 0x80, 0xab, 0x6a, 0x5b, 0x6f, 0xaa, 0x8e, 0x69, 0xd9, 0xfc, 0x72, 0xca, 0x20, - 0xb0, 0x2b, 0x82, 0x70, 0xb3, 0xdb, 0x54, 0x1d, 0xcc, 0x83, 0x28, 0x1f, 0x3f, 0xba, 0x0b, 0x26, - 0xd4, 0x6e, 0x57, 0xb1, 0x1d, 0xd5, 0xc1, 0xca, 0xd6, 0xbe, 0x83, 0x6d, 0x6a, 0x2f, 0x4a, 0xf2, - 0xb8, 0xda, 0xed, 0xae, 0x93, 0xd2, 0x06, 0x29, 0x94, 0x9a, 0xee, 0x68, 0xd3, 0xa9, 0xe9, 0xc6, - 0x76, 0x29, 0x2f, 0xb6, 0x23, 0x65, 0xf4, 0x68, 0x05, 0x93, 0x81, 0x38, 0x8d, 0x92, 0xdb, 0xc1, - 0x7a, 0x6b, 0x87, 0x5d, 0x6f, 0xcf, 0xc8, 0xfc, 0x89, 0x0c, 0x4c, 0xd7, 0x32, 0xaf, 0x62, 0x7e, - 0xb3, 0x9d, 0x3d, 0x48, 0xbf, 0x96, 0x86, 0xc9, 0xbe, 0xe9, 0x4b, 0x70, 0xe9, 0x01, 0x7f, 0x5e, - 0x17, 0xf9, 0x8d, 0xce, 0x11, 0x5c, 0xb5, 0xc9, 0x2f, 0xad, 0x14, 0xcf, 0xde, 0x36, 0x40, 0x02, - 0x17, 0x29, 0x11, 0xef, 0x38, 0x67, 0x41, 0x9b, 0x50, 0x69, 0xab, 0xb6, 0xa3, 0xb0, 0x59, 0xc4, - 0x6e, 0x09, 0x67, 0x86, 0x5a, 0x82, 0x15, 0x55, 0xcc, 0x3e, 0xa2, 0xdc, 0x1c, 0xae, 0xdc, 0x0e, - 0x94, 0xa2, 0xe7, 0x60, 0x7a, 0x6b, 0xff, 0x25, 0xd5, 0x70, 0x74, 0x83, 0x1e, 0x36, 0x0a, 0x8e, - 0x51, 0x6d, 0x00, 0xf4, 0xd2, 0x55, 0xbd, 0x89, 0x0d, 0x4d, 0x0c, 0xce, 0x94, 0x0b, 0xe1, 0x0e, - 0x9e, 0x2d, 0x3d, 0x07, 0xe5, 0xa0, 0x2d, 0x42, 0x65, 0x48, 0x3b, 0x7b, 0x5c, 0x22, 0x69, 0x67, - 0x0f, 0x3d, 0xcc, 0x23, 0xf2, 0x34, 0x3d, 0x2d, 0x37, 0xc8, 0x59, 0x70, 0x6e, 0xef, 0x2e, 0xa1, - 0x24, 0xb9, 0x33, 0xc1, 0x35, 0x0c, 0x61, 0x6c, 0xe9, 0x34, 0x4c, 0x84, 0x8c, 0x98, 0x6f, 0x58, - 0x53, 0xfe, 0x61, 0x95, 0x26, 0x60, 0x3c, 0x60, 0xab, 0xa4, 0x3f, 0xce, 0x41, 0xde, 0xfd, 0x46, - 0xc1, 0x45, 0x28, 0xe0, 0x3d, 0x0d, 0x77, 0x1d, 0x61, 0x15, 0x86, 0x19, 0x71, 0xc6, 0xb3, 0x24, - 0xe8, 0x89, 0xb9, 0x72, 0x99, 0xd1, 0x63, 0x01, 0x97, 0x7c, 0x2a, 0x0e, 0xc4, 0xef, 0x93, 0x1f, - 0x0f, 0xfa, 0xe4, 0x3b, 0x62, 0x78, 0x43, 0x4e, 0xf9, 0xb1, 0x80, 0x53, 0x8e, 0xab, 0x38, 0xe0, - 0x95, 0x97, 0x23, 0xbc, 0x72, 0x5c, 0xf7, 0x07, 0xb8, 0xe5, 0xe5, 0x08, 0xb7, 0x3c, 0x1b, 0xdb, - 0x96, 0x48, 0xbf, 0xfc, 0x78, 0xd0, 0x2f, 0xc7, 0x89, 0x23, 0xe4, 0x98, 0x57, 0xa2, 0x1c, 0xf3, - 0xe9, 0x18, 0x8c, 0x81, 0x9e, 0x79, 0xa1, 0xcf, 0x33, 0xdf, 0x15, 0x03, 0x15, 0xe1, 0x9a, 0x97, - 0x03, 0x3e, 0x11, 0x12, 0xc9, 0x26, 0xda, 0x29, 0xa2, 0xf3, 0xfd, 0x5e, 0xfe, 0xee, 0x38, 0x55, - 0x8b, 0x72, 0xf3, 0x4f, 0x86, 0xdc, 0xfc, 0x9d, 0x71, 0xbd, 0x0a, 0xf9, 0x79, 0xcf, 0x3b, 0x9f, - 0x26, 0xf6, 0x31, 0x34, 0x33, 0x88, 0x2d, 0xc5, 0x96, 0x65, 0x5a, 0xdc, 0xf1, 0xb1, 0x07, 0x69, - 0x96, 0x58, 0x6c, 0x4f, 0xff, 0x87, 0x78, 0x72, 0x3a, 0x69, 0x7d, 0xda, 0x2e, 0x7d, 0x35, 0xe5, - 0xf1, 0x52, 0xcb, 0xe6, 0xb7, 0xf6, 0x05, 0x6e, 0xed, 0x7d, 0x0e, 0x3e, 0x1d, 0x74, 0xf0, 0x35, - 0x28, 0x12, 0x9f, 0x12, 0xf2, 0xdd, 0x6a, 0x57, 0xf8, 0x6e, 0x74, 0x0f, 0x4c, 0x52, 0xfb, 0xcb, - 0xc2, 0x00, 0x6e, 0x48, 0xb2, 0xd4, 0x90, 0x4c, 0x90, 0x17, 0x4c, 0x82, 0xcc, 0x51, 0xdc, 0x0f, - 0x53, 0x3e, 0x5a, 0x82, 0x4b, 0x7d, 0x01, 0x73, 0x52, 0x15, 0x97, 0x7a, 0xbe, 0xdb, 0xbd, 0xa8, - 0xda, 0x3b, 0xd2, 0xaa, 0x27, 0x20, 0x2f, 0x2e, 0x40, 0x90, 0xd5, 0xcc, 0x26, 0xeb, 0xf7, 0xb8, - 0x4c, 0x7f, 0x93, 0x58, 0xa1, 0x6d, 0xb6, 0xf8, 0x09, 0x48, 0xf2, 0x93, 0x50, 0xb9, 0x53, 0xbb, - 0xc0, 0xe6, 0xac, 0xf4, 0xa5, 0x94, 0x87, 0xe7, 0x85, 0x0a, 0x51, 0x5e, 0x3d, 0x75, 0x33, 0xbd, - 0x7a, 0xfa, 0xad, 0x79, 0x75, 0xe9, 0xcd, 0x94, 0x37, 0xa4, 0xae, 0xbf, 0xbe, 0x31, 0x11, 0x10, - 0xed, 0x62, 0x37, 0xc1, 0xd9, 0x49, 0x5d, 0xf6, 0x20, 0x42, 0xad, 0x5c, 0x44, 0x82, 0x62, 0xcc, - 0x97, 0xd4, 0x40, 0x0f, 0x51, 0x3f, 0x6f, 0x6e, 0x73, 0xd3, 0x50, 0x8b, 0x49, 0xf4, 0xc8, 0x8c, - 0xda, 0xe7, 0x5f, 0x0a, 0x81, 0xb0, 0xe1, 0x56, 0x28, 0x90, 0xa6, 0xb3, 0xeb, 0x4f, 0xc0, 0xd3, - 0x8b, 0xa2, 0x40, 0x6a, 0x02, 0xea, 0xb7, 0x31, 0xe8, 0x12, 0xe4, 0xf0, 0x55, 0x7a, 0x1a, 0x95, - 0x25, 0x9b, 0x6e, 0x1d, 0xe8, 0x88, 0xb1, 0xe1, 0x34, 0x66, 0x88, 0x30, 0xbf, 0x77, 0x50, 0xab, - 0x30, 0x9e, 0xfb, 0xcc, 0x8e, 0xee, 0xe0, 0x4e, 0xd7, 0xd9, 0x97, 0x39, 0x8a, 0xf4, 0xe1, 0x34, - 0xf1, 0x87, 0x01, 0xfb, 0x13, 0x29, 0x5e, 0x31, 0x69, 0xd2, 0xbe, 0x10, 0x29, 0x99, 0xc8, 0x6f, - 0x03, 0x68, 0xa9, 0xb6, 0x72, 0x4d, 0x35, 0x1c, 0xdc, 0xe4, 0x72, 0x2f, 0xb4, 0x54, 0xfb, 0x59, - 0x5a, 0x40, 0xe2, 0x4d, 0xf2, 0xba, 0x67, 0xe3, 0x26, 0x1d, 0x80, 0x8c, 0x3c, 0xd6, 0x52, 0xed, - 0x4d, 0x1b, 0x37, 0x7d, 0x7d, 0x1d, 0xbb, 0x19, 0x7d, 0x0d, 0xca, 0x3b, 0x1f, 0x96, 0xf7, 0x47, - 0xd3, 0xde, 0xec, 0xf0, 0xc2, 0x87, 0x1f, 0x4f, 0x59, 0x7c, 0x86, 0xae, 0x29, 0x82, 0x4e, 0x00, - 0x7d, 0x00, 0x26, 0xdd, 0x59, 0xa9, 0xf4, 0xe8, 0x6c, 0x15, 0x5a, 0x78, 0xb8, 0xc9, 0x5d, 0xb9, - 0x1a, 0x2c, 0xb6, 0xd1, 0xcf, 0xc0, 0xb1, 0x90, 0x0d, 0x72, 0x2b, 0x48, 0x1f, 0xca, 0x14, 0x1d, - 0x09, 0x9a, 0x22, 0x81, 0xef, 0x49, 0x2f, 0x73, 0x53, 0x66, 0xcd, 0x1d, 0x24, 0x84, 0xf5, 0xbb, - 0xb7, 0x28, 0x9d, 0x90, 0xfe, 0x24, 0x05, 0x13, 0xa1, 0x06, 0xa2, 0x47, 0x61, 0x94, 0x79, 0xe0, - 0xd4, 0xd0, 0x44, 0x08, 0x95, 0x38, 0xef, 0x13, 0x63, 0x40, 0xf3, 0x90, 0xc7, 0x3c, 0xba, 0xe6, - 0x42, 0xb9, 0x33, 0x26, 0x08, 0xe7, 0xfc, 0x2e, 0x1b, 0x5a, 0x84, 0x82, 0x2b, 0xfa, 0x98, 0x95, - 0x9b, 0x3b, 0x72, 0x1c, 0xc4, 0x63, 0x94, 0x16, 0xa0, 0xe8, 0x6b, 0x1e, 0xbb, 0x0b, 0xb8, 0xc7, - 0x97, 0x5b, 0x2c, 0x80, 0xce, 0x77, 0xd4, 0x3d, 0xba, 0xd2, 0x42, 0xc7, 0x60, 0x8c, 0xbc, 0x6c, - 0xf1, 0xcb, 0x52, 0x19, 0x39, 0xd7, 0x51, 0xf7, 0x2e, 0xa8, 0xb6, 0xf4, 0xb1, 0x14, 0x94, 0x83, - 0xed, 0x44, 0xf7, 0x02, 0x22, 0xb4, 0x6a, 0x0b, 0x2b, 0x46, 0xaf, 0xc3, 0x7c, 0xa4, 0x40, 0x9c, - 0xe8, 0xa8, 0x7b, 0xf3, 0x2d, 0x7c, 0xa9, 0xd7, 0xa1, 0x55, 0xdb, 0x68, 0x15, 0x2a, 0x82, 0x58, - 0x24, 0xbb, 0xb8, 0x54, 0x8e, 0xf7, 0x7f, 0xaf, 0x86, 0x13, 0xb0, 0xb5, 0xee, 0x2b, 0x64, 0xad, - 0x5b, 0x66, 0x78, 0xe2, 0x8d, 0xf4, 0x10, 0x4c, 0x84, 0x7a, 0x8c, 0x24, 0x18, 0xef, 0xf6, 0xb6, - 0x94, 0x5d, 0xbc, 0x4f, 0xaf, 0xbf, 0x33, 0x55, 0x2f, 0xc8, 0xc5, 0x6e, 0x6f, 0xeb, 0x69, 0xbc, - 0x4f, 0x73, 0x87, 0x92, 0x06, 0xe5, 0xe0, 0x62, 0x8a, 0x38, 0x0e, 0xcb, 0xec, 0x19, 0x4d, 0xf1, - 0x61, 0x03, 0xfa, 0x80, 0xce, 0xc1, 0xe8, 0x55, 0x93, 0x69, 0xf3, 0xb0, 0xd5, 0xd3, 0x15, 0xd3, - 0xc1, 0xbe, 0x25, 0x19, 0xe3, 0x91, 0x6c, 0x18, 0xa5, 0x7a, 0x19, 0xb9, 0x51, 0x71, 0x05, 0x40, - 0x75, 0x1c, 0x4b, 0xdf, 0xea, 0x79, 0xf0, 0x33, 0x73, 0xfd, 0x69, 0xfd, 0xb9, 0x35, 0x55, 0xb7, - 0x1a, 0xb7, 0x72, 0xcd, 0x9e, 0xf6, 0x78, 0x7c, 0xda, 0xed, 0x43, 0x92, 0xde, 0xc8, 0x42, 0x8e, - 0x2d, 0x37, 0xd1, 0x13, 0xc1, 0xe4, 0x47, 0xf1, 0xec, 0x89, 0x41, 0xcd, 0x67, 0x54, 0xbc, 0xf5, - 0x6e, 0x04, 0x75, 0x57, 0x38, 0xa3, 0xd0, 0x28, 0xbe, 0x76, 0x50, 0x1b, 0xa3, 0xd1, 0xc7, 0xf2, - 0xa2, 0x97, 0x5e, 0x18, 0xb4, 0xba, 0x16, 0xb9, 0x8c, 0xec, 0xa1, 0x73, 0x19, 0x17, 0x61, 0xdc, - 0x17, 0x6e, 0xe9, 0x4d, 0xbe, 0x4e, 0x39, 0x31, 0x6c, 0xd2, 0x2d, 0x2f, 0xf2, 0xf6, 0x17, 0xdd, - 0x70, 0x6c, 0xb9, 0x89, 0x66, 0x83, 0x8b, 0x6c, 0x1a, 0xb5, 0xb1, 0x70, 0xc1, 0xb7, 0x6e, 0xa6, - 0x77, 0xf2, 0x6f, 0x81, 0x02, 0xbd, 0xd8, 0x4c, 0x49, 0x58, 0xf4, 0x90, 0x27, 0x05, 0xf4, 0xe5, - 0xdd, 0x30, 0xe1, 0x05, 0x36, 0x8c, 0x24, 0xcf, 0x50, 0xbc, 0x62, 0x4a, 0xf8, 0x00, 0x4c, 0xd3, - 0x0f, 0xe0, 0x85, 0xa9, 0x0b, 0x94, 0x1a, 0x91, 0x77, 0x57, 0x82, 0x1c, 0x77, 0x42, 0xd9, 0x33, - 0xa1, 0x94, 0x16, 0x58, 0xea, 0xc3, 0x2d, 0xa5, 0x64, 0xc7, 0x21, 0xef, 0x86, 0x9d, 0x45, 0xf6, - 0x65, 0x3d, 0x95, 0x45, 0x9b, 0x6e, 0x20, 0x6b, 0x61, 0xbb, 0xd7, 0x76, 0x38, 0x48, 0x89, 0xd2, - 0xd0, 0x40, 0x56, 0x66, 0xe5, 0x94, 0xf6, 0x14, 0x8c, 0x0b, 0xab, 0xc2, 0xe8, 0xc6, 0x29, 0x5d, - 0x49, 0x14, 0x52, 0xa2, 0xd3, 0x50, 0xe9, 0x5a, 0x66, 0xd7, 0xb4, 0xb1, 0xa5, 0xa8, 0xcd, 0xa6, - 0x85, 0x6d, 0x7b, 0xa6, 0xcc, 0xf0, 0x44, 0xf9, 0x3c, 0x2b, 0x96, 0xde, 0x03, 0x63, 0x22, 0x9e, - 0x9e, 0x86, 0xd1, 0x86, 0x6b, 0x21, 0xb3, 0x32, 0x7b, 0x20, 0xfe, 0x75, 0xbe, 0xdb, 0xe5, 0xd9, - 0x35, 0xf2, 0x53, 0x6a, 0xc3, 0x18, 0x1f, 0xb0, 0xc8, 0x9c, 0xca, 0x2a, 0x94, 0xba, 0xaa, 0x45, - 0xba, 0xe1, 0xcf, 0xac, 0x0c, 0x5a, 0x11, 0xae, 0xa9, 0x96, 0xb3, 0x8e, 0x9d, 0x40, 0x82, 0xa5, - 0x48, 0xf9, 0x59, 0x91, 0xf4, 0x18, 0x8c, 0x07, 0x68, 0xbc, 0xef, 0x10, 0xf2, 0x89, 0x4e, 0x1f, - 0xdc, 0x96, 0xa4, 0xbd, 0x96, 0x48, 0xe7, 0xa0, 0xe0, 0x8e, 0x15, 0x59, 0x68, 0x08, 0x51, 0xf0, - 0x0f, 0x1b, 0xf2, 0x47, 0x9a, 0x44, 0x32, 0xaf, 0xf1, 0x4f, 0x34, 0x65, 0x64, 0xf6, 0x20, 0x61, - 0x9f, 0x61, 0x62, 0xde, 0x0c, 0x3d, 0x0e, 0x63, 0xdc, 0x30, 0xf1, 0xf9, 0x38, 0x28, 0x5d, 0xb4, - 0x46, 0x2d, 0x95, 0x48, 0x17, 0x31, 0xbb, 0xe5, 0x55, 0x93, 0xf6, 0x57, 0xf3, 0x21, 0xc8, 0x0b, - 0xe3, 0x13, 0xf4, 0x12, 0xac, 0x86, 0x93, 0x71, 0x5e, 0x82, 0x57, 0xe2, 0x31, 0x12, 0x6d, 0xb2, - 0xf5, 0x96, 0x81, 0x9b, 0x8a, 0x37, 0x05, 0xf9, 0x85, 0xd9, 0x09, 0xf6, 0x62, 0x45, 0xcc, 0x2f, - 0xe9, 0x01, 0xc8, 0xb1, 0xb6, 0x46, 0x9a, 0xb8, 0x28, 0xd7, 0xfa, 0x9d, 0x14, 0xe4, 0x85, 0xfb, - 0x88, 0x64, 0x0a, 0x74, 0x22, 0x7d, 0xa3, 0x9d, 0xb8, 0xf9, 0x26, 0xe9, 0x3e, 0x40, 0x54, 0x53, - 0x94, 0xab, 0xa6, 0xa3, 0x1b, 0x2d, 0x85, 0x8d, 0x05, 0xbf, 0x37, 0x48, 0xdf, 0x5c, 0xa1, 0x2f, - 0xd6, 0x48, 0xf9, 0x3d, 0xa7, 0xa0, 0xe8, 0xcb, 0x72, 0xa1, 0x31, 0xc8, 0x5c, 0xc2, 0xd7, 0x2a, - 0x23, 0xa8, 0x08, 0x63, 0x32, 0xa6, 0x39, 0x82, 0x4a, 0xea, 0xec, 0x1b, 0x63, 0x30, 0x31, 0xdf, - 0x58, 0x58, 0x9e, 0xef, 0x76, 0xdb, 0x3a, 0xbf, 0x4f, 0x77, 0x19, 0xb2, 0x74, 0x9d, 0x9c, 0x60, - 0x7f, 0xa7, 0x9a, 0x24, 0xe1, 0x84, 0x64, 0x18, 0xa5, 0xcb, 0x69, 0x94, 0x64, 0xdb, 0xa7, 0x9a, - 0x28, 0x0f, 0x45, 0x1a, 0x49, 0x15, 0x2e, 0xc1, 0x6e, 0x50, 0x35, 0x49, 0x72, 0x0a, 0xfd, 0x0c, - 0x14, 0xbc, 0x75, 0x72, 0xd2, 0x3d, 0xa2, 0x6a, 0xe2, 0xb4, 0x15, 0xc1, 0xf7, 0x56, 0x06, 0x49, - 0xb7, 0x26, 0xaa, 0x89, 0xf3, 0x35, 0xe8, 0x39, 0x18, 0x13, 0x6b, 0xb0, 0x64, 0xbb, 0x38, 0xd5, - 0x84, 0x29, 0x25, 0x32, 0x7c, 0x6c, 0xe9, 0x9c, 0x64, 0xab, 0xaa, 0x9a, 0x28, 0x6f, 0x86, 0x36, - 0x21, 0xc7, 0x83, 0xdf, 0x44, 0x3b, 0x3d, 0xd5, 0x64, 0x89, 0x22, 0x22, 0x64, 0x2f, 0x39, 0x91, - 0x74, 0x7b, 0xae, 0x9a, 0x38, 0x61, 0x88, 0x54, 0x00, 0xdf, 0x7a, 0x3a, 0xf1, 0xbe, 0x5b, 0x35, - 0x79, 0x22, 0x10, 0x7d, 0x10, 0xf2, 0xee, 0xaa, 0x29, 0xe1, 0x4e, 0x5a, 0x35, 0x69, 0x2e, 0xae, - 0xb1, 0x99, 0xf8, 0x94, 0xc4, 0xbd, 0xb1, 0xa7, 0x24, 0xbc, 0x4d, 0x6e, 0x77, 0x1b, 0xfc, 0x2f, - 0x53, 0x70, 0x3c, 0xbc, 0x9d, 0xac, 0x1a, 0xfb, 0x03, 0x0e, 0x04, 0x0c, 0x38, 0x2d, 0xf2, 0x38, - 0x64, 0xe6, 0x8d, 0x7d, 0x12, 0x6c, 0xd0, 0x6f, 0xfb, 0xf5, 0xac, 0xb6, 0x48, 0xd3, 0x91, 0xe7, - 0x4d, 0xab, 0x1d, 0x7d, 0x6a, 0xa4, 0x9e, 0xfd, 0xfe, 0xe7, 0x6a, 0x23, 0x8d, 0xdd, 0x88, 0x5e, - 0xc5, 0x9c, 0x15, 0xc8, 0xcf, 0x1b, 0xfb, 0xe2, 0x98, 0xc0, 0x28, 0xed, 0xd0, 0x61, 0xb7, 0xff, - 0x5f, 0x2f, 0x11, 0x64, 0xdf, 0xf7, 0x81, 0x79, 0x8f, 0x73, 0xec, 0x69, 0xc0, 0x0e, 0x7f, 0xfc, - 0x89, 0x81, 0xea, 0x60, 0x69, 0x4a, 0x17, 0x20, 0xbb, 0x60, 0xea, 0x34, 0xe4, 0x69, 0x62, 0xc3, - 0xec, 0x88, 0x9c, 0x27, 0x7d, 0x40, 0xa7, 0x20, 0xa7, 0x76, 0xcc, 0x9e, 0xe1, 0x88, 0xa8, 0x99, - 0xb8, 0x92, 0xff, 0x7a, 0x50, 0xcb, 0x2c, 0x1b, 0x8e, 0xcc, 0x5f, 0xd5, 0xb3, 0xdf, 0x7d, 0xb5, - 0x96, 0x92, 0x9e, 0x82, 0xb1, 0x45, 0xac, 0xdd, 0x08, 0xd6, 0x22, 0xd6, 0x42, 0x58, 0xa7, 0x21, - 0xbf, 0x6c, 0x38, 0xec, 0xa3, 0x61, 0xb7, 0x41, 0x46, 0x37, 0xd8, 0xb6, 0x48, 0xa8, 0x7e, 0x52, - 0x4e, 0x48, 0x17, 0xb1, 0xe6, 0x92, 0x36, 0xb1, 0x16, 0x26, 0x25, 0xf0, 0xa4, 0x5c, 0x6a, 0x40, - 0xe9, 0x8a, 0xda, 0xe6, 0xe1, 0x1e, 0xb6, 0xd1, 0x7d, 0x50, 0x50, 0xc5, 0x03, 0x5d, 0x59, 0x95, - 0x1a, 0xe5, 0x1f, 0x1c, 0xd4, 0xc0, 0x23, 0x92, 0x3d, 0x82, 0x7a, 0xf6, 0xe5, 0xff, 0x76, 0x32, - 0x25, 0x99, 0x30, 0x76, 0x41, 0xb5, 0xa9, 0xa5, 0x7f, 0x30, 0x90, 0x48, 0xa1, 0x91, 0x62, 0xe3, - 0xc8, 0xf5, 0x83, 0xda, 0xe4, 0xbe, 0xda, 0x69, 0xd7, 0x25, 0xef, 0x9d, 0xe4, 0xcf, 0xaf, 0xcc, - 0xf9, 0xf2, 0x2b, 0x34, 0x92, 0x6c, 0x4c, 0x5d, 0x3f, 0xa8, 0x4d, 0x78, 0x3c, 0xe4, 0x8d, 0xe4, - 0x26, 0x5d, 0xa4, 0x2e, 0xe4, 0x58, 0xd0, 0x1b, 0xb9, 0x43, 0xc8, 0x53, 0x3e, 0x69, 0x2f, 0xe5, - 0x53, 0x3f, 0x54, 0x9a, 0x81, 0xc7, 0x65, 0x8c, 0xa3, 0x9e, 0xfd, 0xc8, 0xab, 0xb5, 0x11, 0xc9, - 0x02, 0xb4, 0xae, 0x77, 0x7a, 0x6d, 0x76, 0xf1, 0x5b, 0x6c, 0x35, 0x3d, 0xc8, 0xda, 0x4d, 0xd3, - 0x49, 0x2c, 0x20, 0x9b, 0x98, 0xe3, 0x4a, 0xca, 0x05, 0xc2, 0xe2, 0x8c, 0x6f, 0x1e, 0xd4, 0x52, - 0xb4, 0xf5, 0x54, 0x46, 0x77, 0x41, 0x8e, 0x85, 0xf2, 0x3c, 0xfe, 0x29, 0x0b, 0x1e, 0xd6, 0x27, - 0x99, 0xbf, 0x95, 0x9e, 0x80, 0xb1, 0x55, 0xbb, 0xb5, 0x48, 0xba, 0x74, 0x1c, 0xf2, 0x1d, 0xbb, - 0xa5, 0xf8, 0xa2, 0xa9, 0xb1, 0x8e, 0xdd, 0xda, 0x18, 0x10, 0x85, 0xf1, 0x61, 0x79, 0x2f, 0xe4, - 0x36, 0xf6, 0x28, 0xfb, 0x29, 0x57, 0x4a, 0x19, 0x7f, 0x1b, 0x39, 0x7a, 0x80, 0xe9, 0xe7, 0x33, - 0x00, 0x1b, 0x7b, 0x6e, 0x0f, 0x07, 0x6c, 0xc1, 0x21, 0x09, 0x72, 0xce, 0x9e, 0x1b, 0x51, 0x17, - 0x1a, 0xf0, 0xda, 0x41, 0x2d, 0xb7, 0xb1, 0x47, 0x96, 0x17, 0x32, 0x7f, 0x13, 0x4c, 0x65, 0x65, - 0x42, 0xa9, 0x2c, 0x37, 0x81, 0x97, 0x8d, 0x48, 0xe0, 0x8d, 0xfa, 0x76, 0x00, 0x8e, 0xc1, 0x98, - 0xa5, 0x5e, 0x53, 0xc8, 0x88, 0xb2, 0xaf, 0x90, 0xe6, 0x2c, 0xf5, 0xda, 0x8a, 0xd9, 0x42, 0x0b, - 0x90, 0x6d, 0x9b, 0x2d, 0x91, 0x77, 0x3b, 0x2a, 0x3a, 0x45, 0x22, 0x2e, 0x7e, 0x9a, 0x78, 0xc5, - 0x6c, 0x35, 0x8e, 0x11, 0xf9, 0x7f, 0xf1, 0xcf, 0x6a, 0x13, 0xc1, 0x72, 0x5b, 0xa6, 0xcc, 0x6e, - 0x32, 0x30, 0x3f, 0x30, 0x19, 0x58, 0x18, 0x96, 0x0c, 0x84, 0x60, 0x32, 0xf0, 0x0e, 0xba, 0xa7, - 0xc9, 0xf6, 0x70, 0xa6, 0xfb, 0x82, 0xcf, 0x79, 0x63, 0x9f, 0xee, 0xa2, 0xde, 0x0a, 0x05, 0xf7, - 0xa0, 0x10, 0xff, 0xec, 0xb3, 0x57, 0xc0, 0xf5, 0xed, 0x23, 0x29, 0x28, 0x07, 0x5b, 0x4c, 0xf3, - 0x39, 0x76, 0x8b, 0x7f, 0x30, 0x95, 0xa5, 0x3d, 0x89, 0x52, 0x2c, 0x8b, 0x4c, 0x79, 0x48, 0xe7, - 0xe7, 0x43, 0x3a, 0x3f, 0x25, 0x04, 0xc4, 0xee, 0xee, 0x30, 0x55, 0x9f, 0xe6, 0xd2, 0x29, 0xf9, - 0x0a, 0x6d, 0x4f, 0xf5, 0xa9, 0x46, 0xfc, 0x2c, 0x14, 0x7d, 0x6f, 0x23, 0x83, 0xfa, 0x47, 0x22, - 0x92, 0x1d, 0x93, 0xee, 0x80, 0x88, 0x37, 0x62, 0x0b, 0xc1, 0x23, 0x75, 0x15, 0xb5, 0xe0, 0x12, - 0x25, 0x3d, 0x5e, 0xd1, 0x58, 0xfc, 0xd3, 0x6f, 0x9f, 0x18, 0x79, 0xf9, 0xb5, 0x13, 0x23, 0x03, - 0xcf, 0x67, 0x4a, 0xf1, 0x5f, 0x98, 0x77, 0xbd, 0xcc, 0x47, 0xdf, 0x0f, 0xb7, 0x72, 0x1a, 0xdb, - 0x51, 0x77, 0x75, 0xa3, 0x25, 0xfe, 0x72, 0x77, 0x53, 0xe6, 0xbd, 0xe1, 0xa5, 0x37, 0xee, 0x76, - 0xde, 0xea, 0xa1, 0xb1, 0x6a, 0x94, 0x37, 0x94, 0x0e, 0xb2, 0x80, 0x56, 0xed, 0xd6, 0x82, 0x85, - 0xd9, 0xc7, 0x46, 0xf8, 0x3a, 0x29, 0x78, 0xd9, 0x87, 0xdb, 0xa8, 0x5b, 0xe6, 0x82, 0x7d, 0x71, - 0xbf, 0x1b, 0xed, 0xe5, 0x88, 0x02, 0x57, 0x84, 0x96, 0x00, 0x68, 0x7a, 0xc5, 0xb6, 0xbd, 0x64, - 0x5e, 0x2d, 0x8c, 0xb1, 0xe0, 0x52, 0xc8, 0xaa, 0x83, 0x6d, 0x31, 0xd6, 0x1e, 0x23, 0xfa, 0x10, - 0x4c, 0x75, 0x74, 0x43, 0xb1, 0x71, 0x7b, 0x5b, 0x69, 0xe2, 0x36, 0xfd, 0x14, 0x0b, 0xdf, 0xb8, - 0x2b, 0x34, 0x56, 0xb8, 0x63, 0xba, 0x2b, 0x7e, 0xcc, 0xe6, 0x96, 0x0d, 0xe7, 0xfa, 0x41, 0xad, - 0xca, 0xbc, 0x43, 0x04, 0xa4, 0x24, 0x4f, 0x76, 0x74, 0x63, 0x1d, 0xb7, 0xb7, 0x17, 0xdd, 0x32, - 0xf4, 0x12, 0x4c, 0x72, 0x0a, 0xd3, 0x4b, 0x7a, 0x10, 0xdb, 0x53, 0x6a, 0xac, 0x5e, 0x3f, 0xa8, - 0xcd, 0x30, 0xb4, 0x3e, 0x12, 0xe9, 0x07, 0x07, 0xb5, 0xfb, 0x13, 0xb4, 0x69, 0x5e, 0xd3, 0x84, - 0x7b, 0xac, 0xb8, 0x20, 0xbc, 0x84, 0xd4, 0xed, 0x25, 0xe8, 0x45, 0xdd, 0xa3, 0xe1, 0xba, 0xfb, - 0x48, 0x92, 0xd6, 0xed, 0x73, 0xcd, 0x5e, 0x06, 0x5f, 0xd4, 0x7d, 0x14, 0x72, 0xdd, 0xde, 0x96, - 0xd8, 0x45, 0x2b, 0xc8, 0xfc, 0x09, 0xcd, 0xfa, 0x37, 0xd2, 0x8a, 0x67, 0x4b, 0x62, 0x3c, 0x49, - 0xac, 0xe2, 0xa6, 0x39, 0x59, 0xec, 0x47, 0xa3, 0x8f, 0xaf, 0x66, 0xa0, 0xb2, 0x6a, 0xb7, 0x96, - 0x9a, 0xba, 0x73, 0x93, 0xd5, 0xab, 0x1b, 0x25, 0x1d, 0xea, 0xcd, 0x1a, 0x0b, 0xd7, 0x0f, 0x6a, - 0x65, 0x26, 0x9d, 0x9b, 0x29, 0x93, 0x0e, 0x4c, 0x78, 0x7a, 0xa9, 0x58, 0xaa, 0xc3, 0xdd, 0x53, - 0x63, 0x31, 0xa1, 0x06, 0x2e, 0x62, 0xed, 0xfa, 0x41, 0xed, 0x28, 0x6b, 0x59, 0x08, 0x4a, 0x92, - 0xcb, 0x5a, 0x60, 0x2e, 0xa0, 0xbd, 0x68, 0xc5, 0xa7, 0xfb, 0x4f, 0x8d, 0x8b, 0x6f, 0xa3, 0xd2, - 0xf3, 0xa1, 0xfb, 0x4a, 0x1a, 0x8a, 0xc4, 0xd5, 0xb3, 0x72, 0x1c, 0x3d, 0x15, 0x52, 0x3f, 0xc2, - 0xa9, 0x90, 0x7e, 0x67, 0xa6, 0xc2, 0x3d, 0x6e, 0xac, 0x9d, 0x19, 0xa8, 0xf3, 0xc1, 0x90, 0xfb, - 0x3f, 0x66, 0xa8, 0x55, 0xa5, 0x2b, 0x48, 0x19, 0x37, 0xdf, 0x0d, 0x02, 0xfc, 0x85, 0x14, 0x1c, - 0xf1, 0xc4, 0x63, 0x5b, 0x5a, 0x48, 0x8a, 0xcf, 0x5c, 0x3f, 0xa8, 0xdd, 0x1a, 0x96, 0xa2, 0x8f, - 0xec, 0x06, 0x24, 0x39, 0xe5, 0x02, 0xad, 0x5b, 0x5a, 0x74, 0x3b, 0x9a, 0xb6, 0xe3, 0xb6, 0x23, - 0x33, 0xb8, 0x1d, 0x3e, 0xb2, 0xb7, 0xd4, 0x8e, 0x45, 0xdb, 0xe9, 0x1f, 0xd4, 0x6c, 0xc2, 0x41, - 0xfd, 0x5a, 0x1a, 0xc6, 0x57, 0xed, 0xd6, 0xa6, 0xd1, 0xfc, 0xc9, 0x84, 0x38, 0xec, 0x84, 0xf8, - 0x58, 0x0a, 0xca, 0x17, 0x75, 0xdb, 0x31, 0x2d, 0x5d, 0x53, 0xdb, 0x74, 0x35, 0xe3, 0x9d, 0x91, - 0x4c, 0x1d, 0xfe, 0x8c, 0xe4, 0x23, 0x90, 0xbb, 0xaa, 0xb6, 0xd9, 0xbf, 0x2b, 0xca, 0xd0, 0x3d, - 0xc2, 0x90, 0xef, 0x08, 0xe7, 0x80, 0x39, 0x39, 0x6f, 0xce, 0xef, 0xa6, 0x61, 0x22, 0x14, 0x78, - 0xa0, 0x06, 0x64, 0xa9, 0x45, 0x67, 0x0b, 0xde, 0xb9, 0x43, 0xc4, 0x15, 0x64, 0x4d, 0x4c, 0x79, - 0xd1, 0x4f, 0x41, 0xbe, 0xa3, 0xee, 0x31, 0xcf, 0xc0, 0xd6, 0x37, 0xf3, 0x87, 0xc3, 0xf1, 0x56, - 0xaf, 0x02, 0x47, 0x92, 0xc7, 0x3a, 0xea, 0x1e, 0xf5, 0x07, 0x5d, 0x98, 0x20, 0xa5, 0xda, 0x8e, - 0x6a, 0xb4, 0xb0, 0xdf, 0xfd, 0x5c, 0x3c, 0x74, 0x25, 0x47, 0xbd, 0x4a, 0x7c, 0x70, 0x92, 0x3c, - 0xde, 0x51, 0xf7, 0x16, 0x68, 0x01, 0xa9, 0xb1, 0x9e, 0x7f, 0xe5, 0xd5, 0xda, 0x08, 0x95, 0xd8, - 0xbf, 0x4f, 0x01, 0x78, 0x12, 0x43, 0x1b, 0x50, 0x09, 0xb9, 0x2f, 0x71, 0xc6, 0x28, 0x36, 0xc0, - 0xf3, 0x16, 0xb6, 0x13, 0x5a, 0x68, 0x08, 0x3e, 0x08, 0x45, 0x76, 0x4a, 0x40, 0xa1, 0xc9, 0xf8, - 0x74, 0x6c, 0x32, 0xfe, 0x04, 0xc1, 0xba, 0x7e, 0x50, 0x43, 0xac, 0x3b, 0x3e, 0x66, 0x89, 0xa6, - 0xe8, 0x81, 0x95, 0x10, 0x86, 0x60, 0x5f, 0x8a, 0xbe, 0xd8, 0x82, 0x9e, 0x3d, 0x33, 0x0d, 0x7d, - 0x17, 0x5b, 0xee, 0x1a, 0x99, 0x3d, 0xa2, 0x2a, 0xe4, 0xd9, 0x57, 0x05, 0x9d, 0x7d, 0xf1, 0xef, - 0x2a, 0xc4, 0x33, 0xe1, 0xba, 0x86, 0xb7, 0x6c, 0x5d, 0x8c, 0x82, 0x2c, 0x1e, 0xd1, 0x79, 0xa8, - 0xd8, 0x58, 0xeb, 0x59, 0xba, 0xb3, 0xaf, 0x68, 0xa6, 0xe1, 0xa8, 0x9a, 0xc3, 0x9d, 0xf6, 0x2d, - 0xd7, 0x0f, 0x6a, 0xc7, 0x58, 0x5b, 0xc3, 0x14, 0x92, 0x3c, 0x21, 0x8a, 0x16, 0x58, 0x09, 0xa9, - 0xa1, 0x89, 0x1d, 0x55, 0x6f, 0xdb, 0x7c, 0x61, 0x2b, 0x1e, 0x7d, 0x7d, 0xf9, 0x9d, 0x31, 0xff, - 0x66, 0xd4, 0x35, 0xa8, 0x98, 0x5d, 0x6c, 0x45, 0xd8, 0xa3, 0x15, 0xaf, 0xe6, 0x30, 0xc5, 0x0d, - 0x98, 0x84, 0x09, 0x81, 0x21, 0x2c, 0xc2, 0xf9, 0xc0, 0x99, 0x33, 0x16, 0x37, 0xa6, 0xc3, 0x5d, - 0x0e, 0x53, 0x48, 0xfe, 0x83, 0x66, 0x2c, 0xba, 0x3c, 0x0a, 0xb9, 0x17, 0x54, 0xbd, 0x2d, 0x3e, - 0xb5, 0x2a, 0xf3, 0x27, 0xb4, 0x0c, 0x39, 0xdb, 0x51, 0x9d, 0x1e, 0x0b, 0xbd, 0x47, 0x1b, 0xef, - 0x49, 0xd8, 0xe6, 0x86, 0x69, 0x34, 0xd7, 0x29, 0xa3, 0xcc, 0x01, 0xd0, 0x79, 0xc8, 0x39, 0xe6, - 0x2e, 0x36, 0xb8, 0x50, 0x0f, 0x35, 0xd3, 0x69, 0xa2, 0x8e, 0x71, 0x23, 0x07, 0x3c, 0xa3, 0xac, - 0xd8, 0x3b, 0xaa, 0x85, 0x6d, 0x16, 0x2a, 0x37, 0x96, 0x0f, 0x3d, 0x1d, 0x8f, 0x85, 0x3d, 0x05, - 0xc3, 0x93, 0xe4, 0x09, 0xb7, 0x68, 0x9d, 0x96, 0x84, 0x23, 0xe7, 0xb1, 0x1b, 0x8a, 0x9c, 0xcf, - 0x43, 0xa5, 0x67, 0x6c, 0x99, 0x06, 0xfd, 0x2c, 0x22, 0x4f, 0xd3, 0xe4, 0x4f, 0xa6, 0x66, 0x33, - 0xfe, 0xd1, 0x0a, 0x53, 0x48, 0xf2, 0x84, 0x5b, 0xc4, 0x4f, 0x3f, 0x36, 0xa1, 0xec, 0x51, 0xd1, - 0x29, 0x5b, 0x88, 0x9d, 0xb2, 0xb7, 0xf3, 0x29, 0x7b, 0x24, 0x5c, 0x8b, 0x37, 0x6b, 0xc7, 0xdd, - 0x42, 0xc2, 0x86, 0xde, 0x1f, 0x58, 0x46, 0x02, 0xaf, 0x61, 0xa0, 0x95, 0x49, 0xbe, 0x82, 0x2c, - 0xbe, 0x23, 0x2b, 0xc8, 0x7a, 0xe9, 0x23, 0xaf, 0xd6, 0x46, 0xdc, 0x09, 0xfb, 0x4b, 0x69, 0xc8, - 0x2d, 0x5e, 0xa1, 0xd7, 0x28, 0x7f, 0x4c, 0xc3, 0x07, 0x9f, 0xf5, 0x7a, 0x1f, 0x8c, 0x31, 0x59, - 0xd8, 0xe8, 0x2c, 0x8c, 0x76, 0xc9, 0x0f, 0x9e, 0x6b, 0x3c, 0xda, 0xa7, 0xd2, 0x94, 0x4e, 0xac, - 0x30, 0x29, 0xa9, 0xf4, 0xf9, 0x0c, 0xc0, 0xe2, 0x95, 0x2b, 0x1b, 0x96, 0xde, 0x6d, 0x63, 0xe7, - 0x27, 0xe1, 0xf5, 0xbb, 0x27, 0xbc, 0xf6, 0x8d, 0xf1, 0xd3, 0x50, 0xf4, 0xc6, 0xc8, 0x46, 0x8f, - 0x43, 0xde, 0xe1, 0xbf, 0xf9, 0x50, 0x57, 0xfb, 0x87, 0x5a, 0x90, 0xf3, 0xe1, 0x76, 0x39, 0xa4, - 0xff, 0x92, 0x06, 0x88, 0x4b, 0xce, 0xfc, 0x18, 0x04, 0xe0, 0xe7, 0x21, 0xc7, 0x3d, 0x4e, 0xe6, - 0x86, 0xa2, 0x55, 0xce, 0xed, 0x1b, 0xa5, 0x6f, 0xa7, 0x61, 0x6a, 0x53, 0x98, 0xdd, 0x9f, 0x48, - 0x18, 0x5d, 0x84, 0x31, 0x6c, 0x38, 0x96, 0x8e, 0x45, 0x1a, 0x7c, 0x36, 0xac, 0xa5, 0x11, 0xd2, - 0xa2, 0xff, 0x2e, 0x41, 0x9c, 0x96, 0xe3, 0xec, 0x3e, 0x19, 0x7f, 0x3c, 0x03, 0x33, 0x83, 0xb8, - 0xd0, 0x02, 0x4c, 0x68, 0x16, 0xa6, 0x05, 0x8a, 0x7f, 0xe7, 0xa4, 0x51, 0xf5, 0x65, 0x8c, 0x82, - 0x04, 0x92, 0x5c, 0x16, 0x25, 0xdc, 0x21, 0xb7, 0x68, 0x82, 0x8a, 0x4c, 0x15, 0x42, 0x95, 0x30, - 0x88, 0x96, 0xb8, 0x47, 0xf6, 0xd2, 0x52, 0x7e, 0x00, 0xe6, 0x92, 0xcb, 0x5e, 0x29, 0xf5, 0xc9, - 0x2f, 0xc2, 0x84, 0x6e, 0xe8, 0x8e, 0xae, 0xb6, 0x95, 0x2d, 0xb5, 0xad, 0x1a, 0xda, 0x8d, 0x2c, - 0x45, 0x98, 0x37, 0xe5, 0xd5, 0x86, 0xe0, 0x24, 0xb9, 0xcc, 0x4b, 0x1a, 0xac, 0x80, 0x8c, 0x88, - 0xa8, 0x2a, 0x7b, 0x43, 0x81, 0x9b, 0x60, 0xf7, 0x8d, 0xc8, 0x2f, 0x67, 0x60, 0xd2, 0xcd, 0xcf, - 0xfc, 0x64, 0x28, 0x92, 0x0e, 0xc5, 0x2a, 0x00, 0x33, 0x20, 0xc4, 0x73, 0xdc, 0xc0, 0x68, 0x10, - 0x13, 0x54, 0x60, 0x08, 0x8b, 0xb6, 0xe3, 0x1b, 0x8f, 0xbf, 0xc8, 0x40, 0xc9, 0x3f, 0x1e, 0x3f, - 0x71, 0xe9, 0xef, 0xa2, 0x8c, 0xd9, 0xbc, 0x67, 0x12, 0xb3, 0xfc, 0xbb, 0x28, 0x21, 0x93, 0xd8, - 0x37, 0x95, 0x06, 0xdb, 0xc2, 0xbf, 0x4a, 0x43, 0x8e, 0x9f, 0xcb, 0xd6, 0xfa, 0x56, 0x11, 0xa9, - 0xb8, 0x73, 0xdf, 0xc3, 0x17, 0x11, 0xaf, 0x44, 0x2e, 0x22, 0xca, 0x1d, 0x75, 0x4f, 0x09, 0xdc, - 0x62, 0x4a, 0xcd, 0x8e, 0x37, 0x8e, 0x7b, 0x28, 0xc1, 0xf7, 0x2c, 0x17, 0xe2, 0x9d, 0xc9, 0x45, - 0x8f, 0x40, 0x91, 0x50, 0x78, 0x5e, 0x81, 0xb0, 0x1f, 0xf5, 0x92, 0x0f, 0xbe, 0x97, 0x92, 0x0c, - 0x1d, 0x75, 0x6f, 0x89, 0x3d, 0xa0, 0x15, 0x40, 0x3b, 0x6e, 0xea, 0x4b, 0xf1, 0x44, 0x48, 0xf8, - 0x6f, 0xbb, 0x7e, 0x50, 0x3b, 0xce, 0xf8, 0xfb, 0x69, 0x24, 0x79, 0xd2, 0x2b, 0x14, 0x68, 0x0f, - 0x02, 0x90, 0x7e, 0x29, 0xec, 0x4c, 0x08, 0x5b, 0xc2, 0xfa, 0x0e, 0x4a, 0x78, 0xef, 0x24, 0xb9, - 0x40, 0x1e, 0x16, 0xc9, 0x6f, 0x9f, 0xe0, 0x7f, 0x25, 0x05, 0xc8, 0xf3, 0x3d, 0xee, 0x7e, 0xfd, - 0xfb, 0xe9, 0xbd, 0x44, 0xb1, 0x32, 0x4a, 0x45, 0x2f, 0xb2, 0x3c, 0x3e, 0xb1, 0xc8, 0xf2, 0x4d, - 0xd5, 0xfb, 0x3c, 0xfb, 0x9c, 0x1e, 0x98, 0x15, 0x8c, 0xb0, 0xc1, 0xff, 0x3a, 0x05, 0xc7, 0xfb, - 0x14, 0xc7, 0x6d, 0xd7, 0x15, 0x40, 0x96, 0xef, 0x25, 0xff, 0x0f, 0x45, 0x29, 0xfe, 0x1f, 0xff, - 0x12, 0xea, 0xdf, 0xa4, 0xd5, 0x67, 0xe3, 0x6f, 0x9e, 0x37, 0xe1, 0x19, 0xc5, 0x14, 0x4c, 0xfb, - 0xab, 0x77, 0x3b, 0x70, 0x1e, 0x4a, 0xfe, 0xda, 0x79, 0xd3, 0x6f, 0x1d, 0xd6, 0x74, 0xde, 0xea, - 0x00, 0x1f, 0x5a, 0xf6, 0x66, 0x9f, 0xf8, 0xa7, 0x93, 0x71, 0xbd, 0x77, 0x0f, 0xb2, 0x85, 0x66, - 0x21, 0x6b, 0xf1, 0xff, 0x4b, 0x41, 0x76, 0xcd, 0x34, 0xdb, 0xc8, 0x84, 0x49, 0xc3, 0x74, 0x14, - 0xa2, 0x2c, 0xb8, 0xa9, 0xf0, 0xdc, 0x08, 0xcb, 0x82, 0x2e, 0x1c, 0x4e, 0x28, 0xdf, 0x3b, 0xa8, - 0xf5, 0x43, 0xc9, 0x13, 0x86, 0xe9, 0x34, 0x68, 0xc9, 0x06, 0xcb, 0x9c, 0x7c, 0x08, 0xc6, 0x83, - 0x95, 0xb1, 0x4c, 0xd1, 0xb3, 0x87, 0xae, 0x2c, 0x08, 0x73, 0xfd, 0xa0, 0x36, 0xed, 0x4d, 0x02, - 0xb7, 0x58, 0x92, 0x4b, 0x5b, 0xbe, 0xda, 0xeb, 0x79, 0xd2, 0xfb, 0xef, 0xbf, 0x5a, 0x4b, 0x35, - 0xce, 0x0f, 0x3c, 0x01, 0x70, 0xdf, 0xd0, 0x26, 0xec, 0xb9, 0x5b, 0xfd, 0xc1, 0xb3, 0x00, 0xdf, - 0x3d, 0x03, 0xd5, 0xd0, 0x59, 0x00, 0x7a, 0x0f, 0x79, 0xc0, 0x49, 0x80, 0xe1, 0xff, 0xc0, 0x7f, - 0xc0, 0x41, 0x81, 0xa1, 0x87, 0x0d, 0xa4, 0x5d, 0x38, 0x4a, 0x8f, 0x72, 0x7a, 0x66, 0x4b, 0x7c, - 0x25, 0xe6, 0xa8, 0x9b, 0x40, 0x4b, 0xf1, 0xff, 0x17, 0xce, 0xb2, 0x61, 0x8f, 0x01, 0x78, 0x35, - 0xbb, 0x17, 0x6e, 0x78, 0x4b, 0x59, 0xeb, 0xd9, 0x3f, 0xf2, 0xa7, 0x30, 0xb2, 0x8f, 0x58, 0xfa, - 0xf5, 0x14, 0x1c, 0xeb, 0xab, 0x8d, 0x6b, 0xfd, 0x93, 0x81, 0x0b, 0xa3, 0xa9, 0x64, 0x39, 0x7a, - 0xff, 0x97, 0x1f, 0xea, 0x11, 0xed, 0xaa, 0x46, 0xb5, 0x8b, 0x55, 0x18, 0x68, 0xd8, 0x8b, 0x70, - 0x24, 0xd8, 0x2e, 0x21, 0x84, 0xe7, 0xa0, 0x1c, 0x5c, 0x2d, 0xf0, 0x50, 0xe2, 0x3d, 0x87, 0xf7, - 0x90, 0xe3, 0x81, 0x15, 0x83, 0xf4, 0x6c, 0x58, 0xf0, 0xae, 0x24, 0xde, 0xd7, 0x7f, 0xf8, 0x3e, - 0x56, 0x10, 0xbe, 0xbb, 0x59, 0x5f, 0x49, 0xc1, 0xc9, 0x20, 0xb2, 0x67, 0x84, 0xed, 0xb7, 0xbd, - 0x5f, 0x6f, 0x45, 0x3d, 0xfe, 0x53, 0x0a, 0x6e, 0x1f, 0xd2, 0x72, 0x2e, 0x1e, 0x0b, 0xa6, 0x7d, - 0xd6, 0xdd, 0xe2, 0xc5, 0x42, 0x65, 0xa4, 0xc1, 0x1e, 0xc8, 0x35, 0x6e, 0xb7, 0xf0, 0xa3, 0x48, - 0x53, 0xfd, 0xef, 0x6c, 0x79, 0xaa, 0xdf, 0x22, 0xbf, 0x35, 0xdd, 0xfa, 0x7a, 0x0a, 0x4e, 0x07, - 0x7b, 0x15, 0xb1, 0xa2, 0x7b, 0x77, 0x0f, 0xcc, 0xbf, 0x49, 0xc1, 0x3d, 0x49, 0xba, 0xc0, 0x47, - 0xe8, 0x79, 0x98, 0xf2, 0xe2, 0xab, 0xf0, 0x00, 0x9d, 0x4a, 0xb0, 0x2a, 0xe6, 0x4a, 0x8d, 0x5c, - 0x94, 0x9b, 0x33, 0x12, 0x7f, 0x9c, 0xe2, 0x73, 0xce, 0x3f, 0xee, 0xae, 0xd8, 0x83, 0x4b, 0x82, - 0x43, 0x8a, 0xdd, 0xb7, 0x2c, 0x18, 0x0f, 0x2c, 0x0b, 0x22, 0x06, 0x34, 0x7d, 0x93, 0x2c, 0xc8, - 0x2f, 0x0a, 0x6b, 0x1a, 0x11, 0x9c, 0xed, 0xc2, 0x54, 0xc4, 0x24, 0x71, 0x6f, 0x9c, 0xc6, 0xcf, - 0x91, 0xa3, 0x3f, 0x38, 0xa8, 0x45, 0x44, 0x7d, 0x32, 0xea, 0x9f, 0x1e, 0xd2, 0x7f, 0x4e, 0x41, - 0x8d, 0x36, 0x24, 0x62, 0x28, 0xff, 0x26, 0x0b, 0x18, 0x73, 0x43, 0x1a, 0xd9, 0x2d, 0x2e, 0xe8, - 0x79, 0xc8, 0x31, 0x2d, 0xe5, 0xb2, 0x3d, 0x84, 0x7a, 0x73, 0x46, 0xcf, 0x60, 0x2f, 0x8a, 0x7e, - 0x45, 0xdb, 0x85, 0xb7, 0x49, 0x7e, 0x6f, 0xc1, 0x2e, 0xfc, 0x2b, 0x61, 0xb0, 0xa3, 0x5b, 0xce, - 0x45, 0xf4, 0xc1, 0xb7, 0x6c, 0xb0, 0xf9, 0x97, 0x84, 0xde, 0x36, 0xcb, 0xec, 0x36, 0x3f, 0xc6, - 0x32, 0xbf, 0xfb, 0x46, 0xc0, 0xb5, 0xcc, 0x31, 0x5d, 0x78, 0x97, 0x5b, 0xe6, 0xeb, 0x69, 0x38, - 0x4e, 0xbb, 0xe1, 0x5f, 0x91, 0xbc, 0x03, 0x92, 0x57, 0x00, 0xd9, 0x96, 0xa6, 0xdc, 0x2c, 0xfb, - 0x51, 0xb1, 0x2d, 0xed, 0x4a, 0xc0, 0xe9, 0x2a, 0x80, 0x9a, 0xb6, 0x13, 0xae, 0x20, 0x73, 0xc3, - 0x15, 0x34, 0x6d, 0xe7, 0xca, 0x10, 0xaf, 0x9e, 0x3d, 0x8c, 0xee, 0xfc, 0x61, 0x0a, 0xaa, 0x51, - 0x42, 0xe7, 0xba, 0xa2, 0xc2, 0xd1, 0xc0, 0x3a, 0x3a, 0xac, 0x2e, 0x77, 0x0c, 0x5b, 0x4d, 0x86, - 0xa6, 0xee, 0x11, 0x0b, 0xdf, 0xec, 0xc9, 0xfb, 0x65, 0xe1, 0x74, 0x5c, 0xcd, 0xef, 0x5f, 0xc2, - 0xbc, 0x2b, 0xa7, 0xec, 0x6f, 0xf5, 0x99, 0xfb, 0x77, 0xdb, 0x6a, 0xe8, 0x4f, 0x52, 0x70, 0x62, - 0x40, 0x0b, 0xff, 0x26, 0xbb, 0xf3, 0x9f, 0x1d, 0xa8, 0x30, 0x37, 0x6b, 0xe9, 0xf5, 0x20, 0x9f, - 0x50, 0xc1, 0x73, 0x6b, 0xbe, 0x05, 0x75, 0xe4, 0x37, 0xe6, 0x9e, 0x81, 0x5b, 0x22, 0xb9, 0x78, - 0x9b, 0xce, 0x42, 0x76, 0x47, 0xb7, 0x1d, 0xf7, 0xc3, 0x0b, 0xa1, 0xe6, 0x84, 0xb8, 0x28, 0xad, - 0x84, 0xa0, 0x42, 0x21, 0xd7, 0x4c, 0xb3, 0xcd, 0xab, 0x97, 0x16, 0x60, 0xd2, 0x57, 0xc6, 0xc1, - 0xe7, 0x20, 0xdb, 0x35, 0xcd, 0x36, 0x07, 0x9f, 0x0e, 0x83, 0x13, 0x5a, 0xde, 0x4d, 0x4a, 0x27, - 0x4d, 0x03, 0x62, 0x20, 0xec, 0x93, 0x20, 0x1c, 0xfa, 0xc3, 0x29, 0x98, 0x0a, 0x14, 0xbb, 0x97, - 0x96, 0x72, 0x81, 0xaf, 0x49, 0xf5, 0x6d, 0xd1, 0x33, 0x7a, 0xf7, 0x7a, 0x3a, 0xcb, 0xee, 0xbe, - 0x05, 0xd5, 0x3d, 0xfb, 0x47, 0x25, 0x71, 0xcb, 0x55, 0x01, 0xf0, 0xa5, 0x62, 0xef, 0x0a, 0xd7, - 0x1c, 0x9d, 0xf4, 0xa8, 0xde, 0x1d, 0x4b, 0xc7, 0x63, 0xde, 0x11, 0xf4, 0x53, 0xfe, 0x63, 0x54, - 0x77, 0x0e, 0xe7, 0x13, 0xf0, 0x77, 0xc5, 0x91, 0xb9, 0xe8, 0x7f, 0x0b, 0xa6, 0xa3, 0x56, 0xc1, - 0xe8, 0x81, 0xe1, 0x08, 0xfd, 0x71, 0x4b, 0xf5, 0x3d, 0x87, 0xe0, 0x70, 0xab, 0x7f, 0x25, 0x05, - 0xb7, 0x0d, 0x5d, 0xec, 0xa1, 0xc7, 0x86, 0xc3, 0x0e, 0x89, 0xa4, 0xaa, 0xf5, 0x1b, 0x61, 0x75, - 0x9b, 0xa6, 0x04, 0xf6, 0xf3, 0xa3, 0x25, 0xda, 0xb7, 0xfe, 0x18, 0x30, 0xb0, 0xfd, 0xb1, 0xa6, - 0x34, 0x82, 0x5e, 0x8a, 0xde, 0xd7, 0x3e, 0x13, 0x89, 0x30, 0x78, 0xc9, 0x53, 0x7d, 0x20, 0x39, - 0x83, 0x7f, 0xd8, 0xa3, 0x62, 0xe9, 0x01, 0xc3, 0x3e, 0x64, 0xc1, 0x30, 0x60, 0xd8, 0x87, 0x05, - 0xea, 0x7c, 0xd8, 0x87, 0x46, 0x92, 0x03, 0x86, 0x3d, 0x49, 0x00, 0x3d, 0x60, 0xd8, 0x13, 0x05, - 0xae, 0xd2, 0x08, 0xda, 0x81, 0xf1, 0x40, 0x9c, 0x82, 0x4e, 0x47, 0xc2, 0x45, 0x05, 0x90, 0xd5, - 0x7b, 0x92, 0x90, 0xfa, 0xc7, 0x3f, 0xc2, 0x35, 0x0f, 0x18, 0xff, 0xc1, 0xd1, 0x47, 0xf5, 0x81, - 0xe4, 0x0c, 0x6e, 0xdd, 0xd7, 0xdc, 0xad, 0x16, 0x1f, 0x01, 0x9a, 0x4b, 0x88, 0x24, 0x6a, 0x3e, - 0x93, 0x98, 0xde, 0xad, 0x78, 0xb7, 0xef, 0xb4, 0x75, 0xb4, 0xd0, 0x22, 0x5d, 0x5b, 0xf5, 0xde, - 0x44, 0xb4, 0x6e, 0x65, 0xab, 0x7c, 0x1f, 0xe1, 0x64, 0x24, 0x9b, 0xcf, 0x69, 0x55, 0x6f, 0x1f, - 0x42, 0xe1, 0xc2, 0xad, 0xbb, 0x1b, 0x83, 0x52, 0x34, 0xb9, 0xdf, 0x59, 0x55, 0x4f, 0x0d, 0xa5, - 0x11, 0xa0, 0x37, 0x3d, 0xd5, 0xff, 0xa5, 0x7c, 0xdf, 0xb5, 0xbf, 0x16, 0x36, 0xb0, 0xad, 0xdb, - 0x87, 0xba, 0xf6, 0x37, 0x3c, 0x9b, 0xff, 0x8b, 0x39, 0x28, 0x5d, 0x60, 0xa8, 0xf4, 0x5b, 0xc7, - 0xe8, 0x89, 0x84, 0x1e, 0xb8, 0x4c, 0x3c, 0xf0, 0x0f, 0x0e, 0x6a, 0x5c, 0x90, 0xae, 0x2f, 0xb6, - 0xf9, 0x47, 0x8f, 0xd8, 0x07, 0x4b, 0xbc, 0xaf, 0xc6, 0x94, 0x0e, 0x75, 0x64, 0x95, 0x9d, 0x15, - 0xe0, 0xa7, 0x44, 0xc3, 0x78, 0x12, 0xfb, 0x7e, 0xd2, 0x06, 0x29, 0xa1, 0x9f, 0x3c, 0x41, 0x9f, - 0x4c, 0xc1, 0x11, 0x4a, 0xe5, 0x05, 0x82, 0x94, 0x52, 0x1c, 0xac, 0xe9, 0x1b, 0xe5, 0x15, 0xd5, - 0xb7, 0x2c, 0xa2, 0x18, 0x8d, 0x3a, 0xdf, 0xef, 0xbd, 0xd5, 0x57, 0x69, 0x18, 0x4e, 0xfa, 0xc1, - 0x41, 0x0d, 0xf5, 0xf3, 0xca, 0xf4, 0x03, 0x9d, 0xc1, 0xb2, 0xe8, 0xcf, 0x54, 0x0f, 0x89, 0x0d, - 0x27, 0xb9, 0x40, 0xbd, 0x18, 0x21, 0x10, 0x9e, 0xaf, 0x41, 0xd1, 0x67, 0x7c, 0x66, 0x46, 0x07, - 0x1c, 0x6b, 0xf3, 0xd6, 0xdd, 0x88, 0xe3, 0xf9, 0x7c, 0x9f, 0xec, 0x87, 0x40, 0xbf, 0x96, 0x82, - 0x23, 0xde, 0xda, 0xde, 0x0f, 0x9e, 0x4b, 0xbe, 0xba, 0x3f, 0x17, 0x94, 0x5a, 0x24, 0x1e, 0x91, - 0x5a, 0x94, 0x83, 0x94, 0xa7, 0x7b, 0x51, 0x0e, 0xe3, 0x39, 0x18, 0xf7, 0x2f, 0xfe, 0xbc, 0x8f, - 0x17, 0x0e, 0xdb, 0xce, 0x9c, 0xe6, 0xbd, 0x0d, 0x1c, 0xed, 0x90, 0x83, 0x40, 0xa8, 0x0a, 0x79, - 0xbc, 0xd7, 0x35, 0x2d, 0x07, 0x37, 0xe9, 0x59, 0xe4, 0xbc, 0xec, 0x3e, 0x4b, 0xd7, 0x20, 0x62, - 0x60, 0xd1, 0xd3, 0xa1, 0x2f, 0x2f, 0xdd, 0xc8, 0xa2, 0xa2, 0xff, 0x63, 0x4d, 0xfe, 0xaf, 0x28, - 0xdd, 0x6c, 0xb3, 0xf1, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x73, 0x3c, 0xb3, 0x75, 0xb7, 0x9b, - 0x00, 0x00, + // 11467 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x74, 0x1c, 0xd7, + 0x75, 0x18, 0x66, 0x77, 0xb1, 0xd8, 0xbd, 0x0b, 0x2c, 0x16, 0x0f, 0x20, 0x09, 0x2e, 0x45, 0x02, + 0x1a, 0x59, 0x12, 0x49, 0x49, 0xa0, 0x4c, 0x51, 0x1f, 0x5c, 0x5a, 0x92, 0xb1, 0xc0, 0x92, 0x84, + 0x84, 0x2f, 0x0d, 0x00, 0x4a, 0x96, 0x63, 0x8f, 0x07, 0xbb, 0x0f, 0x8b, 0x11, 0x77, 0x67, 0x56, + 0x33, 0xb3, 0x24, 0xc0, 0x93, 0x9e, 0xa3, 0xd6, 0xf9, 0x70, 0x94, 0x26, 0xb1, 0xd3, 0x34, 0x55, + 0xd2, 0x28, 0x91, 0x93, 0xb4, 0x71, 0xdd, 0x36, 0x69, 0x9a, 0x34, 0x71, 0x9a, 0x9e, 0x1e, 0xb7, + 0x69, 0x9b, 0xf4, 0x9c, 0xb6, 0x27, 0x69, 0xda, 0x26, 0xa7, 0xa7, 0x45, 0x12, 0x39, 0x6d, 0x5c, + 0xd7, 0x6d, 0x53, 0xd6, 0x69, 0x7a, 0xec, 0x1f, 0xe9, 0x79, 0x5f, 0x33, 0x6f, 0x66, 0x67, 0x3f, + 0x40, 0x51, 0x8a, 0x72, 0xe2, 0x5f, 0xd8, 0xb9, 0x73, 0xef, 0x7d, 0xef, 0xdd, 0x77, 0xdf, 0xfd, + 0x7a, 0x6f, 0x1e, 0xe0, 0xf3, 0x09, 0x38, 0x59, 0xb5, 0xdd, 0xa6, 0xed, 0x9e, 0x7b, 0xb5, 0x8d, + 0x9d, 0xfd, 0x73, 0x2d, 0xa3, 0x6e, 0x5a, 0x86, 0x67, 0xda, 0xd6, 0x5c, 0xcb, 0xb1, 0x3d, 0x1b, + 0x8d, 0xb2, 0xd7, 0x73, 0xf4, 0xb5, 0x6a, 0x41, 0x6e, 0xdd, 0xa8, 0x63, 0x0d, 0xbf, 0xda, 0xc6, + 0xae, 0x87, 0x0a, 0x90, 0xbc, 0x8e, 0xf7, 0xa7, 0x95, 0x59, 0xe5, 0xf4, 0xa8, 0x46, 0x7e, 0xa2, + 0xa3, 0x90, 0xb6, 0x77, 0x76, 0x5c, 0xec, 0x4d, 0x27, 0x66, 0x95, 0xd3, 0x29, 0x8d, 0x3f, 0xa1, + 0x29, 0x18, 0x6e, 0x98, 0x4d, 0xd3, 0x9b, 0x4e, 0x52, 0x30, 0x7b, 0x40, 0x33, 0x90, 0xab, 0xda, + 0x6d, 0xcb, 0xd3, 0x3d, 0xdb, 0x33, 0x1a, 0xd3, 0xa9, 0x59, 0xe5, 0x74, 0x46, 0x03, 0x0a, 0xda, + 0x24, 0x10, 0xf5, 0x59, 0x18, 0x65, 0xed, 0xb9, 0x2d, 0xdb, 0x72, 0x31, 0x3a, 0x0e, 0x19, 0x0b, + 0xef, 0x79, 0x7a, 0xd0, 0xea, 0x08, 0x79, 0x7e, 0x1e, 0xef, 0x93, 0x16, 0x18, 0x17, 0xd6, 0x30, + 0x7b, 0x28, 0x97, 0x7f, 0xed, 0xed, 0x53, 0xca, 0xaf, 0xbf, 0x7d, 0x4a, 0xf9, 0xdd, 0xb7, 0x4f, + 0x29, 0x9f, 0xfe, 0xd2, 0xa9, 0xa1, 0x5f, 0xff, 0xd2, 0xa9, 0xa1, 0xdf, 0xfe, 0xd2, 0xa9, 0xa1, + 0x97, 0x4f, 0xd7, 0x4d, 0x6f, 0xb7, 0xbd, 0x3d, 0x57, 0xb5, 0x9b, 0xe7, 0xb8, 0x08, 0xd8, 0x9f, + 0x47, 0xdc, 0xda, 0xf5, 0x73, 0xde, 0x7e, 0x0b, 0x73, 0x99, 0x6c, 0xa7, 0xa9, 0x24, 0x1e, 0x83, + 0x5f, 0xb9, 0x04, 0xb3, 0x75, 0xdb, 0xae, 0x37, 0xf0, 0x39, 0x0a, 0xd9, 0x6e, 0xef, 0x9c, 0xab, + 0x61, 0xb7, 0xea, 0x98, 0x2d, 0xcf, 0x76, 0xb8, 0xbc, 0xc6, 0x19, 0xc6, 0x9c, 0xc0, 0x50, 0x57, + 0x60, 0xe2, 0xb2, 0xd9, 0xc0, 0x8b, 0x3e, 0xe2, 0x06, 0xf6, 0xd0, 0x53, 0x90, 0xda, 0x31, 0x1b, + 0x78, 0x5a, 0x99, 0x4d, 0x9e, 0xce, 0x9d, 0xff, 0xc0, 0x5c, 0x84, 0x68, 0x2e, 0x4c, 0xb1, 0x4e, + 0xc0, 0x1a, 0xa5, 0x50, 0x7f, 0x3f, 0x05, 0x93, 0x31, 0x6f, 0x11, 0x82, 0x94, 0x65, 0x34, 0x31, + 0x95, 0x4a, 0x56, 0xa3, 0xbf, 0xd1, 0x34, 0x8c, 0xb4, 0x8c, 0xea, 0x75, 0xa3, 0x8e, 0xa9, 0x50, + 0xb2, 0x9a, 0x78, 0x44, 0xa7, 0x00, 0x6a, 0xb8, 0x85, 0xad, 0x1a, 0xb6, 0xaa, 0xfb, 0xd3, 0xc9, + 0xd9, 0xe4, 0xe9, 0xac, 0x26, 0x41, 0xd0, 0x43, 0x30, 0xd1, 0x6a, 0x6f, 0x37, 0xcc, 0xaa, 0x2e, + 0xa1, 0xc1, 0x6c, 0xf2, 0xf4, 0xb0, 0x56, 0x60, 0x2f, 0x16, 0x03, 0xe4, 0x07, 0x61, 0xfc, 0x26, + 0x36, 0xae, 0xcb, 0xa8, 0x39, 0x8a, 0x9a, 0x27, 0x60, 0x09, 0x71, 0x01, 0x46, 0x9b, 0xd8, 0x75, + 0x8d, 0x3a, 0xd6, 0x89, 0x7c, 0xa7, 0x53, 0x74, 0xf4, 0xb3, 0x1d, 0xa3, 0x8f, 0x8e, 0x3c, 0xc7, + 0xa9, 0x36, 0xf7, 0x5b, 0x18, 0xcd, 0x43, 0x16, 0x5b, 0xed, 0x26, 0xe3, 0x30, 0xdc, 0x45, 0x7e, + 0x15, 0xab, 0xdd, 0x8c, 0x72, 0xc9, 0x10, 0x32, 0xce, 0x62, 0xc4, 0xc5, 0xce, 0x0d, 0xb3, 0x8a, + 0xa7, 0xd3, 0x94, 0xc1, 0x83, 0x1d, 0x0c, 0x36, 0xd8, 0xfb, 0x28, 0x0f, 0x41, 0x87, 0x16, 0x20, + 0x8b, 0xf7, 0x3c, 0x6c, 0xb9, 0xa6, 0x6d, 0x4d, 0x8f, 0x50, 0x26, 0xf7, 0xc7, 0xcc, 0x22, 0x6e, + 0xd4, 0xa2, 0x2c, 0x02, 0x3a, 0xf4, 0x04, 0x8c, 0xd8, 0x2d, 0xb2, 0xd6, 0xdc, 0xe9, 0xcc, 0xac, + 0x72, 0x3a, 0x77, 0xfe, 0x9e, 0x58, 0x45, 0x58, 0x63, 0x38, 0x9a, 0x40, 0x46, 0x4b, 0x50, 0x70, + 0xed, 0xb6, 0x53, 0xc5, 0x7a, 0xd5, 0xae, 0x61, 0xdd, 0xb4, 0x76, 0xec, 0xe9, 0x2c, 0x65, 0x30, + 0xd3, 0x39, 0x10, 0x8a, 0xb8, 0x60, 0xd7, 0xf0, 0x92, 0xb5, 0x63, 0x6b, 0x79, 0x37, 0xf4, 0x4c, + 0xd6, 0xab, 0xbb, 0x6f, 0x79, 0xc6, 0xde, 0xf4, 0x28, 0xd5, 0x10, 0xfe, 0xa4, 0xfe, 0x52, 0x1a, + 0xc6, 0x07, 0x51, 0xb1, 0x4b, 0x30, 0xbc, 0x43, 0x46, 0x39, 0x9d, 0x38, 0x8c, 0x0c, 0x18, 0x4d, + 0x58, 0x88, 0xe9, 0x3b, 0x14, 0xe2, 0x3c, 0xe4, 0x2c, 0xec, 0x7a, 0xb8, 0xc6, 0x34, 0x22, 0x39, + 0xa0, 0x4e, 0x01, 0x23, 0xea, 0x54, 0xa9, 0xd4, 0x1d, 0xa9, 0xd4, 0x4b, 0x30, 0xee, 0x77, 0x49, + 0x77, 0x0c, 0xab, 0x2e, 0x74, 0xf3, 0x5c, 0xbf, 0x9e, 0xcc, 0x55, 0x04, 0x9d, 0x46, 0xc8, 0xb4, + 0x3c, 0x0e, 0x3d, 0xa3, 0x45, 0x00, 0xdb, 0xc2, 0xf6, 0x8e, 0x5e, 0xc3, 0xd5, 0xc6, 0x74, 0xa6, + 0x8b, 0x94, 0xd6, 0x08, 0x4a, 0x87, 0x94, 0x6c, 0x06, 0xad, 0x36, 0xd0, 0xc5, 0x40, 0xd5, 0x46, + 0xba, 0x68, 0xca, 0x0a, 0x5b, 0x64, 0x1d, 0xda, 0xb6, 0x05, 0x79, 0x07, 0x13, 0xbd, 0xc7, 0x35, + 0x3e, 0xb2, 0x2c, 0xed, 0xc4, 0x5c, 0xdf, 0x91, 0x69, 0x9c, 0x8c, 0x0d, 0x6c, 0xcc, 0x91, 0x1f, + 0xd1, 0x7d, 0xe0, 0x03, 0x74, 0xaa, 0x56, 0x40, 0xad, 0xd0, 0xa8, 0x00, 0xae, 0x1a, 0x4d, 0x5c, + 0xbc, 0x05, 0xf9, 0xb0, 0x78, 0x88, 0x99, 0x77, 0x3d, 0xc3, 0xf1, 0xa8, 0x16, 0x0e, 0x6b, 0xec, + 0x81, 0x38, 0x22, 0x6c, 0xd5, 0xa8, 0x95, 0x1b, 0xd6, 0xc8, 0x4f, 0xf4, 0xe1, 0x60, 0xc0, 0x49, + 0x3a, 0xe0, 0x07, 0x3a, 0x67, 0x34, 0xc4, 0x39, 0x3a, 0xee, 0xe2, 0x93, 0x30, 0x16, 0x1a, 0xc0, + 0xa0, 0x4d, 0xab, 0xdf, 0x0a, 0x47, 0x62, 0x59, 0xa3, 0x97, 0x60, 0xaa, 0x6d, 0x99, 0x96, 0x87, + 0x9d, 0x96, 0x83, 0x89, 0xc6, 0xb2, 0xa6, 0xa6, 0xff, 0x60, 0xa4, 0x8b, 0xce, 0x6d, 0xc9, 0xd8, + 0x8c, 0x8b, 0x36, 0xd9, 0xee, 0x04, 0x9e, 0xcd, 0x66, 0xbe, 0x3c, 0x52, 0x78, 0xed, 0xb5, 0xd7, + 0x5e, 0x4b, 0xa8, 0xff, 0x24, 0x0d, 0x53, 0x71, 0x6b, 0x26, 0x76, 0xf9, 0x1e, 0x85, 0xb4, 0xd5, + 0x6e, 0x6e, 0x63, 0x87, 0x0a, 0x69, 0x58, 0xe3, 0x4f, 0x68, 0x1e, 0x86, 0x1b, 0xc6, 0x36, 0x66, + 0x2e, 0x39, 0x7f, 0xfe, 0xa1, 0x81, 0x56, 0xe5, 0xdc, 0x32, 0x21, 0xd1, 0x18, 0x25, 0x7a, 0x06, + 0x52, 0xdc, 0x44, 0x13, 0x0e, 0x67, 0x07, 0xe3, 0x40, 0xd6, 0x92, 0x46, 0xe9, 0xd0, 0x09, 0xc8, + 0x92, 0xbf, 0x4c, 0x37, 0xd2, 0xb4, 0xcf, 0x19, 0x02, 0x20, 0x7a, 0x81, 0x8a, 0x90, 0xa1, 0xcb, + 0xa4, 0x86, 0x85, 0x6b, 0xf3, 0x9f, 0x89, 0x62, 0xd5, 0xf0, 0x8e, 0xd1, 0x6e, 0x78, 0xfa, 0x0d, + 0xa3, 0xd1, 0xc6, 0x54, 0xe1, 0xb3, 0xda, 0x28, 0x07, 0x5e, 0x23, 0x30, 0x12, 0x79, 0xb0, 0x55, + 0x65, 0x5a, 0x35, 0xbc, 0x47, 0xad, 0xe7, 0xb0, 0xc6, 0x16, 0xda, 0x12, 0x81, 0x90, 0xe6, 0x5f, + 0x71, 0x6d, 0x4b, 0xa8, 0x26, 0x6d, 0x82, 0x00, 0x68, 0xf3, 0x4f, 0x46, 0x0d, 0xf7, 0xc9, 0xf8, + 0xe1, 0x75, 0xac, 0xa5, 0x07, 0x61, 0x9c, 0x05, 0x13, 0x7c, 0xea, 0x8d, 0xc6, 0xf4, 0x04, 0x0d, + 0x7a, 0xf2, 0x0c, 0xbc, 0xc6, 0xa1, 0xea, 0x2f, 0x24, 0x20, 0x45, 0x0d, 0xcb, 0x38, 0xe4, 0x36, + 0x3f, 0xb2, 0x5e, 0xd1, 0x17, 0xd7, 0xb6, 0xca, 0xcb, 0x95, 0x82, 0x82, 0xf2, 0x00, 0x14, 0x70, + 0x79, 0x79, 0x6d, 0x7e, 0xb3, 0x90, 0xf0, 0x9f, 0x97, 0x56, 0x37, 0x9f, 0xb8, 0x50, 0x48, 0xfa, + 0x04, 0x5b, 0x0c, 0x90, 0x92, 0x11, 0x1e, 0x3b, 0x5f, 0x18, 0x46, 0x05, 0x18, 0x65, 0x0c, 0x96, + 0x5e, 0xaa, 0x2c, 0x3e, 0x71, 0xa1, 0x90, 0x0e, 0x43, 0x1e, 0x3b, 0x5f, 0x18, 0x41, 0x63, 0x90, + 0xa5, 0x90, 0xf2, 0xda, 0xda, 0x72, 0x21, 0xe3, 0xf3, 0xdc, 0xd8, 0xd4, 0x96, 0x56, 0xaf, 0x14, + 0xb2, 0x3e, 0xcf, 0x2b, 0xda, 0xda, 0xd6, 0x7a, 0x01, 0x7c, 0x0e, 0x2b, 0x95, 0x8d, 0x8d, 0xf9, + 0x2b, 0x95, 0x42, 0xce, 0xc7, 0x28, 0x7f, 0x64, 0xb3, 0xb2, 0x51, 0x18, 0x0d, 0x75, 0xeb, 0xb1, + 0xf3, 0x85, 0x31, 0xbf, 0x89, 0xca, 0xea, 0xd6, 0x4a, 0x21, 0x8f, 0x26, 0x60, 0x8c, 0x35, 0x21, + 0x3a, 0x31, 0x1e, 0x01, 0x3d, 0x71, 0xa1, 0x50, 0x08, 0x3a, 0xc2, 0xb8, 0x4c, 0x84, 0x00, 0x4f, + 0x5c, 0x28, 0x20, 0x75, 0x01, 0x86, 0xa9, 0x1a, 0x22, 0x04, 0xf9, 0xe5, 0xf9, 0x72, 0x65, 0x59, + 0x5f, 0x5b, 0xdf, 0x5c, 0x5a, 0x5b, 0x9d, 0x5f, 0x2e, 0x28, 0x01, 0x4c, 0xab, 0xbc, 0xb0, 0xb5, + 0xa4, 0x55, 0x16, 0x0b, 0x09, 0x19, 0xb6, 0x5e, 0x99, 0xdf, 0xac, 0x2c, 0x16, 0x92, 0x6a, 0x15, + 0xa6, 0xe2, 0x0c, 0x6a, 0xec, 0x12, 0x92, 0x74, 0x21, 0xd1, 0x45, 0x17, 0x28, 0xaf, 0xa8, 0x2e, + 0xa8, 0x5f, 0x4a, 0xc0, 0x64, 0x8c, 0x53, 0x89, 0x6d, 0xe4, 0x59, 0x18, 0x66, 0xba, 0xcc, 0xdc, + 0xec, 0x99, 0x58, 0xef, 0x44, 0x35, 0xbb, 0xc3, 0xd5, 0x52, 0x3a, 0x39, 0xd4, 0x48, 0x76, 0x09, + 0x35, 0x08, 0x8b, 0x0e, 0x85, 0xfd, 0x58, 0x87, 0xf1, 0x67, 0xfe, 0xf1, 0x89, 0x41, 0xfc, 0x23, + 0x85, 0x1d, 0xce, 0x09, 0x0c, 0xc7, 0x38, 0x81, 0x4b, 0x30, 0xd1, 0xc1, 0x68, 0x60, 0x63, 0xfc, + 0x49, 0x05, 0xa6, 0xbb, 0x09, 0xa7, 0x8f, 0x49, 0x4c, 0x84, 0x4c, 0xe2, 0xa5, 0xa8, 0x04, 0xef, + 0xed, 0x3e, 0x09, 0x1d, 0x73, 0xfd, 0x53, 0x0a, 0x1c, 0x8d, 0x0f, 0x29, 0x63, 0xfb, 0xf0, 0x0c, + 0xa4, 0x9b, 0xd8, 0xdb, 0xb5, 0x45, 0x58, 0xf5, 0x40, 0x8c, 0xb3, 0x26, 0xaf, 0xa3, 0x93, 0xcd, + 0xa9, 0x64, 0x6f, 0x9f, 0xec, 0x16, 0x17, 0xb2, 0xde, 0x74, 0xf4, 0xf4, 0xbb, 0x12, 0x70, 0x24, + 0x96, 0x79, 0x6c, 0x47, 0x4f, 0x02, 0x98, 0x56, 0xab, 0xed, 0xb1, 0xd0, 0x89, 0x59, 0xe2, 0x2c, + 0x85, 0x50, 0xe3, 0x45, 0xac, 0x6c, 0xdb, 0xf3, 0xdf, 0x27, 0xe9, 0x7b, 0x60, 0x20, 0x8a, 0xf0, + 0x54, 0xd0, 0xd1, 0x14, 0xed, 0xe8, 0xa9, 0x2e, 0x23, 0xed, 0x50, 0xcc, 0x47, 0xa1, 0x50, 0x6d, + 0x98, 0xd8, 0xf2, 0x74, 0xd7, 0x73, 0xb0, 0xd1, 0x34, 0xad, 0x3a, 0x75, 0x35, 0x99, 0xd2, 0xf0, + 0x8e, 0xd1, 0x70, 0xb1, 0x36, 0xce, 0x5e, 0x6f, 0x88, 0xb7, 0x84, 0x82, 0x2a, 0x90, 0x23, 0x51, + 0xa4, 0x43, 0x14, 0xec, 0xb5, 0x4f, 0xa1, 0x7e, 0x26, 0x0b, 0x39, 0x29, 0x00, 0x47, 0xf7, 0xc2, + 0xe8, 0x2b, 0xc6, 0x0d, 0x43, 0x17, 0x49, 0x15, 0x93, 0x44, 0x8e, 0xc0, 0xd6, 0x79, 0x62, 0xf5, + 0x28, 0x4c, 0x51, 0x14, 0xbb, 0xed, 0x61, 0x47, 0xaf, 0x36, 0x0c, 0xd7, 0xa5, 0x42, 0xcb, 0x50, + 0x54, 0x44, 0xde, 0xad, 0x91, 0x57, 0x0b, 0xe2, 0x0d, 0x7a, 0x1c, 0x26, 0x29, 0x45, 0xb3, 0xdd, + 0xf0, 0xcc, 0x56, 0x03, 0xeb, 0x24, 0xcd, 0x73, 0xa9, 0xcb, 0xf1, 0x7b, 0x36, 0x41, 0x30, 0x56, + 0x38, 0x02, 0xe9, 0x91, 0x8b, 0x16, 0xe1, 0x24, 0x25, 0xab, 0x63, 0x0b, 0x3b, 0x86, 0x87, 0x75, + 0xfc, 0x6a, 0xdb, 0x68, 0xb8, 0xba, 0x61, 0xd5, 0xf4, 0x5d, 0xc3, 0xdd, 0x9d, 0x9e, 0x22, 0x0c, + 0xca, 0x89, 0x69, 0x45, 0x3b, 0x4e, 0x10, 0xaf, 0x70, 0xbc, 0x0a, 0x45, 0x9b, 0xb7, 0x6a, 0x57, + 0x0d, 0x77, 0x17, 0x95, 0xe0, 0x28, 0xe5, 0xe2, 0x7a, 0x8e, 0x69, 0xd5, 0xf5, 0xea, 0x2e, 0xae, + 0x5e, 0xd7, 0xdb, 0xde, 0xce, 0x53, 0xd3, 0x27, 0xe4, 0xf6, 0x69, 0x0f, 0x37, 0x28, 0xce, 0x02, + 0x41, 0xd9, 0xf2, 0x76, 0x9e, 0x42, 0x1b, 0x30, 0x4a, 0x26, 0xa3, 0x69, 0xde, 0xc2, 0xfa, 0x8e, + 0xed, 0x50, 0x1f, 0x9a, 0x8f, 0x31, 0x4d, 0x92, 0x04, 0xe7, 0xd6, 0x38, 0xc1, 0x8a, 0x5d, 0xc3, + 0xa5, 0xe1, 0x8d, 0xf5, 0x4a, 0x65, 0x51, 0xcb, 0x09, 0x2e, 0x97, 0x6d, 0x87, 0x28, 0x54, 0xdd, + 0xf6, 0x05, 0x9c, 0x63, 0x0a, 0x55, 0xb7, 0x85, 0x78, 0x1f, 0x87, 0xc9, 0x6a, 0x95, 0x8d, 0xd9, + 0xac, 0xea, 0x3c, 0x19, 0x73, 0xa7, 0x0b, 0x21, 0x61, 0x55, 0xab, 0x57, 0x18, 0x02, 0xd7, 0x71, + 0x17, 0x5d, 0x84, 0x23, 0x81, 0xb0, 0x64, 0xc2, 0x89, 0x8e, 0x51, 0x46, 0x49, 0x1f, 0x87, 0xc9, + 0xd6, 0x7e, 0x27, 0x21, 0x0a, 0xb5, 0xd8, 0xda, 0x8f, 0x92, 0x3d, 0x09, 0x53, 0xad, 0xdd, 0x56, + 0x27, 0xdd, 0x59, 0x99, 0x0e, 0xb5, 0x76, 0x5b, 0x51, 0xc2, 0xfb, 0x69, 0x66, 0xee, 0xe0, 0xaa, + 0xe1, 0xe1, 0xda, 0xf4, 0x31, 0x19, 0x5d, 0x7a, 0x81, 0xe6, 0xa0, 0x50, 0xad, 0xea, 0xd8, 0x32, + 0xb6, 0x1b, 0x58, 0x37, 0x1c, 0x6c, 0x19, 0xee, 0xf4, 0x0c, 0x45, 0x4e, 0x79, 0x4e, 0x1b, 0x6b, + 0xf9, 0x6a, 0xb5, 0x42, 0x5f, 0xce, 0xd3, 0x77, 0xe8, 0x2c, 0x4c, 0xd8, 0xdb, 0xaf, 0x54, 0x99, + 0x46, 0xea, 0x2d, 0x07, 0xef, 0x98, 0x7b, 0xd3, 0x1f, 0xa0, 0xe2, 0x1d, 0x27, 0x2f, 0xa8, 0x3e, + 0xae, 0x53, 0x30, 0x3a, 0x03, 0x85, 0xaa, 0xbb, 0x6b, 0x38, 0x2d, 0x6a, 0x92, 0xdd, 0x96, 0x51, + 0xc5, 0xd3, 0xf7, 0x33, 0x54, 0x06, 0x5f, 0x15, 0x60, 0xb2, 0x22, 0xdc, 0x9b, 0xe6, 0x8e, 0x27, + 0x38, 0x3e, 0xc8, 0x56, 0x04, 0x85, 0x71, 0x6e, 0xa7, 0xa1, 0x40, 0x24, 0x11, 0x6a, 0xf8, 0x34, + 0x45, 0xcb, 0xb7, 0x76, 0x5b, 0x72, 0xbb, 0xf7, 0xc1, 0x18, 0xc1, 0x0c, 0x1a, 0x3d, 0xc3, 0x02, + 0xb7, 0xd6, 0xae, 0xd4, 0xe2, 0x05, 0x38, 0x4a, 0x90, 0x9a, 0xd8, 0x33, 0x6a, 0x86, 0x67, 0x48, + 0xd8, 0x0f, 0x53, 0x6c, 0x22, 0xf6, 0x15, 0xfe, 0x32, 0xd4, 0x4f, 0xa7, 0xbd, 0xbd, 0xef, 0x2b, + 0xd6, 0x23, 0xac, 0x9f, 0x04, 0x26, 0x54, 0xeb, 0x5d, 0x0b, 0xce, 0xd5, 0x12, 0x8c, 0xca, 0x7a, + 0x8f, 0xb2, 0xc0, 0x34, 0xbf, 0xa0, 0x90, 0x20, 0x68, 0x61, 0x6d, 0x91, 0x84, 0x2f, 0x2f, 0x57, + 0x0a, 0x09, 0x12, 0x46, 0x2d, 0x2f, 0x6d, 0x56, 0x74, 0x6d, 0x6b, 0x75, 0x73, 0x69, 0xa5, 0x52, + 0x48, 0x4a, 0x81, 0xfd, 0x73, 0xa9, 0xcc, 0x03, 0x85, 0x07, 0xd5, 0xdf, 0x48, 0x40, 0x3e, 0x9c, + 0xa9, 0xa1, 0x0f, 0xc1, 0x31, 0x51, 0x56, 0x71, 0xb1, 0xa7, 0xdf, 0x34, 0x1d, 0xba, 0x20, 0x9b, + 0x06, 0x73, 0x8e, 0xbe, 0xfe, 0x4c, 0x71, 0xac, 0x0d, 0xec, 0xbd, 0x68, 0x3a, 0x64, 0xb9, 0x35, + 0x0d, 0x0f, 0x2d, 0xc3, 0x8c, 0x65, 0xeb, 0xae, 0x67, 0x58, 0x35, 0xc3, 0xa9, 0xe9, 0x41, 0x41, + 0x4b, 0x37, 0xaa, 0x55, 0xec, 0xba, 0x36, 0x73, 0x84, 0x3e, 0x97, 0x7b, 0x2c, 0x7b, 0x83, 0x23, + 0x07, 0x1e, 0x62, 0x9e, 0xa3, 0x46, 0xd4, 0x37, 0xd9, 0x4d, 0x7d, 0x4f, 0x40, 0xb6, 0x69, 0xb4, + 0x74, 0x6c, 0x79, 0xce, 0x3e, 0x8d, 0xcf, 0x33, 0x5a, 0xa6, 0x69, 0xb4, 0x2a, 0xe4, 0xf9, 0x3d, + 0x49, 0x93, 0x9e, 0x4b, 0x65, 0x32, 0x85, 0xec, 0x73, 0xa9, 0x4c, 0xb6, 0x00, 0xea, 0xdb, 0x49, + 0x18, 0x95, 0xe3, 0x75, 0x92, 0xfe, 0x54, 0xa9, 0xc7, 0x52, 0xa8, 0x4d, 0xbb, 0xaf, 0x67, 0x74, + 0x3f, 0xb7, 0x40, 0x5c, 0x59, 0x29, 0xcd, 0x82, 0x63, 0x8d, 0x51, 0x92, 0x30, 0x82, 0x28, 0x1b, + 0x66, 0xc1, 0x48, 0x46, 0xe3, 0x4f, 0xe8, 0x0a, 0xa4, 0x5f, 0x71, 0x29, 0xef, 0x34, 0xe5, 0xfd, + 0x81, 0xde, 0xbc, 0x9f, 0xdb, 0xa0, 0xcc, 0xb3, 0xcf, 0x6d, 0xe8, 0xab, 0x6b, 0xda, 0xca, 0xfc, + 0xb2, 0xc6, 0xc9, 0xd1, 0x71, 0x48, 0x35, 0x8c, 0x5b, 0xfb, 0x61, 0xa7, 0x47, 0x41, 0x83, 0x4e, + 0xc2, 0x71, 0x48, 0xdd, 0xc4, 0xc6, 0xf5, 0xb0, 0xab, 0xa1, 0xa0, 0x77, 0x71, 0x31, 0x9c, 0x83, + 0x61, 0x2a, 0x2f, 0x04, 0xc0, 0x25, 0x56, 0x18, 0x42, 0x19, 0x48, 0x2d, 0xac, 0x69, 0x64, 0x41, + 0x14, 0x60, 0x94, 0x41, 0xf5, 0xf5, 0xa5, 0xca, 0x42, 0xa5, 0x90, 0x50, 0x1f, 0x87, 0x34, 0x13, + 0x02, 0x59, 0x2c, 0xbe, 0x18, 0x0a, 0x43, 0xfc, 0x91, 0xf3, 0x50, 0xc4, 0xdb, 0xad, 0x95, 0x72, + 0x45, 0x2b, 0x24, 0xc2, 0x53, 0x9d, 0x2a, 0x0c, 0xab, 0x2e, 0x8c, 0xca, 0x71, 0xf8, 0x7b, 0x93, + 0x8c, 0x7f, 0x51, 0x81, 0x9c, 0x14, 0x57, 0x93, 0x80, 0xc8, 0x68, 0x34, 0xec, 0x9b, 0xba, 0xd1, + 0x30, 0x0d, 0x97, 0xab, 0x06, 0x50, 0xd0, 0x3c, 0x81, 0x0c, 0x3a, 0x75, 0xef, 0xd1, 0x12, 0x19, + 0x2e, 0xa4, 0xd5, 0x1f, 0x55, 0xa0, 0x10, 0x0d, 0x6c, 0x23, 0xdd, 0x54, 0xfe, 0x34, 0xbb, 0xa9, + 0xfe, 0x88, 0x02, 0xf9, 0x70, 0x34, 0x1b, 0xe9, 0xde, 0xbd, 0x7f, 0xaa, 0xdd, 0xfb, 0xdd, 0x04, + 0x8c, 0x85, 0x62, 0xd8, 0x41, 0x7b, 0xf7, 0x2a, 0x4c, 0x98, 0x35, 0xdc, 0x6c, 0xd9, 0x1e, 0xb6, + 0xaa, 0xfb, 0x7a, 0x03, 0xdf, 0xc0, 0x8d, 0x69, 0x95, 0x1a, 0x8d, 0x73, 0xbd, 0xa3, 0xe4, 0xb9, + 0xa5, 0x80, 0x6e, 0x99, 0x90, 0x95, 0x26, 0x97, 0x16, 0x2b, 0x2b, 0xeb, 0x6b, 0x9b, 0x95, 0xd5, + 0x85, 0x8f, 0xe8, 0x5b, 0xab, 0xcf, 0xaf, 0xae, 0xbd, 0xb8, 0xaa, 0x15, 0xcc, 0x08, 0xda, 0xbb, + 0xb8, 0xec, 0xd7, 0xa1, 0x10, 0xed, 0x14, 0x3a, 0x06, 0x71, 0xdd, 0x2a, 0x0c, 0xa1, 0x49, 0x18, + 0x5f, 0x5d, 0xd3, 0x37, 0x96, 0x16, 0x2b, 0x7a, 0xe5, 0xf2, 0xe5, 0xca, 0xc2, 0xe6, 0x06, 0xab, + 0x7b, 0xf8, 0xd8, 0x9b, 0xa1, 0x05, 0xae, 0xfe, 0x70, 0x12, 0x26, 0x63, 0x7a, 0x82, 0xe6, 0x79, + 0xc6, 0xc2, 0x92, 0xa8, 0x47, 0x06, 0xe9, 0xfd, 0x1c, 0x89, 0x19, 0xd6, 0x0d, 0xc7, 0xe3, 0x09, + 0xce, 0x19, 0x20, 0x52, 0xb2, 0x3c, 0x73, 0xc7, 0xc4, 0x0e, 0xaf, 0x27, 0xb1, 0x34, 0x66, 0x3c, + 0x80, 0xb3, 0x92, 0xd2, 0xc3, 0x80, 0x5a, 0xb6, 0x6b, 0x7a, 0xe6, 0x0d, 0xac, 0x9b, 0x96, 0x28, + 0x3e, 0xa5, 0xe8, 0x6e, 0x54, 0x41, 0xbc, 0x59, 0xb2, 0x3c, 0x1f, 0xdb, 0xc2, 0x75, 0x23, 0x82, + 0x4d, 0x8c, 0x79, 0x52, 0x2b, 0x88, 0x37, 0x3e, 0xf6, 0xbd, 0x30, 0x5a, 0xb3, 0xdb, 0x24, 0xd6, + 0x63, 0x78, 0xc4, 0x77, 0x28, 0x5a, 0x8e, 0xc1, 0x7c, 0x14, 0x1e, 0xc5, 0x07, 0x55, 0xaf, 0x51, + 0x2d, 0xc7, 0x60, 0x0c, 0xe5, 0x41, 0x18, 0x37, 0xea, 0x75, 0x87, 0x30, 0x17, 0x8c, 0x58, 0x5e, + 0x92, 0xf7, 0xc1, 0x14, 0xb1, 0xf8, 0x1c, 0x64, 0x84, 0x1c, 0x88, 0xab, 0x26, 0x92, 0xd0, 0x5b, + 0x2c, 0xd9, 0x4e, 0x9c, 0xce, 0x6a, 0x19, 0x4b, 0xbc, 0xbc, 0x17, 0x46, 0x4d, 0x57, 0x0f, 0x8a, + 0xf8, 0x89, 0xd9, 0xc4, 0xe9, 0x8c, 0x96, 0x33, 0x5d, 0xbf, 0x00, 0xaa, 0xfe, 0x54, 0x02, 0xf2, + 0xe1, 0x4d, 0x08, 0xb4, 0x08, 0x99, 0x86, 0x5d, 0xa5, 0xbb, 0x8c, 0x7c, 0x07, 0xec, 0x74, 0x9f, + 0x7d, 0x8b, 0xb9, 0x65, 0x8e, 0xaf, 0xf9, 0x94, 0xc5, 0x7f, 0xa3, 0x40, 0x46, 0x80, 0xd1, 0x51, + 0x48, 0xb5, 0x0c, 0x6f, 0x97, 0xb2, 0x1b, 0x2e, 0x27, 0x0a, 0x8a, 0x46, 0x9f, 0x09, 0xdc, 0x6d, + 0x19, 0x16, 0x55, 0x01, 0x0e, 0x27, 0xcf, 0x64, 0x5e, 0x1b, 0xd8, 0xa8, 0xd1, 0xa4, 0xc7, 0x6e, + 0x36, 0xb1, 0xe5, 0xb9, 0x62, 0x5e, 0x39, 0x7c, 0x81, 0x83, 0xd1, 0x43, 0x30, 0xe1, 0x39, 0x86, + 0xd9, 0x08, 0xe1, 0xa6, 0x28, 0x6e, 0x41, 0xbc, 0xf0, 0x91, 0x4b, 0x70, 0x5c, 0xf0, 0xad, 0x61, + 0xcf, 0xa8, 0xee, 0xe2, 0x5a, 0x40, 0x94, 0xa6, 0xc5, 0x8d, 0x63, 0x1c, 0x61, 0x91, 0xbf, 0x17, + 0xb4, 0xea, 0x6f, 0x28, 0x30, 0x21, 0xd2, 0xb4, 0x9a, 0x2f, 0xac, 0x15, 0x00, 0xc3, 0xb2, 0x6c, + 0x4f, 0x16, 0x57, 0xa7, 0x2a, 0x77, 0xd0, 0xcd, 0xcd, 0xfb, 0x44, 0x9a, 0xc4, 0xa0, 0xd8, 0x04, + 0x08, 0xde, 0x74, 0x15, 0xdb, 0x0c, 0xe4, 0xf8, 0x0e, 0x13, 0xdd, 0xa6, 0x64, 0x89, 0x3d, 0x30, + 0x10, 0xc9, 0xe7, 0xd0, 0x14, 0x0c, 0x6f, 0xe3, 0xba, 0x69, 0xf1, 0xba, 0x31, 0x7b, 0x10, 0xe5, + 0x97, 0x94, 0x5f, 0x7e, 0x29, 0x7f, 0x9f, 0x02, 0x93, 0x55, 0xbb, 0x19, 0xed, 0x6f, 0xb9, 0x10, + 0xa9, 0x2e, 0xb8, 0x57, 0x95, 0x97, 0x9f, 0x91, 0x76, 0x64, 0xeb, 0x76, 0xc3, 0xb0, 0xea, 0xc1, + 0x3e, 0x2b, 0xfd, 0x51, 0x7d, 0xa4, 0x8e, 0xad, 0x47, 0xea, 0xb6, 0xb4, 0xeb, 0x7a, 0x29, 0xf8, + 0xf9, 0xff, 0x14, 0xe5, 0xc7, 0x13, 0xc9, 0x2b, 0xeb, 0xe5, 0xcf, 0x27, 0x8a, 0x57, 0x58, 0x73, + 0xeb, 0x42, 0x3c, 0x1a, 0xde, 0x69, 0xe0, 0x2a, 0x19, 0x32, 0x7c, 0xe5, 0x21, 0x98, 0xaa, 0xdb, + 0x75, 0x9b, 0x72, 0x3c, 0x47, 0x7e, 0xf1, 0x9d, 0xdb, 0xac, 0x0f, 0x2d, 0xf6, 0xdd, 0xe6, 0x2d, + 0xad, 0xc2, 0x24, 0x47, 0xd6, 0xe9, 0xd6, 0x11, 0x4b, 0x6c, 0x50, 0xcf, 0xaa, 0xda, 0xf4, 0xcf, + 0xfe, 0x3e, 0x75, 0xe8, 0xda, 0x04, 0x27, 0x25, 0xef, 0x58, 0xee, 0x53, 0xd2, 0xe0, 0x48, 0x88, + 0x1f, 0x5b, 0xb6, 0xd8, 0xe9, 0xc3, 0xf1, 0x9f, 0x73, 0x8e, 0x93, 0x12, 0xc7, 0x0d, 0x4e, 0x5a, + 0x5a, 0x80, 0xb1, 0xc3, 0xf0, 0xfa, 0x17, 0x9c, 0xd7, 0x28, 0x96, 0x99, 0x5c, 0x81, 0x71, 0xca, + 0xa4, 0xda, 0x76, 0x3d, 0xbb, 0x49, 0x6d, 0x62, 0x6f, 0x36, 0xbf, 0xfa, 0xfb, 0x6c, 0x1d, 0xe5, + 0x09, 0xd9, 0x82, 0x4f, 0x55, 0x2a, 0x01, 0xdd, 0x2d, 0xab, 0xe1, 0x6a, 0xa3, 0x0f, 0x87, 0x5f, + 0xe3, 0x1d, 0xf1, 0xf1, 0x4b, 0xd7, 0x60, 0x8a, 0xfc, 0xa6, 0x26, 0x4b, 0xee, 0x49, 0xff, 0x12, + 0xdc, 0xf4, 0x6f, 0x7c, 0x92, 0x2d, 0xd5, 0x49, 0x9f, 0x81, 0xd4, 0x27, 0x69, 0x16, 0xeb, 0xd8, + 0xf3, 0xb0, 0xe3, 0xea, 0x46, 0x23, 0xae, 0x7b, 0x52, 0x0d, 0x63, 0xfa, 0x87, 0xbe, 0x1a, 0x9e, + 0xc5, 0x2b, 0x8c, 0x72, 0xbe, 0xd1, 0x28, 0x6d, 0xc1, 0xb1, 0x18, 0xad, 0x18, 0x80, 0xe7, 0x0f, + 0x73, 0x9e, 0x53, 0x1d, 0x9a, 0x41, 0xd8, 0xae, 0x83, 0x80, 0xfb, 0x73, 0x39, 0x00, 0xcf, 0xbf, + 0xce, 0x79, 0x22, 0x4e, 0x2b, 0xa6, 0x94, 0x70, 0x7c, 0x0e, 0x26, 0x6e, 0x60, 0x67, 0xdb, 0x76, + 0x79, 0xdd, 0x68, 0x00, 0x76, 0x3f, 0xc2, 0xd9, 0x8d, 0x73, 0x42, 0x5a, 0x48, 0x22, 0xbc, 0x2e, + 0x42, 0x66, 0xc7, 0xa8, 0xe2, 0x01, 0x58, 0xbc, 0xc9, 0x59, 0x8c, 0x10, 0x7c, 0x42, 0x3a, 0x0f, + 0xa3, 0x75, 0x9b, 0x7b, 0xad, 0xfe, 0xe4, 0x3f, 0xca, 0xc9, 0x73, 0x82, 0x86, 0xb3, 0x68, 0xd9, + 0xad, 0x76, 0x83, 0xb8, 0xb4, 0xfe, 0x2c, 0x7e, 0x4c, 0xb0, 0x10, 0x34, 0x9c, 0xc5, 0x21, 0xc4, + 0xfa, 0x96, 0x60, 0xe1, 0x4a, 0xf2, 0x7c, 0x16, 0x72, 0xb6, 0xd5, 0xd8, 0xb7, 0xad, 0x41, 0x3a, + 0xf1, 0x59, 0xce, 0x01, 0x38, 0x09, 0x61, 0x70, 0x09, 0xb2, 0x83, 0x4e, 0xc4, 0xdf, 0xf8, 0xaa, + 0x58, 0x1e, 0x62, 0x06, 0xae, 0xc0, 0xb8, 0x30, 0x50, 0xa6, 0x6d, 0x0d, 0xc0, 0xe2, 0x6f, 0x72, + 0x16, 0x79, 0x89, 0x8c, 0x0f, 0xc3, 0xc3, 0xae, 0x57, 0xc7, 0x83, 0x30, 0xf9, 0x29, 0x31, 0x0c, + 0x4e, 0xc2, 0x45, 0xb9, 0x8d, 0xad, 0xea, 0xee, 0x60, 0x1c, 0x3e, 0x27, 0x44, 0x29, 0x68, 0x08, + 0x8b, 0x05, 0x18, 0x6b, 0x1a, 0x8e, 0xbb, 0x6b, 0x34, 0x06, 0x9a, 0x8e, 0xbf, 0xc5, 0x79, 0x8c, + 0xfa, 0x44, 0x5c, 0x22, 0x6d, 0xeb, 0x30, 0x6c, 0x3e, 0x2f, 0x24, 0x22, 0x91, 0xf1, 0xa5, 0xe7, + 0x7a, 0xb4, 0xc8, 0x76, 0x18, 0x6e, 0x7f, 0x5b, 0x2c, 0x3d, 0x46, 0xbb, 0x22, 0x73, 0xbc, 0x04, + 0x59, 0xd7, 0xbc, 0x35, 0x10, 0x9b, 0xbf, 0x23, 0x66, 0x9a, 0x12, 0x10, 0xe2, 0x8f, 0xc0, 0xf1, + 0x58, 0x37, 0x31, 0x00, 0xb3, 0xbf, 0xcb, 0x99, 0x1d, 0x8d, 0x71, 0x15, 0xdc, 0x24, 0x1c, 0x96, + 0xe5, 0x4f, 0x0b, 0x93, 0x80, 0x23, 0xbc, 0xd6, 0x49, 0x1e, 0xe1, 0x1a, 0x3b, 0x87, 0x93, 0xda, + 0xcf, 0x08, 0xa9, 0x31, 0xda, 0x90, 0xd4, 0x36, 0xe1, 0x28, 0xe7, 0x78, 0xb8, 0x79, 0xfd, 0x7b, + 0xc2, 0xb0, 0x32, 0xea, 0xad, 0xf0, 0xec, 0x7e, 0x14, 0x8a, 0xbe, 0x38, 0x45, 0xc0, 0xea, 0xea, + 0x4d, 0xa3, 0x35, 0x00, 0xe7, 0x9f, 0xe5, 0x9c, 0x85, 0xc5, 0xf7, 0x23, 0x5e, 0x77, 0xc5, 0x68, + 0x11, 0xe6, 0x2f, 0xc1, 0xb4, 0x60, 0xde, 0xb6, 0x1c, 0x5c, 0xb5, 0xeb, 0x96, 0x79, 0x0b, 0xd7, + 0x06, 0x60, 0xfd, 0xf7, 0x23, 0x53, 0xb5, 0x25, 0x91, 0x13, 0xce, 0x4b, 0x50, 0xf0, 0x63, 0x15, + 0xdd, 0x6c, 0xb6, 0x6c, 0xc7, 0xeb, 0xc3, 0xf1, 0xe7, 0xc4, 0x4c, 0xf9, 0x74, 0x4b, 0x94, 0xac, + 0x54, 0x01, 0xb6, 0xf3, 0x3c, 0xa8, 0x4a, 0xfe, 0x3c, 0x67, 0x34, 0x16, 0x50, 0x71, 0xc3, 0x51, + 0xb5, 0x9b, 0x2d, 0xc3, 0x19, 0xc4, 0xfe, 0xfd, 0x03, 0x61, 0x38, 0x38, 0x09, 0x37, 0x1c, 0xde, + 0x7e, 0x0b, 0x13, 0x6f, 0x3f, 0x00, 0x87, 0x5f, 0x10, 0x86, 0x43, 0xd0, 0x70, 0x16, 0x22, 0x60, + 0x18, 0x80, 0xc5, 0x2f, 0x0a, 0x16, 0x82, 0x86, 0xb0, 0x78, 0x21, 0x70, 0xb4, 0x0e, 0xae, 0x9b, + 0xae, 0xe7, 0xb0, 0x30, 0xb9, 0x37, 0xab, 0x2f, 0x7c, 0x35, 0x1c, 0x84, 0x69, 0x12, 0x29, 0xb1, + 0x44, 0xbc, 0xec, 0x4a, 0xb3, 0xa8, 0xfe, 0x1d, 0xfb, 0x25, 0x61, 0x89, 0x24, 0x32, 0xd2, 0x37, + 0x29, 0x42, 0x24, 0x62, 0xaf, 0x92, 0xdc, 0x61, 0x00, 0x76, 0xff, 0x30, 0xd2, 0xb9, 0x0d, 0x41, + 0x4b, 0x78, 0x4a, 0xf1, 0x4f, 0xdb, 0xba, 0x8e, 0xf7, 0x07, 0xd2, 0xce, 0x5f, 0x8e, 0xc4, 0x3f, + 0x5b, 0x8c, 0x92, 0xd9, 0x90, 0xf1, 0x48, 0x3c, 0x85, 0xfa, 0x9d, 0x33, 0x9a, 0xfe, 0x8b, 0x5f, + 0xe3, 0xe3, 0x0d, 0x87, 0x53, 0xa5, 0x65, 0xa2, 0xe4, 0xe1, 0xa0, 0xa7, 0x3f, 0xb3, 0x4f, 0x7e, + 0xcd, 0xd7, 0xf3, 0x50, 0xcc, 0x53, 0xba, 0x0c, 0x63, 0xa1, 0x80, 0xa7, 0x3f, 0xab, 0x6f, 0xe3, + 0xac, 0x46, 0xe5, 0x78, 0xa7, 0xf4, 0x38, 0xa4, 0x48, 0xf0, 0xd2, 0x9f, 0xfc, 0xdb, 0x39, 0x39, + 0x45, 0x2f, 0x3d, 0x0d, 0x19, 0x11, 0xb4, 0xf4, 0x27, 0xfd, 0x0e, 0x4e, 0xea, 0x93, 0x10, 0x72, + 0x11, 0xb0, 0xf4, 0x27, 0xff, 0x4e, 0x41, 0x2e, 0x48, 0x08, 0xf9, 0xe0, 0x22, 0xfc, 0xe2, 0x77, + 0xa7, 0xb8, 0xd3, 0x11, 0xb2, 0xbb, 0x04, 0x23, 0x3c, 0x52, 0xe9, 0x4f, 0xfd, 0x5d, 0xbc, 0x71, + 0x41, 0x51, 0x7a, 0x12, 0x86, 0x07, 0x14, 0xf8, 0xf7, 0x70, 0x52, 0x86, 0x5f, 0x5a, 0x80, 0x9c, + 0x14, 0x9d, 0xf4, 0x27, 0xff, 0x5e, 0x4e, 0x2e, 0x53, 0x91, 0xae, 0xf3, 0xe8, 0xa4, 0x3f, 0x83, + 0xef, 0x13, 0x5d, 0xe7, 0x14, 0x44, 0x6c, 0x22, 0x30, 0xe9, 0x4f, 0xfd, 0x69, 0x21, 0x75, 0x41, + 0x52, 0x7a, 0x16, 0xb2, 0xbe, 0xb3, 0xe9, 0x4f, 0xff, 0x19, 0x4e, 0x1f, 0xd0, 0x10, 0x09, 0x48, + 0xce, 0xae, 0x3f, 0x8b, 0xef, 0x17, 0x12, 0x90, 0xa8, 0xc8, 0x32, 0x8a, 0x06, 0x30, 0xfd, 0x39, + 0xfd, 0x15, 0xb1, 0x8c, 0x22, 0xf1, 0x0b, 0x99, 0x4d, 0x6a, 0xf3, 0xfb, 0xb3, 0xf8, 0x01, 0x31, + 0x9b, 0x14, 0x9f, 0x74, 0x23, 0x1a, 0x11, 0xf4, 0xe7, 0xf1, 0xd7, 0x44, 0x37, 0x22, 0x01, 0x41, + 0x69, 0x1d, 0x50, 0x67, 0x34, 0xd0, 0x9f, 0xdf, 0x1b, 0x9c, 0xdf, 0x44, 0x47, 0x30, 0x50, 0x7a, + 0x11, 0x8e, 0xc6, 0x47, 0x02, 0xfd, 0xb9, 0xfe, 0xd0, 0xd7, 0x22, 0xb9, 0x9b, 0x1c, 0x08, 0x94, + 0x36, 0x03, 0x97, 0x22, 0x47, 0x01, 0xfd, 0xd9, 0xfe, 0xf0, 0xd7, 0xc2, 0x86, 0x5b, 0x0e, 0x02, + 0x4a, 0xf3, 0x00, 0x81, 0x03, 0xee, 0xcf, 0xeb, 0x47, 0x38, 0x2f, 0x89, 0x88, 0x2c, 0x0d, 0xee, + 0x7f, 0xfb, 0xd3, 0xbf, 0x29, 0x96, 0x06, 0xa7, 0x20, 0x4b, 0x43, 0xb8, 0xde, 0xfe, 0xd4, 0x3f, + 0x2a, 0x96, 0x86, 0x20, 0x21, 0x9a, 0x2d, 0x79, 0xb7, 0xfe, 0x1c, 0x3e, 0x2b, 0x34, 0x5b, 0xa2, + 0x2a, 0xad, 0xc2, 0x44, 0x87, 0x43, 0xec, 0xcf, 0xea, 0xc7, 0x39, 0xab, 0x42, 0xd4, 0x1f, 0xca, + 0xce, 0x8b, 0x3b, 0xc3, 0xfe, 0xdc, 0x7e, 0x22, 0xe2, 0xbc, 0xb8, 0x2f, 0x2c, 0x5d, 0x82, 0x8c, + 0xd5, 0x6e, 0x34, 0xc8, 0xe2, 0x41, 0xbd, 0xcf, 0x06, 0x4e, 0xff, 0xb7, 0x6f, 0x70, 0xe9, 0x08, + 0x82, 0xd2, 0xe3, 0x30, 0x8c, 0x9b, 0xdb, 0xb8, 0xd6, 0x8f, 0xf2, 0x2b, 0xdf, 0x10, 0x06, 0x93, + 0x60, 0x97, 0x9e, 0x05, 0x60, 0xa5, 0x11, 0xba, 0x3d, 0xd8, 0x87, 0xf6, 0xbf, 0x7f, 0x83, 0x1f, + 0xc6, 0x09, 0x48, 0x02, 0x06, 0xec, 0x68, 0x4f, 0x6f, 0x06, 0x5f, 0x0d, 0x33, 0xa0, 0x33, 0x72, + 0x11, 0x46, 0x5e, 0x71, 0x6d, 0xcb, 0x33, 0xea, 0xfd, 0xa8, 0xff, 0x07, 0xa7, 0x16, 0xf8, 0x44, + 0x60, 0x4d, 0xdb, 0xc1, 0x9e, 0x51, 0x77, 0xfb, 0xd1, 0xfe, 0x4f, 0x4e, 0xeb, 0x13, 0x10, 0xe2, + 0xaa, 0xe1, 0x7a, 0x83, 0x8c, 0xfb, 0x7f, 0x09, 0x62, 0x41, 0x40, 0x3a, 0x4d, 0x7e, 0x5f, 0xc7, + 0xfb, 0xfd, 0x68, 0xff, 0x50, 0x74, 0x9a, 0xe3, 0x97, 0x9e, 0x86, 0x2c, 0xf9, 0xc9, 0x4e, 0xd8, + 0xf5, 0x21, 0xfe, 0xdf, 0x9c, 0x38, 0xa0, 0x20, 0x2d, 0xbb, 0x5e, 0xcd, 0x33, 0xfb, 0x0b, 0xfb, + 0x36, 0x9f, 0x69, 0x81, 0x5f, 0x9a, 0x87, 0x9c, 0xeb, 0xd5, 0x6a, 0x6d, 0x1e, 0x9f, 0xf6, 0x21, + 0xff, 0x3f, 0xdf, 0xf0, 0x4b, 0x16, 0x3e, 0x0d, 0x99, 0xed, 0x9b, 0xd7, 0xbd, 0x96, 0x4d, 0xb7, + 0x40, 0xfa, 0x71, 0xf8, 0x1a, 0xe7, 0x20, 0x91, 0x94, 0x16, 0x60, 0x94, 0x8c, 0xc5, 0xc1, 0x2d, + 0x4c, 0xf7, 0xab, 0xfa, 0xb0, 0xf8, 0x23, 0x2e, 0x80, 0x10, 0x51, 0xf9, 0x63, 0xdd, 0xbe, 0xcf, + 0x89, 0x2f, 0x1b, 0xc3, 0x15, 0xfb, 0x8a, 0xcd, 0x0a, 0xc6, 0x2f, 0xab, 0xa1, 0x72, 0x71, 0xdd, + 0x0e, 0xaa, 0xb5, 0x7e, 0x92, 0x03, 0x9f, 0x4e, 0xc0, 0x4c, 0xb4, 0x96, 0x4b, 0x04, 0xe8, 0x7a, + 0x46, 0xb3, 0xd5, 0xed, 0x8b, 0x9d, 0x4b, 0x90, 0xdd, 0x14, 0x38, 0x68, 0x1a, 0x46, 0x5c, 0x5c, + 0xb5, 0xad, 0x9a, 0x4b, 0xb7, 0x39, 0x93, 0x9a, 0x78, 0x44, 0x53, 0x30, 0x6c, 0x19, 0x96, 0xed, + 0xf2, 0x73, 0x82, 0xec, 0xa1, 0xfc, 0x83, 0xca, 0xe1, 0x46, 0x94, 0xf7, 0x9b, 0xa2, 0xc3, 0x5a, + 0x57, 0x5e, 0x7e, 0xa8, 0x57, 0x19, 0x9c, 0x7d, 0x97, 0xe4, 0x0f, 0x41, 0xaa, 0x79, 0x9f, 0x8a, + 0xd6, 0xbc, 0x5f, 0xc4, 0x8d, 0xc6, 0xf3, 0x96, 0x7d, 0xd3, 0xda, 0x24, 0x34, 0xfe, 0x57, 0x4c, + 0xff, 0x5a, 0x81, 0x59, 0x7a, 0x52, 0xda, 0x69, 0x9a, 0x96, 0x77, 0xae, 0x61, 0x6e, 0xbb, 0xe7, + 0xb6, 0x4d, 0xcf, 0x65, 0x9f, 0x3c, 0x71, 0x99, 0x4c, 0x05, 0x18, 0x73, 0x04, 0x63, 0x8e, 0x60, + 0xa8, 0x17, 0x20, 0x53, 0x36, 0xbd, 0x79, 0xc7, 0x31, 0xf6, 0x11, 0x82, 0x14, 0x81, 0x71, 0xa1, + 0xd0, 0xdf, 0x44, 0x22, 0xb8, 0x81, 0x9b, 0x2e, 0xdd, 0x6d, 0x49, 0x69, 0xec, 0xa1, 0xbc, 0xd5, + 0xf5, 0x13, 0xac, 0x4b, 0xd2, 0x48, 0xa5, 0x2e, 0x49, 0x3f, 0x59, 0x91, 0x3e, 0xae, 0xbb, 0xfe, + 0x78, 0x3e, 0x9f, 0x82, 0x93, 0x12, 0x42, 0xd5, 0xd9, 0x6f, 0x79, 0x54, 0x17, 0xec, 0x1d, 0x3e, + 0x98, 0x09, 0x69, 0x30, 0xec, 0x75, 0x31, 0x76, 0x07, 0x40, 0xdd, 0x81, 0xe1, 0x75, 0x42, 0x17, + 0x7c, 0x4b, 0xc6, 0x46, 0xc7, 0x1e, 0x08, 0x94, 0x9d, 0x16, 0x4f, 0x30, 0xa8, 0x29, 0x0e, 0x8a, + 0x37, 0xb0, 0xb1, 0xc3, 0x0e, 0xdd, 0x25, 0xe9, 0xa6, 0x5b, 0x86, 0x00, 0xe8, 0xf9, 0xba, 0x29, + 0x18, 0x36, 0xda, 0x6c, 0xbf, 0x28, 0x79, 0x7a, 0x54, 0x63, 0x0f, 0xea, 0xf3, 0x30, 0xc2, 0x6b, + 0xd4, 0x31, 0x5f, 0xd0, 0xcd, 0xc1, 0x30, 0xed, 0x3c, 0x3f, 0x4d, 0x3c, 0x3d, 0xd7, 0xd1, 0xfb, + 0x39, 0xda, 0x49, 0x8d, 0xa1, 0xa9, 0xcf, 0x41, 0x66, 0xd1, 0x6e, 0x9a, 0x96, 0x1d, 0xe6, 0x96, + 0x65, 0xdc, 0x68, 0x9f, 0x5b, 0x6d, 0x8f, 0x6f, 0xe1, 0xb0, 0x07, 0xfa, 0x95, 0x1e, 0x3d, 0x84, + 0xc9, 0xf7, 0xbc, 0xf8, 0x93, 0xba, 0x00, 0x23, 0x94, 0xf7, 0x5a, 0x8b, 0xcc, 0xaf, 0x7f, 0x02, + 0x26, 0xcb, 0x8f, 0xe4, 0x73, 0xf6, 0x89, 0xa0, 0xb3, 0x08, 0x52, 0x35, 0xc3, 0x33, 0xf8, 0xb8, + 0xe9, 0x6f, 0xf5, 0x19, 0xc8, 0x70, 0x26, 0x2e, 0x3a, 0x0f, 0x49, 0xbb, 0xe5, 0xf2, 0x5d, 0xab, + 0x62, 0xb7, 0xa1, 0xac, 0xb5, 0xca, 0xa9, 0x5f, 0x3b, 0x98, 0x19, 0xd2, 0x08, 0x72, 0x59, 0xeb, + 0xaa, 0x2f, 0x4f, 0x1d, 0x5e, 0x5f, 0x58, 0x33, 0xbe, 0xb2, 0x7c, 0x36, 0x01, 0xa7, 0xa4, 0xb7, + 0x37, 0xb0, 0x43, 0x02, 0xb5, 0x90, 0xea, 0x23, 0xa9, 0x93, 0xfc, 0x7d, 0x17, 0x75, 0x79, 0x1a, + 0x92, 0xf3, 0xad, 0x16, 0x2a, 0x42, 0x86, 0xed, 0x4e, 0xd9, 0x4c, 0x5f, 0x52, 0x9a, 0xff, 0x4c, + 0xde, 0xb9, 0xf6, 0x8e, 0x77, 0xd3, 0x70, 0xfc, 0xef, 0x14, 0xc4, 0xb3, 0x7a, 0x11, 0xb2, 0x0b, + 0xb6, 0xe5, 0x62, 0xcb, 0x6d, 0xd3, 0xa5, 0xb3, 0xdd, 0xb0, 0xab, 0xd7, 0x39, 0x07, 0xf6, 0x40, + 0x04, 0x6e, 0xb4, 0x5a, 0xfc, 0x8b, 0x46, 0xf2, 0xb3, 0x94, 0xfa, 0xf2, 0x5b, 0x33, 0x4a, 0x79, + 0xa3, 0xab, 0x88, 0x2e, 0x1e, 0x5e, 0x44, 0x7c, 0x90, 0xbe, 0x8c, 0x7e, 0xf9, 0x38, 0xdc, 0x23, + 0x93, 0x32, 0x8b, 0x23, 0x49, 0xa8, 0x20, 0x49, 0x88, 0xc2, 0xe3, 0xe5, 0x53, 0xec, 0x67, 0x79, + 0x8b, 0x7d, 0xed, 0x50, 0xb1, 0xf7, 0xca, 0x2e, 0xf6, 0x99, 0x4b, 0xf5, 0x22, 0x8c, 0xad, 0x1b, + 0x8e, 0xb7, 0x81, 0xbd, 0xab, 0xd8, 0xa8, 0x61, 0x27, 0xbc, 0xb0, 0xc7, 0xc4, 0xc2, 0x46, 0x90, + 0xa2, 0xab, 0x97, 0x29, 0x36, 0xfd, 0xad, 0xee, 0x42, 0x8a, 0xee, 0x70, 0xfb, 0x8b, 0x9e, 0x53, + 0xb0, 0x45, 0x4f, 0xa6, 0x6b, 0xdf, 0xc3, 0x2e, 0x27, 0x61, 0x0f, 0xe8, 0x82, 0x58, 0xba, 0xc9, + 0xde, 0x4b, 0x97, 0x6b, 0x3b, 0x5f, 0xc0, 0x0d, 0x18, 0x29, 0x93, 0xd9, 0x5e, 0x5a, 0xf4, 0x3b, + 0xa2, 0x04, 0x1d, 0x41, 0x2b, 0x30, 0xde, 0x32, 0x1c, 0x8f, 0x1e, 0xed, 0xdb, 0xa5, 0xa3, 0xe0, + 0x96, 0x61, 0x66, 0x2e, 0x3a, 0x0f, 0x73, 0xa1, 0xc1, 0xf2, 0x56, 0xc6, 0x5a, 0x32, 0x50, 0xfd, + 0xaf, 0x29, 0x48, 0x73, 0x61, 0x3c, 0x0d, 0x23, 0x5c, 0x68, 0xb4, 0xc1, 0xdc, 0xf9, 0x93, 0x73, + 0x9d, 0xba, 0x3f, 0xe7, 0xeb, 0x28, 0xe7, 0x27, 0x68, 0xd0, 0x03, 0x90, 0xa9, 0xee, 0x1a, 0xa6, + 0xa5, 0x9b, 0xec, 0x8c, 0x5b, 0xb6, 0x9c, 0x7b, 0xfb, 0x60, 0x66, 0x64, 0x81, 0xc0, 0x96, 0x16, + 0xb5, 0x11, 0xfa, 0x72, 0xa9, 0x46, 0x8c, 0xcd, 0x2e, 0x36, 0xeb, 0xbb, 0xcc, 0xd8, 0x24, 0x35, + 0xfe, 0x84, 0x9e, 0x82, 0x14, 0x51, 0x08, 0x7e, 0xf0, 0xbb, 0xd8, 0x11, 0x3d, 0xf8, 0x8e, 0xb1, + 0x9c, 0x21, 0x0d, 0x7f, 0xfa, 0x77, 0x66, 0x14, 0x8d, 0x52, 0xa0, 0x05, 0x18, 0x6b, 0x18, 0xae, + 0xa7, 0xd3, 0x45, 0x42, 0x9a, 0x1f, 0xa6, 0x2c, 0x8e, 0x77, 0x0a, 0x84, 0x0b, 0x96, 0x77, 0x3d, + 0x47, 0xa8, 0x18, 0xa8, 0x86, 0x4e, 0x43, 0x81, 0x32, 0xa9, 0xda, 0xcd, 0xa6, 0xe9, 0x31, 0xf3, + 0x9d, 0xa6, 0x72, 0xcf, 0x13, 0xf8, 0x02, 0x05, 0x53, 0x23, 0x7e, 0x02, 0xb2, 0xf4, 0xa8, 0x29, + 0x45, 0x61, 0xc7, 0x2a, 0x32, 0x04, 0x40, 0x5f, 0x3e, 0x08, 0xe3, 0x37, 0x8c, 0x86, 0x59, 0x33, + 0x3c, 0xdb, 0x71, 0x19, 0x4a, 0x86, 0x71, 0x09, 0xc0, 0x14, 0xf1, 0x51, 0x98, 0xa2, 0x9f, 0x2e, + 0x47, 0xb1, 0xb3, 0x14, 0x1b, 0x91, 0x77, 0xd7, 0xc2, 0x14, 0xf7, 0x43, 0xbe, 0x2a, 0x84, 0xcf, + 0x70, 0x81, 0xe2, 0x8e, 0xf9, 0x50, 0x8a, 0x76, 0x1c, 0x32, 0x46, 0xab, 0xc5, 0x10, 0x72, 0xec, + 0x9b, 0x68, 0xa3, 0xd5, 0xa2, 0xaf, 0xce, 0xc2, 0x04, 0x1d, 0xa3, 0x83, 0xdd, 0x76, 0xc3, 0xe3, + 0x4c, 0x46, 0x29, 0xce, 0x38, 0x79, 0xa1, 0x31, 0x38, 0xc5, 0xbd, 0x0f, 0xc6, 0xf0, 0x0d, 0xb3, + 0x86, 0xad, 0x2a, 0x66, 0x78, 0x63, 0x14, 0x6f, 0x54, 0x00, 0x29, 0xd2, 0x19, 0x28, 0xb4, 0x1c, + 0xbb, 0x65, 0xbb, 0xd8, 0xd1, 0x8d, 0x5a, 0xcd, 0xc1, 0xae, 0x3b, 0x9d, 0x67, 0xfc, 0x04, 0x7c, + 0x9e, 0x81, 0xd5, 0x87, 0x21, 0xb5, 0x68, 0x78, 0x06, 0xb1, 0x61, 0xde, 0x1e, 0x73, 0x01, 0xa3, + 0x1a, 0xf9, 0x19, 0xbb, 0xdc, 0xbe, 0x9c, 0x80, 0xd4, 0x35, 0xdb, 0xc3, 0xe8, 0x31, 0xc9, 0xef, + 0xe4, 0xe3, 0x74, 0x7c, 0xc3, 0xac, 0x5b, 0xb8, 0xb6, 0xe2, 0xd6, 0xa5, 0x6f, 0xc5, 0x02, 0x15, + 0x4b, 0x84, 0x54, 0x6c, 0x0a, 0x86, 0x1d, 0xbb, 0x6d, 0xd5, 0xc4, 0x29, 0x05, 0xfa, 0x80, 0x2a, + 0x90, 0xf1, 0x35, 0x27, 0xd5, 0x4f, 0x73, 0xc6, 0x89, 0xe6, 0x10, 0xbd, 0xe6, 0x00, 0x6d, 0x64, + 0x9b, 0x2b, 0x50, 0x19, 0xb2, 0xbe, 0x41, 0xe3, 0x1a, 0x38, 0x98, 0x12, 0x07, 0x64, 0xe8, 0x21, + 0x98, 0xf0, 0xf5, 0xc1, 0x17, 0x28, 0xd3, 0xc2, 0x82, 0xff, 0x82, 0x4b, 0x34, 0xa4, 0x6a, 0xfc, + 0xbb, 0xb5, 0x11, 0x3a, 0xae, 0x40, 0xd5, 0xd8, 0xb7, 0x6b, 0xf7, 0x40, 0xd6, 0x35, 0xeb, 0x96, + 0xe1, 0xb5, 0x1d, 0xcc, 0xb5, 0x31, 0x00, 0xa8, 0x9f, 0x49, 0x40, 0x9a, 0x69, 0xb7, 0x24, 0x37, + 0x25, 0x5e, 0x6e, 0x89, 0x6e, 0x72, 0x4b, 0xde, 0xb9, 0xdc, 0xe6, 0x01, 0xfc, 0xce, 0xb8, 0xfc, + 0x73, 0xa2, 0x13, 0x9d, 0x8c, 0x58, 0x17, 0x37, 0xcc, 0x3a, 0x5f, 0xbc, 0x12, 0x91, 0xaf, 0x41, + 0xc3, 0x92, 0x9d, 0xbc, 0x04, 0xd9, 0x6d, 0xd3, 0xd3, 0x0d, 0x12, 0x9d, 0x52, 0x11, 0xe6, 0xce, + 0x9f, 0x9a, 0x8b, 0x0b, 0x63, 0xe7, 0x44, 0x0c, 0xab, 0x65, 0xb6, 0xf9, 0x2f, 0xf5, 0x3f, 0x2b, + 0xc4, 0x19, 0xf3, 0x06, 0xd1, 0x3c, 0x8c, 0x89, 0x81, 0xea, 0x3b, 0x0d, 0xa3, 0xce, 0x95, 0xf1, + 0x64, 0xd7, 0xd1, 0x5e, 0x6e, 0x18, 0x75, 0x2d, 0xc7, 0x07, 0x48, 0x1e, 0xe2, 0x27, 0x36, 0xd1, + 0x65, 0x62, 0x43, 0x9a, 0x94, 0xbc, 0x33, 0x4d, 0x0a, 0xcd, 0x79, 0x2a, 0x3a, 0xe7, 0x3f, 0x97, + 0xa0, 0x41, 0x59, 0xcb, 0x76, 0x8d, 0xc6, 0x7b, 0xb1, 0xc4, 0x4e, 0x40, 0xb6, 0x65, 0x37, 0x74, + 0xf6, 0x86, 0x1d, 0x07, 0xca, 0xb4, 0xec, 0x86, 0xd6, 0xa1, 0x47, 0xc3, 0x77, 0x69, 0xfd, 0xa5, + 0xef, 0x82, 0xd4, 0x46, 0xa2, 0x52, 0x73, 0x60, 0x94, 0x89, 0x82, 0x3b, 0xcc, 0x47, 0x89, 0x0c, + 0xa8, 0x07, 0x56, 0x3a, 0x1d, 0x3c, 0xeb, 0x36, 0xc3, 0xd4, 0x38, 0x1e, 0xa1, 0x60, 0xfe, 0x25, + 0x2e, 0x9a, 0x97, 0xf5, 0x5c, 0xe3, 0x78, 0xea, 0x3f, 0x55, 0x20, 0x4b, 0x87, 0xba, 0x82, 0x3d, + 0x23, 0x24, 0x2a, 0xe5, 0xce, 0x45, 0x75, 0x12, 0x80, 0xb1, 0x71, 0xcd, 0x5b, 0x98, 0x4f, 0x60, + 0x96, 0x42, 0x36, 0xcc, 0x5b, 0x18, 0x3d, 0xe1, 0x8f, 0x2b, 0xd9, 0x7b, 0x5c, 0x7c, 0x29, 0x8a, + 0xd1, 0x1d, 0x83, 0x11, 0xfa, 0xd9, 0xfc, 0x1e, 0x3b, 0x0f, 0x97, 0xa4, 0xdf, 0xca, 0x6d, 0xee, + 0xb9, 0xea, 0x2b, 0x30, 0xb2, 0xb9, 0xc7, 0x52, 0xa9, 0x13, 0x90, 0x75, 0x6c, 0x9b, 0xfb, 0x57, + 0x16, 0xd7, 0x64, 0x08, 0x80, 0xba, 0x13, 0x91, 0x3e, 0x24, 0x82, 0xf4, 0x21, 0xc8, 0x7f, 0x92, + 0x03, 0xe5, 0x3f, 0x67, 0x7f, 0x4b, 0x81, 0x9c, 0xb4, 0x0c, 0xd1, 0x07, 0xe1, 0x48, 0x79, 0x79, + 0x6d, 0xe1, 0x79, 0x7d, 0x69, 0x51, 0xbf, 0xbc, 0x3c, 0x7f, 0x25, 0x38, 0x57, 0x5a, 0x3c, 0xfa, + 0xfa, 0x9b, 0xb3, 0x48, 0xc2, 0xdd, 0xb2, 0xae, 0x93, 0xfc, 0x18, 0x9d, 0x83, 0xa9, 0x30, 0xc9, + 0x7c, 0x79, 0xa3, 0xb2, 0xba, 0x59, 0x50, 0x8a, 0x47, 0x5e, 0x7f, 0x73, 0x76, 0x42, 0xa2, 0x98, + 0xdf, 0x76, 0xb1, 0xe5, 0x75, 0x12, 0x2c, 0xac, 0xad, 0xac, 0x2c, 0x6d, 0x16, 0x12, 0x1d, 0x04, + 0xdc, 0xd0, 0x9e, 0x81, 0x89, 0x30, 0xc1, 0xea, 0xd2, 0x72, 0x21, 0x59, 0x44, 0xaf, 0xbf, 0x39, + 0x9b, 0x97, 0xb0, 0x57, 0xcd, 0x46, 0x31, 0xf3, 0xa9, 0x9f, 0x38, 0x35, 0xf4, 0xb9, 0x9f, 0x3c, + 0xa5, 0x90, 0x91, 0x8d, 0x85, 0x96, 0x22, 0x7a, 0x18, 0x8e, 0x6d, 0x2c, 0x5d, 0x59, 0xad, 0x2c, + 0xea, 0x2b, 0x1b, 0x57, 0x74, 0xf6, 0x3d, 0xad, 0x3f, 0xba, 0xf1, 0xd7, 0xdf, 0x9c, 0xcd, 0xf1, + 0x21, 0x75, 0xc3, 0x5e, 0xd7, 0x2a, 0xd7, 0xd6, 0x36, 0x2b, 0x05, 0x85, 0x61, 0xaf, 0x3b, 0xf8, + 0x86, 0xed, 0xb1, 0x7b, 0x35, 0x1e, 0x85, 0xe3, 0x31, 0xd8, 0xfe, 0xc0, 0x26, 0x5e, 0x7f, 0x73, + 0x76, 0x6c, 0xdd, 0xc1, 0x4c, 0x4d, 0x29, 0xc5, 0x1c, 0x4c, 0x77, 0x52, 0xac, 0xad, 0xaf, 0x6d, + 0xcc, 0x2f, 0x17, 0x66, 0x8b, 0x85, 0xd7, 0xdf, 0x9c, 0x1d, 0x15, 0x36, 0x87, 0xe0, 0x07, 0x23, + 0x2b, 0xbf, 0xd0, 0x35, 0x7f, 0x79, 0xf2, 0xf0, 0xf9, 0x8b, 0x17, 0x2a, 0x6f, 0xfc, 0xe5, 0x04, + 0x9c, 0xea, 0x38, 0xbd, 0xc7, 0x6b, 0x5e, 0xdd, 0x0a, 0x3e, 0x25, 0xc8, 0x2c, 0x8a, 0x52, 0xda, + 0x61, 0xeb, 0x3d, 0x3f, 0x70, 0xc8, 0x7a, 0xcf, 0x98, 0x68, 0x49, 0x94, 0x7b, 0xce, 0xf6, 0x2f, + 0xf7, 0x88, 0xfe, 0xdf, 0x41, 0xb5, 0xe7, 0x7b, 0x13, 0xa1, 0x64, 0x8e, 0xe7, 0x50, 0xd7, 0xf1, + 0xbe, 0x7b, 0xd8, 0xe2, 0xc8, 0x53, 0x90, 0x5d, 0xa7, 0x37, 0xbf, 0x3c, 0x8f, 0xf7, 0x51, 0x11, + 0x46, 0x70, 0xed, 0xfc, 0xe3, 0x8f, 0x7f, 0xf0, 0x22, 0x5b, 0xd3, 0x57, 0x87, 0x34, 0x01, 0x28, + 0x65, 0x48, 0x8a, 0xfa, 0xe5, 0xcf, 0xce, 0x28, 0xe5, 0x61, 0x48, 0xba, 0xed, 0xa6, 0x7a, 0x0e, + 0x60, 0xdd, 0x31, 0x6f, 0x18, 0x1e, 0xee, 0x43, 0xca, 0x09, 0xde, 0xd5, 0x0a, 0xc0, 0x1f, 0x8f, + 0x84, 0xca, 0x45, 0x4c, 0xc0, 0x2d, 0xc3, 0x31, 0x9a, 0x87, 0x4d, 0x6f, 0xfb, 0xa8, 0x99, 0xfa, + 0x46, 0x02, 0xc6, 0xfd, 0xe4, 0x69, 0x9d, 0xb6, 0x80, 0x2e, 0xca, 0x69, 0x7e, 0xae, 0x6b, 0x44, + 0xc1, 0xb0, 0x45, 0x9a, 0xc8, 0x6a, 0x01, 0x65, 0xc8, 0x88, 0x50, 0x9c, 0x3b, 0x93, 0xd9, 0x4e, + 0xea, 0x0a, 0xc7, 0x08, 0x31, 0xf0, 0xe9, 0x50, 0x05, 0xb2, 0x7e, 0xf0, 0xe1, 0x7f, 0xc5, 0xdc, + 0xc1, 0xc4, 0x4f, 0x43, 0x42, 0x5c, 0x02, 0x4a, 0xf4, 0x6c, 0x90, 0x38, 0xa6, 0xba, 0xa5, 0xa2, + 0xd7, 0x18, 0x42, 0x88, 0x85, 0xa0, 0x52, 0x31, 0x37, 0xd9, 0x5c, 0x2a, 0xf4, 0x6b, 0xb0, 0x3d, + 0x9d, 0x65, 0xd4, 0x6c, 0xd5, 0x65, 0x9a, 0xc6, 0x5e, 0x99, 0x26, 0xd5, 0xc7, 0x60, 0x84, 0xbc, + 0xac, 0xf3, 0xcf, 0x65, 0x92, 0x5a, 0xba, 0x69, 0xec, 0x5d, 0x31, 0x5c, 0x34, 0x0b, 0xa3, 0xc4, + 0x91, 0xeb, 0xa6, 0xed, 0x19, 0x7a, 0xd3, 0xe5, 0xd9, 0x25, 0x10, 0xd8, 0x92, 0xed, 0x19, 0x2b, + 0xae, 0xfa, 0x9b, 0x0a, 0xe4, 0xc3, 0x12, 0x41, 0x0f, 0x01, 0x22, 0xdc, 0x8c, 0x3a, 0xd6, 0x89, + 0xeb, 0xa2, 0xa2, 0x15, 0x6d, 0x8e, 0x37, 0x8d, 0xbd, 0xf9, 0x3a, 0x5e, 0x6d, 0x37, 0x69, 0xe7, + 0x5c, 0xb4, 0x02, 0x05, 0x81, 0x2c, 0xe6, 0x96, 0x8b, 0xfe, 0x78, 0xe7, 0xdd, 0x27, 0x1c, 0x81, + 0xc5, 0x19, 0x6f, 0x90, 0x38, 0x23, 0xcf, 0xf8, 0xf9, 0xa6, 0x85, 0x8f, 0xc4, 0x6a, 0x37, 0x69, + 0x5f, 0xc7, 0xe8, 0x48, 0x56, 0xdb, 0x4d, 0xfa, 0xe5, 0x00, 0xf1, 0x65, 0xba, 0xe7, 0x98, 0x46, + 0x43, 0x6f, 0x61, 0xc7, 0xb4, 0x6b, 0xdc, 0xa5, 0x16, 0xe8, 0x9b, 0x4d, 0xf2, 0x62, 0x9d, 0xc2, + 0xd5, 0x67, 0x61, 0x3c, 0x32, 0x43, 0x48, 0x85, 0xb1, 0x56, 0x7b, 0x5b, 0xbf, 0x8e, 0xf7, 0xe9, + 0x87, 0xd6, 0x2c, 0xdb, 0xca, 0x6a, 0xb9, 0x56, 0x7b, 0xfb, 0x79, 0xbc, 0x4f, 0x2d, 0x42, 0x29, + 0xf3, 0x05, 0xb2, 0x2c, 0xdf, 0x9a, 0x51, 0xd4, 0x12, 0x8c, 0x85, 0x66, 0x87, 0x7e, 0x95, 0xd4, + 0x6a, 0xe9, 0x72, 0x31, 0x20, 0xa5, 0x81, 0xd1, 0x6a, 0x71, 0x34, 0x89, 0xf6, 0x65, 0x18, 0x25, + 0x9e, 0x1b, 0xd7, 0x38, 0xe9, 0x03, 0x30, 0xce, 0x22, 0x8b, 0xe8, 0x04, 0xb2, 0x08, 0x7a, 0x45, + 0xcc, 0xa2, 0x2a, 0x42, 0xea, 0xf0, 0x5c, 0xe6, 0x04, 0xd6, 0x15, 0xc3, 0x2d, 0x6f, 0x7d, 0xee, + 0xed, 0x53, 0xca, 0xbb, 0xe7, 0x19, 0x7e, 0xe8, 0x32, 0x9c, 0x90, 0x5e, 0x1a, 0xdb, 0x55, 0x33, + 0x54, 0xd6, 0x1a, 0x97, 0x74, 0x98, 0xbc, 0xec, 0x57, 0x7c, 0xea, 0x59, 0x24, 0x2b, 0xf6, 0xb4, + 0xba, 0xc5, 0xde, 0x26, 0xa8, 0x7f, 0xe5, 0x2c, 0xde, 0x44, 0x7f, 0x26, 0x03, 0x23, 0xe2, 0x6a, + 0xb6, 0xf3, 0x90, 0xc2, 0xd5, 0x5d, 0x9b, 0x1b, 0x9a, 0x7b, 0xe6, 0x22, 0x83, 0x9b, 0xe3, 0x78, + 0x95, 0xea, 0xae, 0x7d, 0x75, 0x48, 0xa3, 0xb8, 0xe8, 0x71, 0x18, 0xde, 0x69, 0xb4, 0x79, 0x66, + 0x1e, 0xb1, 0x4e, 0x32, 0xd1, 0x65, 0x82, 0x74, 0x75, 0x48, 0x63, 0xd8, 0xa4, 0x29, 0x7a, 0x05, + 0x55, 0xb2, 0x77, 0x53, 0x4b, 0xd6, 0x0e, 0x6d, 0x8a, 0xe0, 0xa2, 0x32, 0x80, 0x8b, 0x3d, 0xf1, + 0x7d, 0x51, 0xaa, 0xd3, 0x14, 0xc9, 0x94, 0x1b, 0xd8, 0x63, 0xbb, 0x48, 0x57, 0x87, 0xb4, 0xac, + 0x2b, 0x1e, 0x08, 0x0f, 0xd3, 0x32, 0x3d, 0x9d, 0x16, 0x9a, 0x78, 0x26, 0x71, 0x6f, 0xf7, 0xd6, + 0x4d, 0x8f, 0x96, 0xa6, 0x08, 0x0f, 0x53, 0x3c, 0x90, 0x21, 0xd3, 0x4b, 0xde, 0x78, 0x02, 0xd1, + 0x75, 0xc8, 0x2f, 0x10, 0x24, 0x32, 0x64, 0x8a, 0x8d, 0x2a, 0x90, 0xa3, 0x5f, 0x3c, 0x30, 0x03, + 0xc2, 0xaf, 0x54, 0x52, 0xbb, 0x11, 0x97, 0x09, 0x2a, 0xb5, 0x29, 0x57, 0x87, 0x34, 0xd8, 0xf6, + 0x9f, 0xd0, 0x87, 0x20, 0xc3, 0x3e, 0xb9, 0xf7, 0xf6, 0xf8, 0x45, 0x32, 0x33, 0xdd, 0x78, 0xd0, + 0xef, 0xee, 0x37, 0xf7, 0x88, 0xb7, 0xac, 0xb2, 0x9f, 0x64, 0xfc, 0x35, 0xdc, 0x30, 0x6f, 0x60, + 0x87, 0xd0, 0x67, 0x7b, 0x8f, 0x7f, 0x91, 0x61, 0x52, 0x0e, 0xd9, 0x9a, 0x78, 0x40, 0xcf, 0x42, + 0x16, 0x5b, 0x35, 0x3e, 0x0c, 0xe8, 0x74, 0x2b, 0x21, 0x5d, 0xb1, 0x6a, 0x62, 0x10, 0x19, 0xcc, + 0x7f, 0xa3, 0xa7, 0xfc, 0x0c, 0x27, 0xd7, 0x99, 0x73, 0x87, 0x06, 0xc0, 0x0a, 0x6a, 0x43, 0x22, + 0xd3, 0x41, 0xab, 0x90, 0x6f, 0x98, 0xae, 0xa7, 0xbb, 0x96, 0xd1, 0x72, 0x77, 0x6d, 0xcf, 0xa5, + 0x95, 0xa9, 0xdc, 0xf9, 0xfb, 0xbb, 0x71, 0x58, 0x36, 0x5d, 0x6f, 0x43, 0x20, 0x5f, 0x1d, 0xd2, + 0xc6, 0x1a, 0x32, 0x80, 0xf0, 0xb3, 0x77, 0x76, 0xb0, 0xe3, 0x33, 0xa4, 0x15, 0xac, 0x1e, 0xfc, + 0xd6, 0x08, 0xb6, 0xa0, 0x27, 0xfc, 0x6c, 0x19, 0x80, 0x3e, 0x0a, 0x93, 0x0d, 0xdb, 0xa8, 0xf9, + 0xec, 0xf4, 0xea, 0x6e, 0xdb, 0xba, 0x4e, 0xcb, 0x5d, 0xb9, 0xf3, 0x67, 0xba, 0x76, 0xd2, 0x36, + 0x6a, 0x82, 0xc5, 0x02, 0x21, 0xb8, 0x3a, 0xa4, 0x4d, 0x34, 0xa2, 0x40, 0xf4, 0x71, 0x98, 0x32, + 0x5a, 0xad, 0xc6, 0x7e, 0x94, 0xfb, 0x38, 0xe5, 0x7e, 0xb6, 0x1b, 0xf7, 0x79, 0x42, 0x13, 0x65, + 0x8f, 0x8c, 0x0e, 0x68, 0x79, 0x84, 0x5f, 0x18, 0xa3, 0x3e, 0x08, 0x39, 0x69, 0xa9, 0x93, 0xf0, + 0x96, 0x9f, 0xa1, 0xe0, 0x3b, 0x3b, 0xe2, 0x51, 0xcd, 0xc3, 0xa8, 0xbc, 0xbc, 0xd5, 0xa6, 0x4f, + 0x48, 0x3f, 0x43, 0x9a, 0x0e, 0x17, 0x8b, 0xb3, 0x41, 0x1d, 0xf8, 0x3e, 0x61, 0xda, 0xc5, 0x7b, + 0xb6, 0x5d, 0x31, 0x4a, 0x81, 0xdc, 0x83, 0x10, 0x17, 0xd3, 0x3a, 0x1f, 0xb8, 0x18, 0x76, 0x0b, + 0x24, 0xb4, 0xce, 0x0b, 0x17, 0xa3, 0x96, 0xa0, 0x10, 0x5d, 0xed, 0xf1, 0xdb, 0x59, 0xe2, 0x1e, + 0x1c, 0xba, 0x9d, 0xc5, 0xc6, 0xf8, 0x93, 0x09, 0x9f, 0xd8, 0x5f, 0xe6, 0x7e, 0x79, 0x59, 0x39, + 0x74, 0x79, 0xf9, 0x78, 0xb4, 0xb0, 0x1d, 0xd4, 0xb2, 0x9f, 0x87, 0x42, 0x50, 0x92, 0x65, 0x26, + 0x9b, 0x9b, 0xbd, 0xce, 0x55, 0x13, 0x89, 0xfd, 0xb4, 0xf1, 0x6a, 0x24, 0x18, 0xbc, 0x0c, 0x10, + 0x14, 0x83, 0xfd, 0xcb, 0x10, 0xa3, 0x6c, 0x7c, 0x5f, 0xbf, 0xd5, 0xaa, 0x19, 0x1e, 0x16, 0xd5, + 0xb0, 0x80, 0x92, 0xf8, 0x60, 0xe2, 0xbe, 0x5d, 0xcf, 0xf0, 0x30, 0xf7, 0xc1, 0xac, 0x30, 0x36, + 0x66, 0xb4, 0x5a, 0x1b, 0x04, 0x4a, 0x7d, 0xb0, 0x5a, 0xf3, 0x67, 0x98, 0x5a, 0x33, 0x3f, 0xfb, + 0x56, 0xa4, 0xec, 0x1b, 0xf1, 0x0f, 0xc2, 0xd8, 0xb8, 0xc5, 0x37, 0x74, 0xf1, 0x05, 0xfc, 0x29, + 0x9a, 0xa9, 0xdf, 0xc0, 0xfc, 0xde, 0x4e, 0xf6, 0xa0, 0x7e, 0x5b, 0x02, 0x26, 0x3a, 0xec, 0x5e, + 0xec, 0xce, 0x46, 0x50, 0x76, 0x48, 0x1c, 0xaa, 0xec, 0xb0, 0x16, 0xae, 0xdc, 0x4b, 0xbe, 0xa7, + 0xd3, 0x7a, 0x2e, 0xfb, 0xa5, 0x7c, 0xa2, 0xc5, 0x9c, 0x91, 0x54, 0xe0, 0xa7, 0xba, 0xad, 0xc1, + 0xd4, 0xf6, 0xfe, 0x2d, 0xc3, 0xf2, 0x4c, 0x0b, 0xeb, 0x1d, 0x53, 0x72, 0xbc, 0x83, 0xa9, 0x88, + 0x29, 0x39, 0xbb, 0x49, 0x9f, 0x38, 0x28, 0xe0, 0xab, 0x1a, 0xe4, 0xc3, 0x96, 0x1b, 0xe5, 0x21, + 0xe1, 0xed, 0x71, 0x01, 0x24, 0xbc, 0x3d, 0xf4, 0x28, 0x2f, 0xc3, 0x25, 0x68, 0x19, 0xae, 0xd3, + 0x6d, 0x72, 0xba, 0xa0, 0x06, 0xa7, 0xaa, 0xbe, 0x9a, 0xfb, 0xd6, 0x3c, 0xca, 0x55, 0x3d, 0x03, + 0xe3, 0x11, 0x73, 0xdd, 0xad, 0xca, 0xab, 0x8e, 0xc3, 0x58, 0xc8, 0x36, 0xab, 0x47, 0x61, 0x2a, + 0xce, 0xd4, 0xaa, 0xbb, 0x3e, 0x3c, 0x64, 0x32, 0xd1, 0xe3, 0x90, 0xf1, 0x6d, 0x6d, 0x4c, 0x75, + 0x8a, 0x8e, 0x42, 0x20, 0x6b, 0x3e, 0x6a, 0x68, 0xc3, 0x22, 0x11, 0xda, 0xb0, 0x50, 0x3f, 0x01, + 0xd3, 0xdd, 0xec, 0x68, 0x64, 0x18, 0x29, 0x5f, 0x0d, 0x8f, 0x42, 0x9a, 0xdf, 0x76, 0x91, 0x60, + 0x51, 0x35, 0x7b, 0x22, 0xea, 0xc9, 0x6c, 0x2a, 0x0b, 0xb6, 0xd9, 0x83, 0xaa, 0xc3, 0xf1, 0xae, + 0xb6, 0xb4, 0xfb, 0x66, 0x1f, 0x63, 0xc4, 0x37, 0xfb, 0xaa, 0xa2, 0x3b, 0x2e, 0x1d, 0xab, 0xd8, + 0x43, 0x67, 0x4f, 0xea, 0x7f, 0xc9, 0x40, 0xc6, 0xbf, 0xaf, 0xb6, 0x0c, 0x59, 0xbc, 0x57, 0xc5, + 0x2d, 0x2f, 0xd8, 0x64, 0x8b, 0x8b, 0x12, 0x18, 0x76, 0x45, 0x60, 0x12, 0x17, 0xed, 0x93, 0xa1, + 0xc7, 0x78, 0x24, 0xd7, 0x3d, 0x28, 0xe3, 0xe4, 0x72, 0x28, 0xf7, 0x84, 0x08, 0xe5, 0x92, 0x5d, + 0xbd, 0x32, 0xa3, 0x8a, 0xc4, 0x72, 0x8f, 0xf1, 0x58, 0x2e, 0xd5, 0xa7, 0xb1, 0x50, 0x30, 0xb7, + 0x10, 0x0a, 0xe6, 0x86, 0xfb, 0x0c, 0xb3, 0x4b, 0x34, 0xb7, 0x10, 0x8a, 0xe6, 0xd2, 0x7d, 0x98, + 0x74, 0x09, 0xe7, 0x9e, 0x10, 0xe1, 0xdc, 0x48, 0x9f, 0x61, 0x47, 0xe2, 0xb9, 0xcb, 0xe1, 0x78, + 0x8e, 0xc5, 0x62, 0xf7, 0x75, 0xa5, 0xee, 0x1a, 0xd0, 0x3d, 0x2d, 0x05, 0x74, 0xd9, 0xae, 0xd1, + 0x14, 0x63, 0x12, 0x13, 0xd1, 0x2d, 0x84, 0x22, 0x3a, 0xe8, 0x23, 0x83, 0x2e, 0x21, 0xdd, 0x87, + 0xe5, 0x90, 0x2e, 0xd7, 0x35, 0x2a, 0xe4, 0x4a, 0x13, 0x17, 0xd3, 0x5d, 0xf4, 0x63, 0xba, 0xd1, + 0xae, 0x41, 0x29, 0x1f, 0x43, 0x34, 0xa8, 0x5b, 0xeb, 0x08, 0xea, 0xc6, 0xf8, 0xed, 0x9b, 0xdd, + 0x58, 0xf4, 0x89, 0xea, 0xd6, 0x3a, 0xa2, 0xba, 0x7c, 0x1f, 0x86, 0x7d, 0xc2, 0xba, 0x6f, 0x89, + 0x0f, 0xeb, 0xba, 0x07, 0x5e, 0xbc, 0x9b, 0x83, 0xc5, 0x75, 0x7a, 0x97, 0xb8, 0xae, 0x40, 0xd9, + 0x3f, 0xd4, 0x95, 0xfd, 0xe1, 0x03, 0xbb, 0x33, 0xc4, 0xcd, 0x46, 0x0c, 0x07, 0x3d, 0x81, 0xe5, + 0x38, 0xb6, 0xc3, 0x63, 0x26, 0xf6, 0xa0, 0x9e, 0x26, 0x8e, 0x3f, 0x30, 0x12, 0x3d, 0x82, 0x40, + 0xea, 0x12, 0x24, 0xc3, 0xa0, 0x7e, 0x41, 0x09, 0x68, 0xa9, 0xaf, 0x94, 0x83, 0x86, 0x2c, 0x0f, + 0x1a, 0xa4, 0xd8, 0x30, 0x11, 0x8e, 0x0d, 0x23, 0x95, 0x85, 0x64, 0xb4, 0xb2, 0xe0, 0xef, 0x50, + 0xb3, 0x08, 0x92, 0xdb, 0x77, 0x56, 0xf9, 0x18, 0xf7, 0x77, 0xeb, 0xaf, 0x32, 0x43, 0xff, 0x08, + 0x4c, 0x4a, 0xb8, 0xbe, 0x0b, 0x61, 0xb1, 0x4e, 0xc1, 0xc7, 0x9e, 0xe7, 0xbe, 0x64, 0x25, 0x10, + 0x50, 0x10, 0x52, 0x22, 0x48, 0x55, 0xed, 0x1a, 0xe6, 0x06, 0x9e, 0xfe, 0x26, 0x61, 0x66, 0xc3, + 0xae, 0x73, 0x33, 0x4e, 0x7e, 0x12, 0x2c, 0xdf, 0x0a, 0x66, 0x99, 0x91, 0x53, 0x3f, 0xa7, 0x04, + 0xfc, 0x82, 0x28, 0x33, 0x2e, 0x20, 0x54, 0xee, 0x4e, 0x40, 0x98, 0xb8, 0xd3, 0x80, 0x50, 0xfd, + 0x63, 0x25, 0x98, 0x46, 0x3f, 0xd4, 0xbb, 0xb3, 0x61, 0x07, 0x2e, 0x71, 0x58, 0x3e, 0xf4, 0xc6, + 0x23, 0xf3, 0x74, 0x70, 0x12, 0xcc, 0x8f, 0xcc, 0xd9, 0x2e, 0x1a, 0xbf, 0x76, 0xf2, 0x29, 0xc8, + 0xb2, 0xca, 0x96, 0xdd, 0x12, 0x57, 0xa5, 0x9e, 0xe8, 0x7e, 0x0a, 0xcc, 0xa5, 0x27, 0xa7, 0xd8, + 0xc9, 0xb1, 0xc0, 0xdb, 0x67, 0x43, 0x41, 0xe7, 0x3d, 0x90, 0x25, 0xbd, 0x67, 0x57, 0x7e, 0x01, + 0x3f, 0x52, 0x2b, 0x00, 0xea, 0xc7, 0x01, 0x75, 0xda, 0x68, 0x74, 0x15, 0xd2, 0xf8, 0x06, 0xbd, + 0x81, 0x81, 0x1d, 0x44, 0x3b, 0x1a, 0x13, 0xd1, 0x61, 0xcb, 0x2b, 0x4f, 0x13, 0x49, 0x7e, 0xe5, + 0x60, 0xa6, 0xc0, 0xb0, 0x1f, 0xb6, 0x9b, 0xa6, 0x87, 0x9b, 0x2d, 0x6f, 0x5f, 0xe3, 0xf4, 0xea, + 0x27, 0x13, 0x24, 0xbc, 0x0a, 0xd9, 0xef, 0x58, 0xd9, 0xc6, 0x6d, 0x6c, 0x0d, 0x26, 0xef, 0x53, + 0x00, 0x75, 0xc3, 0xd5, 0x6f, 0x1a, 0x96, 0x87, 0x6b, 0x5c, 0xe8, 0x12, 0x04, 0x15, 0x21, 0x43, + 0x9e, 0xda, 0x2e, 0xae, 0x51, 0xf1, 0x27, 0x35, 0xff, 0x59, 0x1a, 0xe7, 0xc8, 0x3b, 0x1b, 0x67, + 0x58, 0xca, 0x99, 0xa8, 0x94, 0xbf, 0x3d, 0x11, 0x2c, 0x85, 0x20, 0x12, 0xfd, 0xf3, 0x27, 0x87, + 0xef, 0xa6, 0x79, 0x67, 0xd8, 0x91, 0xa2, 0x0d, 0x79, 0xe7, 0xbf, 0x4d, 0x97, 0xa8, 0xd0, 0xbb, + 0x41, 0xd7, 0x72, 0x70, 0x42, 0x80, 0x81, 0x5d, 0xf4, 0x12, 0x1c, 0x8b, 0x98, 0x19, 0x9f, 0x75, + 0x62, 0x40, 0x6b, 0x73, 0x24, 0x6c, 0x6d, 0x04, 0xe7, 0x40, 0x56, 0xc9, 0x77, 0xb8, 0x36, 0x96, + 0x48, 0xc6, 0x23, 0x87, 0x05, 0xb1, 0xb3, 0x4f, 0x6f, 0x7c, 0xf5, 0x48, 0x76, 0x1d, 0xca, 0x29, + 0x47, 0x19, 0x90, 0x59, 0x7a, 0x75, 0x1d, 0x8e, 0xc4, 0x86, 0x07, 0xe8, 0x49, 0xc8, 0x06, 0x91, + 0x85, 0xd2, 0x25, 0x3d, 0xf3, 0x53, 0x8e, 0x00, 0x57, 0xfd, 0xc7, 0x4a, 0xc0, 0x32, 0x9c, 0xc4, + 0x54, 0x20, 0xcd, 0x8e, 0x47, 0xf1, 0xf3, 0x10, 0x8f, 0x0c, 0x16, 0x58, 0xcc, 0xb1, 0xb3, 0x53, + 0x1a, 0x27, 0x56, 0x3f, 0x0e, 0x69, 0x06, 0x41, 0x39, 0x18, 0x09, 0xae, 0x32, 0x02, 0x48, 0xcf, + 0x2f, 0x2c, 0x54, 0xd6, 0x37, 0x0b, 0x0a, 0xca, 0xc2, 0xf0, 0x7c, 0x79, 0x4d, 0xdb, 0x2c, 0x24, + 0x08, 0x58, 0xab, 0x3c, 0x57, 0x59, 0xd8, 0x2c, 0x24, 0xd1, 0x04, 0x8c, 0xb1, 0xdf, 0xfa, 0xe5, + 0x35, 0x6d, 0x65, 0x7e, 0xb3, 0x90, 0x92, 0x40, 0x1b, 0x95, 0xd5, 0xc5, 0x8a, 0x56, 0x18, 0x56, + 0x3f, 0x48, 0xf2, 0x96, 0x2e, 0xa1, 0x48, 0x90, 0xa1, 0x28, 0x52, 0x86, 0xa2, 0xbe, 0x91, 0x80, + 0x62, 0xf7, 0xf8, 0x02, 0x3d, 0x17, 0x19, 0xf8, 0xf9, 0x43, 0x04, 0x27, 0x91, 0xd1, 0xa3, 0xfb, + 0x21, 0xef, 0xe0, 0x1d, 0xec, 0x55, 0x77, 0x59, 0xbc, 0xc3, 0xbc, 0xd7, 0x98, 0x36, 0xc6, 0xa1, + 0x94, 0xc8, 0x65, 0x68, 0xaf, 0xe0, 0xaa, 0xa7, 0xb3, 0x64, 0xc9, 0xe5, 0xff, 0x7a, 0x62, 0x8c, + 0x41, 0x37, 0x18, 0x50, 0xfd, 0xc4, 0xa1, 0x64, 0x99, 0x85, 0x61, 0xad, 0xb2, 0xa9, 0x7d, 0xa4, + 0x90, 0x44, 0x08, 0xf2, 0xf4, 0xa7, 0xbe, 0xb1, 0x3a, 0xbf, 0xbe, 0x71, 0x75, 0x8d, 0xc8, 0x72, + 0x12, 0xc6, 0x85, 0x2c, 0x05, 0x70, 0x58, 0xfd, 0x13, 0xa5, 0x73, 0x6f, 0xee, 0x7c, 0x78, 0x6f, + 0xae, 0x33, 0x21, 0x97, 0xb6, 0xac, 0xc4, 0xa6, 0xdc, 0x87, 0x0e, 0xbf, 0x29, 0x27, 0x6d, 0xc7, + 0x3d, 0x7b, 0x27, 0xdb, 0x71, 0xf2, 0x46, 0xdc, 0xc5, 0xc3, 0x6e, 0xc4, 0x05, 0x5b, 0x70, 0x0b, + 0x77, 0x61, 0x0b, 0x4e, 0xfd, 0x18, 0xe4, 0xc3, 0x05, 0x96, 0xe0, 0x38, 0x90, 0x22, 0x1f, 0x07, + 0x7a, 0x1c, 0x86, 0x6f, 0xd8, 0xcc, 0x58, 0xc5, 0x2f, 0xd9, 0x6b, 0xb6, 0x87, 0xa5, 0x02, 0x0d, + 0xc3, 0x56, 0x6f, 0xc1, 0x30, 0x35, 0x3e, 0xb1, 0x87, 0xd1, 0x3f, 0x06, 0x60, 0x78, 0x9e, 0x63, + 0x6e, 0xb7, 0x03, 0xc6, 0x33, 0xf1, 0xc6, 0x6b, 0x5e, 0xe0, 0x95, 0xef, 0xe1, 0x56, 0x6c, 0x2a, + 0x20, 0x95, 0x2c, 0x99, 0xc4, 0x50, 0x5d, 0x85, 0x7c, 0x98, 0x36, 0xe6, 0xa8, 0x7e, 0xa8, 0x1a, + 0xe9, 0xc7, 0x3c, 0x7e, 0xc4, 0xc4, 0xbf, 0xce, 0xa2, 0x0f, 0xea, 0xeb, 0x0a, 0x64, 0x36, 0xf7, + 0xb8, 0x5a, 0xf7, 0x38, 0x77, 0x17, 0x7c, 0x61, 0xe0, 0xd7, 0x1f, 0x58, 0x89, 0x27, 0xe9, 0x17, + 0x8e, 0x3e, 0xec, 0x2f, 0xdc, 0xd4, 0xa0, 0x19, 0xa2, 0xa8, 0xa0, 0x71, 0x63, 0x75, 0x09, 0xb2, + 0xbe, 0x56, 0x91, 0xe8, 0x5d, 0x1c, 0x50, 0xe3, 0xff, 0x52, 0x87, 0x3f, 0xd2, 0x02, 0x9f, 0x7d, + 0x93, 0x57, 0x38, 0x92, 0x1a, 0x7b, 0x50, 0x6b, 0xd2, 0xfe, 0x23, 0xf3, 0x22, 0xe8, 0x12, 0x8c, + 0xf0, 0xfd, 0xc7, 0xb8, 0xc5, 0x23, 0x82, 0x3c, 0x71, 0x7a, 0x40, 0x74, 0x86, 0xed, 0x4e, 0x06, + 0xad, 0x24, 0xe4, 0x56, 0x6e, 0x40, 0x46, 0x28, 0x05, 0x7a, 0x46, 0x5e, 0x27, 0xa2, 0x9e, 0xdb, + 0xd5, 0x95, 0x76, 0xee, 0x57, 0x9f, 0x85, 0x09, 0x97, 0x9e, 0xa3, 0xd1, 0x83, 0xfc, 0x81, 0xdf, + 0xbd, 0x38, 0xce, 0x5e, 0x2c, 0x8b, 0xe4, 0x41, 0x3d, 0x50, 0x20, 0x23, 0x16, 0x6c, 0xac, 0xde, + 0x85, 0x3a, 0x93, 0x38, 0x7c, 0x67, 0xee, 0xfe, 0x71, 0xe8, 0x87, 0x01, 0xd1, 0x73, 0xec, 0xfa, + 0x0d, 0xdb, 0x33, 0xad, 0xba, 0xce, 0xa4, 0xc9, 0xaf, 0x92, 0xa3, 0x6f, 0xae, 0xd1, 0x17, 0xeb, + 0x54, 0xb0, 0x7f, 0x49, 0x81, 0x8c, 0xef, 0xfc, 0x0e, 0x5b, 0x53, 0x3b, 0x0a, 0x69, 0x6e, 0xdf, + 0xf9, 0x0e, 0x36, 0x7b, 0xf2, 0xcb, 0xbb, 0x29, 0xa9, 0xbc, 0x5b, 0x84, 0x8c, 0xb8, 0xa5, 0x97, + 0xe7, 0x68, 0xfe, 0xf3, 0xd9, 0x8b, 0x90, 0x93, 0xca, 0x9b, 0x64, 0x69, 0xad, 0x56, 0x5e, 0x2c, + 0x0c, 0x15, 0x47, 0x5e, 0x7f, 0x73, 0x36, 0xb9, 0x8a, 0x6f, 0x12, 0xa5, 0xd4, 0x2a, 0x0b, 0x57, + 0x2b, 0x0b, 0xcf, 0x17, 0x94, 0x62, 0xee, 0xf5, 0x37, 0x67, 0x47, 0x34, 0x4c, 0xab, 0x24, 0xe7, + 0x3f, 0x09, 0x30, 0x3e, 0x5f, 0x5e, 0x58, 0x22, 0x4e, 0xc9, 0xe4, 0xb7, 0xbf, 0x2d, 0x40, 0x8a, + 0x26, 0xb6, 0x3d, 0xb7, 0x39, 0x8b, 0xbd, 0x4b, 0x67, 0xe8, 0x32, 0x0c, 0xd3, 0x9c, 0x17, 0xf5, + 0xde, 0xf7, 0x2c, 0xf6, 0xa9, 0xa5, 0x91, 0xce, 0x50, 0xad, 0xed, 0xb9, 0x11, 0x5a, 0xec, 0x5d, + 0x5a, 0x43, 0x1a, 0x64, 0x83, 0xa4, 0xb5, 0xff, 0xc6, 0x68, 0x71, 0x80, 0x72, 0x1b, 0xe1, 0x19, + 0x44, 0xeb, 0xfd, 0x37, 0x0a, 0x8b, 0x03, 0xd8, 0x15, 0xb4, 0x0c, 0x23, 0x22, 0x0f, 0xea, 0xb7, + 0x75, 0x59, 0xec, 0x5b, 0x0a, 0x23, 0x53, 0xc0, 0xf2, 0xd5, 0xde, 0xfb, 0xb0, 0xc5, 0x3e, 0x75, + 0x3d, 0xb4, 0xe4, 0x9f, 0x70, 0xee, 0xb3, 0x1d, 0x59, 0xec, 0x57, 0xda, 0x22, 0x42, 0x0b, 0xb2, + 0xfd, 0xfe, 0xbb, 0xcb, 0xc5, 0x01, 0x4a, 0x96, 0x68, 0x0b, 0x40, 0xca, 0x4e, 0x07, 0xd8, 0x36, + 0x2e, 0x0e, 0x52, 0x8a, 0x44, 0x6b, 0x90, 0xf1, 0xb3, 0x90, 0xbe, 0x9b, 0xb8, 0xc5, 0xfe, 0x35, + 0x41, 0xf4, 0x71, 0x18, 0x0b, 0x87, 0xdf, 0x83, 0x6d, 0xcd, 0x16, 0x07, 0x2c, 0xf6, 0x11, 0xfe, + 0xe1, 0x58, 0x7c, 0xb0, 0xad, 0xda, 0xe2, 0x80, 0xb5, 0x3f, 0xf4, 0x0a, 0x4c, 0x74, 0xc6, 0xca, + 0x83, 0xef, 0xdc, 0x16, 0x0f, 0x51, 0x0d, 0x44, 0x4d, 0x40, 0x31, 0x31, 0xf6, 0x21, 0x36, 0x72, + 0x8b, 0x87, 0x29, 0x0e, 0x96, 0x2b, 0x5d, 0xcf, 0xc9, 0x3c, 0xd4, 0xf7, 0x9c, 0x4c, 0x70, 0xf2, + 0xc5, 0x3f, 0x1b, 0xf3, 0x47, 0x0a, 0x1c, 0x8f, 0x9e, 0x39, 0x31, 0xac, 0xfd, 0x2e, 0x07, 0x26, + 0xbb, 0x1c, 0x3f, 0xf9, 0x10, 0x24, 0xe7, 0xad, 0x7d, 0x74, 0x9c, 0xdd, 0x0d, 0xa0, 0xb7, 0x9d, + 0x86, 0x28, 0x2f, 0x92, 0xe7, 0x2d, 0xa7, 0x11, 0x1f, 0x30, 0x95, 0x52, 0x7f, 0xf8, 0xd9, 0x99, + 0xa1, 0xf2, 0xf5, 0xe8, 0x88, 0xbe, 0xd8, 0xf7, 0x2c, 0x65, 0x66, 0xde, 0xda, 0x17, 0xc7, 0x28, + 0x87, 0xe9, 0x80, 0x0e, 0x7b, 0x3c, 0xf2, 0xb7, 0x46, 0x09, 0x67, 0xe9, 0x9f, 0xff, 0xf1, 0x11, + 0xa7, 0xd9, 0x53, 0x97, 0x93, 0x7f, 0xbd, 0x8e, 0x11, 0x15, 0xbb, 0xcb, 0x51, 0xbd, 0x02, 0xa9, + 0x05, 0xdb, 0xa4, 0x55, 0xda, 0x1a, 0xb6, 0xec, 0xa6, 0xa8, 0xd2, 0xd2, 0x07, 0x74, 0x1f, 0xa4, + 0x8d, 0xa6, 0xdd, 0xb6, 0x3c, 0xf1, 0x35, 0x15, 0x71, 0xf3, 0xff, 0xf1, 0x60, 0x26, 0xb9, 0x64, + 0x79, 0x1a, 0x7f, 0xc5, 0xbe, 0xff, 0x53, 0x9f, 0x83, 0x91, 0x45, 0x5c, 0xbd, 0x13, 0x5e, 0x8b, + 0xb8, 0x1a, 0xe1, 0x75, 0x06, 0x32, 0x4b, 0x96, 0xc7, 0xfe, 0xc5, 0xc7, 0x49, 0x48, 0x9a, 0x16, + 0x8b, 0x05, 0x22, 0xed, 0x13, 0x38, 0x41, 0x5d, 0xc4, 0x55, 0x1f, 0xb5, 0x86, 0xab, 0x51, 0x54, + 0xc2, 0x9e, 0xc0, 0xd5, 0x32, 0x8c, 0x5e, 0x33, 0x1a, 0xfc, 0x03, 0x07, 0xec, 0xa2, 0x87, 0x21, + 0x6b, 0x88, 0x07, 0xf6, 0x2d, 0x50, 0x39, 0xff, 0xf5, 0x83, 0x19, 0x08, 0x90, 0xb4, 0x00, 0xa1, + 0x94, 0x7a, 0xed, 0x3f, 0xcd, 0x2a, 0xaa, 0x0d, 0x23, 0x57, 0x0c, 0x97, 0xba, 0xc3, 0x0b, 0xa1, + 0x6a, 0x10, 0x8d, 0x55, 0xca, 0x47, 0x6e, 0x1f, 0xcc, 0x4c, 0xec, 0x1b, 0xcd, 0x46, 0x49, 0x0d, + 0xde, 0xa9, 0x5a, 0xb6, 0x6e, 0xb8, 0x2f, 0xb2, 0x1a, 0xd1, 0x9c, 0x54, 0x23, 0xa2, 0x87, 0x12, + 0xca, 0x93, 0xb7, 0x0f, 0x66, 0xc6, 0x03, 0x1a, 0xf2, 0x46, 0xd5, 0x46, 0xea, 0x86, 0xbb, 0x45, + 0x7e, 0xbd, 0xe2, 0xe7, 0x9d, 0x71, 0x5b, 0xe3, 0xbc, 0x6e, 0x95, 0x08, 0xea, 0x56, 0x17, 0x06, + 0xac, 0x9d, 0xf0, 0x78, 0x97, 0xe1, 0x96, 0x52, 0x9f, 0x7a, 0x6b, 0x66, 0x48, 0x75, 0x00, 0x6d, + 0x98, 0xcd, 0x76, 0x83, 0xdd, 0xd0, 0x2a, 0xf6, 0x0b, 0x2f, 0xb0, 0x1e, 0xd3, 0x6a, 0x18, 0x0b, + 0x74, 0xc7, 0xe7, 0xb8, 0x62, 0x72, 0x51, 0xb0, 0xe8, 0xef, 0xd7, 0x0f, 0x66, 0x14, 0xda, 0x6f, + 0x2a, 0x9d, 0x07, 0xfc, 0x84, 0x80, 0xc5, 0xa3, 0x79, 0x41, 0x13, 0xa9, 0x51, 0x3c, 0x03, 0x23, + 0x2b, 0x6e, 0x9d, 0x7e, 0x95, 0x75, 0x1c, 0x32, 0x4d, 0xb7, 0xae, 0x4b, 0xd1, 0xed, 0x48, 0x93, + 0x1f, 0x32, 0x8f, 0xa9, 0xda, 0xf0, 0x09, 0x79, 0x0c, 0xd2, 0x9b, 0x7b, 0x8b, 0xac, 0x8a, 0x23, + 0xe4, 0x93, 0x94, 0xfb, 0xc8, 0xb9, 0x87, 0x88, 0xbe, 0x2d, 0x09, 0x40, 0x13, 0x1f, 0x36, 0xc2, + 0x6e, 0xa9, 0x8f, 0x0a, 0x69, 0x6f, 0xcf, 0xdf, 0x12, 0xce, 0x96, 0xe1, 0xed, 0x83, 0x99, 0xf4, + 0xe6, 0xde, 0x55, 0xc3, 0xdd, 0xd5, 0xf8, 0x9b, 0x70, 0x35, 0x2e, 0x19, 0xa9, 0xc6, 0xf9, 0xf5, + 0xc7, 0x54, 0x4c, 0xfd, 0x71, 0x58, 0xda, 0xad, 0x38, 0x06, 0x23, 0x8e, 0x71, 0x53, 0x27, 0x73, + 0xc9, 0xfe, 0xad, 0x58, 0xda, 0x31, 0x6e, 0x2e, 0xdb, 0x75, 0x12, 0xb8, 0x35, 0xec, 0x7a, 0x50, + 0x34, 0xe4, 0x83, 0x22, 0xc1, 0x26, 0xbf, 0xf6, 0x63, 0xd9, 0xae, 0x97, 0x8f, 0x11, 0xf9, 0x7f, + 0xfe, 0x77, 0x66, 0xc6, 0xc3, 0x70, 0x57, 0xa3, 0xc4, 0x7e, 0x2d, 0x33, 0x23, 0xd5, 0x32, 0x4f, + 0x86, 0xb4, 0x97, 0xd5, 0xb3, 0x25, 0x35, 0x3d, 0x2e, 0xa9, 0x29, 0xb0, 0x33, 0xe7, 0x5c, 0x23, + 0xd1, 0x07, 0x68, 0xea, 0xc7, 0x36, 0xf1, 0xa6, 0x3a, 0x52, 0x82, 0x79, 0x6b, 0x9f, 0x26, 0x84, + 0xf7, 0xc8, 0x5f, 0xc2, 0xb0, 0xff, 0xe3, 0x18, 0x00, 0xb8, 0xbe, 0x7d, 0x4a, 0x81, 0x7c, 0xb8, + 0xc7, 0x34, 0xe7, 0x77, 0xeb, 0xba, 0xbc, 0xe3, 0x4d, 0x94, 0x62, 0x49, 0x54, 0xf8, 0x23, 0xda, + 0x3e, 0x1f, 0xd1, 0xf6, 0x49, 0x21, 0x20, 0x76, 0xc9, 0x16, 0x53, 0xf5, 0x29, 0x2e, 0x9d, 0x51, + 0x09, 0xe8, 0x06, 0xaa, 0x4f, 0x35, 0xe2, 0x13, 0x90, 0x93, 0xde, 0xc6, 0x26, 0x59, 0x4f, 0xc6, + 0x24, 0xf7, 0x13, 0xfe, 0x84, 0xf8, 0xe9, 0x3c, 0xdf, 0xfa, 0x08, 0x50, 0x7d, 0x45, 0xcd, 0xc6, + 0xe6, 0xed, 0xbd, 0x4e, 0x11, 0x95, 0x17, 0x7f, 0xfb, 0xf7, 0x4e, 0x0d, 0xbd, 0xf6, 0xf6, 0xa9, + 0xa1, 0xae, 0xae, 0x55, 0xed, 0xff, 0x2f, 0x63, 0x7d, 0xcf, 0xf2, 0x27, 0xcf, 0xc2, 0x3d, 0x1c, + 0xc7, 0xf5, 0x8c, 0xeb, 0xa6, 0x55, 0x17, 0x7f, 0xb9, 0x8b, 0xc9, 0xf3, 0xd1, 0x70, 0x68, 0x17, + 0x57, 0xd3, 0xfb, 0x90, 0x69, 0xdf, 0x73, 0xa2, 0x7d, 0xce, 0xa8, 0x17, 0xe3, 0x9c, 0x9f, 0x7a, + 0x90, 0x02, 0xb4, 0xe2, 0xd6, 0x17, 0x1c, 0xcc, 0x2e, 0x04, 0xe7, 0x89, 0x6b, 0xf8, 0x42, 0x2e, + 0x6e, 0x9e, 0x4e, 0xcc, 0x85, 0x87, 0xe1, 0xff, 0x0f, 0x48, 0xd3, 0xb6, 0xc4, 0x57, 0xb7, 0xf2, + 0x35, 0x5e, 0x15, 0x00, 0xba, 0x53, 0xec, 0xba, 0xc1, 0x61, 0xea, 0x99, 0x28, 0x8f, 0x05, 0x1f, + 0x43, 0x33, 0x3c, 0x2c, 0x4e, 0x8f, 0x4b, 0x84, 0xe8, 0x5b, 0x61, 0xb2, 0x69, 0x5a, 0xba, 0x8b, + 0x1b, 0x3b, 0x7a, 0x0d, 0x37, 0xe8, 0x75, 0xe9, 0x7c, 0x7f, 0x31, 0x5b, 0x5e, 0xe6, 0xde, 0xe8, + 0x81, 0xfe, 0xd3, 0x35, 0xb7, 0x64, 0x79, 0xb7, 0x0f, 0x66, 0x8a, 0xcc, 0x25, 0xc4, 0xb0, 0x54, + 0xb5, 0x89, 0xa6, 0x69, 0x6d, 0xe0, 0xc6, 0xce, 0xa2, 0x0f, 0x43, 0xb7, 0x60, 0x82, 0x63, 0x48, + 0x1f, 0xf7, 0xd1, 0xd4, 0xb7, 0xbc, 0x72, 0xfb, 0x60, 0x66, 0x9a, 0x71, 0xeb, 0x40, 0x51, 0xbf, + 0x7e, 0x30, 0xf3, 0xc8, 0x00, 0x7d, 0x9a, 0xaf, 0x56, 0x85, 0x4f, 0x2c, 0xf8, 0x4c, 0xc4, 0xb7, + 0x82, 0xb7, 0xe2, 0x3e, 0x2c, 0x1c, 0x8e, 0xb6, 0xdd, 0x81, 0x32, 0x68, 0xdb, 0x92, 0x3f, 0xee, + 0xfc, 0x4e, 0xf1, 0x28, 0xa4, 0x5b, 0xed, 0x6d, 0xb1, 0xf1, 0x97, 0xd5, 0xf8, 0x13, 0x3a, 0x2d, + 0xef, 0xfd, 0xe5, 0xce, 0x8f, 0x8a, 0xf9, 0x24, 0x01, 0x8a, 0x5f, 0xd1, 0x63, 0xa1, 0x1e, 0x0d, + 0x39, 0xbe, 0x90, 0x84, 0xc2, 0x8a, 0x5b, 0xaf, 0xd4, 0x4c, 0xef, 0x2e, 0xab, 0x57, 0xab, 0xeb, + 0x67, 0x97, 0xe5, 0x85, 0xdb, 0x07, 0x33, 0x79, 0x26, 0x9d, 0xbb, 0x29, 0x93, 0x26, 0x8c, 0x07, + 0x7a, 0xa9, 0x3b, 0x86, 0xc7, 0x3d, 0x53, 0x79, 0x71, 0x40, 0x0d, 0x5c, 0xc4, 0xd5, 0xdb, 0x07, + 0x33, 0x47, 0x59, 0xcf, 0x22, 0xac, 0x54, 0x2d, 0x5f, 0x0d, 0xad, 0x05, 0xb4, 0x17, 0xaf, 0xf8, + 0x74, 0xe7, 0xac, 0x7c, 0xf5, 0x5d, 0x54, 0x7a, 0x3e, 0x75, 0xbf, 0x98, 0x80, 0x1c, 0xf1, 0xf2, + 0x0c, 0x8e, 0xe3, 0x97, 0x82, 0xf2, 0xa7, 0xb8, 0x14, 0x12, 0xef, 0xcd, 0x52, 0x38, 0xeb, 0x07, + 0xd8, 0xc9, 0xae, 0x3a, 0x1f, 0x8e, 0xb3, 0xff, 0x6d, 0x92, 0x5a, 0x55, 0x9a, 0xaf, 0x6b, 0xb8, + 0xf6, 0x7e, 0x10, 0xe0, 0xb7, 0x2b, 0x70, 0x24, 0x10, 0x8f, 0xeb, 0x54, 0x23, 0x52, 0x7c, 0xe1, + 0xf6, 0xc1, 0xcc, 0x3d, 0x51, 0x29, 0x4a, 0x68, 0x77, 0x20, 0xc9, 0x49, 0x9f, 0xd1, 0x86, 0x53, + 0x8d, 0xef, 0x47, 0xcd, 0xf5, 0xfc, 0x7e, 0x24, 0xbb, 0xf7, 0x43, 0x42, 0x7b, 0x47, 0xfd, 0x58, + 0x74, 0xbd, 0xce, 0x49, 0x4d, 0x0d, 0x38, 0xa9, 0xbf, 0x94, 0x80, 0xb1, 0x15, 0xb7, 0xbe, 0x65, + 0xd5, 0xbe, 0xb9, 0x20, 0x0e, 0xbb, 0x20, 0xbe, 0x53, 0x81, 0xfc, 0x55, 0xd3, 0xf5, 0x6c, 0xc7, + 0xac, 0x1a, 0x0d, 0x9a, 0xc8, 0x3c, 0x31, 0xe8, 0x07, 0xd6, 0x91, 0x13, 0xc1, 0x4f, 0x42, 0xfa, + 0x86, 0xd1, 0x70, 0xb1, 0xe7, 0x6f, 0x30, 0x45, 0xdc, 0x46, 0xb4, 0x1e, 0xcf, 0xd1, 0x79, 0x4f, + 0x7e, 0x86, 0x7e, 0xa9, 0x17, 0x8a, 0x39, 0x50, 0x19, 0x52, 0xd4, 0x98, 0xb3, 0x04, 0x77, 0xee, + 0x10, 0x21, 0x05, 0xc9, 0x81, 0x29, 0x2d, 0xfa, 0x16, 0xc8, 0x34, 0x8d, 0x3d, 0xe6, 0x14, 0x58, + 0x56, 0x33, 0x7f, 0x38, 0x3e, 0x41, 0xb6, 0x2a, 0xf8, 0xa8, 0xda, 0x48, 0xd3, 0xd8, 0xa3, 0xae, + 0xa0, 0x05, 0xe3, 0x04, 0x5a, 0xdd, 0x35, 0xac, 0x3a, 0x96, 0x3d, 0xcf, 0xd5, 0x43, 0x37, 0x72, + 0x34, 0x68, 0x44, 0x62, 0xa7, 0x6a, 0x63, 0x4d, 0x63, 0x6f, 0x81, 0x02, 0x48, 0x8b, 0xa5, 0xcc, + 0x1b, 0x6f, 0xcd, 0x0c, 0x51, 0x89, 0xfd, 0x4b, 0x05, 0x20, 0x90, 0x18, 0xda, 0x84, 0x42, 0xc4, + 0x73, 0x89, 0x53, 0x50, 0x7d, 0x63, 0xbb, 0x20, 0x9d, 0x1d, 0xaf, 0x46, 0xa6, 0xe0, 0xa3, 0x90, + 0x63, 0x87, 0x1c, 0x74, 0xba, 0x31, 0x92, 0xe8, 0xbb, 0x31, 0x72, 0x8a, 0xf0, 0xba, 0x7d, 0x30, + 0x83, 0xd8, 0x70, 0x24, 0x62, 0x95, 0x6e, 0x97, 0x00, 0x83, 0x10, 0x82, 0xf0, 0x58, 0x72, 0x52, + 0x58, 0x41, 0x4f, 0xc7, 0xd9, 0x96, 0x79, 0x1d, 0x3b, 0x7e, 0x66, 0xcc, 0x1e, 0x51, 0x11, 0x32, + 0xec, 0x9f, 0xfe, 0x78, 0xfb, 0xe2, 0x36, 0x27, 0xf1, 0x4c, 0xa8, 0x6e, 0xe2, 0x6d, 0xd7, 0x14, + 0xb3, 0xa0, 0x89, 0x47, 0x74, 0x19, 0x0a, 0x2e, 0xae, 0xb6, 0x1d, 0xd3, 0xdb, 0xd7, 0xab, 0xb6, + 0xe5, 0x19, 0x55, 0x8f, 0xfb, 0xeb, 0x13, 0xb7, 0x0f, 0x66, 0x8e, 0xb1, 0xbe, 0x46, 0x31, 0x54, + 0x6d, 0x5c, 0x80, 0x16, 0x18, 0x84, 0xb4, 0x50, 0xc3, 0x9e, 0x61, 0x36, 0x5c, 0x9e, 0xce, 0x8a, + 0x47, 0x69, 0x2c, 0x3f, 0x3d, 0x22, 0xef, 0xec, 0xdd, 0x84, 0x82, 0xdd, 0xc2, 0x4e, 0x8c, 0x29, + 0x5a, 0x0e, 0x5a, 0x8e, 0x62, 0xdc, 0x81, 0x35, 0x18, 0x17, 0x3c, 0x84, 0x31, 0xb8, 0x1c, 0x3a, + 0x15, 0xc7, 0x42, 0xc6, 0x44, 0x74, 0xc8, 0x51, 0x0c, 0x55, 0x3e, 0x10, 0xc7, 0x02, 0xcb, 0xa3, + 0x90, 0x7e, 0xc5, 0x30, 0x1b, 0xe2, 0x3f, 0xa1, 0x69, 0xfc, 0x09, 0x2d, 0x41, 0xda, 0xf5, 0x0c, + 0xaf, 0xcd, 0xa2, 0xee, 0xe1, 0xf2, 0x07, 0x07, 0xec, 0x73, 0xd9, 0xb6, 0x6a, 0x1b, 0x94, 0x50, + 0xe3, 0x0c, 0xd0, 0x65, 0x48, 0x7b, 0xf6, 0x75, 0x6c, 0x71, 0xa1, 0x1e, 0x6a, 0xa5, 0xd3, 0xc2, + 0x1c, 0xa3, 0x46, 0x1e, 0x04, 0xf6, 0x58, 0x77, 0x77, 0x0d, 0x07, 0xb3, 0x8b, 0x5c, 0xb2, 0xe5, + 0xa5, 0x43, 0x2f, 0xc7, 0x63, 0x51, 0x27, 0xc1, 0xf8, 0xa9, 0xda, 0xb8, 0x0f, 0xda, 0xa0, 0x90, + 0x68, 0xd0, 0x3c, 0x72, 0x47, 0x41, 0xf3, 0x65, 0x28, 0xb4, 0xad, 0x6d, 0xdb, 0xa2, 0xff, 0xb5, + 0x88, 0x17, 0x67, 0x32, 0xb3, 0xca, 0xe9, 0xa4, 0x3c, 0x5b, 0x51, 0x0c, 0x55, 0x1b, 0xf7, 0x41, + 0xfc, 0x7c, 0x66, 0x0d, 0xf2, 0x01, 0x16, 0x5d, 0xb2, 0xd9, 0xbe, 0x4b, 0xf6, 0x5e, 0xbe, 0x64, + 0x8f, 0x44, 0x5b, 0x09, 0x56, 0xed, 0x98, 0x0f, 0x24, 0x64, 0xe8, 0xc3, 0xa1, 0x0c, 0x12, 0x78, + 0x0b, 0x5d, 0xad, 0xcc, 0xe0, 0xc9, 0x63, 0xee, 0x3d, 0x49, 0x1e, 0x4b, 0xa3, 0x9f, 0x7a, 0x6b, + 0x66, 0xc8, 0x5f, 0xb0, 0xaf, 0x27, 0x20, 0xbd, 0x78, 0x6d, 0xdd, 0x30, 0x9d, 0x3f, 0xaf, 0x91, + 0x83, 0x64, 0xbd, 0x9e, 0x86, 0x11, 0x26, 0x0b, 0x7a, 0x18, 0xa7, 0x45, 0x7e, 0xf8, 0x27, 0x36, + 0xa3, 0x2a, 0x4d, 0xf1, 0xfc, 0x8b, 0xd4, 0x08, 0xaa, 0xfa, 0xe3, 0x49, 0x80, 0xc5, 0x6b, 0xd7, + 0x36, 0x1d, 0xb3, 0xd5, 0xc0, 0xde, 0x37, 0x23, 0xeb, 0xf7, 0x4f, 0x64, 0x2d, 0xcd, 0xf1, 0xf3, + 0x90, 0x0b, 0xe6, 0xc8, 0x45, 0x1f, 0x82, 0x8c, 0xc7, 0x7f, 0xfb, 0xb7, 0x44, 0x76, 0x4c, 0xb5, + 0x40, 0x17, 0xf7, 0x19, 0x08, 0x0a, 0xf5, 0x3f, 0x24, 0x00, 0xfa, 0xd5, 0x65, 0xfe, 0x1c, 0xc4, + 0xde, 0x97, 0x21, 0xcd, 0x3d, 0x4e, 0xf2, 0x8e, 0xa2, 0x55, 0x4e, 0x2d, 0xcd, 0xd2, 0xef, 0x25, + 0x60, 0x72, 0x4b, 0x98, 0xdd, 0x6f, 0x4a, 0x18, 0x5d, 0x85, 0x11, 0x6c, 0x79, 0x8e, 0x89, 0x45, + 0xf1, 0xfb, 0x74, 0x54, 0x4b, 0x63, 0xa4, 0x45, 0xff, 0x9b, 0xb1, 0xb8, 0xfa, 0x82, 0x93, 0x4b, + 0x32, 0xfe, 0xbe, 0x24, 0x4c, 0x77, 0xa3, 0x42, 0x0b, 0x30, 0x5e, 0x75, 0x30, 0x05, 0xe8, 0xf2, + 0x7e, 0x49, 0xb9, 0x28, 0x15, 0x8b, 0xc2, 0x08, 0xaa, 0x96, 0x17, 0x10, 0xee, 0x90, 0xeb, 0xb4, + 0x36, 0x45, 0x96, 0x0a, 0xc1, 0x1a, 0x30, 0x88, 0x56, 0xb9, 0x47, 0x0e, 0x2a, 0x52, 0x32, 0x03, + 0xe6, 0x92, 0xf3, 0x01, 0x94, 0xfa, 0xe4, 0x57, 0x61, 0xdc, 0xb4, 0x4c, 0xcf, 0x34, 0x1a, 0xfa, + 0xb6, 0xd1, 0x30, 0xac, 0xea, 0x9d, 0xa4, 0x22, 0xcc, 0x9b, 0xf2, 0x66, 0x23, 0xec, 0x54, 0x2d, + 0xcf, 0x21, 0x65, 0x06, 0x20, 0x33, 0x22, 0x9a, 0x4a, 0xdd, 0x51, 0xe0, 0x26, 0xc8, 0xa5, 0x19, + 0xf9, 0x9e, 0x24, 0x4c, 0xf8, 0xa5, 0x99, 0x6f, 0x4e, 0xc5, 0xa0, 0x53, 0xb1, 0x02, 0xc0, 0x0c, + 0x08, 0xf1, 0x1c, 0x77, 0x30, 0x1b, 0xc4, 0x04, 0x65, 0x19, 0x87, 0x45, 0xd7, 0x93, 0xe6, 0xe3, + 0x0f, 0x92, 0x30, 0x2a, 0xcf, 0xc7, 0x37, 0x5d, 0xfa, 0xfb, 0xa8, 0x58, 0x36, 0x1f, 0x98, 0x44, + 0xf6, 0x9d, 0xf4, 0xbd, 0x51, 0x93, 0xd8, 0xb1, 0x94, 0xba, 0xdb, 0xc2, 0xff, 0x9b, 0x80, 0x34, + 0x3f, 0x89, 0x5c, 0xed, 0xc8, 0x22, 0x94, 0x7e, 0x57, 0xee, 0xf4, 0x4e, 0x22, 0xde, 0x88, 0x4d, + 0x22, 0xf2, 0x4d, 0x63, 0x4f, 0x0f, 0x7d, 0x6d, 0xa5, 0x9c, 0x1e, 0x2b, 0x1f, 0x0f, 0xb8, 0x84, + 0xdf, 0xb3, 0x5a, 0x48, 0xf0, 0x7d, 0x37, 0x7a, 0x12, 0x72, 0x04, 0x23, 0xf0, 0x0a, 0x84, 0xfc, + 0x68, 0x50, 0x7c, 0x90, 0x5e, 0xaa, 0x1a, 0x34, 0x8d, 0xbd, 0x0a, 0x7b, 0x40, 0xcb, 0x80, 0x76, + 0xfd, 0xaa, 0x97, 0x1e, 0x88, 0x90, 0xd0, 0x9f, 0xbc, 0x7d, 0x30, 0x73, 0x9c, 0xd1, 0x77, 0xe2, + 0xa8, 0xda, 0x44, 0x00, 0x14, 0xdc, 0x2e, 0x00, 0x90, 0x71, 0xe9, 0xec, 0x0c, 0x08, 0x4b, 0x61, + 0xa5, 0x83, 0x11, 0xc1, 0x3b, 0x55, 0xcb, 0x92, 0x87, 0x45, 0xf2, 0x5b, 0x12, 0xfc, 0xf7, 0x2a, + 0x80, 0x02, 0xdf, 0xe3, 0xef, 0xd2, 0x7f, 0x98, 0x7e, 0x88, 0x2a, 0x32, 0x23, 0x25, 0x3e, 0xc9, + 0x0a, 0xe8, 0x44, 0x92, 0x25, 0x2d, 0xd5, 0x87, 0x03, 0xfb, 0x9c, 0xe8, 0x5a, 0x10, 0x8c, 0xb1, + 0xc1, 0xbf, 0xa2, 0xc0, 0xf1, 0x0e, 0xc5, 0xf1, 0xfb, 0x75, 0x0d, 0x90, 0x23, 0xbd, 0xa4, 0xa2, + 0x11, 0x67, 0x8e, 0x07, 0xd6, 0xbf, 0x09, 0xa7, 0xc3, 0xc6, 0xdf, 0x3d, 0x6f, 0xc2, 0x2b, 0x8a, + 0x0a, 0x4c, 0xc9, 0xcd, 0xfb, 0x03, 0xb8, 0x0c, 0xa3, 0x72, 0xeb, 0xfe, 0x71, 0xe9, 0x1e, 0x5d, + 0xe7, 0xbd, 0x0e, 0xd1, 0xa1, 0xa5, 0x60, 0xf5, 0xb1, 0x92, 0xe7, 0x99, 0xbe, 0xa3, 0xf7, 0x4f, + 0x0c, 0x46, 0x56, 0x21, 0xeb, 0xf1, 0x9f, 0x28, 0x90, 0x5a, 0xb7, 0xed, 0x06, 0xb2, 0x61, 0xc2, + 0xb2, 0x3d, 0x9d, 0x28, 0x0b, 0xae, 0xe9, 0xbc, 0x36, 0xc2, 0xaa, 0xa0, 0x0b, 0x87, 0x13, 0xca, + 0x57, 0x0e, 0x66, 0x3a, 0x59, 0x69, 0xe3, 0x96, 0xed, 0x95, 0x29, 0x64, 0x93, 0x55, 0x4e, 0xbe, + 0x15, 0xc6, 0xc2, 0x8d, 0xb1, 0x4a, 0xd1, 0x8b, 0x87, 0x6e, 0x2c, 0xcc, 0xe6, 0xf6, 0xc1, 0xcc, + 0x54, 0xb0, 0x08, 0x7c, 0xb0, 0xaa, 0x8d, 0x6e, 0x4b, 0xad, 0xb3, 0xdb, 0xea, 0xfe, 0xf0, 0xad, + 0x19, 0xa5, 0x7c, 0xb9, 0xeb, 0xbe, 0xff, 0xc3, 0x3d, 0xbb, 0xb0, 0xe7, 0x6f, 0xf0, 0x87, 0x4f, + 0x00, 0x7c, 0xf9, 0x1c, 0x14, 0x23, 0x27, 0x00, 0xe8, 0xc7, 0xe6, 0x5d, 0xf6, 0xff, 0x4f, 0x72, + 0x5c, 0x8a, 0x73, 0xae, 0x65, 0xd4, 0x4d, 0x4b, 0xde, 0xa9, 0xef, 0x72, 0x3c, 0xa0, 0xd7, 0x11, + 0x03, 0xf5, 0x3a, 0x1c, 0xa5, 0xe7, 0x61, 0x03, 0xb3, 0x25, 0x6e, 0x87, 0x3a, 0xea, 0x17, 0xd0, + 0x14, 0x7e, 0x79, 0x01, 0xab, 0x86, 0x5d, 0x04, 0x08, 0x5a, 0xf6, 0xef, 0x3a, 0xe3, 0x3d, 0x65, + 0xbd, 0x5f, 0x37, 0xea, 0x98, 0xb3, 0xd1, 0x24, 0x64, 0xf5, 0x07, 0x15, 0x38, 0xd6, 0xd1, 0x1a, + 0xd7, 0xfa, 0x67, 0x43, 0x1f, 0xb6, 0x2a, 0x83, 0xd5, 0xe8, 0xe5, 0x2b, 0x4e, 0x4a, 0x31, 0xfd, + 0x2a, 0xc6, 0xf5, 0x8b, 0x35, 0x18, 0xea, 0xd8, 0xab, 0x70, 0x24, 0xdc, 0x2f, 0x21, 0x84, 0x97, + 0x20, 0x1f, 0xce, 0x16, 0x78, 0x28, 0xf1, 0xc1, 0xc3, 0x7b, 0xc8, 0xb1, 0x50, 0xc6, 0xa0, 0xbe, + 0x18, 0x15, 0xbc, 0x2f, 0x89, 0xa7, 0x3b, 0x3f, 0x65, 0xe8, 0x2b, 0x88, 0x80, 0x42, 0xfd, 0x45, + 0x05, 0x66, 0xc3, 0x9c, 0x03, 0x23, 0xec, 0xbe, 0xeb, 0xe3, 0x7a, 0x27, 0xea, 0xf1, 0x9b, 0x0a, + 0xdc, 0xdb, 0xa3, 0xe7, 0x5c, 0x3c, 0x0e, 0x4c, 0x49, 0xd6, 0xdd, 0xe1, 0x60, 0xa1, 0x32, 0x6a, + 0x77, 0x0f, 0xe4, 0x1b, 0xb7, 0x13, 0xfc, 0x00, 0xd2, 0x64, 0xe7, 0x3b, 0x57, 0x9b, 0xec, 0xb4, + 0xc8, 0xef, 0x4c, 0xb7, 0xbe, 0xa8, 0xc0, 0x99, 0xf0, 0xa8, 0x62, 0x32, 0xba, 0xf7, 0xf7, 0xc4, + 0xfc, 0x33, 0x05, 0xce, 0x0e, 0x32, 0x04, 0x3e, 0x43, 0x2f, 0xc3, 0x64, 0x10, 0x5f, 0x45, 0x27, + 0xe8, 0xbe, 0x01, 0xb2, 0x62, 0xae, 0xd4, 0xc8, 0xe7, 0x72, 0x77, 0x66, 0xe2, 0x5f, 0x29, 0x7c, + 0xcd, 0xc9, 0xf3, 0xee, 0x8b, 0x3d, 0x9c, 0x12, 0x1c, 0x52, 0xec, 0x52, 0x5a, 0x30, 0x16, 0x4a, + 0x0b, 0x62, 0x26, 0x34, 0x71, 0x97, 0x2c, 0xc8, 0x77, 0x08, 0x6b, 0x1a, 0x13, 0x9c, 0x5d, 0x87, + 0xc9, 0x98, 0x45, 0xe2, 0x5f, 0x2f, 0xd3, 0x7f, 0x8d, 0x1c, 0xfd, 0xfa, 0xc1, 0x4c, 0x4c, 0xd4, + 0xa7, 0xa1, 0xce, 0xe5, 0xa1, 0xfe, 0x7b, 0x05, 0x66, 0x68, 0x47, 0x62, 0xa6, 0xf2, 0xcf, 0xb2, + 0x80, 0x31, 0x37, 0xa4, 0xb1, 0xc3, 0xe2, 0x82, 0x9e, 0x87, 0x34, 0xd3, 0x52, 0x2e, 0xdb, 0x43, + 0xa8, 0x37, 0x27, 0x0c, 0x0c, 0xf6, 0xa2, 0x18, 0x57, 0xbc, 0x5d, 0x78, 0x97, 0xe4, 0xf7, 0x0e, + 0xec, 0xc2, 0x3f, 0x12, 0x06, 0x3b, 0xbe, 0xe7, 0x5c, 0x44, 0x1f, 0x7d, 0xc7, 0x06, 0x9b, 0xdf, + 0xa1, 0xf5, 0xae, 0x59, 0x66, 0xbf, 0xfb, 0x7d, 0x2c, 0xf3, 0xfb, 0x6f, 0x06, 0x7c, 0xcb, 0xdc, + 0x67, 0x08, 0xef, 0x73, 0xcb, 0x7c, 0x3b, 0x01, 0xc7, 0xe9, 0x30, 0xe4, 0x8c, 0xe4, 0x3d, 0x90, + 0xbc, 0x0e, 0xc8, 0x75, 0xaa, 0xfa, 0xdd, 0xb2, 0x1f, 0x05, 0xd7, 0xa9, 0x5e, 0x0b, 0x39, 0x5d, + 0x1d, 0x50, 0xcd, 0xf5, 0xa2, 0x0d, 0x24, 0xef, 0xb8, 0x81, 0x9a, 0xeb, 0x5d, 0xeb, 0xe1, 0xd5, + 0x53, 0x87, 0xd1, 0x9d, 0x5f, 0x56, 0xa0, 0x18, 0x27, 0x74, 0xae, 0x2b, 0x06, 0x1c, 0x0d, 0xe5, + 0xd1, 0x51, 0x75, 0xf9, 0x40, 0xaf, 0x6c, 0x32, 0xb2, 0x74, 0x8f, 0x38, 0xf8, 0x6e, 0x2f, 0xde, + 0x5f, 0x10, 0x4e, 0xc7, 0xd7, 0xfc, 0xce, 0x14, 0xe6, 0x7d, 0xb9, 0x64, 0x7f, 0xac, 0xc3, 0xdc, + 0xbf, 0xdf, 0xb2, 0xa1, 0x7f, 0xa7, 0xc0, 0xa9, 0x2e, 0x3d, 0xfc, 0xb3, 0xec, 0xce, 0x3f, 0xd1, + 0x55, 0x61, 0xee, 0x56, 0xea, 0x75, 0x81, 0x2f, 0xa8, 0xf0, 0x91, 0x35, 0x29, 0xa1, 0x8e, 0xbd, + 0x63, 0xf1, 0x05, 0x38, 0x11, 0x4b, 0xc5, 0xfb, 0x74, 0x1e, 0x52, 0xbb, 0xa6, 0x2b, 0x6e, 0x4f, + 0x3c, 0x15, 0xed, 0x4e, 0x84, 0x8a, 0xe2, 0xaa, 0x08, 0x0a, 0x94, 0xe5, 0xba, 0x6d, 0x37, 0x78, + 0xf3, 0xea, 0x02, 0x4c, 0x48, 0x30, 0xce, 0x7c, 0x0e, 0x52, 0x2d, 0x9b, 0xff, 0x53, 0xba, 0xdc, + 0xf9, 0xa9, 0x28, 0x73, 0x82, 0xcb, 0x87, 0x49, 0xf1, 0xd4, 0x29, 0x40, 0x8c, 0x09, 0xbb, 0x2a, + 0x82, 0xb3, 0xfe, 0x4e, 0x05, 0x26, 0x43, 0x60, 0xff, 0x53, 0xa5, 0x74, 0xe8, 0xbe, 0xab, 0x8e, + 0x2d, 0xfa, 0xd0, 0xd5, 0xef, 0x1c, 0xf7, 0x9d, 0xa8, 0xee, 0xf9, 0x5f, 0x1d, 0x15, 0x9f, 0x07, + 0xeb, 0x00, 0x52, 0x29, 0xf6, 0x81, 0x68, 0xcb, 0xf1, 0x45, 0x8f, 0xe2, 0x83, 0x7d, 0xf1, 0x78, + 0xcc, 0x3b, 0x84, 0xbe, 0x45, 0x3e, 0x46, 0x75, 0x7f, 0x6f, 0x3a, 0xc1, 0xfe, 0x81, 0x7e, 0x68, + 0x3e, 0xf7, 0xbf, 0x00, 0x53, 0x71, 0x59, 0x30, 0x7a, 0xb4, 0x37, 0x87, 0xce, 0xb8, 0xa5, 0xf8, + 0xc1, 0x43, 0x50, 0xf8, 0xcd, 0xbf, 0xa1, 0xc0, 0xc9, 0x9e, 0xc9, 0x1e, 0xba, 0xd8, 0x9b, 0x6d, + 0x8f, 0x48, 0xaa, 0x58, 0xba, 0x13, 0x52, 0xbf, 0x6b, 0x7a, 0x68, 0x3f, 0x3f, 0x5e, 0xa2, 0x1d, + 0xf9, 0x47, 0x97, 0x89, 0xed, 0x8c, 0x35, 0xd5, 0x21, 0x74, 0x2b, 0x7e, 0x5f, 0xfb, 0x5c, 0x2c, + 0x87, 0xee, 0x29, 0x4f, 0xf1, 0xd1, 0xc1, 0x09, 0xe4, 0x69, 0x8f, 0x8b, 0xa5, 0xbb, 0x4c, 0x7b, + 0x8f, 0x84, 0xa1, 0xcb, 0xb4, 0xf7, 0x0a, 0xd4, 0xf9, 0xb4, 0xf7, 0x8c, 0x24, 0xbb, 0x4c, 0xfb, + 0x20, 0x01, 0x74, 0x97, 0x69, 0x1f, 0x28, 0x70, 0x55, 0x87, 0xd0, 0x2e, 0x8c, 0x85, 0xe2, 0x14, + 0x74, 0x26, 0x96, 0x5d, 0x5c, 0x00, 0x59, 0x3c, 0x3b, 0x08, 0xaa, 0x3c, 0xff, 0x31, 0xae, 0xb9, + 0xcb, 0xfc, 0x77, 0x8f, 0x3e, 0x8a, 0x8f, 0x0e, 0x4e, 0xe0, 0xb7, 0x7d, 0xd3, 0xdf, 0x6a, 0x91, + 0x10, 0xd0, 0xdc, 0x80, 0x9c, 0x44, 0xcb, 0xe7, 0x06, 0xc6, 0xf7, 0x1b, 0xbe, 0xde, 0x71, 0xd0, + 0x3a, 0x5e, 0x68, 0xb1, 0xae, 0xad, 0xf8, 0xd0, 0x40, 0xb8, 0x7e, 0x63, 0x2b, 0x7c, 0x1f, 0x61, + 0x36, 0x96, 0x4c, 0x72, 0x5a, 0xc5, 0x7b, 0x7b, 0x60, 0xf8, 0xec, 0x36, 0xfc, 0x8d, 0x41, 0x35, + 0x1e, 0x5d, 0x76, 0x56, 0xc5, 0xfb, 0x7a, 0xe2, 0x08, 0xa6, 0x77, 0xbd, 0xd4, 0xff, 0xf3, 0x99, + 0x8e, 0x8f, 0xfd, 0xea, 0xd8, 0xc2, 0xae, 0xe9, 0x1e, 0xee, 0x63, 0xbf, 0x9e, 0xd5, 0xfc, 0xef, + 0x48, 0xc3, 0xe8, 0x15, 0xc6, 0x95, 0x5e, 0xea, 0x8d, 0x9e, 0x19, 0xd0, 0x03, 0xe7, 0x89, 0x07, + 0xfe, 0xfa, 0xc1, 0x0c, 0x17, 0xa4, 0xef, 0x8b, 0x5d, 0x7e, 0x8f, 0x36, 0xbb, 0x3c, 0x26, 0xb8, + 0x83, 0x67, 0xf4, 0x50, 0x47, 0x56, 0xd9, 0x59, 0x01, 0x7e, 0x4a, 0x34, 0xca, 0x4f, 0x65, 0x77, + 0x6d, 0x6f, 0x12, 0x08, 0xbd, 0x7e, 0x06, 0x7d, 0xbf, 0x02, 0x47, 0x28, 0x56, 0x10, 0x08, 0x52, + 0x4c, 0x71, 0xb0, 0xa6, 0x63, 0x96, 0x97, 0x0d, 0x29, 0x2d, 0xa2, 0x3c, 0xca, 0x25, 0xbe, 0xdf, + 0x7b, 0x8f, 0xd4, 0x68, 0x94, 0x9d, 0xfa, 0xf5, 0x83, 0x19, 0xd4, 0x49, 0xab, 0xd1, 0x2b, 0x44, + 0xc3, 0x30, 0x17, 0x2d, 0xc7, 0xdc, 0xc4, 0xde, 0x23, 0x36, 0x9c, 0xe0, 0x02, 0x0d, 0x62, 0x84, + 0x50, 0x78, 0xbe, 0x0e, 0x39, 0xc9, 0xf8, 0x4c, 0x0f, 0x77, 0x39, 0xd6, 0x16, 0xe4, 0xdd, 0x88, + 0xf3, 0x93, 0x7c, 0x9f, 0x26, 0xb3, 0x40, 0x7f, 0x55, 0x81, 0x23, 0x41, 0x6e, 0x2f, 0x33, 0x4f, + 0x0f, 0x9e, 0xdd, 0x5f, 0x0a, 0x4b, 0x2d, 0x96, 0x1f, 0x91, 0x5a, 0x9c, 0x83, 0xd4, 0xa6, 0xda, + 0x71, 0x0e, 0xe3, 0x25, 0x18, 0x93, 0x93, 0x3f, 0xf1, 0xe9, 0x74, 0xef, 0xed, 0xcc, 0x29, 0x3e, + 0xda, 0xd0, 0xd1, 0x0e, 0x2d, 0xcc, 0x08, 0x15, 0x21, 0x83, 0xf7, 0x5a, 0xb6, 0xe3, 0xe1, 0x1a, + 0x3d, 0x8b, 0x9c, 0xd1, 0xfc, 0x67, 0xf5, 0x26, 0xc4, 0x4c, 0x2c, 0x7a, 0x3e, 0x72, 0x8d, 0xd5, + 0x9d, 0x24, 0x15, 0x9d, 0x37, 0x5f, 0xc9, 0x77, 0x52, 0xdd, 0x6d, 0xb3, 0xf1, 0xff, 0x03, 0x00, + 0x00, 0xff, 0xff, 0x4a, 0xe9, 0xe7, 0xd1, 0x7e, 0xb3, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) From 9d0f6607b1bde8266fa95a86187326ae3a14de5e Mon Sep 17 00:00:00 2001 From: Marko Date: Mon, 3 Aug 2020 18:09:02 +0200 Subject: [PATCH 09/18] tendermint: update 4 (#6919) Co-authored-by: Alexander Bezobchuk --- baseapp/abci.go | 3 +- baseapp/params_test.go | 19 +- client/rpc/validators.go | 8 +- codec/amino.go | 7 +- crypto/hd/algo.go | 8 +- crypto/hd/fundraiser_test.go | 8 +- crypto/hd/hdpath.go | 12 +- crypto/ledger/ledger_secp256k1.go | 2 + crypto/types/multisig/threshold_pubkey.go | 2 + go.mod | 2 - go.sum | 39 +- proto/cosmos/staking/staking.proto | 2 - proto/ibc/commitment/commitment.proto | 2 - std/consensus_params.go | 5 +- store/cachekv/memiterator.go | 4 +- store/cachekv/mergeiterator.go | 9 +- store/gaskv/store.go | 4 +- store/iavl/store.go | 17 +- store/iavl/store_test.go | 2 +- store/prefix/store.go | 4 +- store/rootmulti/internal/maps/maps.go | 17 +- store/rootmulti/internal/proofs/convert.go | 12 +- .../rootmulti/internal/proofs/convert_test.go | 4 +- store/rootmulti/internal/proofs/create.go | 2 +- store/rootmulti/internal/proofs/helpers.go | 10 +- store/rootmulti/store.go | 12 +- store/rootmulti/store_test.go | 2 +- store/tracekv/store.go | 4 +- store/types/proof.go | 7 +- types/utils.go | 3 +- x/auth/client/query.go | 2 +- x/ibc/02-client/types/querier.go | 6 +- x/ibc/03-connection/client/utils/utils.go | 4 +- x/ibc/04-channel/client/utils/utils.go | 6 +- x/ibc/07-tendermint/misbehaviour.go | 6 +- x/ibc/07-tendermint/types/test_utils.go | 14 +- x/ibc/23-commitment/types/commitment.pb.go | 92 +- x/ibc/23-commitment/types/merkle.go | 6 +- x/ibc/23-commitment/types/merkle_test.go | 22 +- x/simulation/mock_tendermint.go | 10 +- x/simulation/params.go | 10 +- x/staking/types/historical_info.go | 2 + x/staking/types/staking.pb.go | 1524 ++++++++--------- x/staking/types/validator.go | 15 +- 44 files changed, 944 insertions(+), 1007 deletions(-) diff --git a/baseapp/abci.go b/baseapp/abci.go index cd384447406a..1778f572d376 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -8,6 +8,7 @@ import ( "syscall" "time" + "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -57,7 +58,7 @@ func (app *BaseApp) InitChain(req abci.RequestInitChain) (res abci.ResponseInitC sort.Sort(abci.ValidatorUpdates(res.Validators)) for i, val := range res.Validators { - if !val.Equal(req.Validators[i]) { + if proto.Equal(&val, &req.Validators[i]) { panic(fmt.Errorf("genesisValidators[%d] != req.Validators[%d] ", i, i)) } } diff --git a/baseapp/params_test.go b/baseapp/params_test.go index 46eb08005f25..a3265a86bcb9 100644 --- a/baseapp/params_test.go +++ b/baseapp/params_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" ) @@ -33,11 +34,11 @@ func TestValidateEvidenceParams(t *testing.T) { expectErr bool }{ {nil, true}, - {&abci.EvidenceParams{}, true}, - {abci.EvidenceParams{}, true}, - {abci.EvidenceParams{MaxAgeNumBlocks: -1, MaxAgeDuration: 18004000}, true}, - {abci.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: -1}, true}, - {abci.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000}, false}, + {&tmproto.EvidenceParams{}, true}, + {tmproto.EvidenceParams{}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: -1, MaxAgeDuration: 18004000}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: -1}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000}, false}, } for _, tc := range testCases { @@ -51,10 +52,10 @@ func TestValidateValidatorParams(t *testing.T) { expectErr bool }{ {nil, true}, - {&abci.ValidatorParams{}, true}, - {abci.ValidatorParams{}, true}, - {abci.ValidatorParams{PubKeyTypes: []string{}}, true}, - {abci.ValidatorParams{PubKeyTypes: []string{"secp256k1"}}, false}, + {&tmproto.ValidatorParams{}, true}, + {tmproto.ValidatorParams{}, true}, + {tmproto.ValidatorParams{PubKeyTypes: []string{}}, true}, + {tmproto.ValidatorParams{PubKeyTypes: []string{"secp256k1"}}, false}, } for _, tc := range testCases { diff --git a/client/rpc/validators.go b/client/rpc/validators.go index 8038ff923f6e..1bac90138e27 100644 --- a/client/rpc/validators.go +++ b/client/rpc/validators.go @@ -45,7 +45,7 @@ func ValidatorCommand() *cobra.Command { page, _ := cmd.Flags().GetInt(flags.FlagPage) limit, _ := cmd.Flags().GetInt(flags.FlagLimit) - result, err := GetValidators(clientCtx, height, page, limit) + result, err := GetValidators(clientCtx, height, &page, &limit) if err != nil { return err } @@ -112,7 +112,7 @@ func bech32ValidatorOutput(validator *tmtypes.Validator) (ValidatorOutput, error } // GetValidators from client -func GetValidators(clientCtx client.Context, height *int64, page, limit int) (ResultValidatorsOutput, error) { +func GetValidators(clientCtx client.Context, height *int64, page, limit *int) (ResultValidatorsOutput, error) { // get the node node, err := clientCtx.GetNode() if err != nil { @@ -167,7 +167,7 @@ func ValidatorSetRequestHandlerFn(clientCtx client.Context) http.HandlerFunc { return } - output, err := GetValidators(clientCtx, &height, page, limit) + output, err := GetValidators(clientCtx, &height, &page, &limit) if rest.CheckInternalServerError(w, err) { return } @@ -184,7 +184,7 @@ func LatestValidatorSetRequestHandlerFn(clientCtx client.Context) http.HandlerFu return } - output, err := GetValidators(clientCtx, nil, page, limit) + output, err := GetValidators(clientCtx, nil, &page, &limit) if rest.CheckInternalServerError(w, err) { return } diff --git a/codec/amino.go b/codec/amino.go index a7348ee4b8e0..2c1bd2365248 100644 --- a/codec/amino.go +++ b/codec/amino.go @@ -32,7 +32,12 @@ func New() *Codec { // RegisterEvidences registers Tendermint evidence types with the provided Amino // codec. func RegisterEvidences(cdc *Codec) { - tmtypes.RegisterEvidences(cdc.Amino) + cdc.Amino.RegisterInterface((*tmtypes.Evidence)(nil), nil) + cdc.Amino.RegisterConcrete(&tmtypes.DuplicateVoteEvidence{}, "tendermint/DuplicateVoteEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.ConflictingHeadersEvidence{}, "tendermint/ConflictingHeadersEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.LunaticValidatorEvidence{}, "tendermint/LunaticValidatorEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.PotentialAmnesiaEvidence{}, "tendermint/PotentialAmnesiaEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.AmnesiaEvidence{}, "tendermint/AmnesiaEvidence", nil) } // MarshalJSONIndent provides a utility for indented JSON encoding of an object diff --git a/crypto/hd/algo.go b/crypto/hd/algo.go index d11222664555..f76834be6f68 100644 --- a/crypto/hd/algo.go +++ b/crypto/hd/algo.go @@ -54,6 +54,7 @@ func (s secp256k1Algo) Derive() DeriveFn { return masterPriv[:], nil } derivedKey, err := DerivePrivateKeyForPath(masterPriv, ch, hdPath) + return derivedKey[:], err } } @@ -61,8 +62,9 @@ func (s secp256k1Algo) Derive() DeriveFn { // Generate generates a secp256k1 private key from the given bytes. func (s secp256k1Algo) Generate() GenerateFn { return func(bz []byte) crypto.PrivKey { - var bzArr [32]byte - copy(bzArr[:], bz) - return secp256k1.PrivKeySecp256k1(bzArr) + var bzArr = make([]byte, secp256k1.PrivKeySize) + copy(bzArr, bz) + + return secp256k1.PrivKey(bzArr) } } diff --git a/crypto/hd/fundraiser_test.go b/crypto/hd/fundraiser_test.go index 0f6a539d4fd5..255a2696b993 100644 --- a/crypto/hd/fundraiser_test.go +++ b/crypto/hd/fundraiser_test.go @@ -65,7 +65,7 @@ func TestFundraiserCompatibility(t *testing.T) { master, ch := hd.ComputeMastersFromSeed(seed) priv, err := hd.DerivePrivateKeyForPath(master, ch, "44'/118'/0'/0/0") require.NoError(t, err) - pub := secp256k1.PrivKeySecp256k1(priv).PubKey() + pub := secp256k1.PrivKey(priv).PubKey() t.Log("\tNODEJS GOLANG\n") t.Logf("SEED \t%X %X\n", seedB, seed) @@ -76,9 +76,9 @@ func TestFundraiserCompatibility(t *testing.T) { require.Equal(t, seedB, seed) require.Equal(t, master[:], masterB, fmt.Sprintf("Expected masters to match for %d", i)) require.Equal(t, priv[:], privB, "Expected priv keys to match") - var pubBFixed [33]byte - copy(pubBFixed[:], pubB) - require.Equal(t, pub, secp256k1.PubKeySecp256k1(pubBFixed), fmt.Sprintf("Expected pub keys to match for %d", i)) + pubBFixed := make([]byte, secp256k1.PubKeySize) + copy(pubBFixed, pubB) + require.Equal(t, pub, secp256k1.PubKey(pubBFixed), fmt.Sprintf("Expected pub keys to match for %d", i)) addr := pub.Address() t.Logf("ADDR \t%X %X\n", addrB, addr) diff --git a/crypto/hd/hdpath.go b/crypto/hd/hdpath.go index d9f55a663587..d2ce90e07a95 100644 --- a/crypto/hd/hdpath.go +++ b/crypto/hd/hdpath.go @@ -166,7 +166,7 @@ func ComputeMastersFromSeed(seed []byte) (secret [32]byte, chainCode [32]byte) { // DerivePrivateKeyForPath derives the private key by following the BIP 32/44 path from privKeyBytes, // using the given chainCode. -func DerivePrivateKeyForPath(privKeyBytes [32]byte, chainCode [32]byte, path string) ([32]byte, error) { +func DerivePrivateKeyForPath(privKeyBytes, chainCode [32]byte, path string) ([]byte, error) { data := privKeyBytes parts := strings.Split(path, "/") @@ -181,21 +181,21 @@ func DerivePrivateKeyForPath(privKeyBytes [32]byte, chainCode [32]byte, path str idx, err := strconv.Atoi(part) if err != nil { - return [32]byte{}, fmt.Errorf("invalid BIP 32 path: %s", err) + return []byte{}, fmt.Errorf("invalid BIP 32 path: %s", err) } if idx < 0 { - return [32]byte{}, errors.New("invalid BIP 32 path: index negative ot too large") + return []byte{}, errors.New("invalid BIP 32 path: index negative ot too large") } data, chainCode = derivePrivateKey(data, chainCode, uint32(idx), harden) } - var derivedKey [32]byte - n := copy(derivedKey[:], data[:]) + derivedKey := make([]byte, 32) + n := copy(derivedKey, data[:]) if n != 32 || len(data) != 32 { - return [32]byte{}, fmt.Errorf("expected a (secp256k1) key of length 32, got length: %v", len(data)) + return []byte{}, fmt.Errorf("expected a (secp256k1) key of length 32, got length: %v", len(data)) } return derivedKey, nil diff --git a/crypto/ledger/ledger_secp256k1.go b/crypto/ledger/ledger_secp256k1.go index 23dc12be9c80..9c3f2a52f364 100644 --- a/crypto/ledger/ledger_secp256k1.go +++ b/crypto/ledger/ledger_secp256k1.go @@ -161,6 +161,8 @@ func (pkl PrivKeyLedgerSecp256k1) Equals(other tmcrypto.PrivKey) bool { return false } +func (pkl PrivKeyLedgerSecp256k1) Type() string { return "PrivKeyLedgerSecp256k1" } + // warnIfErrors wraps a function and writes a warning to stderr. This is required // to avoid ignoring errors when defer is used. Using defer may result in linter warnings. func warnIfErrors(f func() error) { diff --git a/crypto/types/multisig/threshold_pubkey.go b/crypto/types/multisig/threshold_pubkey.go index 44fc48b6ede1..d89b2dadc255 100644 --- a/crypto/types/multisig/threshold_pubkey.go +++ b/crypto/types/multisig/threshold_pubkey.go @@ -159,3 +159,5 @@ func (pk PubKeyMultisigThreshold) Equals(other crypto.PubKey) bool { func (pk PubKeyMultisigThreshold) GetThreshold() uint { return pk.K } + +func (pk PubKeyMultisigThreshold) Type() string { return "PubKeyMultisigThreshold" } diff --git a/go.mod b/go.mod index 98056d287ba3..a44732c752e7 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/armon/go-metrics v0.3.3 github.com/bgentry/speakeasy v0.1.0 github.com/btcsuite/btcd v0.20.1-beta - github.com/confio/ics23-iavl v0.6.0 github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3 github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d github.com/cosmos/iavl v0.15.0-rc1 @@ -37,7 +36,6 @@ require ( github.com/tendermint/btcd v0.1.1 github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 - github.com/tendermint/iavl v0.14.0 // indirect github.com/tendermint/tendermint v0.34.0-rc2 github.com/tendermint/tm-db v0.6.0 google.golang.org/grpc v1.31.0 diff --git a/go.sum b/go.sum index 9a1b274f4907..a6db169b3d88 100644 --- a/go.sum +++ b/go.sum @@ -16,8 +16,6 @@ github.com/99designs/keyring v1.1.5/go.mod h1:7hsVvt2qXgtadGevGJ4ujg+u8m6SpJ5TpH github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200102211924-4bcbc698314f h1:4O1om+UVU+Hfcihr1timk8YNXHxzZWgCo7ofnrZRApw= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200102211924-4bcbc698314f/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -83,9 +81,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/confio/ics23-iavl v0.6.0 h1:vVRCuVaP38FCw1kTeEdFuGuiY+2vAGTBQoH7Zxkq/ws= -github.com/confio/ics23-iavl v0.6.0/go.mod h1:mmXAxD1vWoO0VP8YHu6mM1QHGv71NQqa1iSVm4HeKcY= -github.com/confio/ics23/go v0.0.0-20200323120010-7d9a00f0a2fa/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3 h1:h/HM69qj1llEyq9N8+2sm6HfWsE7P9SFyl4CM2hyK98= github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -130,8 +125,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= @@ -175,7 +168,6 @@ github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -220,8 +212,6 @@ github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -402,10 +392,6 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.5.0 h1:Ctq0iGpCmr3jeP77kbF2UxgvRwzWWz+4Bh9/vJTyg1A= -github.com/prometheus/client_golang v1.5.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA= -github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -472,8 +458,6 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.6 h1:breEStsVwemnKh2/s6gMvSdMEkwW0sK8vGStnlVBMCs= -github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -484,8 +468,6 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= -github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -498,8 +480,6 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= @@ -512,22 +492,11 @@ github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= -github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= github.com/tendermint/go-amino v0.15.1 h1:D2uk35eT4iTsvJd9jWIetzthE5C0/k2QmMFkCN+4JgQ= github.com/tendermint/go-amino v0.15.1/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/iavl v0.13.2/go.mod h1:vE1u0XAGXYjHykd4BLp8p/yivrw2PF1TuoljBcsQoGA= -github.com/tendermint/iavl v0.14.0 h1:Jkff+IFrXxRWtH9Jn/ga/2cxNnzMTv58xEKgCJsKUBg= -github.com/tendermint/iavl v0.14.0/go.mod h1:QmfViflFiXzxKLQE4tAUuWQHq+RSuQFxablW5oJZ6sE= -github.com/tendermint/tendermint v0.33.2 h1:NzvRMTuXJxqSsFed2J7uHmMU5N1CVzSpfi3nCc882KY= -github.com/tendermint/tendermint v0.33.2/go.mod h1:25DqB7YvV1tN3tHsjWoc2vFtlwICfrub9XO6UBO+4xk= -github.com/tendermint/tendermint v0.33.5 h1:jYgRd9ImkzA9iOyhpmgreYsqSB6tpDa6/rXYPb8HKE8= -github.com/tendermint/tendermint v0.33.5/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= +github.com/tendermint/tendermint v0.33.6 h1:W4UOsXY4ROJZ3TLLGVVv71VXD4WK2gJRb3gzeced+mg= github.com/tendermint/tendermint v0.34.0-rc2 h1:kYyHum2Ys05qv0i5j/X47icRSO1zVbQrvVK6hjllQnY= github.com/tendermint/tendermint v0.34.0-rc2/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= -github.com/tendermint/tm-db v0.4.1/go.mod h1:JsJ6qzYkCGiGwm5GHl/H5GLI9XLb6qZX7PRe425dHAY= -github.com/tendermint/tm-db v0.5.0/go.mod h1:lSq7q5WRR/njf1LnhiZ/lIJHk2S8Y1Zyq5oP/3o9C2U= -github.com/tendermint/tm-db v0.5.1 h1:H9HDq8UEA7Eeg13kdYckkgwwkQLBnJGgX4PgLJRhieY= -github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= github.com/tendermint/tm-db v0.6.0 h1:Us30k7H1UDcdqoSPhmP8ztAW/SWV6c6OfsfeCiboTC4= github.com/tendermint/tm-db v0.6.0/go.mod h1:xj3AWJ08kBDlCHKijnhJ7mTcDMOikT1r8Poxy2pJn7Q= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -572,8 +541,6 @@ golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200406173513-056763e48d71 h1:DOmugCavvUtnUD114C1Wh+UgTgQZ4pMLzXxi1pSt+/Y= golang.org/x/crypto v0.0.0-20200406173513-056763e48d71/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79 h1:IaQbIIB2X/Mp/DKctl6ROxz1KyMlKp4uyvL6+kQ7C88= -golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -614,7 +581,6 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -733,11 +699,8 @@ google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.28.1 h1:C1QC6KzgSiLyBabDi87BbjaGreoRgGUF5nOyvfrAZ1k= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= diff --git a/proto/cosmos/staking/staking.proto b/proto/cosmos/staking/staking.proto index b8b3aa56988b..fa77f0c92b43 100644 --- a/proto/cosmos/staking/staking.proto +++ b/proto/cosmos/staking/staking.proto @@ -112,8 +112,6 @@ message MsgUndelegate { // HistoricalInfo contains the historical information that gets stored at // each height. message HistoricalInfo { - option (gogoproto.equal) = true; - tendermint.types.Header header = 1 [(gogoproto.nullable) = false]; repeated Validator valset = 2 [(gogoproto.nullable) = false]; } diff --git a/proto/ibc/commitment/commitment.proto b/proto/ibc/commitment/commitment.proto index 0c550fbb9a1c..9fd11fe52ce3 100644 --- a/proto/ibc/commitment/commitment.proto +++ b/proto/ibc/commitment/commitment.proto @@ -36,8 +36,6 @@ message MerklePath { // verifiable in conjunction with a known commitment root. Proofs should be // succinct. message MerkleProof { - option (gogoproto.equal) = true; - tendermint.crypto.ProofOps proof = 1; } diff --git a/std/consensus_params.go b/std/consensus_params.go index e92cc1514b47..019010c30750 100644 --- a/std/consensus_params.go +++ b/std/consensus_params.go @@ -2,6 +2,7 @@ package std import ( abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -18,10 +19,10 @@ func ConsensusParamsKeyTable() paramstypes.KeyTable { baseapp.ParamStoreKeyBlockParams, abci.BlockParams{}, baseapp.ValidateBlockParams, ), paramstypes.NewParamSetPair( - baseapp.ParamStoreKeyEvidenceParams, abci.EvidenceParams{}, baseapp.ValidateEvidenceParams, + baseapp.ParamStoreKeyEvidenceParams, tmproto.EvidenceParams{}, baseapp.ValidateEvidenceParams, ), paramstypes.NewParamSetPair( - baseapp.ParamStoreKeyValidatorParams, abci.ValidatorParams{}, baseapp.ValidateValidatorParams, + baseapp.ParamStoreKeyValidatorParams, tmproto.ValidatorParams{}, baseapp.ValidateValidatorParams, ), ) } diff --git a/store/cachekv/memiterator.go b/store/cachekv/memiterator.go index de03f298b8c8..e19c4c05493b 100644 --- a/store/cachekv/memiterator.go +++ b/store/cachekv/memiterator.go @@ -88,10 +88,12 @@ func (mi *memIterator) Value() []byte { return mi.items[len(mi.items)-1].Value } -func (mi *memIterator) Close() { +func (mi *memIterator) Close() error { mi.start = nil mi.end = nil mi.items = nil + + return nil } // Error returns an error if the memIterator is invalid defined by the Valid diff --git a/store/cachekv/mergeiterator.go b/store/cachekv/mergeiterator.go index 7fe31e5b8b3d..25dfac803329 100644 --- a/store/cachekv/mergeiterator.go +++ b/store/cachekv/mergeiterator.go @@ -151,9 +151,12 @@ func (iter *cacheMergeIterator) Value() []byte { } // Close implements Iterator -func (iter *cacheMergeIterator) Close() { - iter.parent.Close() - iter.cache.Close() +func (iter *cacheMergeIterator) Close() error { + if err := iter.parent.Close(); err != nil { + return err + } + + return iter.cache.Close() } // Error returns an error if the cacheMergeIterator is invalid defined by the diff --git a/store/gaskv/store.go b/store/gaskv/store.go index b2b4b792a53b..d5c1f86c20aa 100644 --- a/store/gaskv/store.go +++ b/store/gaskv/store.go @@ -165,8 +165,8 @@ func (gi *gasIterator) Value() (value []byte) { } // Implements Iterator. -func (gi *gasIterator) Close() { - gi.parent.Close() +func (gi *gasIterator) Close() error { + return gi.parent.Close() } // Error delegates the Error call to the parent iterator. diff --git a/store/iavl/store.go b/store/iavl/store.go index f1e96f82a119..430c20107a01 100644 --- a/store/iavl/store.go +++ b/store/iavl/store.go @@ -6,11 +6,10 @@ import ( "sync" "time" - ics23iavl "github.com/confio/ics23-iavl" ics23 "github.com/confio/ics23/go" "github.com/cosmos/iavl" abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/merkle" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/store/cachekv" @@ -267,7 +266,7 @@ func (st *Store) Query(req abci.RequestQuery) (res abci.ResponseQuery) { } // get proof from tree and convert to merkle.Proof before adding to result - res.Proof = getProofFromTree(mtree, req.Data, res.Value != nil) + res.ProofOps = getProofFromTree(mtree, req.Data, res.Value != nil) case "/subspace": var KVs []types.KVPair @@ -293,7 +292,7 @@ func (st *Store) Query(req abci.RequestQuery) (res abci.ResponseQuery) { // Takes a MutableTree, a key, and a flag for creating existence or absence proof and returns the // appropriate merkle.Proof. Since this must be called after querying for the value, this function should never error // Thus, it will panic on error rather than returning it -func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *merkle.Proof { +func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *tmcrypto.ProofOps { var ( commitmentProof *ics23.CommitmentProof err error @@ -301,14 +300,14 @@ func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *merkle.P if exists { // value was found - commitmentProof, err = ics23iavl.CreateMembershipProof(tree, key) + commitmentProof, err = tree.GetMembershipProof(key) if err != nil { // sanity check: If value was found, membership proof must be creatable panic(fmt.Sprintf("unexpected value for empty proof: %s", err.Error())) } } else { // value wasn't found - commitmentProof, err = ics23iavl.CreateNonMembershipProof(tree, key) + commitmentProof, err = tree.GetNonMembershipProof(key) if err != nil { // sanity check: If value wasn't found, nonmembership proof must be creatable panic(fmt.Sprintf("unexpected error for nonexistence proof: %s", err.Error())) @@ -316,7 +315,7 @@ func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *merkle.P } op := types.NewIavlCommitmentOp(key, commitmentProof) - return &merkle.Proof{Ops: []merkle.ProofOp{op.ProofOp()}} + return &tmcrypto.ProofOps{Ops: []tmcrypto.ProofOp{op.ProofOp()}} } //---------------------------------------- @@ -439,11 +438,13 @@ func (iter *iavlIterator) Value() []byte { // Close closes the IAVL iterator by closing the quit channel and waiting for // the iterCh to finish/close. -func (iter *iavlIterator) Close() { +func (iter *iavlIterator) Close() error { close(iter.quitCh) // wait iterCh to close for range iter.iterCh { } + + return nil } // Error performs a no-op. diff --git a/store/iavl/store_test.go b/store/iavl/store_test.go index aacc147d6caa..6ac09059ab21 100644 --- a/store/iavl/store_test.go +++ b/store/iavl/store_test.go @@ -72,7 +72,7 @@ func TestGetImmutable(t *testing.T) { res := newStore.Query(abci.RequestQuery{Data: []byte("hello"), Height: cID.Version, Path: "/key", Prove: true}) require.Equal(t, res.Value, []byte("adios")) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) require.Panics(t, func() { newStore.Set(nil, nil) }) require.Panics(t, func() { newStore.Delete(nil) }) diff --git a/store/prefix/store.go b/store/prefix/store.go index 5ac27b84daa8..4f9d5a75e087 100644 --- a/store/prefix/store.go +++ b/store/prefix/store.go @@ -178,8 +178,8 @@ func (pi *prefixIterator) Value() []byte { } // Implements Iterator -func (pi *prefixIterator) Close() { - pi.iter.Close() +func (pi *prefixIterator) Close() error { + return pi.iter.Close() } // Error returns an error if the prefixIterator is invalid defined by the Valid diff --git a/store/rootmulti/internal/maps/maps.go b/store/rootmulti/internal/maps/maps.go index eb29cc816e4f..ed6ab19d882e 100644 --- a/store/rootmulti/internal/maps/maps.go +++ b/store/rootmulti/internal/maps/maps.go @@ -5,6 +5,7 @@ import ( "github.com/tendermint/tendermint/crypto/merkle" "github.com/tendermint/tendermint/crypto/tmhash" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/types/kv" @@ -66,7 +67,7 @@ func hashKVPairs(kvs kv.Pairs) []byte { kvsH[i] = KVPair(kvp).Bytes() } - return merkle.SimpleHashFromByteSlices(kvsH) + return merkle.HashFromByteSlices(kvsH) } // --------------------------------------------- @@ -166,9 +167,9 @@ func (kv KVPair) Bytes() []byte { return buf[:nlk+nk+nlv+nv] } -// SimpleHashFromMap computes a merkle tree from sorted map and returns the merkle +// HashFromMap computes a merkle tree from sorted map and returns the merkle // root. -func SimpleHashFromMap(m map[string][]byte) []byte { +func HashFromMap(m map[string][]byte) []byte { mm := newMerkleMap() for k, v := range m { mm.set(k, v) @@ -177,10 +178,10 @@ func SimpleHashFromMap(m map[string][]byte) []byte { return mm.hash() } -// SimpleProofsFromMap generates proofs from a map. The keys/values of the map will be used as the keys/values +// ProofsFromMap generates proofs from a map. The keys/values of the map will be used as the keys/values // in the underlying key-value pairs. // The keys are sorted before the proofs are computed. -func SimpleProofsFromMap(m map[string][]byte) ([]byte, map[string]*merkle.SimpleProof, []string) { +func ProofsFromMap(m map[string][]byte) ([]byte, map[string]*tmcrypto.Proof, []string) { sm := newSimpleMap() for k, v := range m { sm.Set(k, v) @@ -193,11 +194,11 @@ func SimpleProofsFromMap(m map[string][]byte) ([]byte, map[string]*merkle.Simple kvsBytes[i] = KVPair(kvp).Bytes() } - rootHash, proofList := merkle.SimpleProofsFromByteSlices(kvsBytes) - proofs := make(map[string]*merkle.SimpleProof) + rootHash, proofList := merkle.ProofsFromByteSlices(kvsBytes) + proofs := make(map[string]*tmcrypto.Proof) keys := make([]string, len(proofList)) for i, kvp := range kvs { - proofs[string(kvp.Key)] = proofList[i] + proofs[string(kvp.Key)] = proofList[i].ToProto() keys[i] = string(kvp.Key) } diff --git a/store/rootmulti/internal/proofs/convert.go b/store/rootmulti/internal/proofs/convert.go index 46e65983e646..7e827ced5fac 100644 --- a/store/rootmulti/internal/proofs/convert.go +++ b/store/rootmulti/internal/proofs/convert.go @@ -5,7 +5,7 @@ import ( "math/bits" ics23 "github.com/confio/ics23/go" - "github.com/tendermint/tendermint/crypto/merkle" + "github.com/tendermint/tendermint/proto/tendermint/crypto" ) // ConvertExistenceProof will convert the given proof into a valid @@ -13,7 +13,7 @@ import ( // // This is the simplest case of the range proof and we will focus on // demoing compatibility here -func ConvertExistenceProof(p *merkle.SimpleProof, key, value []byte) (*ics23.ExistenceProof, error) { +func ConvertExistenceProof(p *crypto.Proof, key, value []byte) (*ics23.ExistenceProof, error) { path, err := convertInnerOps(p) if err != nil { return nil, err @@ -42,7 +42,7 @@ func convertLeafOp() *ics23.LeafOp { } } -func convertInnerOps(p *merkle.SimpleProof) ([]*ics23.InnerOp, error) { +func convertInnerOps(p *crypto.Proof) ([]*ics23.InnerOp, error) { inners := make([]*ics23.InnerOp, 0, len(p.Aunts)) path := buildPath(p.Index, p.Total) @@ -69,7 +69,7 @@ func convertInnerOps(p *merkle.SimpleProof) ([]*ics23.InnerOp, error) { // buildPath returns a list of steps from leaf to root // in each step, true means index is left side, false index is right side // code adapted from merkle/simple_proof.go:computeHashFromAunts -func buildPath(idx int, total int) []bool { +func buildPath(idx, total int64) []bool { if total < 2 { return nil } @@ -84,13 +84,13 @@ func buildPath(idx int, total int) []bool { return append(buildPath(idx-numLeft, total-numLeft), goLeft) } -func getSplitPoint(length int) int { +func getSplitPoint(length int64) int64 { if length < 1 { panic("Trying to split a tree with size < 1") } uLength := uint(length) bitlen := bits.Len(uLength) - k := 1 << uint(bitlen-1) + k := int64(1 << uint(bitlen-1)) if k == length { k >>= 1 } diff --git a/store/rootmulti/internal/proofs/convert_test.go b/store/rootmulti/internal/proofs/convert_test.go index f6245b571826..19c5a6761507 100644 --- a/store/rootmulti/internal/proofs/convert_test.go +++ b/store/rootmulti/internal/proofs/convert_test.go @@ -31,8 +31,8 @@ func TestLeafOp(t *testing.T) { func TestBuildPath(t *testing.T) { cases := map[string]struct { - idx int - total int + idx int64 + total int64 expected []bool }{ "pair left": { diff --git a/store/rootmulti/internal/proofs/create.go b/store/rootmulti/internal/proofs/create.go index 8ca7b63aa023..2997f438a56e 100644 --- a/store/rootmulti/internal/proofs/create.go +++ b/store/rootmulti/internal/proofs/create.go @@ -94,7 +94,7 @@ func createExistenceProof(data map[string][]byte, key []byte) (*ics23.ExistenceP return nil, fmt.Errorf("cannot make existence proof if key is not in map") } - _, ics23, _ := sdkmaps.SimpleProofsFromMap(data) + _, ics23, _ := sdkmaps.ProofsFromMap(data) proof := ics23[string(key)] if proof == nil { return nil, fmt.Errorf("returned no proof for key") diff --git a/store/rootmulti/internal/proofs/helpers.go b/store/rootmulti/internal/proofs/helpers.go index 5f70e599bc39..21823fecb418 100644 --- a/store/rootmulti/internal/proofs/helpers.go +++ b/store/rootmulti/internal/proofs/helpers.go @@ -3,15 +3,17 @@ package proofs import ( "sort" - "github.com/tendermint/tendermint/crypto/merkle" "github.com/tendermint/tendermint/libs/rand" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" + + sdkmaps "github.com/cosmos/cosmos-sdk/store/rootmulti/internal/maps" ) // SimpleResult contains a merkle.SimpleProof along with all data needed to build the confio/proof type SimpleResult struct { Key []byte Value []byte - Proof *merkle.SimpleProof + Proof *tmcrypto.Proof RootHash []byte } @@ -20,7 +22,7 @@ type SimpleResult struct { // returns a range proof and the root hash of the tree func GenerateRangeProof(size int, loc Where) *SimpleResult { data := BuildMap(size) - root, proofs, allkeys := merkle.SimpleProofsFromMap(data) + root, proofs, allkeys := sdkmaps.ProofsFromMap(data) key := GetKey(allkeys, loc) proof := proofs[key] @@ -55,7 +57,7 @@ func SortedKeys(data map[string][]byte) []string { } func CalcRoot(data map[string][]byte) []byte { - root, _, _ := merkle.SimpleProofsFromMap(data) + root, _, _ := sdkmaps.ProofsFromMap(data) return root } diff --git a/store/rootmulti/store.go b/store/rootmulti/store.go index 2e348a371a49..44ab83c91957 100644 --- a/store/rootmulti/store.go +++ b/store/rootmulti/store.go @@ -9,7 +9,7 @@ import ( iavltree "github.com/cosmos/iavl" "github.com/pkg/errors" abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/merkle" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" @@ -484,7 +484,7 @@ func (rs *Store) Query(req abci.RequestQuery) abci.ResponseQuery { return res } - if res.Proof == nil || len(res.Proof.Ops) == 0 { + if res.ProofOps == nil || len(res.ProofOps.Ops) == 0 { return sdkerrors.QueryResult(sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "proof is unexpectedly empty; ensure height has not been pruned")) } @@ -503,7 +503,7 @@ func (rs *Store) Query(req abci.RequestQuery) abci.ResponseQuery { } // Restore origin path and append proof op. - res.Proof.Ops = append(res.Proof.Ops, commitInfo.ProofOp(storeName)) + res.ProofOps.Ops = append(res.ProofOps.Ops, commitInfo.ProofOp(storeName)) return res } @@ -614,13 +614,13 @@ func (ci commitInfo) Hash() []byte { if len(ci.StoreInfos) == 0 { return nil } - rootHash, _, _ := sdkmaps.SimpleProofsFromMap(ci.toMap()) + rootHash, _, _ := sdkmaps.ProofsFromMap(ci.toMap()) return rootHash } -func (ci commitInfo) ProofOp(storeName string) merkle.ProofOp { +func (ci commitInfo) ProofOp(storeName string) tmcrypto.ProofOp { cmap := ci.toMap() - _, proofs, _ := sdkmaps.SimpleProofsFromMap(cmap) + _, proofs, _ := sdkmaps.ProofsFromMap(cmap) proof := proofs[storeName] if proof == nil { panic(fmt.Sprintf("ProofOp for %s but not registered store name", storeName)) diff --git a/store/rootmulti/store_test.go b/store/rootmulti/store_test.go index da927dcc2182..c754e9114758 100644 --- a/store/rootmulti/store_test.go +++ b/store/rootmulti/store_test.go @@ -594,5 +594,5 @@ func hashStores(stores map[types.StoreKey]types.CommitKVStore) []byte { }, }.GetHash() } - return sdkmaps.SimpleHashFromMap(m) + return sdkmaps.HashFromMap(m) } diff --git a/store/tracekv/store.go b/store/tracekv/store.go index ba0bd8bf316b..3becdd100bbe 100644 --- a/store/tracekv/store.go +++ b/store/tracekv/store.go @@ -146,8 +146,8 @@ func (ti *traceIterator) Value() []byte { } // Close implements the Iterator interface. -func (ti *traceIterator) Close() { - ti.parent.Close() +func (ti *traceIterator) Close() error { + return ti.parent.Close() } // Error delegates the Error call to the parent iterator. diff --git a/store/types/proof.go b/store/types/proof.go index f8a8125174bb..db8f673f46cd 100644 --- a/store/types/proof.go +++ b/store/types/proof.go @@ -3,6 +3,7 @@ package types import ( ics23 "github.com/confio/ics23/go" "github.com/tendermint/tendermint/crypto/merkle" + tmmerkle "github.com/tendermint/tendermint/proto/tendermint/crypto" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -48,7 +49,7 @@ func NewSimpleMerkleCommitmentOp(key []byte, proof *ics23.CommitmentProof) Commi // CommitmentOpDecoder takes a merkle.ProofOp and attempts to decode it into a CommitmentOp ProofOperator // The proofOp.Data is just a marshalled CommitmentProof. The Key of the CommitmentOp is extracted // from the unmarshalled proof. -func CommitmentOpDecoder(pop merkle.ProofOp) (merkle.ProofOperator, error) { +func CommitmentOpDecoder(pop tmmerkle.ProofOp) (merkle.ProofOperator, error) { var spec *ics23.ProofSpec switch pop.Type { case ProofOpIAVLCommitment: @@ -117,12 +118,12 @@ func (op CommitmentOp) Run(args [][]byte) ([][]byte, error) { // ProofOp implements ProofOperator interface and converts a CommitmentOp // into a merkle.ProofOp format that can later be decoded by CommitmentOpDecoder // back into a CommitmentOp for proof verification -func (op CommitmentOp) ProofOp() merkle.ProofOp { +func (op CommitmentOp) ProofOp() tmmerkle.ProofOp { bz, err := op.Proof.Marshal() if err != nil { panic(err.Error()) } - return merkle.ProofOp{ + return tmmerkle.ProofOp{ Type: op.Type, Key: op.Key, Data: bz, diff --git a/types/utils.go b/types/utils.go index 03cd18a45b71..cca98edf0ab7 100644 --- a/types/utils.go +++ b/types/utils.go @@ -91,7 +91,8 @@ func NewLevelDB(name, dir string) (db dbm.DB, err error) { err = fmt.Errorf("couldn't create db: %v", r) } }() - return dbm.NewDB(name, backend, dir), err + + return dbm.NewDB(name, backend, dir) } // copy bytes diff --git a/x/auth/client/query.go b/x/auth/client/query.go index ed8ecacd7aa8..603780cdbf91 100644 --- a/x/auth/client/query.go +++ b/x/auth/client/query.go @@ -43,7 +43,7 @@ func QueryTxsByEvents(clientCtx client.Context, events []string, page, limit int // TODO: this may not always need to be proven // https://github.com/cosmos/cosmos-sdk/issues/6807 - resTxs, err := node.TxSearch(query, true, page, limit, orderBy) + resTxs, err := node.TxSearch(query, true, &page, &limit, orderBy) if err != nil { return nil, err } diff --git a/x/ibc/02-client/types/querier.go b/x/ibc/02-client/types/querier.go index 64c69cbd087e..37f7b4bec586 100644 --- a/x/ibc/02-client/types/querier.go +++ b/x/ibc/02-client/types/querier.go @@ -3,7 +3,7 @@ package types import ( "strings" - "github.com/tendermint/tendermint/crypto/merkle" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types" @@ -41,7 +41,7 @@ type StateResponse struct { // NewClientStateResponse creates a new StateResponse instance. func NewClientStateResponse( - clientID string, clientState exported.ClientState, proof *merkle.Proof, height int64, + clientID string, clientState exported.ClientState, proof *tmcrypto.ProofOps, height int64, ) StateResponse { return StateResponse{ ClientState: clientState, @@ -62,7 +62,7 @@ type ConsensusStateResponse struct { // NewConsensusStateResponse creates a new ConsensusStateResponse instance. func NewConsensusStateResponse( - clientID string, cs exported.ConsensusState, proof *merkle.Proof, height int64, + clientID string, cs exported.ConsensusState, proof *tmcrypto.ProofOps, height int64, ) ConsensusStateResponse { return ConsensusStateResponse{ ConsensusState: cs, diff --git a/x/ibc/03-connection/client/utils/utils.go b/x/ibc/03-connection/client/utils/utils.go index 81fc8e22d430..789d7590e57b 100644 --- a/x/ibc/03-connection/client/utils/utils.go +++ b/x/ibc/03-connection/client/utils/utils.go @@ -51,7 +51,7 @@ func queryConnectionABCI(clientCtx client.Context, connectionID string) (*types. return nil, err } - proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } @@ -94,7 +94,7 @@ func queryClientConnectionsABCI(clientCtx client.Context, clientID string) (*typ return nil, err } - proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } diff --git a/x/ibc/04-channel/client/utils/utils.go b/x/ibc/04-channel/client/utils/utils.go index b36cc2eb9853..84905e5bac79 100644 --- a/x/ibc/04-channel/client/utils/utils.go +++ b/x/ibc/04-channel/client/utils/utils.go @@ -48,7 +48,7 @@ func queryPacketCommitmentABCI( return nil, err } - proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } @@ -93,7 +93,7 @@ func queryChannelABCI(clientCtx client.Context, portID, channelID string) (*type return nil, err } - proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } @@ -195,7 +195,7 @@ func queryNextSequenceRecvABCI(clientCtx client.Context, portID, channelID strin return nil, err } - proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.Codec.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } diff --git a/x/ibc/07-tendermint/misbehaviour.go b/x/ibc/07-tendermint/misbehaviour.go index e41ae444c932..3846e4da609d 100644 --- a/x/ibc/07-tendermint/misbehaviour.go +++ b/x/ibc/07-tendermint/misbehaviour.go @@ -109,15 +109,13 @@ func checkMisbehaviour( // - ValidatorSet must have 2/3 similarity with trusted FromValidatorSet // - ValidatorSets on both headers are valid given the last trusted ValidatorSet if err := consensusState.ValidatorSet.VerifyCommitLightTrusting( - evidence.ChainID, evidence.Header1.Commit.BlockID, evidence.Header1.Height, - evidence.Header1.Commit, clientState.TrustLevel, + evidence.ChainID, evidence.Header1.Commit, clientState.TrustLevel, ); err != nil { return sdkerrors.Wrapf(clienttypes.ErrInvalidEvidence, "validator set in header 1 has too much change from last known validator set: %v", err) } if err := consensusState.ValidatorSet.VerifyCommitLightTrusting( - evidence.ChainID, evidence.Header2.Commit.BlockID, evidence.Header2.Height, - evidence.Header2.Commit, clientState.TrustLevel, + evidence.ChainID, evidence.Header2.Commit, clientState.TrustLevel, ); err != nil { return sdkerrors.Wrapf(clienttypes.ErrInvalidEvidence, "validator set in header 2 has too much change from last known validator set: %v", err) } diff --git a/x/ibc/07-tendermint/types/test_utils.go b/x/ibc/07-tendermint/types/test_utils.go index 316a44ff7a5e..6cc4a34e62b9 100644 --- a/x/ibc/07-tendermint/types/test_utils.go +++ b/x/ibc/07-tendermint/types/test_utils.go @@ -1,20 +1,20 @@ package types import ( + "math" "time" "github.com/tendermint/tendermint/crypto/tmhash" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/tendermint/tendermint/proto/tendermint/version" tmtypes "github.com/tendermint/tendermint/types" - "github.com/tendermint/tendermint/version" ) -const maxInt = int(^uint(0) >> 1) - // Copied unimported test functions from tmtypes to use them here -func MakeBlockID(hash []byte, partSetSize int, partSetHash []byte) tmtypes.BlockID { +func MakeBlockID(hash []byte, partSetSize uint32, partSetHash []byte) tmtypes.BlockID { return tmtypes.BlockID{ Hash: hash, - PartsHeader: tmtypes.PartSetHeader{ + PartSetHeader: tmtypes.PartSetHeader{ Total: partSetSize, Hash: partSetHash, }, @@ -29,7 +29,7 @@ func CreateTestHeader(chainID string, height int64, timestamp time.Time, valSet ChainID: chainID, Height: height, Time: timestamp, - LastBlockID: MakeBlockID(make([]byte, tmhash.Size), maxInt, make([]byte, tmhash.Size)), + LastBlockID: MakeBlockID(make([]byte, tmhash.Size), math.MaxUint32, make([]byte, tmhash.Size)), LastCommitHash: tmhash.Sum([]byte("last_commit_hash")), DataHash: tmhash.Sum([]byte("data_hash")), ValidatorsHash: vsetHash, @@ -42,7 +42,7 @@ func CreateTestHeader(chainID string, height int64, timestamp time.Time, valSet } hhash := tmHeader.Hash() blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) - voteSet := tmtypes.NewVoteSet(chainID, height, 1, tmtypes.PrecommitType, valSet) + voteSet := tmtypes.NewVoteSet(chainID, height, 1, tmproto.PrecommitType, valSet) commit, err := tmtypes.MakeCommit(blockID, height, 1, voteSet, signers, timestamp) if err != nil { panic(err) diff --git a/x/ibc/23-commitment/types/commitment.pb.go b/x/ibc/23-commitment/types/commitment.pb.go index e7f81ccbbdf4..2c158fc51c66 100644 --- a/x/ibc/23-commitment/types/commitment.pb.go +++ b/x/ibc/23-commitment/types/commitment.pb.go @@ -315,65 +315,41 @@ func init() { func init() { proto.RegisterFile("ibc/commitment/commitment.proto", fileDescriptor_71f36b3839a24c54) } var fileDescriptor_71f36b3839a24c54 = []byte{ - // 510 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0x6d, 0x62, 0x48, 0xb8, 0x54, 0x25, 0x1c, 0xa0, 0x46, 0x69, 0x6b, 0x47, 0x1e, 0x20, - 0x20, 0xd5, 0x16, 0x29, 0xea, 0x60, 0x31, 0xa5, 0x71, 0x69, 0x94, 0x92, 0x46, 0x87, 0x22, 0x15, - 0x16, 0xcb, 0x71, 0x2e, 0xb1, 0xe5, 0xda, 0x67, 0xd9, 0x87, 0x54, 0x7f, 0x83, 0x8a, 0x89, 0x91, - 0x05, 0xa9, 0x12, 0x0c, 0x7c, 0x94, 0x8e, 0x1d, 0x99, 0x2c, 0xe4, 0x2c, 0xcc, 0xfd, 0x04, 0x95, - 0xef, 0x52, 0x25, 0x95, 0xba, 0x9c, 0xdf, 0xf9, 0xfd, 0xfc, 0xde, 0xff, 0xfd, 0xfd, 0x80, 0xe2, - 0x8d, 0x1d, 0xdd, 0x21, 0x41, 0xe0, 0xd1, 0x00, 0x87, 0x74, 0x25, 0xd4, 0xa2, 0x98, 0x50, 0x02, - 0xd7, 0xbd, 0xb1, 0xa3, 0x2d, 0xdf, 0x36, 0x9e, 0xcf, 0xc8, 0x8c, 0xb0, 0x94, 0x5e, 0x44, 0x9c, - 0x6a, 0x6c, 0x53, 0x1c, 0x4e, 0x70, 0x1c, 0x78, 0x45, 0x89, 0x38, 0x8d, 0x28, 0xd1, 0xa3, 0x98, - 0x90, 0x29, 0x4f, 0xab, 0x2f, 0x01, 0xf8, 0x88, 0x63, 0xff, 0x14, 0x23, 0x42, 0x28, 0x84, 0x40, - 0x72, 0xed, 0xc4, 0xad, 0x8b, 0x4d, 0xb1, 0xb5, 0x86, 0x58, 0x6c, 0x48, 0xe7, 0x17, 0x8a, 0xa0, - 0x76, 0xc1, 0x1a, 0xe7, 0x86, 0x31, 0x9e, 0x7a, 0x67, 0xf0, 0x1d, 0x00, 0x3e, 0x4e, 0xad, 0x88, - 0xdd, 0x38, 0xdf, 0x79, 0x71, 0x9d, 0x29, 0x4f, 0x53, 0x3b, 0x38, 0x35, 0xd4, 0x65, 0x4e, 0x45, - 0x8f, 0x7d, 0x9c, 0xf2, 0xaf, 0x54, 0xeb, 0xb6, 0xdb, 0xd0, 0xa6, 0x2e, 0xec, 0x83, 0x0a, 0xe3, - 0x6c, 0xca, 0x3b, 0x56, 0xdb, 0x1b, 0xda, 0xdd, 0x99, 0xb4, 0x3e, 0x4e, 0x0b, 0xb4, 0xb3, 0x71, - 0x99, 0x29, 0xc2, 0x75, 0xa6, 0x3c, 0x59, 0x29, 0x6f, 0x53, 0x57, 0x45, 0x65, 0x9f, 0x13, 0x86, - 0xf4, 0xa3, 0x90, 0x79, 0x00, 0xaa, 0xb7, 0x32, 0x09, 0x99, 0xc2, 0xb7, 0xe0, 0x21, 0x1b, 0x76, - 0x51, 0x7e, 0x53, 0x5b, 0x9a, 0xa1, 0x71, 0x33, 0x34, 0x06, 0x1e, 0x47, 0x09, 0xe2, 0xa4, 0x21, - 0xfd, 0xbf, 0x50, 0x44, 0xf5, 0x3d, 0x28, 0x2f, 0x5a, 0xc3, 0x57, 0x40, 0xf2, 0x71, 0x9a, 0xd4, - 0xc5, 0x66, 0xa9, 0x55, 0x6d, 0x3f, 0xbb, 0x47, 0x21, 0x62, 0x80, 0x51, 0x29, 0x8c, 0x62, 0x2a, - 0x6c, 0x50, 0xea, 0xe3, 0x14, 0x6e, 0x01, 0x29, 0xb4, 0x03, 0xbc, 0x70, 0xa7, 0x92, 0x67, 0x0a, - 0xbb, 0x23, 0x76, 0xc2, 0x3d, 0x50, 0xc2, 0xa1, 0x53, 0x7f, 0xd0, 0x14, 0x5b, 0xeb, 0xed, 0xcd, - 0x7b, 0xca, 0x9a, 0xa1, 0x43, 0x26, 0x5e, 0x38, 0xeb, 0x94, 0xf3, 0x4c, 0x29, 0x58, 0x54, 0x1c, - 0xfc, 0x7f, 0xbc, 0xb1, 0x41, 0x75, 0x05, 0x81, 0xaf, 0xc1, 0x56, 0xdf, 0xfc, 0x6c, 0x99, 0x83, - 0xfd, 0xe3, 0x6e, 0x6f, 0xf0, 0xc1, 0x1a, 0xa1, 0x23, 0x6b, 0x34, 0xf8, 0x34, 0x34, 0xf7, 0x7b, - 0x07, 0x3d, 0xb3, 0x5b, 0x13, 0x1a, 0xe5, 0x6f, 0x3f, 0x9b, 0xa5, 0x11, 0x3a, 0x82, 0xdb, 0xa0, - 0x76, 0x07, 0x3d, 0x34, 0x4f, 0x6a, 0x22, 0x4f, 0x1f, 0x9a, 0x27, 0x8d, 0xca, 0xf9, 0x2f, 0x59, - 0xf8, 0xf3, 0x5b, 0x16, 0x3a, 0xc3, 0xcb, 0x5c, 0x16, 0xaf, 0x72, 0x59, 0xfc, 0x97, 0xcb, 0xe2, - 0xf7, 0xb9, 0x2c, 0x5c, 0xcd, 0x65, 0xe1, 0xef, 0x5c, 0x16, 0xbe, 0xec, 0xcd, 0x3c, 0xea, 0x7e, - 0x1d, 0x17, 0x7a, 0x75, 0x87, 0x24, 0x01, 0x49, 0x16, 0x8f, 0x9d, 0x64, 0xe2, 0xeb, 0x67, 0x7a, - 0xb1, 0xb9, 0xed, 0xdd, 0x9d, 0x95, 0xe5, 0xa5, 0x69, 0x84, 0x93, 0xf1, 0x23, 0xb6, 0x73, 0xbb, - 0x37, 0x01, 0x00, 0x00, 0xff, 0xff, 0x84, 0x40, 0x88, 0xd1, 0xdb, 0x02, 0x00, 0x00, -} - -func (this *MerkleProof) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*MerkleProof) - if !ok { - that2, ok := that.(MerkleProof) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Proof.Equal(that1.Proof) { - return false - } - return true + // 506 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x6e, 0xd3, 0x4c, + 0x10, 0xc7, 0xed, 0x2f, 0xfe, 0x48, 0xd8, 0x54, 0x25, 0x2c, 0xa0, 0x46, 0x69, 0x6b, 0x47, 0x3e, + 0x40, 0x40, 0xaa, 0x2d, 0x52, 0xd4, 0x43, 0xc4, 0x01, 0xa5, 0x31, 0x34, 0x4a, 0x49, 0xa3, 0x45, + 0x91, 0x0a, 0x17, 0xcb, 0x71, 0x36, 0xb1, 0xe5, 0xda, 0x6b, 0xd9, 0x8b, 0x54, 0xbf, 0x41, 0xc5, + 0x89, 0x23, 0x17, 0x24, 0x24, 0x38, 0xf0, 0x28, 0x3d, 0xf6, 0xc8, 0xc9, 0x42, 0xce, 0x1b, 0xf4, + 0x09, 0xd0, 0xee, 0xa6, 0x4a, 0x2a, 0xf5, 0xb2, 0x9e, 0xf5, 0xfc, 0x3c, 0xf3, 0x9f, 0xbf, 0x07, + 0x68, 0xfe, 0xc4, 0x35, 0x5d, 0x12, 0x86, 0x3e, 0x0d, 0x71, 0x44, 0xd7, 0x42, 0x23, 0x4e, 0x08, + 0x25, 0x70, 0xd3, 0x9f, 0xb8, 0xc6, 0xea, 0x6d, 0xe3, 0xf1, 0x9c, 0xcc, 0x09, 0x4f, 0x99, 0x2c, + 0x12, 0x54, 0x63, 0x97, 0xe2, 0x68, 0x8a, 0x93, 0xd0, 0x67, 0x25, 0x92, 0x2c, 0xa6, 0xc4, 0x8c, + 0x13, 0x42, 0x66, 0x22, 0xad, 0x3f, 0x05, 0xe0, 0x3d, 0x4e, 0x82, 0x33, 0x8c, 0x08, 0xa1, 0x10, + 0x02, 0xc5, 0x73, 0x52, 0xaf, 0x2e, 0x37, 0xe5, 0xd6, 0x06, 0xe2, 0x71, 0x47, 0xb9, 0xf8, 0xa1, + 0x49, 0x7a, 0x0f, 0x6c, 0x08, 0x6e, 0x94, 0xe0, 0x99, 0x7f, 0x0e, 0x5f, 0x01, 0x10, 0xe0, 0xcc, + 0x8e, 0xf9, 0x4d, 0xf0, 0xdd, 0x27, 0xd7, 0xb9, 0xf6, 0x30, 0x73, 0xc2, 0xb3, 0x8e, 0xbe, 0xca, + 0xe9, 0xe8, 0x7e, 0x80, 0x33, 0xf1, 0x95, 0x6e, 0xdf, 0x74, 0x1b, 0x39, 0xd4, 0x83, 0x03, 0x50, + 0xe1, 0x9c, 0x43, 0x45, 0xc7, 0x6a, 0x7b, 0xcb, 0xb8, 0x3d, 0x93, 0x31, 0xc0, 0x19, 0x43, 0xbb, + 0x5b, 0x97, 0xb9, 0x26, 0x5d, 0xe7, 0xda, 0x83, 0xb5, 0xf2, 0x0e, 0xf5, 0x74, 0x54, 0x0e, 0x04, + 0xd1, 0x51, 0xbe, 0x31, 0x99, 0x6f, 0x40, 0xf5, 0x46, 0x26, 0x21, 0x33, 0xf8, 0x12, 0xfc, 0xcf, + 0x87, 0x5d, 0x96, 0xdf, 0x36, 0x56, 0x66, 0x18, 0xc2, 0x0c, 0x83, 0x83, 0x27, 0x71, 0x8a, 0x04, + 0xa9, 0xbf, 0x06, 0xe5, 0x65, 0x53, 0xf8, 0x0c, 0x28, 0x01, 0xce, 0xd2, 0xba, 0xdc, 0x2c, 0xb5, + 0xaa, 0xed, 0x47, 0x77, 0x68, 0x43, 0x1c, 0xe8, 0x54, 0x98, 0x45, 0xbc, 0xbf, 0x03, 0x4a, 0x03, + 0x9c, 0xc1, 0x1d, 0xa0, 0x44, 0x4e, 0x88, 0x97, 0xbe, 0x54, 0x8a, 0x5c, 0xe3, 0x77, 0xc4, 0x4f, + 0x78, 0x00, 0x4a, 0x38, 0x72, 0xeb, 0xff, 0x35, 0xe5, 0xd6, 0x66, 0x7b, 0xfb, 0x8e, 0xb2, 0x56, + 0xe4, 0x92, 0xa9, 0x1f, 0xcd, 0xbb, 0xe5, 0x22, 0xd7, 0x18, 0x8b, 0xd8, 0x21, 0xfe, 0xc4, 0x0b, + 0x07, 0x54, 0xd7, 0x10, 0xf8, 0x1c, 0xec, 0x0c, 0xac, 0x8f, 0xb6, 0x35, 0x3c, 0x3c, 0xe9, 0xf5, + 0x87, 0xef, 0xec, 0x31, 0x3a, 0xb6, 0xc7, 0xc3, 0x0f, 0x23, 0xeb, 0xb0, 0xff, 0xb6, 0x6f, 0xf5, + 0x6a, 0x52, 0xa3, 0xfc, 0xe5, 0x7b, 0xb3, 0x34, 0x46, 0xc7, 0x70, 0x17, 0xd4, 0x6e, 0xa1, 0x47, + 0xd6, 0x69, 0x4d, 0x16, 0xe9, 0x23, 0xeb, 0xb4, 0x51, 0xb9, 0xf8, 0xa9, 0x4a, 0xbf, 0x7f, 0xa9, + 0x52, 0x77, 0x74, 0x59, 0xa8, 0xf2, 0x55, 0xa1, 0xca, 0x7f, 0x0b, 0x55, 0xfe, 0xba, 0x50, 0xa5, + 0xab, 0x85, 0x2a, 0xfd, 0x59, 0xa8, 0xd2, 0xa7, 0x83, 0xb9, 0x4f, 0xbd, 0xcf, 0x13, 0xa6, 0xd7, + 0x74, 0x49, 0x1a, 0x92, 0x74, 0xf9, 0xd8, 0x4b, 0xa7, 0x81, 0x79, 0x6e, 0xb2, 0x9d, 0x6d, 0xef, + 0xef, 0xad, 0xad, 0x2d, 0xcd, 0x62, 0x9c, 0x4e, 0xee, 0xf1, 0x6d, 0xdb, 0xff, 0x17, 0x00, 0x00, + 0xff, 0xff, 0xeb, 0x84, 0x9f, 0x36, 0xd5, 0x02, 0x00, 0x00, } + func (m *MerkleRoot) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) diff --git a/x/ibc/23-commitment/types/merkle.go b/x/ibc/23-commitment/types/merkle.go index 3636cecf4eb1..21de81b4bbb1 100644 --- a/x/ibc/23-commitment/types/merkle.go +++ b/x/ibc/23-commitment/types/merkle.go @@ -5,12 +5,12 @@ import ( "net/url" ics23 "github.com/confio/ics23/go" + "github.com/gogo/protobuf/proto" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/exported" host "github.com/cosmos/cosmos-sdk/x/ibc/24-host" - - "github.com/tendermint/tendermint/crypto/merkle" ) // var representing the proofspecs for a SDK chain @@ -366,7 +366,7 @@ func convertProofs(mproof MerkleProof) ([]*ics23.CommitmentProof, error) { // Empty returns true if the root is empty func (proof MerkleProof) Empty() bool { - return proof.Equal(nil) || proof.Equal(MerkleProof{}) || proof.Proof.Equal(nil) || proof.Proof.Equal(merkle.Proof{}) + return proto.Equal(&proof, nil) || proto.Equal(&proof, &MerkleProof{}) || proto.Equal(&proof, &tmcrypto.ProofOps{}) } // ValidateBasic checks if the proof is empty. diff --git a/x/ibc/23-commitment/types/merkle_test.go b/x/ibc/23-commitment/types/merkle_test.go index bc5fa341a664..8f440cfe1cbb 100644 --- a/x/ibc/23-commitment/types/merkle_test.go +++ b/x/ibc/23-commitment/types/merkle_test.go @@ -5,11 +5,11 @@ import ( "testing" "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" + tmmerkle "github.com/tendermint/tendermint/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types" - - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/merkle" ) func (suite *MerkleTestSuite) TestVerifyMembership() { @@ -21,10 +21,10 @@ func (suite *MerkleTestSuite) TestVerifyMembership() { Data: []byte("MYKEY"), Prove: true, }) - require.NotNil(suite.T(), res.Proof) + require.NotNil(suite.T(), res.ProofOps) proof := types.MerkleProof{ - Proof: res.Proof, + Proof: res.ProofOps, } suite.Require().NoError(proof.ValidateBasic()) suite.Require().Error(types.MerkleProof{}.ValidateBasic()) @@ -49,8 +49,8 @@ func (suite *MerkleTestSuite) TestVerifyMembership() { {"nil root", []byte(nil), []string{suite.storeKey.Name(), "MYKEY"}, []byte("MYVALUE"), func() {}, false}, // invalid proof with nil root {"proof is wrong length", cid.Hash, []string{suite.storeKey.Name(), "MYKEY"}, []byte("MYVALUE"), func() { proof = types.MerkleProof{ - Proof: &merkle.Proof{ - Ops: res.Proof.Ops[1:], + Proof: &tmmerkle.ProofOps{ + Ops: res.ProofOps.Ops[1:], }, } }, false}, // invalid proof with wrong length @@ -89,10 +89,10 @@ func (suite *MerkleTestSuite) TestVerifyNonMembership() { Data: []byte("MYABSENTKEY"), Prove: true, }) - require.NotNil(suite.T(), res.Proof) + require.NotNil(suite.T(), res.ProofOps) proof := types.MerkleProof{ - Proof: res.Proof, + Proof: res.ProofOps, } suite.Require().NoError(proof.ValidateBasic()) @@ -114,8 +114,8 @@ func (suite *MerkleTestSuite) TestVerifyNonMembership() { {"nil root", []byte(nil), []string{suite.storeKey.Name(), "MYABSENTKEY"}, func() {}, false}, // invalid proof with nil root {"proof is wrong length", cid.Hash, []string{suite.storeKey.Name(), "MYKEY"}, func() { proof = types.MerkleProof{ - Proof: &merkle.Proof{ - Ops: res.Proof.Ops[1:], + Proof: &tmcrypto.ProofOps{ + Ops: res.ProofOps.Ops[1:], }, } }, false}, // invalid proof with wrong length diff --git a/x/simulation/mock_tendermint.go b/x/simulation/mock_tendermint.go index 258f6d561418..8070abbfb51f 100644 --- a/x/simulation/mock_tendermint.go +++ b/x/simulation/mock_tendermint.go @@ -8,6 +8,7 @@ import ( "time" abci "github.com/tendermint/tendermint/abci/types" + cryptoenc "github.com/tendermint/tendermint/crypto/encoding" tmbytes "github.com/tendermint/tendermint/libs/bytes" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" @@ -19,9 +20,8 @@ type mockValidator struct { } func (mv mockValidator) String() string { - return fmt.Sprintf("mockValidator{%s:%X power:%v state:%v}", - mv.val.PubKey.Type, - mv.val.PubKey.Data, + return fmt.Sprintf("mockValidator{%s power:%v state:%v}", + mv.val.PubKey.String(), mv.val.Power, mv.livenessState) } @@ -73,7 +73,7 @@ func (vals mockValidators) randomProposer(r *rand.Rand) tmbytes.HexBytes { key := keys[r.Intn(len(keys))] proposer := vals[key].val - pk, err := tmtypes.PB2TM.PubKey(proposer.PubKey) + pk, err := cryptoenc.PubKeyFromProto(proposer.PubKey) if err != nil { //nolint:wsl panic(err) } @@ -150,7 +150,7 @@ func RandomRequestBeginBlock(r *rand.Rand, params Params, event("begin_block", "signing", "missed") } - pubkey, err := tmtypes.PB2TM.PubKey(mVal.val.PubKey) + pubkey, err := cryptoenc.PubKeyFromProto(mVal.val.PubKey) if err != nil { panic(err) } diff --git a/x/simulation/params.go b/x/simulation/params.go index 6363846a09cc..1710ed445814 100644 --- a/x/simulation/params.go +++ b/x/simulation/params.go @@ -5,9 +5,9 @@ import ( "fmt" "math/rand" - "github.com/tendermint/tendermint/types" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/types/simulation" @@ -168,10 +168,10 @@ func RandomConsensusParams(r *rand.Rand, appState json.RawMessage) *abci.Consens MaxBytes: int64(simulation.RandIntBetween(r, 20000000, 30000000)), MaxGas: -1, }, - Validator: &abci.ValidatorParams{ - PubKeyTypes: []string{types.ABCIPubKeyTypeSecp256k1, types.ABCIPubKeyTypeEd25519}, + Validator: &tmproto.ValidatorParams{ + PubKeyTypes: []string{types.ABCIPubKeyTypeEd25519}, }, - Evidence: &abci.EvidenceParams{ + Evidence: &tmproto.EvidenceParams{ MaxAgeNumBlocks: int64(stakingGenesisState.Params.UnbondingTime / AverageBlockTime), MaxAgeDuration: stakingGenesisState.Params.UnbondingTime, }, diff --git a/x/staking/types/historical_info.go b/x/staking/types/historical_info.go index 51ec219a29cb..fc4dc2906bae 100644 --- a/x/staking/types/historical_info.go +++ b/x/staking/types/historical_info.go @@ -3,6 +3,8 @@ package types import ( "sort" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/codec" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 34347e2ecb72..c34a59f2f300 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1445,122 +1445,122 @@ func init() { func init() { proto.RegisterFile("cosmos/staking/staking.proto", fileDescriptor_146003fcdb99b683) } var fileDescriptor_146003fcdb99b683 = []byte{ - // 1829 bytes of a gzipped FileDescriptorProto + // 1831 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x19, 0xcd, 0x6f, 0x1b, 0x59, 0x3d, 0x63, 0xbb, 0x4e, 0xf2, 0x73, 0x62, 0x27, 0xaf, 0x6d, 0xd6, 0xc9, 0x96, 0x4c, 0x76, 0x0e, 0x28, 0xa0, 0x5d, 0x47, 0x14, 0xc4, 0x4a, 0x11, 0x48, 0xd4, 0x76, 0xa3, 0x44, 0x34, 0x52, 0x99, 0x76, 0x83, 0x04, 0x48, 0xd6, 0xcb, 0xcc, 0xeb, 0x64, 0xc8, 0x7c, 0x98, 0x79, 0xcf, 0xdd, 0x04, - 0xed, 0x15, 0x81, 0x90, 0x80, 0x3d, 0xee, 0x31, 0xe2, 0x0f, 0x80, 0x23, 0x70, 0xe6, 0xb2, 0xdc, - 0x2a, 0x0e, 0x08, 0x71, 0x18, 0xa0, 0x3d, 0x80, 0x38, 0x21, 0x1f, 0x38, 0x70, 0x01, 0xbd, 0x8f, - 0xf9, 0xf0, 0xd8, 0xd9, 0x38, 0xa1, 0xec, 0x56, 0xda, 0x5c, 0x5a, 0xcf, 0xef, 0xfd, 0xbe, 0xde, - 0xef, 0xfb, 0xfd, 0x02, 0x77, 0xac, 0x90, 0xfa, 0x21, 0xdd, 0xa2, 0x0c, 0x1f, 0xbb, 0x81, 0x93, - 0xfc, 0xdf, 0xea, 0x47, 0x21, 0x0b, 0x51, 0x5d, 0x9e, 0xb6, 0x14, 0x74, 0xed, 0x96, 0x13, 0x3a, - 0xa1, 0x38, 0xda, 0xe2, 0xbf, 0x24, 0xd6, 0xda, 0x1d, 0x46, 0x02, 0x9b, 0x44, 0xbe, 0x1b, 0xb0, - 0x2d, 0x76, 0xda, 0x27, 0x54, 0xfe, 0xab, 0x4e, 0x75, 0x27, 0x0c, 0x1d, 0x8f, 0x6c, 0x89, 0xaf, - 0xc3, 0xc1, 0x93, 0x2d, 0xe6, 0xfa, 0x84, 0x32, 0xec, 0xf7, 0x15, 0xc2, 0x7a, 0x11, 0xc1, 0x1e, - 0x44, 0x98, 0xb9, 0x61, 0xa0, 0xce, 0x6f, 0x2a, 0x15, 0x95, 0x2e, 0x02, 0x68, 0xc4, 0x15, 0x40, - 0xfb, 0xd4, 0xe9, 0x44, 0x04, 0x33, 0x72, 0x80, 0x3d, 0xd7, 0xc6, 0x2c, 0x8c, 0x50, 0x07, 0x6a, - 0x36, 0xa1, 0x56, 0xe4, 0xf6, 0x39, 0x83, 0xa6, 0xb6, 0xa1, 0x6d, 0xd6, 0xee, 0xbe, 0xde, 0x1a, - 0xbd, 0x46, 0xab, 0x9b, 0xa1, 0xb4, 0x2b, 0x1f, 0xc6, 0xfa, 0x8c, 0x99, 0xa7, 0x42, 0xf7, 0x01, - 0xac, 0xd0, 0xf7, 0x5d, 0x4a, 0x39, 0x8f, 0x92, 0xe0, 0xa1, 0x17, 0x79, 0x74, 0x52, 0x0c, 0x13, - 0x33, 0x42, 0x15, 0x9f, 0x1c, 0x21, 0x7a, 0x0f, 0x6e, 0xfa, 0x6e, 0xd0, 0xa3, 0xc4, 0x7b, 0xd2, - 0xb3, 0x89, 0x47, 0x1c, 0x71, 0xa9, 0x66, 0x79, 0x43, 0xdb, 0x9c, 0x6f, 0x3f, 0xe0, 0xe8, 0x7f, - 0x8a, 0xf5, 0xcf, 0x3a, 0x2e, 0x3b, 0x1a, 0x1c, 0xb6, 0xac, 0xd0, 0xdf, 0x1a, 0xb9, 0xe7, 0x5b, - 0xd4, 0x3e, 0x56, 0x76, 0xdc, 0x0b, 0xd8, 0x30, 0xd6, 0xd7, 0x4e, 0xb1, 0xef, 0x6d, 0x1b, 0x13, - 0x58, 0x1a, 0xe6, 0xb2, 0xef, 0x06, 0x8f, 0x88, 0xf7, 0xa4, 0x9b, 0xc2, 0xd0, 0xf7, 0x61, 0x59, - 0x61, 0x84, 0x51, 0x0f, 0xdb, 0x76, 0x44, 0x28, 0x6d, 0x56, 0x36, 0xb4, 0xcd, 0x85, 0xf6, 0xfe, - 0x30, 0xd6, 0x9b, 0x92, 0xdb, 0x18, 0x8a, 0xf1, 0xef, 0x58, 0x7f, 0x6b, 0x0a, 0x9d, 0xee, 0x59, - 0xd6, 0x3d, 0x49, 0x61, 0x2e, 0xa5, 0x4c, 0x14, 0x84, 0xcb, 0x7e, 0x9a, 0xb8, 0x24, 0x95, 0x7d, - 0xa3, 0x28, 0x7b, 0x0c, 0x65, 0x5a, 0xd9, 0x07, 0xd8, 0x4b, 0x65, 0xa7, 0x4c, 0x12, 0xd9, 0x2b, - 0x50, 0xed, 0x0f, 0x0e, 0x8f, 0xc9, 0x69, 0xb3, 0xca, 0x0d, 0x6d, 0xaa, 0x2f, 0xb4, 0x09, 0x37, - 0x9e, 0x62, 0x6f, 0x40, 0x9a, 0xb3, 0xc2, 0x9f, 0x0b, 0x89, 0x3f, 0x3b, 0xa1, 0x9b, 0x04, 0x81, - 0x44, 0xd8, 0xae, 0xfc, 0xfd, 0x4c, 0xd7, 0x8c, 0x5f, 0x97, 0x61, 0x69, 0x9f, 0x3a, 0xf7, 0x6d, - 0x97, 0xbd, 0xe4, 0xf0, 0xea, 0x4f, 0xb2, 0x4e, 0x49, 0x58, 0xa7, 0x33, 0x8c, 0xf5, 0xba, 0xb4, - 0xce, 0xcb, 0xb4, 0x89, 0x0f, 0x8d, 0x2c, 0x2e, 0x7b, 0x11, 0x66, 0x44, 0x45, 0x61, 0x77, 0xca, - 0x08, 0xec, 0x12, 0x6b, 0x18, 0xeb, 0x2b, 0x52, 0xb3, 0x02, 0x2b, 0xc3, 0xac, 0x5b, 0x23, 0xb9, - 0x80, 0x4e, 0x26, 0x07, 0x7e, 0x45, 0x88, 0xdc, 0xfd, 0x3f, 0x06, 0xbd, 0x72, 0xdd, 0xaf, 0x4a, - 0x50, 0xdb, 0xa7, 0x8e, 0x82, 0x93, 0xc9, 0xa9, 0xa0, 0x7d, 0x82, 0xa9, 0x50, 0xfa, 0x78, 0x52, - 0xe1, 0xf3, 0x50, 0xc5, 0x7e, 0x38, 0x08, 0x98, 0xf0, 0xf6, 0xe4, 0x98, 0x57, 0x18, 0xca, 0x72, - 0xbf, 0x2f, 0x8b, 0xaa, 0xda, 0x26, 0x8e, 0x1b, 0x98, 0xc4, 0x7e, 0x15, 0x0c, 0xf8, 0x03, 0x0d, - 0x6e, 0x67, 0xe6, 0xa1, 0x91, 0x55, 0xb0, 0xe2, 0x37, 0x86, 0xb1, 0x7e, 0xa7, 0x68, 0xc5, 0x1c, - 0xda, 0x15, 0x2c, 0x79, 0x33, 0x65, 0xf4, 0x28, 0xb2, 0x26, 0xeb, 0x61, 0x53, 0x96, 0xea, 0x51, - 0x3e, 0x5f, 0x8f, 0x1c, 0xda, 0xff, 0xa4, 0x47, 0x97, 0xb2, 0x71, 0xa7, 0x56, 0xa6, 0x74, 0xea, - 0x6f, 0x4a, 0xb0, 0xb8, 0x4f, 0x9d, 0x77, 0x02, 0xfb, 0x3a, 0x21, 0x2e, 0x9b, 0x10, 0x3f, 0xd4, - 0xa0, 0xbe, 0xeb, 0x52, 0x16, 0x46, 0xae, 0x85, 0xbd, 0xbd, 0xe0, 0x49, 0x88, 0xbe, 0x0c, 0xd5, - 0x23, 0x82, 0x6d, 0x12, 0xa9, 0xf2, 0xdf, 0x6c, 0x65, 0xe3, 0x4f, 0x4b, 0x2a, 0xb1, 0x2b, 0xce, - 0x13, 0x86, 0x12, 0x1b, 0xbd, 0x0d, 0xd5, 0xa7, 0xd8, 0xa3, 0x84, 0x35, 0x4b, 0x1b, 0xe5, 0xcd, - 0xda, 0xdd, 0xd5, 0x62, 0xdb, 0x48, 0xdb, 0x4c, 0x42, 0x28, 0xd1, 0x95, 0x26, 0xbf, 0x2c, 0x41, - 0xa3, 0x30, 0x73, 0xa0, 0x36, 0x54, 0x44, 0x31, 0xd7, 0x44, 0x65, 0x6d, 0x5d, 0x62, 0xa4, 0xe8, - 0x12, 0xcb, 0x14, 0xb4, 0xe8, 0x3b, 0x30, 0xe7, 0xe3, 0x13, 0xd9, 0x14, 0x4a, 0x82, 0xcf, 0xbd, - 0xcb, 0xf1, 0x19, 0xc6, 0x7a, 0x43, 0x55, 0x69, 0xc5, 0xc7, 0x30, 0x67, 0x7d, 0x7c, 0x22, 0x5a, - 0x41, 0x1f, 0x1a, 0x1c, 0x6a, 0x1d, 0xe1, 0xc0, 0x21, 0xf9, 0xce, 0xb3, 0x7b, 0x69, 0x21, 0x2b, - 0x99, 0x90, 0x1c, 0x3b, 0xc3, 0x5c, 0xf4, 0xf1, 0x49, 0x47, 0x00, 0xb8, 0xc4, 0xed, 0xb9, 0x0f, - 0xce, 0xf4, 0x19, 0x61, 0xb1, 0xdf, 0x69, 0x00, 0x99, 0xc5, 0xd0, 0x63, 0x58, 0x2a, 0x74, 0x2e, - 0xaa, 0x3c, 0x78, 0xe1, 0x6c, 0x37, 0xc7, 0x95, 0x7d, 0x16, 0xeb, 0x9a, 0xd9, 0xb0, 0x0a, 0x2e, - 0xf8, 0x36, 0xd4, 0x06, 0x7d, 0x1b, 0x33, 0xd2, 0xe3, 0x63, 0xad, 0x1a, 0x16, 0xd7, 0x5a, 0x72, - 0xa4, 0x6d, 0x25, 0x23, 0x6d, 0xeb, 0x71, 0x32, 0xf3, 0xb6, 0xd7, 0x39, 0xaf, 0x61, 0xac, 0x23, - 0x79, 0x9d, 0x1c, 0xb1, 0xf1, 0xfe, 0x9f, 0x75, 0xcd, 0x04, 0x09, 0xe1, 0x04, 0xa3, 0x77, 0xa9, - 0xe5, 0xc6, 0x0a, 0xd4, 0x84, 0x59, 0x3f, 0x0c, 0xdc, 0x63, 0x15, 0x85, 0xf3, 0x66, 0xf2, 0x89, - 0xd6, 0x60, 0xce, 0xb5, 0x49, 0xc0, 0x5c, 0x76, 0x2a, 0xfd, 0x69, 0xa6, 0xdf, 0x9c, 0xea, 0x5d, - 0x72, 0x48, 0xdd, 0xc4, 0x0b, 0x66, 0xf2, 0x89, 0x76, 0x60, 0x89, 0x12, 0x6b, 0x10, 0xb9, 0xec, - 0xb4, 0x67, 0x85, 0x01, 0xc3, 0x16, 0x53, 0xfd, 0xfa, 0xf5, 0x61, 0xac, 0xbf, 0x26, 0x75, 0x2d, - 0x62, 0x18, 0x66, 0x23, 0x01, 0x75, 0x24, 0x84, 0x4b, 0xb0, 0x09, 0xc3, 0xae, 0x27, 0xe7, 0xbd, - 0x79, 0x33, 0xf9, 0xcc, 0xdd, 0xe5, 0x17, 0xb3, 0x30, 0x9f, 0x8d, 0x54, 0xef, 0xc2, 0x52, 0xd8, - 0x27, 0xd1, 0x84, 0x52, 0xf4, 0x20, 0x93, 0x5c, 0xc4, 0xb8, 0x42, 0x35, 0x68, 0x24, 0x3c, 0x92, - 0x62, 0xb0, 0xc3, 0xe3, 0x21, 0xa0, 0x24, 0xa0, 0x03, 0xda, 0x53, 0x23, 0x63, 0xa9, 0x78, 0xe5, - 0x22, 0x86, 0xc1, 0x23, 0x40, 0x81, 0x1e, 0xca, 0xc1, 0x72, 0x05, 0xaa, 0xdf, 0xc5, 0xae, 0x47, - 0x6c, 0x61, 0xd3, 0x39, 0x53, 0x7d, 0xa1, 0x3d, 0xa8, 0x52, 0x86, 0xd9, 0x40, 0x4e, 0xdd, 0x37, - 0xda, 0x5f, 0x98, 0x52, 0xe7, 0x76, 0x18, 0xd8, 0x8f, 0x04, 0xa1, 0xa9, 0x18, 0xa0, 0x1d, 0xa8, - 0xb2, 0xf0, 0x98, 0x04, 0xca, 0xa8, 0x97, 0xca, 0xf4, 0xbd, 0x80, 0x99, 0x8a, 0x1a, 0x31, 0xc8, - 0xea, 0x71, 0x8f, 0x1e, 0xe1, 0x88, 0x50, 0x39, 0x25, 0xb7, 0xf7, 0x2e, 0x9d, 0x8e, 0xaf, 0x15, - 0x9b, 0x84, 0xe4, 0x67, 0x98, 0x8d, 0x14, 0xf4, 0x48, 0x40, 0x8a, 0x43, 0xf3, 0xec, 0x95, 0x86, - 0xe6, 0x1d, 0x58, 0x1a, 0x04, 0x87, 0x61, 0x60, 0xbb, 0x81, 0xd3, 0x3b, 0x22, 0xae, 0x73, 0xc4, - 0x9a, 0x73, 0x1b, 0xda, 0x66, 0x39, 0xef, 0xad, 0x22, 0x86, 0x61, 0x36, 0x52, 0xd0, 0xae, 0x80, - 0x20, 0x1b, 0xea, 0x19, 0x96, 0x48, 0xd9, 0xf9, 0x0b, 0x53, 0xf6, 0x0d, 0x95, 0xb2, 0xb7, 0x8b, - 0x52, 0xb2, 0xac, 0x5d, 0x4c, 0x81, 0x9c, 0x0c, 0x7d, 0x6d, 0xe4, 0x05, 0x09, 0x4a, 0xc2, 0xb9, - 0x55, 0x66, 0xfa, 0xc7, 0x63, 0xed, 0x63, 0x79, 0x3c, 0x6e, 0x2f, 0xfc, 0xe8, 0x4c, 0x9f, 0x49, - 0x13, 0xf6, 0xc7, 0x25, 0xa8, 0x76, 0x0f, 0x1e, 0x62, 0x37, 0xfa, 0xb4, 0x4e, 0x0e, 0xb9, 0xea, - 0xf5, 0x55, 0x98, 0x95, 0xb6, 0xa0, 0xe8, 0x2e, 0xdc, 0xe8, 0xf3, 0x1f, 0x4d, 0x4d, 0x34, 0xf4, - 0x95, 0xb1, 0x90, 0x16, 0x78, 0xc9, 0xe3, 0x52, 0xa0, 0x1a, 0x3f, 0x2f, 0x03, 0x74, 0x0f, 0x0e, - 0x1e, 0x47, 0x6e, 0xdf, 0x23, 0xec, 0x7a, 0xb2, 0x7e, 0x75, 0x26, 0xeb, 0x9c, 0x8f, 0xbf, 0x0e, - 0xb5, 0xcc, 0x47, 0x14, 0x7d, 0x05, 0xe6, 0x98, 0xfa, 0xad, 0x5c, 0xbd, 0x36, 0xee, 0xea, 0x04, - 0x5d, 0xb9, 0x3b, 0xa5, 0x30, 0xfe, 0x50, 0x02, 0xb8, 0x68, 0x2f, 0xf3, 0x29, 0x98, 0xbd, 0x77, - 0xa0, 0xaa, 0x3a, 0x4e, 0xf9, 0x4a, 0xd3, 0xaa, 0xa2, 0xce, 0x79, 0xe9, 0xaf, 0x25, 0xb8, 0xf9, - 0x4e, 0x52, 0x76, 0xaf, 0x2d, 0x8c, 0x76, 0x61, 0x96, 0x04, 0x2c, 0x72, 0x85, 0x89, 0x79, 0x94, - 0x6e, 0x16, 0xa3, 0x74, 0x82, 0xb5, 0xee, 0x07, 0x2c, 0x3a, 0x55, 0x31, 0x9b, 0x90, 0xe7, 0x6c, - 0xfc, 0xb3, 0x32, 0x34, 0xcf, 0xa3, 0x42, 0x1d, 0x68, 0x58, 0x11, 0x11, 0x80, 0xa4, 0x25, 0x6b, - 0xa2, 0x25, 0xaf, 0xe5, 0x96, 0x45, 0xa3, 0x08, 0x86, 0x59, 0x4f, 0x20, 0xaa, 0x21, 0x3b, 0x62, - 0x37, 0xc5, 0x53, 0x85, 0x63, 0x4d, 0x39, 0x44, 0x1b, 0xaa, 0x23, 0x67, 0x1b, 0xa9, 0x3c, 0x03, - 0xd9, 0x92, 0xeb, 0x19, 0x54, 0xf4, 0xe4, 0xef, 0x41, 0xc3, 0x0d, 0x5c, 0xe6, 0x62, 0xaf, 0x77, - 0x88, 0x3d, 0x1c, 0x58, 0x57, 0x79, 0x8a, 0xc8, 0x6e, 0xaa, 0xc4, 0x16, 0xd8, 0x19, 0x66, 0x5d, - 0x41, 0xda, 0x12, 0xc0, 0x3d, 0x92, 0x88, 0xaa, 0x5c, 0x69, 0x70, 0x4b, 0xc8, 0x73, 0x1e, 0xf9, - 0x49, 0x19, 0x96, 0xd3, 0xd5, 0xcc, 0xb5, 0x2b, 0xa6, 0x75, 0xc5, 0x3e, 0x80, 0x2c, 0x20, 0xbc, - 0x73, 0x5c, 0xc1, 0x1b, 0xbc, 0x04, 0xcd, 0x4b, 0x0e, 0x5d, 0xca, 0x72, 0xfe, 0xf8, 0x5b, 0x19, - 0x16, 0xf2, 0xfe, 0xb8, 0x6e, 0xe9, 0xaf, 0xd0, 0xb2, 0xec, 0x5e, 0x56, 0x12, 0x2b, 0xa2, 0x24, - 0xbe, 0x51, 0x2c, 0x89, 0x63, 0xa9, 0x74, 0x7e, 0x2d, 0xfc, 0x57, 0x09, 0xaa, 0x0f, 0x71, 0x84, - 0x7d, 0x8a, 0xac, 0xb1, 0x57, 0x84, 0xdc, 0x24, 0xac, 0x8e, 0x25, 0x4a, 0x57, 0xfd, 0x2d, 0xeb, - 0x82, 0x47, 0xc4, 0x07, 0x13, 0x1f, 0x11, 0x75, 0x1f, 0x9f, 0xf4, 0xd2, 0x7b, 0x49, 0x27, 0x2e, - 0xb6, 0x57, 0x33, 0x2e, 0xa3, 0xe7, 0x72, 0x17, 0x92, 0x3e, 0xad, 0x29, 0x7a, 0x1b, 0x6a, 0x1c, - 0x23, 0xeb, 0x0a, 0x9c, 0x7c, 0x25, 0x5b, 0x3e, 0xe4, 0x0e, 0x0d, 0x13, 0x7c, 0x7c, 0x72, 0x5f, - 0x7e, 0xa0, 0x07, 0x80, 0x8e, 0xd2, 0xad, 0x57, 0x2f, 0x33, 0x21, 0xa7, 0xff, 0xcc, 0x30, 0xd6, - 0x57, 0x25, 0xfd, 0x38, 0x8e, 0x61, 0x2e, 0x67, 0xc0, 0x84, 0xdb, 0x97, 0x00, 0xf8, 0xbd, 0x7a, - 0x36, 0x09, 0x42, 0x5f, 0x3d, 0x61, 0x6f, 0x0f, 0x63, 0x7d, 0x59, 0x72, 0xc9, 0xce, 0x0c, 0x73, - 0x9e, 0x7f, 0x74, 0xf9, 0xef, 0x9c, 0xe1, 0x7f, 0xaa, 0x01, 0xca, 0x7a, 0x8f, 0x49, 0x68, 0x9f, - 0x3f, 0xc1, 0xf9, 0x23, 0x2b, 0xf7, 0x32, 0xd2, 0x26, 0x3f, 0xb2, 0x32, 0xba, 0xe4, 0x91, 0x95, - 0x4b, 0xd5, 0x37, 0xb3, 0xfa, 0x5c, 0x3a, 0x77, 0x21, 0x38, 0xa1, 0x06, 0xff, 0x56, 0x83, 0xd5, - 0xb1, 0xc0, 0x49, 0xf5, 0x3a, 0x00, 0x14, 0xe5, 0x0e, 0x85, 0x69, 0x4e, 0x95, 0x7e, 0x53, 0xc7, - 0xdf, 0x72, 0x34, 0x56, 0xe3, 0x5f, 0x5e, 0x37, 0x51, 0x1b, 0x45, 0x0d, 0x6e, 0xe5, 0xc5, 0xa7, - 0x17, 0xd8, 0x81, 0x85, 0xbc, 0x74, 0xa5, 0xfa, 0x9d, 0x8f, 0x52, 0x5d, 0x69, 0x3d, 0x42, 0x87, - 0xf6, 0xb2, 0xec, 0x93, 0x2b, 0xcf, 0xcf, 0x5d, 0x78, 0xfb, 0x44, 0x87, 0x62, 0x16, 0x4a, 0x8d, - 0xff, 0xa3, 0x41, 0xe5, 0x61, 0x18, 0x7a, 0x28, 0x84, 0xe5, 0x20, 0x64, 0x3d, 0x1e, 0x2c, 0xc4, - 0xee, 0xa9, 0xdd, 0x88, 0xdc, 0x82, 0x76, 0x2e, 0x67, 0x94, 0x7f, 0xc4, 0xfa, 0x38, 0x2b, 0xb3, - 0x11, 0x84, 0xac, 0x2d, 0x20, 0x8f, 0xe5, 0xe6, 0xe4, 0x3d, 0x58, 0x1c, 0x15, 0x26, 0x37, 0x45, - 0xdf, 0xbc, 0xb4, 0xb0, 0x51, 0x36, 0xc3, 0x58, 0xbf, 0x95, 0x25, 0x41, 0x0a, 0x36, 0xcc, 0x85, - 0xc3, 0x9c, 0xf4, 0xed, 0x39, 0x7e, 0xfb, 0x7f, 0x9e, 0xe9, 0x5a, 0x7b, 0xe7, 0xc3, 0xe7, 0xeb, - 0xda, 0xb3, 0xe7, 0xeb, 0xda, 0x5f, 0x9e, 0xaf, 0x6b, 0xef, 0xbf, 0x58, 0x9f, 0x79, 0xf6, 0x62, - 0x7d, 0xe6, 0x8f, 0x2f, 0xd6, 0x67, 0xbe, 0xf5, 0xe6, 0x47, 0xaa, 0x70, 0x92, 0xfe, 0x81, 0x5f, - 0x28, 0x73, 0x58, 0x15, 0x05, 0xea, 0x8b, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xba, 0x75, 0x81, - 0xcf, 0xff, 0x1f, 0x00, 0x00, + 0xed, 0x85, 0x03, 0x12, 0x42, 0x02, 0xf6, 0xb8, 0xc7, 0x88, 0x3f, 0x80, 0x3d, 0x02, 0x67, 0x2e, + 0xcb, 0xad, 0xe2, 0x80, 0x10, 0x87, 0x01, 0xda, 0x03, 0x88, 0x13, 0xf2, 0x81, 0x03, 0x17, 0xd0, + 0xfb, 0x98, 0x0f, 0x8f, 0x9d, 0x8d, 0x13, 0xca, 0x52, 0x69, 0x73, 0x69, 0x3d, 0xbf, 0xf7, 0xfb, + 0x7a, 0xbf, 0xef, 0xf7, 0x0b, 0xdc, 0xb1, 0x42, 0xea, 0x87, 0x74, 0x8b, 0x32, 0x7c, 0xec, 0x06, + 0x4e, 0xf2, 0x7f, 0xab, 0x1f, 0x85, 0x2c, 0x44, 0x75, 0x79, 0xda, 0x52, 0xd0, 0xb5, 0x5b, 0x4e, + 0xe8, 0x84, 0xe2, 0x68, 0x8b, 0xff, 0x92, 0x58, 0x6b, 0x77, 0x18, 0x09, 0x6c, 0x12, 0xf9, 0x6e, + 0xc0, 0xb6, 0xd8, 0x69, 0x9f, 0x50, 0xf9, 0xaf, 0x3a, 0xd5, 0x9d, 0x30, 0x74, 0x3c, 0xb2, 0x25, + 0xbe, 0x0e, 0x07, 0x4f, 0xb6, 0x98, 0xeb, 0x13, 0xca, 0xb0, 0xdf, 0x57, 0x08, 0xeb, 0x45, 0x04, + 0x7b, 0x10, 0x61, 0xe6, 0x86, 0x81, 0x3a, 0xbf, 0xa9, 0x54, 0x54, 0xba, 0x08, 0xa0, 0x11, 0x57, + 0x00, 0xed, 0x53, 0xa7, 0x13, 0x11, 0xcc, 0xc8, 0x01, 0xf6, 0x5c, 0x1b, 0xb3, 0x30, 0x42, 0x1d, + 0xa8, 0xd9, 0x84, 0x5a, 0x91, 0xdb, 0xe7, 0x0c, 0x9a, 0xda, 0x86, 0xb6, 0x59, 0xbb, 0xfb, 0x7a, + 0x6b, 0xf4, 0x1a, 0xad, 0x6e, 0x86, 0xd2, 0xae, 0x7c, 0x14, 0xeb, 0x33, 0x66, 0x9e, 0x0a, 0xdd, + 0x07, 0xb0, 0x42, 0xdf, 0x77, 0x29, 0xe5, 0x3c, 0x4a, 0x82, 0x87, 0x5e, 0xe4, 0xd1, 0x49, 0x31, + 0x4c, 0xcc, 0x08, 0x55, 0x7c, 0x72, 0x84, 0xe8, 0x3d, 0xb8, 0xe9, 0xbb, 0x41, 0x8f, 0x12, 0xef, + 0x49, 0xcf, 0x26, 0x1e, 0x71, 0xc4, 0xa5, 0x9a, 0xe5, 0x0d, 0x6d, 0x73, 0xbe, 0xfd, 0x80, 0xa3, + 0xff, 0x31, 0xd6, 0x3f, 0xeb, 0xb8, 0xec, 0x68, 0x70, 0xd8, 0xb2, 0x42, 0x7f, 0x6b, 0xe4, 0x9e, + 0x6f, 0x51, 0xfb, 0x58, 0xd9, 0x71, 0x2f, 0x60, 0xc3, 0x58, 0x5f, 0x3b, 0xc5, 0xbe, 0xb7, 0x6d, + 0x4c, 0x60, 0x69, 0x98, 0xcb, 0xbe, 0x1b, 0x3c, 0x22, 0xde, 0x93, 0x6e, 0x0a, 0x43, 0xdf, 0x87, + 0x65, 0x85, 0x11, 0x46, 0x3d, 0x6c, 0xdb, 0x11, 0xa1, 0xb4, 0x59, 0xd9, 0xd0, 0x36, 0x17, 0xda, + 0xfb, 0xc3, 0x58, 0x6f, 0x4a, 0x6e, 0x63, 0x28, 0xc6, 0xbf, 0x62, 0xfd, 0xad, 0x29, 0x74, 0xba, + 0x67, 0x59, 0xf7, 0x24, 0x85, 0xb9, 0x94, 0x32, 0x51, 0x10, 0x2e, 0xfb, 0x69, 0xe2, 0x92, 0x54, + 0xf6, 0x8d, 0xa2, 0xec, 0x31, 0x94, 0x69, 0x65, 0x1f, 0x60, 0x2f, 0x95, 0x9d, 0x32, 0x49, 0x64, + 0xaf, 0x40, 0xb5, 0x3f, 0x38, 0x3c, 0x26, 0xa7, 0xcd, 0x2a, 0x37, 0xb4, 0xa9, 0xbe, 0xd0, 0x26, + 0xdc, 0x78, 0x8a, 0xbd, 0x01, 0x69, 0xce, 0x0a, 0x7f, 0x2e, 0x24, 0xfe, 0xec, 0x84, 0x6e, 0x12, + 0x04, 0x12, 0x61, 0xbb, 0xf2, 0xb7, 0x33, 0x5d, 0x33, 0x7e, 0x55, 0x86, 0xa5, 0x7d, 0xea, 0xdc, + 0xb7, 0x5d, 0xf6, 0x92, 0xc3, 0xab, 0x3f, 0xc9, 0x3a, 0x25, 0x61, 0x9d, 0xce, 0x30, 0xd6, 0xeb, + 0xd2, 0x3a, 0x2f, 0xd3, 0x26, 0x3e, 0x34, 0xb2, 0xb8, 0xec, 0x45, 0x98, 0x11, 0x15, 0x85, 0xdd, + 0x29, 0x23, 0xb0, 0x4b, 0xac, 0x61, 0xac, 0xaf, 0x48, 0xcd, 0x0a, 0xac, 0x0c, 0xb3, 0x6e, 0x8d, + 0xe4, 0x02, 0x3a, 0x99, 0x1c, 0xf8, 0x15, 0x21, 0x72, 0xf7, 0x7f, 0x18, 0xf4, 0xca, 0x75, 0xbf, + 0x2c, 0x41, 0x6d, 0x9f, 0x3a, 0x0a, 0x4e, 0x26, 0xa7, 0x82, 0xf6, 0x7f, 0x4c, 0x85, 0xd2, 0x27, + 0x93, 0x0a, 0x9f, 0x87, 0x2a, 0xf6, 0xc3, 0x41, 0xc0, 0x84, 0xb7, 0x27, 0xc7, 0xbc, 0xc2, 0x50, + 0x96, 0xfb, 0x5d, 0x59, 0x54, 0xd5, 0x36, 0x71, 0xdc, 0xc0, 0x24, 0xf6, 0xab, 0x60, 0xc0, 0x1f, + 0x6a, 0x70, 0x3b, 0x33, 0x0f, 0x8d, 0xac, 0x82, 0x15, 0xbf, 0x31, 0x8c, 0xf5, 0x3b, 0x45, 0x2b, + 0xe6, 0xd0, 0xae, 0x60, 0xc9, 0x9b, 0x29, 0xa3, 0x47, 0x91, 0x35, 0x59, 0x0f, 0x9b, 0xb2, 0x54, + 0x8f, 0xf2, 0xf9, 0x7a, 0xe4, 0xd0, 0xfe, 0x2b, 0x3d, 0xba, 0x94, 0x8d, 0x3b, 0xb5, 0x32, 0xa5, + 0x53, 0x7f, 0x5d, 0x82, 0xc5, 0x7d, 0xea, 0xbc, 0x13, 0xd8, 0xd7, 0x09, 0x71, 0xd9, 0x84, 0xf8, + 0x81, 0x06, 0xf5, 0x5d, 0x97, 0xb2, 0x30, 0x72, 0x2d, 0xec, 0xed, 0x05, 0x4f, 0x42, 0xf4, 0x65, + 0xa8, 0x1e, 0x11, 0x6c, 0x93, 0x48, 0x95, 0xff, 0x66, 0x2b, 0x1b, 0x7f, 0x5a, 0x52, 0x89, 0x5d, + 0x71, 0x9e, 0x30, 0x94, 0xd8, 0xe8, 0x6d, 0xa8, 0x3e, 0xc5, 0x1e, 0x25, 0xac, 0x59, 0xda, 0x28, + 0x6f, 0xd6, 0xee, 0xae, 0x16, 0xdb, 0x46, 0xda, 0x66, 0x12, 0x42, 0x89, 0x6e, 0x7c, 0x58, 0x82, + 0x46, 0x61, 0xda, 0x40, 0x6d, 0xa8, 0x88, 0x32, 0xae, 0x89, 0x9a, 0xda, 0xba, 0xc4, 0x30, 0xd1, + 0x25, 0x96, 0x29, 0x68, 0xd1, 0x77, 0x60, 0xce, 0xc7, 0x27, 0xb2, 0x1d, 0x94, 0x04, 0x9f, 0x7b, + 0x97, 0xe3, 0x33, 0x8c, 0xf5, 0x86, 0xaa, 0xcf, 0x8a, 0x8f, 0x61, 0xce, 0xfa, 0xf8, 0x44, 0x34, + 0x81, 0x3e, 0x34, 0x38, 0xd4, 0x3a, 0xc2, 0x81, 0x43, 0xf2, 0x3d, 0x67, 0xf7, 0xd2, 0x42, 0x56, + 0x32, 0x21, 0x39, 0x76, 0x86, 0xb9, 0xe8, 0xe3, 0x93, 0x8e, 0x00, 0x70, 0x89, 0xdb, 0x73, 0x1f, + 0x9c, 0xe9, 0x33, 0xc2, 0x6b, 0xbf, 0xd5, 0x00, 0x32, 0x8b, 0xa1, 0xc7, 0xb0, 0x54, 0xe8, 0x59, + 0x54, 0xf9, 0xee, 0xc2, 0xa9, 0x6e, 0x8e, 0x2b, 0xfb, 0x2c, 0xd6, 0x35, 0xb3, 0x61, 0x15, 0x5c, + 0xf0, 0x6d, 0xa8, 0x0d, 0xfa, 0x36, 0x66, 0xa4, 0xc7, 0x07, 0x5a, 0x35, 0x26, 0xae, 0xb5, 0xe4, + 0x30, 0xdb, 0x4a, 0x86, 0xd9, 0xd6, 0xe3, 0x64, 0xda, 0x6d, 0xaf, 0x73, 0x5e, 0xc3, 0x58, 0x47, + 0xf2, 0x3a, 0x39, 0x62, 0xe3, 0xfd, 0x3f, 0xe9, 0x9a, 0x09, 0x12, 0xc2, 0x09, 0x46, 0xef, 0x52, + 0xcb, 0x0d, 0x14, 0xa8, 0x09, 0xb3, 0x7e, 0x18, 0xb8, 0xc7, 0x2a, 0xfe, 0xe6, 0xcd, 0xe4, 0x13, + 0xad, 0xc1, 0x9c, 0x6b, 0x93, 0x80, 0xb9, 0xec, 0x54, 0xfa, 0xd3, 0x4c, 0xbf, 0x39, 0xd5, 0xbb, + 0xe4, 0x90, 0xba, 0x89, 0x17, 0xcc, 0xe4, 0x13, 0xed, 0xc0, 0x12, 0x25, 0xd6, 0x20, 0x72, 0xd9, + 0x69, 0xcf, 0x0a, 0x03, 0x86, 0x2d, 0xa6, 0x3a, 0xf5, 0xeb, 0xc3, 0x58, 0x7f, 0x4d, 0xea, 0x5a, + 0xc4, 0x30, 0xcc, 0x46, 0x02, 0xea, 0x48, 0x08, 0x97, 0x60, 0x13, 0x86, 0x5d, 0x4f, 0x4e, 0x7a, + 0xf3, 0x66, 0xf2, 0x99, 0xbb, 0xcb, 0x2f, 0x66, 0x61, 0x3e, 0x1b, 0xa6, 0xde, 0x85, 0xa5, 0xb0, + 0x4f, 0xa2, 0x09, 0x45, 0xe8, 0x41, 0x26, 0xb9, 0x88, 0x71, 0x85, 0x3a, 0xd0, 0x48, 0x78, 0x24, + 0x65, 0x60, 0x87, 0xc7, 0x43, 0x40, 0x49, 0x40, 0x07, 0xb4, 0xa7, 0x86, 0xc5, 0x52, 0xf1, 0xca, + 0x45, 0x0c, 0x83, 0x47, 0x80, 0x02, 0x3d, 0x94, 0x23, 0xe5, 0x0a, 0x54, 0xbf, 0x8b, 0x5d, 0x8f, + 0xd8, 0xc2, 0xa6, 0x73, 0xa6, 0xfa, 0x42, 0x7b, 0x50, 0xa5, 0x0c, 0xb3, 0x81, 0x9c, 0xb7, 0x6f, + 0xb4, 0xbf, 0x30, 0xa5, 0xce, 0xed, 0x30, 0xb0, 0x1f, 0x09, 0x42, 0x53, 0x31, 0x40, 0x3b, 0x50, + 0x65, 0xe1, 0x31, 0x09, 0x94, 0x51, 0x2f, 0x95, 0xe9, 0x7b, 0x01, 0x33, 0x15, 0x35, 0x62, 0x90, + 0x55, 0xe2, 0x1e, 0x3d, 0xc2, 0x11, 0xa1, 0x72, 0x3e, 0x6e, 0xef, 0x5d, 0x3a, 0x1d, 0x5f, 0x2b, + 0xb6, 0x07, 0xc9, 0xcf, 0x30, 0x1b, 0x29, 0xe8, 0x91, 0x80, 0x14, 0xc7, 0xe5, 0xd9, 0x2b, 0x8d, + 0xcb, 0x3b, 0xb0, 0x34, 0x08, 0x0e, 0xc3, 0xc0, 0x76, 0x03, 0xa7, 0x77, 0x44, 0x5c, 0xe7, 0x88, + 0x35, 0xe7, 0x36, 0xb4, 0xcd, 0x72, 0xde, 0x5b, 0x45, 0x0c, 0xc3, 0x6c, 0xa4, 0xa0, 0x5d, 0x01, + 0x41, 0x36, 0xd4, 0x33, 0x2c, 0x91, 0xb2, 0xf3, 0x17, 0xa6, 0xec, 0x1b, 0x2a, 0x65, 0x6f, 0x17, + 0xa5, 0x64, 0x59, 0xbb, 0x98, 0x02, 0x39, 0x19, 0xfa, 0xda, 0xc8, 0xdb, 0x11, 0x94, 0x84, 0x73, + 0xab, 0xcc, 0xf4, 0xcf, 0xc6, 0xda, 0x27, 0xf2, 0x6c, 0xdc, 0x5e, 0xf8, 0xd1, 0x99, 0x3e, 0x93, + 0x26, 0xec, 0x8f, 0x4b, 0x50, 0xed, 0x1e, 0x3c, 0xc4, 0x6e, 0xf4, 0x69, 0x9d, 0x19, 0x72, 0xd5, + 0xeb, 0xab, 0x30, 0x2b, 0x6d, 0x41, 0xd1, 0x5d, 0xb8, 0xd1, 0xe7, 0x3f, 0x9a, 0x9a, 0x68, 0xe5, + 0x2b, 0x63, 0x21, 0x2d, 0xf0, 0x92, 0x67, 0xa5, 0x40, 0x35, 0x7e, 0x5e, 0x06, 0xe8, 0x1e, 0x1c, + 0x3c, 0x8e, 0xdc, 0xbe, 0x47, 0xd8, 0xf5, 0x4c, 0xfd, 0xea, 0xcc, 0xd4, 0x39, 0x1f, 0x7f, 0x1d, + 0x6a, 0x99, 0x8f, 0x28, 0xfa, 0x0a, 0xcc, 0x31, 0xf5, 0x5b, 0xb9, 0x7a, 0x6d, 0xdc, 0xd5, 0x09, + 0xba, 0x72, 0x77, 0x4a, 0x61, 0xfc, 0xbe, 0x04, 0x70, 0xd1, 0x46, 0xe6, 0x53, 0x30, 0x75, 0xef, + 0x40, 0x55, 0x75, 0x9c, 0xf2, 0x95, 0xa6, 0x55, 0x45, 0x9d, 0xf3, 0xd2, 0x5f, 0x4a, 0x70, 0xf3, + 0x9d, 0xa4, 0xec, 0x5e, 0x5b, 0x18, 0xed, 0xc2, 0x2c, 0x09, 0x58, 0xe4, 0x0a, 0x13, 0xf3, 0x28, + 0xdd, 0x2c, 0x46, 0xe9, 0x04, 0x6b, 0xdd, 0x0f, 0x58, 0x74, 0xaa, 0x62, 0x36, 0x21, 0xcf, 0xd9, + 0xf8, 0x67, 0x65, 0x68, 0x9e, 0x47, 0x85, 0x3a, 0xd0, 0xb0, 0x22, 0x22, 0x00, 0x49, 0x4b, 0xd6, + 0x44, 0x4b, 0x5e, 0xcb, 0xad, 0x89, 0x46, 0x11, 0x0c, 0xb3, 0x9e, 0x40, 0x54, 0x43, 0x76, 0xc4, + 0x56, 0x8a, 0xa7, 0x0a, 0xc7, 0x9a, 0x72, 0x88, 0x36, 0x54, 0x47, 0xce, 0x76, 0x51, 0x79, 0x06, + 0xb2, 0x25, 0xd7, 0x33, 0xa8, 0xe8, 0xc9, 0xdf, 0x83, 0x86, 0x1b, 0xb8, 0xcc, 0xc5, 0x5e, 0xef, + 0x10, 0x7b, 0x38, 0xb0, 0xae, 0xf2, 0x14, 0x91, 0xdd, 0x54, 0x89, 0x2d, 0xb0, 0x33, 0xcc, 0xba, + 0x82, 0xb4, 0x25, 0x80, 0x7b, 0x24, 0x11, 0x55, 0xb9, 0xd2, 0xe0, 0x96, 0x90, 0xe7, 0x3c, 0xf2, + 0x93, 0x32, 0x2c, 0xa7, 0x4b, 0x99, 0x6b, 0x57, 0x4c, 0xeb, 0x8a, 0x7d, 0x00, 0x59, 0x40, 0x78, + 0xe7, 0xb8, 0x82, 0x37, 0x78, 0x09, 0x9a, 0x97, 0x1c, 0xba, 0x94, 0xe5, 0xfc, 0xf1, 0xd7, 0x32, + 0x2c, 0xe4, 0xfd, 0x71, 0xdd, 0xd2, 0x5f, 0xa1, 0x35, 0xd9, 0xbd, 0xac, 0x24, 0x56, 0x44, 0x49, + 0x7c, 0xa3, 0x58, 0x12, 0xc7, 0x52, 0xe9, 0xfc, 0x5a, 0xf8, 0xcf, 0x12, 0x54, 0x1f, 0xe2, 0x08, + 0xfb, 0x14, 0x59, 0x63, 0xaf, 0x08, 0xb9, 0x49, 0x58, 0x1d, 0x4b, 0x94, 0xae, 0xfa, 0x2b, 0xd6, + 0x05, 0x8f, 0x88, 0x0f, 0x26, 0x3e, 0x22, 0xea, 0x3e, 0x3e, 0xe9, 0xa5, 0xf7, 0x92, 0x4e, 0x5c, + 0x6c, 0xaf, 0x66, 0x5c, 0x46, 0xcf, 0xe5, 0x2e, 0x24, 0x7d, 0x5a, 0x53, 0xf4, 0x36, 0xd4, 0x38, + 0x46, 0xd6, 0x15, 0x38, 0xf9, 0x4a, 0xb6, 0x7c, 0xc8, 0x1d, 0x1a, 0x26, 0xf8, 0xf8, 0xe4, 0xbe, + 0xfc, 0x40, 0x0f, 0x00, 0x1d, 0xa5, 0xfb, 0xae, 0x5e, 0x66, 0x42, 0x4e, 0xff, 0x99, 0x61, 0xac, + 0xaf, 0x4a, 0xfa, 0x71, 0x1c, 0xc3, 0x5c, 0xce, 0x80, 0x09, 0xb7, 0x2f, 0x01, 0xf0, 0x7b, 0xf5, + 0x6c, 0x12, 0x84, 0xbe, 0x7a, 0xc2, 0xde, 0x1e, 0xc6, 0xfa, 0xb2, 0xe4, 0x92, 0x9d, 0x19, 0xe6, + 0x3c, 0xff, 0xe8, 0xf2, 0xdf, 0x39, 0xc3, 0xff, 0x54, 0x03, 0x94, 0xf5, 0x1e, 0x93, 0xd0, 0x3e, + 0x7f, 0x82, 0xf3, 0x47, 0x56, 0xee, 0x65, 0xa4, 0x4d, 0x7e, 0x64, 0x65, 0x74, 0xc9, 0x23, 0x2b, + 0x97, 0xaa, 0x6f, 0x66, 0xf5, 0xb9, 0x74, 0xee, 0x2a, 0x70, 0x42, 0x0d, 0xfe, 0x8d, 0x06, 0xab, + 0x63, 0x81, 0x93, 0xea, 0x75, 0x00, 0x28, 0xca, 0x1d, 0x0a, 0xd3, 0x9c, 0x2a, 0xfd, 0xa6, 0x8e, + 0xbf, 0xe5, 0x68, 0xac, 0xc6, 0xbf, 0xbc, 0x6e, 0x22, 0xb7, 0x9a, 0x1f, 0x6a, 0x70, 0x2b, 0x2f, + 0x3e, 0xbd, 0xc0, 0x0e, 0x2c, 0xe4, 0xa5, 0x2b, 0xd5, 0xef, 0x7c, 0x9c, 0xea, 0x4a, 0xeb, 0x11, + 0x3a, 0xb4, 0x97, 0x65, 0x9f, 0x5c, 0x76, 0x7e, 0xee, 0xc2, 0xdb, 0x27, 0x3a, 0x14, 0xb3, 0x50, + 0x6a, 0xfc, 0x6f, 0x0d, 0x2a, 0x0f, 0xc3, 0xd0, 0x43, 0x21, 0x2c, 0x07, 0x21, 0xeb, 0xf1, 0x60, + 0x21, 0x76, 0x4f, 0xed, 0x46, 0xe4, 0x16, 0xb4, 0x73, 0x39, 0xa3, 0xfc, 0x3d, 0xd6, 0xc7, 0x59, + 0x99, 0x8d, 0x20, 0x64, 0x6d, 0x01, 0x79, 0x2c, 0x37, 0x27, 0xef, 0xc1, 0xe2, 0xa8, 0x30, 0xb9, + 0x29, 0xfa, 0xe6, 0xa5, 0x85, 0x8d, 0xb2, 0x19, 0xc6, 0xfa, 0xad, 0x2c, 0x09, 0x52, 0xb0, 0x61, + 0x2e, 0x1c, 0xe6, 0xa4, 0x6f, 0xcf, 0xf1, 0xdb, 0xff, 0xe3, 0x4c, 0xd7, 0xda, 0x3b, 0x1f, 0x3d, + 0x5f, 0xd7, 0x9e, 0x3d, 0x5f, 0xd7, 0xfe, 0xfc, 0x7c, 0x5d, 0x7b, 0xff, 0xc5, 0xfa, 0xcc, 0xb3, + 0x17, 0xeb, 0x33, 0x7f, 0x78, 0xb1, 0x3e, 0xf3, 0xad, 0x37, 0x3f, 0x56, 0x85, 0x93, 0xf4, 0x4f, + 0xfb, 0x42, 0x99, 0xc3, 0xaa, 0x28, 0x50, 0x5f, 0xfc, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x20, + 0xc2, 0x69, 0x3f, 0xf9, 0x1f, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1573,365 +1573,365 @@ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descri 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x74, 0x1c, 0xd7, 0x75, 0x18, 0x66, 0x77, 0xb1, 0xd8, 0xbd, 0x0b, 0x2c, 0x16, 0x0f, 0x20, 0x09, 0x2e, 0x45, 0x02, 0x1a, 0x59, 0x12, 0x49, 0x49, 0xa0, 0x4c, 0x51, 0x1f, 0x5c, 0x5a, 0x92, 0xb1, 0xc0, 0x92, 0x84, - 0x84, 0x2f, 0x0d, 0x00, 0x4a, 0x96, 0x63, 0x8f, 0x07, 0xbb, 0x0f, 0x8b, 0x11, 0x77, 0x67, 0x56, - 0x33, 0xb3, 0x24, 0xc0, 0x93, 0x9e, 0xa3, 0xd6, 0xf9, 0x70, 0x94, 0x26, 0xb1, 0xd3, 0x34, 0x55, + 0x84, 0x2f, 0x0f, 0x00, 0x4a, 0x96, 0x63, 0x8f, 0x07, 0xbb, 0x0f, 0x8b, 0x11, 0x77, 0x67, 0x56, + 0x33, 0xb3, 0x24, 0xc0, 0x93, 0x9e, 0xa3, 0xd4, 0xf9, 0x70, 0x94, 0x26, 0xb1, 0xd3, 0x34, 0x55, 0xd2, 0x28, 0x91, 0x93, 0xb4, 0x71, 0xdd, 0x36, 0x69, 0x9a, 0x34, 0x71, 0x9a, 0x9e, 0x1e, 0xb7, 0x69, 0x9b, 0xf4, 0x9c, 0xb6, 0x27, 0x69, 0xda, 0x26, 0xa7, 0xa7, 0x45, 0x12, 0x39, 0x6d, 0x5c, - 0xd7, 0x6d, 0x53, 0xd6, 0x69, 0x7a, 0xec, 0x1f, 0xe9, 0x79, 0x5f, 0x33, 0x6f, 0x66, 0x67, 0x3f, - 0x40, 0x51, 0x8a, 0x72, 0xe2, 0x5f, 0xd8, 0xb9, 0x73, 0xef, 0x7d, 0xef, 0xdd, 0x77, 0xdf, 0xfd, - 0x7a, 0x6f, 0x1e, 0xe0, 0xf3, 0x09, 0x38, 0x59, 0xb5, 0xdd, 0xa6, 0xed, 0x9e, 0x7b, 0xb5, 0x8d, - 0x9d, 0xfd, 0x73, 0x2d, 0xa3, 0x6e, 0x5a, 0x86, 0x67, 0xda, 0xd6, 0x5c, 0xcb, 0xb1, 0x3d, 0x1b, - 0x8d, 0xb2, 0xd7, 0x73, 0xf4, 0xb5, 0x6a, 0x41, 0x6e, 0xdd, 0xa8, 0x63, 0x0d, 0xbf, 0xda, 0xc6, - 0xae, 0x87, 0x0a, 0x90, 0xbc, 0x8e, 0xf7, 0xa7, 0x95, 0x59, 0xe5, 0xf4, 0xa8, 0x46, 0x7e, 0xa2, - 0xa3, 0x90, 0xb6, 0x77, 0x76, 0x5c, 0xec, 0x4d, 0x27, 0x66, 0x95, 0xd3, 0x29, 0x8d, 0x3f, 0xa1, - 0x29, 0x18, 0x6e, 0x98, 0x4d, 0xd3, 0x9b, 0x4e, 0x52, 0x30, 0x7b, 0x40, 0x33, 0x90, 0xab, 0xda, - 0x6d, 0xcb, 0xd3, 0x3d, 0xdb, 0x33, 0x1a, 0xd3, 0xa9, 0x59, 0xe5, 0x74, 0x46, 0x03, 0x0a, 0xda, - 0x24, 0x10, 0xf5, 0x59, 0x18, 0x65, 0xed, 0xb9, 0x2d, 0xdb, 0x72, 0x31, 0x3a, 0x0e, 0x19, 0x0b, - 0xef, 0x79, 0x7a, 0xd0, 0xea, 0x08, 0x79, 0x7e, 0x1e, 0xef, 0x93, 0x16, 0x18, 0x17, 0xd6, 0x30, - 0x7b, 0x28, 0x97, 0x7f, 0xed, 0xed, 0x53, 0xca, 0xaf, 0xbf, 0x7d, 0x4a, 0xf9, 0xdd, 0xb7, 0x4f, - 0x29, 0x9f, 0xfe, 0xd2, 0xa9, 0xa1, 0x5f, 0xff, 0xd2, 0xa9, 0xa1, 0xdf, 0xfe, 0xd2, 0xa9, 0xa1, - 0x97, 0x4f, 0xd7, 0x4d, 0x6f, 0xb7, 0xbd, 0x3d, 0x57, 0xb5, 0x9b, 0xe7, 0xb8, 0x08, 0xd8, 0x9f, - 0x47, 0xdc, 0xda, 0xf5, 0x73, 0xde, 0x7e, 0x0b, 0x73, 0x99, 0x6c, 0xa7, 0xa9, 0x24, 0x1e, 0x83, - 0x5f, 0xb9, 0x04, 0xb3, 0x75, 0xdb, 0xae, 0x37, 0xf0, 0x39, 0x0a, 0xd9, 0x6e, 0xef, 0x9c, 0xab, - 0x61, 0xb7, 0xea, 0x98, 0x2d, 0xcf, 0x76, 0xb8, 0xbc, 0xc6, 0x19, 0xc6, 0x9c, 0xc0, 0x50, 0x57, - 0x60, 0xe2, 0xb2, 0xd9, 0xc0, 0x8b, 0x3e, 0xe2, 0x06, 0xf6, 0xd0, 0x53, 0x90, 0xda, 0x31, 0x1b, - 0x78, 0x5a, 0x99, 0x4d, 0x9e, 0xce, 0x9d, 0xff, 0xc0, 0x5c, 0x84, 0x68, 0x2e, 0x4c, 0xb1, 0x4e, - 0xc0, 0x1a, 0xa5, 0x50, 0x7f, 0x3f, 0x05, 0x93, 0x31, 0x6f, 0x11, 0x82, 0x94, 0x65, 0x34, 0x31, - 0x95, 0x4a, 0x56, 0xa3, 0xbf, 0xd1, 0x34, 0x8c, 0xb4, 0x8c, 0xea, 0x75, 0xa3, 0x8e, 0xa9, 0x50, - 0xb2, 0x9a, 0x78, 0x44, 0xa7, 0x00, 0x6a, 0xb8, 0x85, 0xad, 0x1a, 0xb6, 0xaa, 0xfb, 0xd3, 0xc9, - 0xd9, 0xe4, 0xe9, 0xac, 0x26, 0x41, 0xd0, 0x43, 0x30, 0xd1, 0x6a, 0x6f, 0x37, 0xcc, 0xaa, 0x2e, - 0xa1, 0xc1, 0x6c, 0xf2, 0xf4, 0xb0, 0x56, 0x60, 0x2f, 0x16, 0x03, 0xe4, 0x07, 0x61, 0xfc, 0x26, - 0x36, 0xae, 0xcb, 0xa8, 0x39, 0x8a, 0x9a, 0x27, 0x60, 0x09, 0x71, 0x01, 0x46, 0x9b, 0xd8, 0x75, - 0x8d, 0x3a, 0xd6, 0x89, 0x7c, 0xa7, 0x53, 0x74, 0xf4, 0xb3, 0x1d, 0xa3, 0x8f, 0x8e, 0x3c, 0xc7, - 0xa9, 0x36, 0xf7, 0x5b, 0x18, 0xcd, 0x43, 0x16, 0x5b, 0xed, 0x26, 0xe3, 0x30, 0xdc, 0x45, 0x7e, - 0x15, 0xab, 0xdd, 0x8c, 0x72, 0xc9, 0x10, 0x32, 0xce, 0x62, 0xc4, 0xc5, 0xce, 0x0d, 0xb3, 0x8a, - 0xa7, 0xd3, 0x94, 0xc1, 0x83, 0x1d, 0x0c, 0x36, 0xd8, 0xfb, 0x28, 0x0f, 0x41, 0x87, 0x16, 0x20, - 0x8b, 0xf7, 0x3c, 0x6c, 0xb9, 0xa6, 0x6d, 0x4d, 0x8f, 0x50, 0x26, 0xf7, 0xc7, 0xcc, 0x22, 0x6e, - 0xd4, 0xa2, 0x2c, 0x02, 0x3a, 0xf4, 0x04, 0x8c, 0xd8, 0x2d, 0xb2, 0xd6, 0xdc, 0xe9, 0xcc, 0xac, - 0x72, 0x3a, 0x77, 0xfe, 0x9e, 0x58, 0x45, 0x58, 0x63, 0x38, 0x9a, 0x40, 0x46, 0x4b, 0x50, 0x70, - 0xed, 0xb6, 0x53, 0xc5, 0x7a, 0xd5, 0xae, 0x61, 0xdd, 0xb4, 0x76, 0xec, 0xe9, 0x2c, 0x65, 0x30, - 0xd3, 0x39, 0x10, 0x8a, 0xb8, 0x60, 0xd7, 0xf0, 0x92, 0xb5, 0x63, 0x6b, 0x79, 0x37, 0xf4, 0x4c, - 0xd6, 0xab, 0xbb, 0x6f, 0x79, 0xc6, 0xde, 0xf4, 0x28, 0xd5, 0x10, 0xfe, 0xa4, 0xfe, 0x52, 0x1a, - 0xc6, 0x07, 0x51, 0xb1, 0x4b, 0x30, 0xbc, 0x43, 0x46, 0x39, 0x9d, 0x38, 0x8c, 0x0c, 0x18, 0x4d, - 0x58, 0x88, 0xe9, 0x3b, 0x14, 0xe2, 0x3c, 0xe4, 0x2c, 0xec, 0x7a, 0xb8, 0xc6, 0x34, 0x22, 0x39, - 0xa0, 0x4e, 0x01, 0x23, 0xea, 0x54, 0xa9, 0xd4, 0x1d, 0xa9, 0xd4, 0x4b, 0x30, 0xee, 0x77, 0x49, - 0x77, 0x0c, 0xab, 0x2e, 0x74, 0xf3, 0x5c, 0xbf, 0x9e, 0xcc, 0x55, 0x04, 0x9d, 0x46, 0xc8, 0xb4, - 0x3c, 0x0e, 0x3d, 0xa3, 0x45, 0x00, 0xdb, 0xc2, 0xf6, 0x8e, 0x5e, 0xc3, 0xd5, 0xc6, 0x74, 0xa6, - 0x8b, 0x94, 0xd6, 0x08, 0x4a, 0x87, 0x94, 0x6c, 0x06, 0xad, 0x36, 0xd0, 0xc5, 0x40, 0xd5, 0x46, - 0xba, 0x68, 0xca, 0x0a, 0x5b, 0x64, 0x1d, 0xda, 0xb6, 0x05, 0x79, 0x07, 0x13, 0xbd, 0xc7, 0x35, - 0x3e, 0xb2, 0x2c, 0xed, 0xc4, 0x5c, 0xdf, 0x91, 0x69, 0x9c, 0x8c, 0x0d, 0x6c, 0xcc, 0x91, 0x1f, - 0xd1, 0x7d, 0xe0, 0x03, 0x74, 0xaa, 0x56, 0x40, 0xad, 0xd0, 0xa8, 0x00, 0xae, 0x1a, 0x4d, 0x5c, - 0xbc, 0x05, 0xf9, 0xb0, 0x78, 0x88, 0x99, 0x77, 0x3d, 0xc3, 0xf1, 0xa8, 0x16, 0x0e, 0x6b, 0xec, - 0x81, 0x38, 0x22, 0x6c, 0xd5, 0xa8, 0x95, 0x1b, 0xd6, 0xc8, 0x4f, 0xf4, 0xe1, 0x60, 0xc0, 0x49, - 0x3a, 0xe0, 0x07, 0x3a, 0x67, 0x34, 0xc4, 0x39, 0x3a, 0xee, 0xe2, 0x93, 0x30, 0x16, 0x1a, 0xc0, - 0xa0, 0x4d, 0xab, 0xdf, 0x0a, 0x47, 0x62, 0x59, 0xa3, 0x97, 0x60, 0xaa, 0x6d, 0x99, 0x96, 0x87, - 0x9d, 0x96, 0x83, 0x89, 0xc6, 0xb2, 0xa6, 0xa6, 0xff, 0x60, 0xa4, 0x8b, 0xce, 0x6d, 0xc9, 0xd8, - 0x8c, 0x8b, 0x36, 0xd9, 0xee, 0x04, 0x9e, 0xcd, 0x66, 0xbe, 0x3c, 0x52, 0x78, 0xed, 0xb5, 0xd7, - 0x5e, 0x4b, 0xa8, 0xff, 0x24, 0x0d, 0x53, 0x71, 0x6b, 0x26, 0x76, 0xf9, 0x1e, 0x85, 0xb4, 0xd5, - 0x6e, 0x6e, 0x63, 0x87, 0x0a, 0x69, 0x58, 0xe3, 0x4f, 0x68, 0x1e, 0x86, 0x1b, 0xc6, 0x36, 0x66, - 0x2e, 0x39, 0x7f, 0xfe, 0xa1, 0x81, 0x56, 0xe5, 0xdc, 0x32, 0x21, 0xd1, 0x18, 0x25, 0x7a, 0x06, - 0x52, 0xdc, 0x44, 0x13, 0x0e, 0x67, 0x07, 0xe3, 0x40, 0xd6, 0x92, 0x46, 0xe9, 0xd0, 0x09, 0xc8, - 0x92, 0xbf, 0x4c, 0x37, 0xd2, 0xb4, 0xcf, 0x19, 0x02, 0x20, 0x7a, 0x81, 0x8a, 0x90, 0xa1, 0xcb, - 0xa4, 0x86, 0x85, 0x6b, 0xf3, 0x9f, 0x89, 0x62, 0xd5, 0xf0, 0x8e, 0xd1, 0x6e, 0x78, 0xfa, 0x0d, - 0xa3, 0xd1, 0xc6, 0x54, 0xe1, 0xb3, 0xda, 0x28, 0x07, 0x5e, 0x23, 0x30, 0x12, 0x79, 0xb0, 0x55, - 0x65, 0x5a, 0x35, 0xbc, 0x47, 0xad, 0xe7, 0xb0, 0xc6, 0x16, 0xda, 0x12, 0x81, 0x90, 0xe6, 0x5f, - 0x71, 0x6d, 0x4b, 0xa8, 0x26, 0x6d, 0x82, 0x00, 0x68, 0xf3, 0x4f, 0x46, 0x0d, 0xf7, 0xc9, 0xf8, - 0xe1, 0x75, 0xac, 0xa5, 0x07, 0x61, 0x9c, 0x05, 0x13, 0x7c, 0xea, 0x8d, 0xc6, 0xf4, 0x04, 0x0d, - 0x7a, 0xf2, 0x0c, 0xbc, 0xc6, 0xa1, 0xea, 0x2f, 0x24, 0x20, 0x45, 0x0d, 0xcb, 0x38, 0xe4, 0x36, - 0x3f, 0xb2, 0x5e, 0xd1, 0x17, 0xd7, 0xb6, 0xca, 0xcb, 0x95, 0x82, 0x82, 0xf2, 0x00, 0x14, 0x70, - 0x79, 0x79, 0x6d, 0x7e, 0xb3, 0x90, 0xf0, 0x9f, 0x97, 0x56, 0x37, 0x9f, 0xb8, 0x50, 0x48, 0xfa, - 0x04, 0x5b, 0x0c, 0x90, 0x92, 0x11, 0x1e, 0x3b, 0x5f, 0x18, 0x46, 0x05, 0x18, 0x65, 0x0c, 0x96, - 0x5e, 0xaa, 0x2c, 0x3e, 0x71, 0xa1, 0x90, 0x0e, 0x43, 0x1e, 0x3b, 0x5f, 0x18, 0x41, 0x63, 0x90, - 0xa5, 0x90, 0xf2, 0xda, 0xda, 0x72, 0x21, 0xe3, 0xf3, 0xdc, 0xd8, 0xd4, 0x96, 0x56, 0xaf, 0x14, - 0xb2, 0x3e, 0xcf, 0x2b, 0xda, 0xda, 0xd6, 0x7a, 0x01, 0x7c, 0x0e, 0x2b, 0x95, 0x8d, 0x8d, 0xf9, - 0x2b, 0x95, 0x42, 0xce, 0xc7, 0x28, 0x7f, 0x64, 0xb3, 0xb2, 0x51, 0x18, 0x0d, 0x75, 0xeb, 0xb1, - 0xf3, 0x85, 0x31, 0xbf, 0x89, 0xca, 0xea, 0xd6, 0x4a, 0x21, 0x8f, 0x26, 0x60, 0x8c, 0x35, 0x21, - 0x3a, 0x31, 0x1e, 0x01, 0x3d, 0x71, 0xa1, 0x50, 0x08, 0x3a, 0xc2, 0xb8, 0x4c, 0x84, 0x00, 0x4f, - 0x5c, 0x28, 0x20, 0x75, 0x01, 0x86, 0xa9, 0x1a, 0x22, 0x04, 0xf9, 0xe5, 0xf9, 0x72, 0x65, 0x59, - 0x5f, 0x5b, 0xdf, 0x5c, 0x5a, 0x5b, 0x9d, 0x5f, 0x2e, 0x28, 0x01, 0x4c, 0xab, 0xbc, 0xb0, 0xb5, - 0xa4, 0x55, 0x16, 0x0b, 0x09, 0x19, 0xb6, 0x5e, 0x99, 0xdf, 0xac, 0x2c, 0x16, 0x92, 0x6a, 0x15, - 0xa6, 0xe2, 0x0c, 0x6a, 0xec, 0x12, 0x92, 0x74, 0x21, 0xd1, 0x45, 0x17, 0x28, 0xaf, 0xa8, 0x2e, - 0xa8, 0x5f, 0x4a, 0xc0, 0x64, 0x8c, 0x53, 0x89, 0x6d, 0xe4, 0x59, 0x18, 0x66, 0xba, 0xcc, 0xdc, - 0xec, 0x99, 0x58, 0xef, 0x44, 0x35, 0xbb, 0xc3, 0xd5, 0x52, 0x3a, 0x39, 0xd4, 0x48, 0x76, 0x09, - 0x35, 0x08, 0x8b, 0x0e, 0x85, 0xfd, 0x58, 0x87, 0xf1, 0x67, 0xfe, 0xf1, 0x89, 0x41, 0xfc, 0x23, - 0x85, 0x1d, 0xce, 0x09, 0x0c, 0xc7, 0x38, 0x81, 0x4b, 0x30, 0xd1, 0xc1, 0x68, 0x60, 0x63, 0xfc, - 0x49, 0x05, 0xa6, 0xbb, 0x09, 0xa7, 0x8f, 0x49, 0x4c, 0x84, 0x4c, 0xe2, 0xa5, 0xa8, 0x04, 0xef, - 0xed, 0x3e, 0x09, 0x1d, 0x73, 0xfd, 0x53, 0x0a, 0x1c, 0x8d, 0x0f, 0x29, 0x63, 0xfb, 0xf0, 0x0c, - 0xa4, 0x9b, 0xd8, 0xdb, 0xb5, 0x45, 0x58, 0xf5, 0x40, 0x8c, 0xb3, 0x26, 0xaf, 0xa3, 0x93, 0xcd, - 0xa9, 0x64, 0x6f, 0x9f, 0xec, 0x16, 0x17, 0xb2, 0xde, 0x74, 0xf4, 0xf4, 0xbb, 0x12, 0x70, 0x24, - 0x96, 0x79, 0x6c, 0x47, 0x4f, 0x02, 0x98, 0x56, 0xab, 0xed, 0xb1, 0xd0, 0x89, 0x59, 0xe2, 0x2c, - 0x85, 0x50, 0xe3, 0x45, 0xac, 0x6c, 0xdb, 0xf3, 0xdf, 0x27, 0xe9, 0x7b, 0x60, 0x20, 0x8a, 0xf0, - 0x54, 0xd0, 0xd1, 0x14, 0xed, 0xe8, 0xa9, 0x2e, 0x23, 0xed, 0x50, 0xcc, 0x47, 0xa1, 0x50, 0x6d, - 0x98, 0xd8, 0xf2, 0x74, 0xd7, 0x73, 0xb0, 0xd1, 0x34, 0xad, 0x3a, 0x75, 0x35, 0x99, 0xd2, 0xf0, - 0x8e, 0xd1, 0x70, 0xb1, 0x36, 0xce, 0x5e, 0x6f, 0x88, 0xb7, 0x84, 0x82, 0x2a, 0x90, 0x23, 0x51, - 0xa4, 0x43, 0x14, 0xec, 0xb5, 0x4f, 0xa1, 0x7e, 0x26, 0x0b, 0x39, 0x29, 0x00, 0x47, 0xf7, 0xc2, - 0xe8, 0x2b, 0xc6, 0x0d, 0x43, 0x17, 0x49, 0x15, 0x93, 0x44, 0x8e, 0xc0, 0xd6, 0x79, 0x62, 0xf5, - 0x28, 0x4c, 0x51, 0x14, 0xbb, 0xed, 0x61, 0x47, 0xaf, 0x36, 0x0c, 0xd7, 0xa5, 0x42, 0xcb, 0x50, - 0x54, 0x44, 0xde, 0xad, 0x91, 0x57, 0x0b, 0xe2, 0x0d, 0x7a, 0x1c, 0x26, 0x29, 0x45, 0xb3, 0xdd, - 0xf0, 0xcc, 0x56, 0x03, 0xeb, 0x24, 0xcd, 0x73, 0xa9, 0xcb, 0xf1, 0x7b, 0x36, 0x41, 0x30, 0x56, - 0x38, 0x02, 0xe9, 0x91, 0x8b, 0x16, 0xe1, 0x24, 0x25, 0xab, 0x63, 0x0b, 0x3b, 0x86, 0x87, 0x75, - 0xfc, 0x6a, 0xdb, 0x68, 0xb8, 0xba, 0x61, 0xd5, 0xf4, 0x5d, 0xc3, 0xdd, 0x9d, 0x9e, 0x22, 0x0c, - 0xca, 0x89, 0x69, 0x45, 0x3b, 0x4e, 0x10, 0xaf, 0x70, 0xbc, 0x0a, 0x45, 0x9b, 0xb7, 0x6a, 0x57, - 0x0d, 0x77, 0x17, 0x95, 0xe0, 0x28, 0xe5, 0xe2, 0x7a, 0x8e, 0x69, 0xd5, 0xf5, 0xea, 0x2e, 0xae, - 0x5e, 0xd7, 0xdb, 0xde, 0xce, 0x53, 0xd3, 0x27, 0xe4, 0xf6, 0x69, 0x0f, 0x37, 0x28, 0xce, 0x02, - 0x41, 0xd9, 0xf2, 0x76, 0x9e, 0x42, 0x1b, 0x30, 0x4a, 0x26, 0xa3, 0x69, 0xde, 0xc2, 0xfa, 0x8e, - 0xed, 0x50, 0x1f, 0x9a, 0x8f, 0x31, 0x4d, 0x92, 0x04, 0xe7, 0xd6, 0x38, 0xc1, 0x8a, 0x5d, 0xc3, - 0xa5, 0xe1, 0x8d, 0xf5, 0x4a, 0x65, 0x51, 0xcb, 0x09, 0x2e, 0x97, 0x6d, 0x87, 0x28, 0x54, 0xdd, - 0xf6, 0x05, 0x9c, 0x63, 0x0a, 0x55, 0xb7, 0x85, 0x78, 0x1f, 0x87, 0xc9, 0x6a, 0x95, 0x8d, 0xd9, - 0xac, 0xea, 0x3c, 0x19, 0x73, 0xa7, 0x0b, 0x21, 0x61, 0x55, 0xab, 0x57, 0x18, 0x02, 0xd7, 0x71, - 0x17, 0x5d, 0x84, 0x23, 0x81, 0xb0, 0x64, 0xc2, 0x89, 0x8e, 0x51, 0x46, 0x49, 0x1f, 0x87, 0xc9, - 0xd6, 0x7e, 0x27, 0x21, 0x0a, 0xb5, 0xd8, 0xda, 0x8f, 0x92, 0x3d, 0x09, 0x53, 0xad, 0xdd, 0x56, - 0x27, 0xdd, 0x59, 0x99, 0x0e, 0xb5, 0x76, 0x5b, 0x51, 0xc2, 0xfb, 0x69, 0x66, 0xee, 0xe0, 0xaa, - 0xe1, 0xe1, 0xda, 0xf4, 0x31, 0x19, 0x5d, 0x7a, 0x81, 0xe6, 0xa0, 0x50, 0xad, 0xea, 0xd8, 0x32, - 0xb6, 0x1b, 0x58, 0x37, 0x1c, 0x6c, 0x19, 0xee, 0xf4, 0x0c, 0x45, 0x4e, 0x79, 0x4e, 0x1b, 0x6b, - 0xf9, 0x6a, 0xb5, 0x42, 0x5f, 0xce, 0xd3, 0x77, 0xe8, 0x2c, 0x4c, 0xd8, 0xdb, 0xaf, 0x54, 0x99, - 0x46, 0xea, 0x2d, 0x07, 0xef, 0x98, 0x7b, 0xd3, 0x1f, 0xa0, 0xe2, 0x1d, 0x27, 0x2f, 0xa8, 0x3e, - 0xae, 0x53, 0x30, 0x3a, 0x03, 0x85, 0xaa, 0xbb, 0x6b, 0x38, 0x2d, 0x6a, 0x92, 0xdd, 0x96, 0x51, - 0xc5, 0xd3, 0xf7, 0x33, 0x54, 0x06, 0x5f, 0x15, 0x60, 0xb2, 0x22, 0xdc, 0x9b, 0xe6, 0x8e, 0x27, - 0x38, 0x3e, 0xc8, 0x56, 0x04, 0x85, 0x71, 0x6e, 0xa7, 0xa1, 0x40, 0x24, 0x11, 0x6a, 0xf8, 0x34, - 0x45, 0xcb, 0xb7, 0x76, 0x5b, 0x72, 0xbb, 0xf7, 0xc1, 0x18, 0xc1, 0x0c, 0x1a, 0x3d, 0xc3, 0x02, - 0xb7, 0xd6, 0xae, 0xd4, 0xe2, 0x05, 0x38, 0x4a, 0x90, 0x9a, 0xd8, 0x33, 0x6a, 0x86, 0x67, 0x48, - 0xd8, 0x0f, 0x53, 0x6c, 0x22, 0xf6, 0x15, 0xfe, 0x32, 0xd4, 0x4f, 0xa7, 0xbd, 0xbd, 0xef, 0x2b, - 0xd6, 0x23, 0xac, 0x9f, 0x04, 0x26, 0x54, 0xeb, 0x5d, 0x0b, 0xce, 0xd5, 0x12, 0x8c, 0xca, 0x7a, - 0x8f, 0xb2, 0xc0, 0x34, 0xbf, 0xa0, 0x90, 0x20, 0x68, 0x61, 0x6d, 0x91, 0x84, 0x2f, 0x2f, 0x57, - 0x0a, 0x09, 0x12, 0x46, 0x2d, 0x2f, 0x6d, 0x56, 0x74, 0x6d, 0x6b, 0x75, 0x73, 0x69, 0xa5, 0x52, - 0x48, 0x4a, 0x81, 0xfd, 0x73, 0xa9, 0xcc, 0x03, 0x85, 0x07, 0xd5, 0xdf, 0x48, 0x40, 0x3e, 0x9c, - 0xa9, 0xa1, 0x0f, 0xc1, 0x31, 0x51, 0x56, 0x71, 0xb1, 0xa7, 0xdf, 0x34, 0x1d, 0xba, 0x20, 0x9b, - 0x06, 0x73, 0x8e, 0xbe, 0xfe, 0x4c, 0x71, 0xac, 0x0d, 0xec, 0xbd, 0x68, 0x3a, 0x64, 0xb9, 0x35, - 0x0d, 0x0f, 0x2d, 0xc3, 0x8c, 0x65, 0xeb, 0xae, 0x67, 0x58, 0x35, 0xc3, 0xa9, 0xe9, 0x41, 0x41, - 0x4b, 0x37, 0xaa, 0x55, 0xec, 0xba, 0x36, 0x73, 0x84, 0x3e, 0x97, 0x7b, 0x2c, 0x7b, 0x83, 0x23, - 0x07, 0x1e, 0x62, 0x9e, 0xa3, 0x46, 0xd4, 0x37, 0xd9, 0x4d, 0x7d, 0x4f, 0x40, 0xb6, 0x69, 0xb4, - 0x74, 0x6c, 0x79, 0xce, 0x3e, 0x8d, 0xcf, 0x33, 0x5a, 0xa6, 0x69, 0xb4, 0x2a, 0xe4, 0xf9, 0x3d, - 0x49, 0x93, 0x9e, 0x4b, 0x65, 0x32, 0x85, 0xec, 0x73, 0xa9, 0x4c, 0xb6, 0x00, 0xea, 0xdb, 0x49, - 0x18, 0x95, 0xe3, 0x75, 0x92, 0xfe, 0x54, 0xa9, 0xc7, 0x52, 0xa8, 0x4d, 0xbb, 0xaf, 0x67, 0x74, - 0x3f, 0xb7, 0x40, 0x5c, 0x59, 0x29, 0xcd, 0x82, 0x63, 0x8d, 0x51, 0x92, 0x30, 0x82, 0x28, 0x1b, - 0x66, 0xc1, 0x48, 0x46, 0xe3, 0x4f, 0xe8, 0x0a, 0xa4, 0x5f, 0x71, 0x29, 0xef, 0x34, 0xe5, 0xfd, - 0x81, 0xde, 0xbc, 0x9f, 0xdb, 0xa0, 0xcc, 0xb3, 0xcf, 0x6d, 0xe8, 0xab, 0x6b, 0xda, 0xca, 0xfc, - 0xb2, 0xc6, 0xc9, 0xd1, 0x71, 0x48, 0x35, 0x8c, 0x5b, 0xfb, 0x61, 0xa7, 0x47, 0x41, 0x83, 0x4e, - 0xc2, 0x71, 0x48, 0xdd, 0xc4, 0xc6, 0xf5, 0xb0, 0xab, 0xa1, 0xa0, 0x77, 0x71, 0x31, 0x9c, 0x83, - 0x61, 0x2a, 0x2f, 0x04, 0xc0, 0x25, 0x56, 0x18, 0x42, 0x19, 0x48, 0x2d, 0xac, 0x69, 0x64, 0x41, - 0x14, 0x60, 0x94, 0x41, 0xf5, 0xf5, 0xa5, 0xca, 0x42, 0xa5, 0x90, 0x50, 0x1f, 0x87, 0x34, 0x13, - 0x02, 0x59, 0x2c, 0xbe, 0x18, 0x0a, 0x43, 0xfc, 0x91, 0xf3, 0x50, 0xc4, 0xdb, 0xad, 0x95, 0x72, - 0x45, 0x2b, 0x24, 0xc2, 0x53, 0x9d, 0x2a, 0x0c, 0xab, 0x2e, 0x8c, 0xca, 0x71, 0xf8, 0x7b, 0x93, - 0x8c, 0x7f, 0x51, 0x81, 0x9c, 0x14, 0x57, 0x93, 0x80, 0xc8, 0x68, 0x34, 0xec, 0x9b, 0xba, 0xd1, - 0x30, 0x0d, 0x97, 0xab, 0x06, 0x50, 0xd0, 0x3c, 0x81, 0x0c, 0x3a, 0x75, 0xef, 0xd1, 0x12, 0x19, - 0x2e, 0xa4, 0xd5, 0x1f, 0x55, 0xa0, 0x10, 0x0d, 0x6c, 0x23, 0xdd, 0x54, 0xfe, 0x34, 0xbb, 0xa9, - 0xfe, 0x88, 0x02, 0xf9, 0x70, 0x34, 0x1b, 0xe9, 0xde, 0xbd, 0x7f, 0xaa, 0xdd, 0xfb, 0xdd, 0x04, - 0x8c, 0x85, 0x62, 0xd8, 0x41, 0x7b, 0xf7, 0x2a, 0x4c, 0x98, 0x35, 0xdc, 0x6c, 0xd9, 0x1e, 0xb6, - 0xaa, 0xfb, 0x7a, 0x03, 0xdf, 0xc0, 0x8d, 0x69, 0x95, 0x1a, 0x8d, 0x73, 0xbd, 0xa3, 0xe4, 0xb9, - 0xa5, 0x80, 0x6e, 0x99, 0x90, 0x95, 0x26, 0x97, 0x16, 0x2b, 0x2b, 0xeb, 0x6b, 0x9b, 0x95, 0xd5, - 0x85, 0x8f, 0xe8, 0x5b, 0xab, 0xcf, 0xaf, 0xae, 0xbd, 0xb8, 0xaa, 0x15, 0xcc, 0x08, 0xda, 0xbb, - 0xb8, 0xec, 0xd7, 0xa1, 0x10, 0xed, 0x14, 0x3a, 0x06, 0x71, 0xdd, 0x2a, 0x0c, 0xa1, 0x49, 0x18, - 0x5f, 0x5d, 0xd3, 0x37, 0x96, 0x16, 0x2b, 0x7a, 0xe5, 0xf2, 0xe5, 0xca, 0xc2, 0xe6, 0x06, 0xab, - 0x7b, 0xf8, 0xd8, 0x9b, 0xa1, 0x05, 0xae, 0xfe, 0x70, 0x12, 0x26, 0x63, 0x7a, 0x82, 0xe6, 0x79, - 0xc6, 0xc2, 0x92, 0xa8, 0x47, 0x06, 0xe9, 0xfd, 0x1c, 0x89, 0x19, 0xd6, 0x0d, 0xc7, 0xe3, 0x09, - 0xce, 0x19, 0x20, 0x52, 0xb2, 0x3c, 0x73, 0xc7, 0xc4, 0x0e, 0xaf, 0x27, 0xb1, 0x34, 0x66, 0x3c, - 0x80, 0xb3, 0x92, 0xd2, 0xc3, 0x80, 0x5a, 0xb6, 0x6b, 0x7a, 0xe6, 0x0d, 0xac, 0x9b, 0x96, 0x28, - 0x3e, 0xa5, 0xe8, 0x6e, 0x54, 0x41, 0xbc, 0x59, 0xb2, 0x3c, 0x1f, 0xdb, 0xc2, 0x75, 0x23, 0x82, - 0x4d, 0x8c, 0x79, 0x52, 0x2b, 0x88, 0x37, 0x3e, 0xf6, 0xbd, 0x30, 0x5a, 0xb3, 0xdb, 0x24, 0xd6, - 0x63, 0x78, 0xc4, 0x77, 0x28, 0x5a, 0x8e, 0xc1, 0x7c, 0x14, 0x1e, 0xc5, 0x07, 0x55, 0xaf, 0x51, - 0x2d, 0xc7, 0x60, 0x0c, 0xe5, 0x41, 0x18, 0x37, 0xea, 0x75, 0x87, 0x30, 0x17, 0x8c, 0x58, 0x5e, - 0x92, 0xf7, 0xc1, 0x14, 0xb1, 0xf8, 0x1c, 0x64, 0x84, 0x1c, 0x88, 0xab, 0x26, 0x92, 0xd0, 0x5b, - 0x2c, 0xd9, 0x4e, 0x9c, 0xce, 0x6a, 0x19, 0x4b, 0xbc, 0xbc, 0x17, 0x46, 0x4d, 0x57, 0x0f, 0x8a, - 0xf8, 0x89, 0xd9, 0xc4, 0xe9, 0x8c, 0x96, 0x33, 0x5d, 0xbf, 0x00, 0xaa, 0xfe, 0x54, 0x02, 0xf2, - 0xe1, 0x4d, 0x08, 0xb4, 0x08, 0x99, 0x86, 0x5d, 0xa5, 0xbb, 0x8c, 0x7c, 0x07, 0xec, 0x74, 0x9f, - 0x7d, 0x8b, 0xb9, 0x65, 0x8e, 0xaf, 0xf9, 0x94, 0xc5, 0x7f, 0xa3, 0x40, 0x46, 0x80, 0xd1, 0x51, - 0x48, 0xb5, 0x0c, 0x6f, 0x97, 0xb2, 0x1b, 0x2e, 0x27, 0x0a, 0x8a, 0x46, 0x9f, 0x09, 0xdc, 0x6d, - 0x19, 0x16, 0x55, 0x01, 0x0e, 0x27, 0xcf, 0x64, 0x5e, 0x1b, 0xd8, 0xa8, 0xd1, 0xa4, 0xc7, 0x6e, - 0x36, 0xb1, 0xe5, 0xb9, 0x62, 0x5e, 0x39, 0x7c, 0x81, 0x83, 0xd1, 0x43, 0x30, 0xe1, 0x39, 0x86, - 0xd9, 0x08, 0xe1, 0xa6, 0x28, 0x6e, 0x41, 0xbc, 0xf0, 0x91, 0x4b, 0x70, 0x5c, 0xf0, 0xad, 0x61, - 0xcf, 0xa8, 0xee, 0xe2, 0x5a, 0x40, 0x94, 0xa6, 0xc5, 0x8d, 0x63, 0x1c, 0x61, 0x91, 0xbf, 0x17, - 0xb4, 0xea, 0x6f, 0x28, 0x30, 0x21, 0xd2, 0xb4, 0x9a, 0x2f, 0xac, 0x15, 0x00, 0xc3, 0xb2, 0x6c, - 0x4f, 0x16, 0x57, 0xa7, 0x2a, 0x77, 0xd0, 0xcd, 0xcd, 0xfb, 0x44, 0x9a, 0xc4, 0xa0, 0xd8, 0x04, - 0x08, 0xde, 0x74, 0x15, 0xdb, 0x0c, 0xe4, 0xf8, 0x0e, 0x13, 0xdd, 0xa6, 0x64, 0x89, 0x3d, 0x30, - 0x10, 0xc9, 0xe7, 0xd0, 0x14, 0x0c, 0x6f, 0xe3, 0xba, 0x69, 0xf1, 0xba, 0x31, 0x7b, 0x10, 0xe5, - 0x97, 0x94, 0x5f, 0x7e, 0x29, 0x7f, 0x9f, 0x02, 0x93, 0x55, 0xbb, 0x19, 0xed, 0x6f, 0xb9, 0x10, - 0xa9, 0x2e, 0xb8, 0x57, 0x95, 0x97, 0x9f, 0x91, 0x76, 0x64, 0xeb, 0x76, 0xc3, 0xb0, 0xea, 0xc1, - 0x3e, 0x2b, 0xfd, 0x51, 0x7d, 0xa4, 0x8e, 0xad, 0x47, 0xea, 0xb6, 0xb4, 0xeb, 0x7a, 0x29, 0xf8, - 0xf9, 0xff, 0x14, 0xe5, 0xc7, 0x13, 0xc9, 0x2b, 0xeb, 0xe5, 0xcf, 0x27, 0x8a, 0x57, 0x58, 0x73, - 0xeb, 0x42, 0x3c, 0x1a, 0xde, 0x69, 0xe0, 0x2a, 0x19, 0x32, 0x7c, 0xe5, 0x21, 0x98, 0xaa, 0xdb, - 0x75, 0x9b, 0x72, 0x3c, 0x47, 0x7e, 0xf1, 0x9d, 0xdb, 0xac, 0x0f, 0x2d, 0xf6, 0xdd, 0xe6, 0x2d, - 0xad, 0xc2, 0x24, 0x47, 0xd6, 0xe9, 0xd6, 0x11, 0x4b, 0x6c, 0x50, 0xcf, 0xaa, 0xda, 0xf4, 0xcf, - 0xfe, 0x3e, 0x75, 0xe8, 0xda, 0x04, 0x27, 0x25, 0xef, 0x58, 0xee, 0x53, 0xd2, 0xe0, 0x48, 0x88, - 0x1f, 0x5b, 0xb6, 0xd8, 0xe9, 0xc3, 0xf1, 0x9f, 0x73, 0x8e, 0x93, 0x12, 0xc7, 0x0d, 0x4e, 0x5a, - 0x5a, 0x80, 0xb1, 0xc3, 0xf0, 0xfa, 0x17, 0x9c, 0xd7, 0x28, 0x96, 0x99, 0x5c, 0x81, 0x71, 0xca, - 0xa4, 0xda, 0x76, 0x3d, 0xbb, 0x49, 0x6d, 0x62, 0x6f, 0x36, 0xbf, 0xfa, 0xfb, 0x6c, 0x1d, 0xe5, - 0x09, 0xd9, 0x82, 0x4f, 0x55, 0x2a, 0x01, 0xdd, 0x2d, 0xab, 0xe1, 0x6a, 0xa3, 0x0f, 0x87, 0x5f, - 0xe3, 0x1d, 0xf1, 0xf1, 0x4b, 0xd7, 0x60, 0x8a, 0xfc, 0xa6, 0x26, 0x4b, 0xee, 0x49, 0xff, 0x12, - 0xdc, 0xf4, 0x6f, 0x7c, 0x92, 0x2d, 0xd5, 0x49, 0x9f, 0x81, 0xd4, 0x27, 0x69, 0x16, 0xeb, 0xd8, - 0xf3, 0xb0, 0xe3, 0xea, 0x46, 0x23, 0xae, 0x7b, 0x52, 0x0d, 0x63, 0xfa, 0x87, 0xbe, 0x1a, 0x9e, - 0xc5, 0x2b, 0x8c, 0x72, 0xbe, 0xd1, 0x28, 0x6d, 0xc1, 0xb1, 0x18, 0xad, 0x18, 0x80, 0xe7, 0x0f, - 0x73, 0x9e, 0x53, 0x1d, 0x9a, 0x41, 0xd8, 0xae, 0x83, 0x80, 0xfb, 0x73, 0x39, 0x00, 0xcf, 0xbf, - 0xce, 0x79, 0x22, 0x4e, 0x2b, 0xa6, 0x94, 0x70, 0x7c, 0x0e, 0x26, 0x6e, 0x60, 0x67, 0xdb, 0x76, - 0x79, 0xdd, 0x68, 0x00, 0x76, 0x3f, 0xc2, 0xd9, 0x8d, 0x73, 0x42, 0x5a, 0x48, 0x22, 0xbc, 0x2e, - 0x42, 0x66, 0xc7, 0xa8, 0xe2, 0x01, 0x58, 0xbc, 0xc9, 0x59, 0x8c, 0x10, 0x7c, 0x42, 0x3a, 0x0f, - 0xa3, 0x75, 0x9b, 0x7b, 0xad, 0xfe, 0xe4, 0x3f, 0xca, 0xc9, 0x73, 0x82, 0x86, 0xb3, 0x68, 0xd9, - 0xad, 0x76, 0x83, 0xb8, 0xb4, 0xfe, 0x2c, 0x7e, 0x4c, 0xb0, 0x10, 0x34, 0x9c, 0xc5, 0x21, 0xc4, - 0xfa, 0x96, 0x60, 0xe1, 0x4a, 0xf2, 0x7c, 0x16, 0x72, 0xb6, 0xd5, 0xd8, 0xb7, 0xad, 0x41, 0x3a, - 0xf1, 0x59, 0xce, 0x01, 0x38, 0x09, 0x61, 0x70, 0x09, 0xb2, 0x83, 0x4e, 0xc4, 0xdf, 0xf8, 0xaa, - 0x58, 0x1e, 0x62, 0x06, 0xae, 0xc0, 0xb8, 0x30, 0x50, 0xa6, 0x6d, 0x0d, 0xc0, 0xe2, 0x6f, 0x72, - 0x16, 0x79, 0x89, 0x8c, 0x0f, 0xc3, 0xc3, 0xae, 0x57, 0xc7, 0x83, 0x30, 0xf9, 0x29, 0x31, 0x0c, - 0x4e, 0xc2, 0x45, 0xb9, 0x8d, 0xad, 0xea, 0xee, 0x60, 0x1c, 0x3e, 0x27, 0x44, 0x29, 0x68, 0x08, - 0x8b, 0x05, 0x18, 0x6b, 0x1a, 0x8e, 0xbb, 0x6b, 0x34, 0x06, 0x9a, 0x8e, 0xbf, 0xc5, 0x79, 0x8c, - 0xfa, 0x44, 0x5c, 0x22, 0x6d, 0xeb, 0x30, 0x6c, 0x3e, 0x2f, 0x24, 0x22, 0x91, 0xf1, 0xa5, 0xe7, - 0x7a, 0xb4, 0xc8, 0x76, 0x18, 0x6e, 0x7f, 0x5b, 0x2c, 0x3d, 0x46, 0xbb, 0x22, 0x73, 0xbc, 0x04, - 0x59, 0xd7, 0xbc, 0x35, 0x10, 0x9b, 0xbf, 0x23, 0x66, 0x9a, 0x12, 0x10, 0xe2, 0x8f, 0xc0, 0xf1, - 0x58, 0x37, 0x31, 0x00, 0xb3, 0xbf, 0xcb, 0x99, 0x1d, 0x8d, 0x71, 0x15, 0xdc, 0x24, 0x1c, 0x96, - 0xe5, 0x4f, 0x0b, 0x93, 0x80, 0x23, 0xbc, 0xd6, 0x49, 0x1e, 0xe1, 0x1a, 0x3b, 0x87, 0x93, 0xda, - 0xcf, 0x08, 0xa9, 0x31, 0xda, 0x90, 0xd4, 0x36, 0xe1, 0x28, 0xe7, 0x78, 0xb8, 0x79, 0xfd, 0x7b, - 0xc2, 0xb0, 0x32, 0xea, 0xad, 0xf0, 0xec, 0x7e, 0x14, 0x8a, 0xbe, 0x38, 0x45, 0xc0, 0xea, 0xea, - 0x4d, 0xa3, 0x35, 0x00, 0xe7, 0x9f, 0xe5, 0x9c, 0x85, 0xc5, 0xf7, 0x23, 0x5e, 0x77, 0xc5, 0x68, - 0x11, 0xe6, 0x2f, 0xc1, 0xb4, 0x60, 0xde, 0xb6, 0x1c, 0x5c, 0xb5, 0xeb, 0x96, 0x79, 0x0b, 0xd7, - 0x06, 0x60, 0xfd, 0xf7, 0x23, 0x53, 0xb5, 0x25, 0x91, 0x13, 0xce, 0x4b, 0x50, 0xf0, 0x63, 0x15, - 0xdd, 0x6c, 0xb6, 0x6c, 0xc7, 0xeb, 0xc3, 0xf1, 0xe7, 0xc4, 0x4c, 0xf9, 0x74, 0x4b, 0x94, 0xac, - 0x54, 0x01, 0xb6, 0xf3, 0x3c, 0xa8, 0x4a, 0xfe, 0x3c, 0x67, 0x34, 0x16, 0x50, 0x71, 0xc3, 0x51, - 0xb5, 0x9b, 0x2d, 0xc3, 0x19, 0xc4, 0xfe, 0xfd, 0x03, 0x61, 0x38, 0x38, 0x09, 0x37, 0x1c, 0xde, - 0x7e, 0x0b, 0x13, 0x6f, 0x3f, 0x00, 0x87, 0x5f, 0x10, 0x86, 0x43, 0xd0, 0x70, 0x16, 0x22, 0x60, - 0x18, 0x80, 0xc5, 0x2f, 0x0a, 0x16, 0x82, 0x86, 0xb0, 0x78, 0x21, 0x70, 0xb4, 0x0e, 0xae, 0x9b, - 0xae, 0xe7, 0xb0, 0x30, 0xb9, 0x37, 0xab, 0x2f, 0x7c, 0x35, 0x1c, 0x84, 0x69, 0x12, 0x29, 0xb1, - 0x44, 0xbc, 0xec, 0x4a, 0xb3, 0xa8, 0xfe, 0x1d, 0xfb, 0x25, 0x61, 0x89, 0x24, 0x32, 0xd2, 0x37, - 0x29, 0x42, 0x24, 0x62, 0xaf, 0x92, 0xdc, 0x61, 0x00, 0x76, 0xff, 0x30, 0xd2, 0xb9, 0x0d, 0x41, - 0x4b, 0x78, 0x4a, 0xf1, 0x4f, 0xdb, 0xba, 0x8e, 0xf7, 0x07, 0xd2, 0xce, 0x5f, 0x8e, 0xc4, 0x3f, - 0x5b, 0x8c, 0x92, 0xd9, 0x90, 0xf1, 0x48, 0x3c, 0x85, 0xfa, 0x9d, 0x33, 0x9a, 0xfe, 0x8b, 0x5f, - 0xe3, 0xe3, 0x0d, 0x87, 0x53, 0xa5, 0x65, 0xa2, 0xe4, 0xe1, 0xa0, 0xa7, 0x3f, 0xb3, 0x4f, 0x7e, - 0xcd, 0xd7, 0xf3, 0x50, 0xcc, 0x53, 0xba, 0x0c, 0x63, 0xa1, 0x80, 0xa7, 0x3f, 0xab, 0x6f, 0xe3, - 0xac, 0x46, 0xe5, 0x78, 0xa7, 0xf4, 0x38, 0xa4, 0x48, 0xf0, 0xd2, 0x9f, 0xfc, 0xdb, 0x39, 0x39, - 0x45, 0x2f, 0x3d, 0x0d, 0x19, 0x11, 0xb4, 0xf4, 0x27, 0xfd, 0x0e, 0x4e, 0xea, 0x93, 0x10, 0x72, - 0x11, 0xb0, 0xf4, 0x27, 0xff, 0x4e, 0x41, 0x2e, 0x48, 0x08, 0xf9, 0xe0, 0x22, 0xfc, 0xe2, 0x77, - 0xa7, 0xb8, 0xd3, 0x11, 0xb2, 0xbb, 0x04, 0x23, 0x3c, 0x52, 0xe9, 0x4f, 0xfd, 0x5d, 0xbc, 0x71, - 0x41, 0x51, 0x7a, 0x12, 0x86, 0x07, 0x14, 0xf8, 0xf7, 0x70, 0x52, 0x86, 0x5f, 0x5a, 0x80, 0x9c, - 0x14, 0x9d, 0xf4, 0x27, 0xff, 0x5e, 0x4e, 0x2e, 0x53, 0x91, 0xae, 0xf3, 0xe8, 0xa4, 0x3f, 0x83, - 0xef, 0x13, 0x5d, 0xe7, 0x14, 0x44, 0x6c, 0x22, 0x30, 0xe9, 0x4f, 0xfd, 0x69, 0x21, 0x75, 0x41, - 0x52, 0x7a, 0x16, 0xb2, 0xbe, 0xb3, 0xe9, 0x4f, 0xff, 0x19, 0x4e, 0x1f, 0xd0, 0x10, 0x09, 0x48, - 0xce, 0xae, 0x3f, 0x8b, 0xef, 0x17, 0x12, 0x90, 0xa8, 0xc8, 0x32, 0x8a, 0x06, 0x30, 0xfd, 0x39, - 0xfd, 0x15, 0xb1, 0x8c, 0x22, 0xf1, 0x0b, 0x99, 0x4d, 0x6a, 0xf3, 0xfb, 0xb3, 0xf8, 0x01, 0x31, - 0x9b, 0x14, 0x9f, 0x74, 0x23, 0x1a, 0x11, 0xf4, 0xe7, 0xf1, 0xd7, 0x44, 0x37, 0x22, 0x01, 0x41, - 0x69, 0x1d, 0x50, 0x67, 0x34, 0xd0, 0x9f, 0xdf, 0x1b, 0x9c, 0xdf, 0x44, 0x47, 0x30, 0x50, 0x7a, - 0x11, 0x8e, 0xc6, 0x47, 0x02, 0xfd, 0xb9, 0xfe, 0xd0, 0xd7, 0x22, 0xb9, 0x9b, 0x1c, 0x08, 0x94, - 0x36, 0x03, 0x97, 0x22, 0x47, 0x01, 0xfd, 0xd9, 0xfe, 0xf0, 0xd7, 0xc2, 0x86, 0x5b, 0x0e, 0x02, - 0x4a, 0xf3, 0x00, 0x81, 0x03, 0xee, 0xcf, 0xeb, 0x47, 0x38, 0x2f, 0x89, 0x88, 0x2c, 0x0d, 0xee, - 0x7f, 0xfb, 0xd3, 0xbf, 0x29, 0x96, 0x06, 0xa7, 0x20, 0x4b, 0x43, 0xb8, 0xde, 0xfe, 0xd4, 0x3f, - 0x2a, 0x96, 0x86, 0x20, 0x21, 0x9a, 0x2d, 0x79, 0xb7, 0xfe, 0x1c, 0x3e, 0x2b, 0x34, 0x5b, 0xa2, - 0x2a, 0xad, 0xc2, 0x44, 0x87, 0x43, 0xec, 0xcf, 0xea, 0xc7, 0x39, 0xab, 0x42, 0xd4, 0x1f, 0xca, - 0xce, 0x8b, 0x3b, 0xc3, 0xfe, 0xdc, 0x7e, 0x22, 0xe2, 0xbc, 0xb8, 0x2f, 0x2c, 0x5d, 0x82, 0x8c, - 0xd5, 0x6e, 0x34, 0xc8, 0xe2, 0x41, 0xbd, 0xcf, 0x06, 0x4e, 0xff, 0xb7, 0x6f, 0x70, 0xe9, 0x08, - 0x82, 0xd2, 0xe3, 0x30, 0x8c, 0x9b, 0xdb, 0xb8, 0xd6, 0x8f, 0xf2, 0x2b, 0xdf, 0x10, 0x06, 0x93, - 0x60, 0x97, 0x9e, 0x05, 0x60, 0xa5, 0x11, 0xba, 0x3d, 0xd8, 0x87, 0xf6, 0xbf, 0x7f, 0x83, 0x1f, - 0xc6, 0x09, 0x48, 0x02, 0x06, 0xec, 0x68, 0x4f, 0x6f, 0x06, 0x5f, 0x0d, 0x33, 0xa0, 0x33, 0x72, - 0x11, 0x46, 0x5e, 0x71, 0x6d, 0xcb, 0x33, 0xea, 0xfd, 0xa8, 0xff, 0x07, 0xa7, 0x16, 0xf8, 0x44, - 0x60, 0x4d, 0xdb, 0xc1, 0x9e, 0x51, 0x77, 0xfb, 0xd1, 0xfe, 0x4f, 0x4e, 0xeb, 0x13, 0x10, 0xe2, - 0xaa, 0xe1, 0x7a, 0x83, 0x8c, 0xfb, 0x7f, 0x09, 0x62, 0x41, 0x40, 0x3a, 0x4d, 0x7e, 0x5f, 0xc7, - 0xfb, 0xfd, 0x68, 0xff, 0x50, 0x74, 0x9a, 0xe3, 0x97, 0x9e, 0x86, 0x2c, 0xf9, 0xc9, 0x4e, 0xd8, - 0xf5, 0x21, 0xfe, 0xdf, 0x9c, 0x38, 0xa0, 0x20, 0x2d, 0xbb, 0x5e, 0xcd, 0x33, 0xfb, 0x0b, 0xfb, - 0x36, 0x9f, 0x69, 0x81, 0x5f, 0x9a, 0x87, 0x9c, 0xeb, 0xd5, 0x6a, 0x6d, 0x1e, 0x9f, 0xf6, 0x21, - 0xff, 0x3f, 0xdf, 0xf0, 0x4b, 0x16, 0x3e, 0x0d, 0x99, 0xed, 0x9b, 0xd7, 0xbd, 0x96, 0x4d, 0xb7, - 0x40, 0xfa, 0x71, 0xf8, 0x1a, 0xe7, 0x20, 0x91, 0x94, 0x16, 0x60, 0x94, 0x8c, 0xc5, 0xc1, 0x2d, - 0x4c, 0xf7, 0xab, 0xfa, 0xb0, 0xf8, 0x23, 0x2e, 0x80, 0x10, 0x51, 0xf9, 0x63, 0xdd, 0xbe, 0xcf, - 0x89, 0x2f, 0x1b, 0xc3, 0x15, 0xfb, 0x8a, 0xcd, 0x0a, 0xc6, 0x2f, 0xab, 0xa1, 0x72, 0x71, 0xdd, - 0x0e, 0xaa, 0xb5, 0x7e, 0x92, 0x03, 0x9f, 0x4e, 0xc0, 0x4c, 0xb4, 0x96, 0x4b, 0x04, 0xe8, 0x7a, - 0x46, 0xb3, 0xd5, 0xed, 0x8b, 0x9d, 0x4b, 0x90, 0xdd, 0x14, 0x38, 0x68, 0x1a, 0x46, 0x5c, 0x5c, - 0xb5, 0xad, 0x9a, 0x4b, 0xb7, 0x39, 0x93, 0x9a, 0x78, 0x44, 0x53, 0x30, 0x6c, 0x19, 0x96, 0xed, - 0xf2, 0x73, 0x82, 0xec, 0xa1, 0xfc, 0x83, 0xca, 0xe1, 0x46, 0x94, 0xf7, 0x9b, 0xa2, 0xc3, 0x5a, - 0x57, 0x5e, 0x7e, 0xa8, 0x57, 0x19, 0x9c, 0x7d, 0x97, 0xe4, 0x0f, 0x41, 0xaa, 0x79, 0x9f, 0x8a, - 0xd6, 0xbc, 0x5f, 0xc4, 0x8d, 0xc6, 0xf3, 0x96, 0x7d, 0xd3, 0xda, 0x24, 0x34, 0xfe, 0x57, 0x4c, - 0xff, 0x5a, 0x81, 0x59, 0x7a, 0x52, 0xda, 0x69, 0x9a, 0x96, 0x77, 0xae, 0x61, 0x6e, 0xbb, 0xe7, - 0xb6, 0x4d, 0xcf, 0x65, 0x9f, 0x3c, 0x71, 0x99, 0x4c, 0x05, 0x18, 0x73, 0x04, 0x63, 0x8e, 0x60, - 0xa8, 0x17, 0x20, 0x53, 0x36, 0xbd, 0x79, 0xc7, 0x31, 0xf6, 0x11, 0x82, 0x14, 0x81, 0x71, 0xa1, - 0xd0, 0xdf, 0x44, 0x22, 0xb8, 0x81, 0x9b, 0x2e, 0xdd, 0x6d, 0x49, 0x69, 0xec, 0xa1, 0xbc, 0xd5, - 0xf5, 0x13, 0xac, 0x4b, 0xd2, 0x48, 0xa5, 0x2e, 0x49, 0x3f, 0x59, 0x91, 0x3e, 0xae, 0xbb, 0xfe, - 0x78, 0x3e, 0x9f, 0x82, 0x93, 0x12, 0x42, 0xd5, 0xd9, 0x6f, 0x79, 0x54, 0x17, 0xec, 0x1d, 0x3e, - 0x98, 0x09, 0x69, 0x30, 0xec, 0x75, 0x31, 0x76, 0x07, 0x40, 0xdd, 0x81, 0xe1, 0x75, 0x42, 0x17, - 0x7c, 0x4b, 0xc6, 0x46, 0xc7, 0x1e, 0x08, 0x94, 0x9d, 0x16, 0x4f, 0x30, 0xa8, 0x29, 0x0e, 0x8a, - 0x37, 0xb0, 0xb1, 0xc3, 0x0e, 0xdd, 0x25, 0xe9, 0xa6, 0x5b, 0x86, 0x00, 0xe8, 0xf9, 0xba, 0x29, - 0x18, 0x36, 0xda, 0x6c, 0xbf, 0x28, 0x79, 0x7a, 0x54, 0x63, 0x0f, 0xea, 0xf3, 0x30, 0xc2, 0x6b, - 0xd4, 0x31, 0x5f, 0xd0, 0xcd, 0xc1, 0x30, 0xed, 0x3c, 0x3f, 0x4d, 0x3c, 0x3d, 0xd7, 0xd1, 0xfb, - 0x39, 0xda, 0x49, 0x8d, 0xa1, 0xa9, 0xcf, 0x41, 0x66, 0xd1, 0x6e, 0x9a, 0x96, 0x1d, 0xe6, 0x96, - 0x65, 0xdc, 0x68, 0x9f, 0x5b, 0x6d, 0x8f, 0x6f, 0xe1, 0xb0, 0x07, 0xfa, 0x95, 0x1e, 0x3d, 0x84, - 0xc9, 0xf7, 0xbc, 0xf8, 0x93, 0xba, 0x00, 0x23, 0x94, 0xf7, 0x5a, 0x8b, 0xcc, 0xaf, 0x7f, 0x02, - 0x26, 0xcb, 0x8f, 0xe4, 0x73, 0xf6, 0x89, 0xa0, 0xb3, 0x08, 0x52, 0x35, 0xc3, 0x33, 0xf8, 0xb8, - 0xe9, 0x6f, 0xf5, 0x19, 0xc8, 0x70, 0x26, 0x2e, 0x3a, 0x0f, 0x49, 0xbb, 0xe5, 0xf2, 0x5d, 0xab, - 0x62, 0xb7, 0xa1, 0xac, 0xb5, 0xca, 0xa9, 0x5f, 0x3b, 0x98, 0x19, 0xd2, 0x08, 0x72, 0x59, 0xeb, - 0xaa, 0x2f, 0x4f, 0x1d, 0x5e, 0x5f, 0x58, 0x33, 0xbe, 0xb2, 0x7c, 0x36, 0x01, 0xa7, 0xa4, 0xb7, - 0x37, 0xb0, 0x43, 0x02, 0xb5, 0x90, 0xea, 0x23, 0xa9, 0x93, 0xfc, 0x7d, 0x17, 0x75, 0x79, 0x1a, - 0x92, 0xf3, 0xad, 0x16, 0x2a, 0x42, 0x86, 0xed, 0x4e, 0xd9, 0x4c, 0x5f, 0x52, 0x9a, 0xff, 0x4c, - 0xde, 0xb9, 0xf6, 0x8e, 0x77, 0xd3, 0x70, 0xfc, 0xef, 0x14, 0xc4, 0xb3, 0x7a, 0x11, 0xb2, 0x0b, - 0xb6, 0xe5, 0x62, 0xcb, 0x6d, 0xd3, 0xa5, 0xb3, 0xdd, 0xb0, 0xab, 0xd7, 0x39, 0x07, 0xf6, 0x40, - 0x04, 0x6e, 0xb4, 0x5a, 0xfc, 0x8b, 0x46, 0xf2, 0xb3, 0x94, 0xfa, 0xf2, 0x5b, 0x33, 0x4a, 0x79, - 0xa3, 0xab, 0x88, 0x2e, 0x1e, 0x5e, 0x44, 0x7c, 0x90, 0xbe, 0x8c, 0x7e, 0xf9, 0x38, 0xdc, 0x23, - 0x93, 0x32, 0x8b, 0x23, 0x49, 0xa8, 0x20, 0x49, 0x88, 0xc2, 0xe3, 0xe5, 0x53, 0xec, 0x67, 0x79, - 0x8b, 0x7d, 0xed, 0x50, 0xb1, 0xf7, 0xca, 0x2e, 0xf6, 0x99, 0x4b, 0xf5, 0x22, 0x8c, 0xad, 0x1b, - 0x8e, 0xb7, 0x81, 0xbd, 0xab, 0xd8, 0xa8, 0x61, 0x27, 0xbc, 0xb0, 0xc7, 0xc4, 0xc2, 0x46, 0x90, - 0xa2, 0xab, 0x97, 0x29, 0x36, 0xfd, 0xad, 0xee, 0x42, 0x8a, 0xee, 0x70, 0xfb, 0x8b, 0x9e, 0x53, - 0xb0, 0x45, 0x4f, 0xa6, 0x6b, 0xdf, 0xc3, 0x2e, 0x27, 0x61, 0x0f, 0xe8, 0x82, 0x58, 0xba, 0xc9, - 0xde, 0x4b, 0x97, 0x6b, 0x3b, 0x5f, 0xc0, 0x0d, 0x18, 0x29, 0x93, 0xd9, 0x5e, 0x5a, 0xf4, 0x3b, - 0xa2, 0x04, 0x1d, 0x41, 0x2b, 0x30, 0xde, 0x32, 0x1c, 0x8f, 0x1e, 0xed, 0xdb, 0xa5, 0xa3, 0xe0, - 0x96, 0x61, 0x66, 0x2e, 0x3a, 0x0f, 0x73, 0xa1, 0xc1, 0xf2, 0x56, 0xc6, 0x5a, 0x32, 0x50, 0xfd, - 0xaf, 0x29, 0x48, 0x73, 0x61, 0x3c, 0x0d, 0x23, 0x5c, 0x68, 0xb4, 0xc1, 0xdc, 0xf9, 0x93, 0x73, - 0x9d, 0xba, 0x3f, 0xe7, 0xeb, 0x28, 0xe7, 0x27, 0x68, 0xd0, 0x03, 0x90, 0xa9, 0xee, 0x1a, 0xa6, - 0xa5, 0x9b, 0xec, 0x8c, 0x5b, 0xb6, 0x9c, 0x7b, 0xfb, 0x60, 0x66, 0x64, 0x81, 0xc0, 0x96, 0x16, - 0xb5, 0x11, 0xfa, 0x72, 0xa9, 0x46, 0x8c, 0xcd, 0x2e, 0x36, 0xeb, 0xbb, 0xcc, 0xd8, 0x24, 0x35, - 0xfe, 0x84, 0x9e, 0x82, 0x14, 0x51, 0x08, 0x7e, 0xf0, 0xbb, 0xd8, 0x11, 0x3d, 0xf8, 0x8e, 0xb1, - 0x9c, 0x21, 0x0d, 0x7f, 0xfa, 0x77, 0x66, 0x14, 0x8d, 0x52, 0xa0, 0x05, 0x18, 0x6b, 0x18, 0xae, - 0xa7, 0xd3, 0x45, 0x42, 0x9a, 0x1f, 0xa6, 0x2c, 0x8e, 0x77, 0x0a, 0x84, 0x0b, 0x96, 0x77, 0x3d, - 0x47, 0xa8, 0x18, 0xa8, 0x86, 0x4e, 0x43, 0x81, 0x32, 0xa9, 0xda, 0xcd, 0xa6, 0xe9, 0x31, 0xf3, - 0x9d, 0xa6, 0x72, 0xcf, 0x13, 0xf8, 0x02, 0x05, 0x53, 0x23, 0x7e, 0x02, 0xb2, 0xf4, 0xa8, 0x29, - 0x45, 0x61, 0xc7, 0x2a, 0x32, 0x04, 0x40, 0x5f, 0x3e, 0x08, 0xe3, 0x37, 0x8c, 0x86, 0x59, 0x33, - 0x3c, 0xdb, 0x71, 0x19, 0x4a, 0x86, 0x71, 0x09, 0xc0, 0x14, 0xf1, 0x51, 0x98, 0xa2, 0x9f, 0x2e, - 0x47, 0xb1, 0xb3, 0x14, 0x1b, 0x91, 0x77, 0xd7, 0xc2, 0x14, 0xf7, 0x43, 0xbe, 0x2a, 0x84, 0xcf, - 0x70, 0x81, 0xe2, 0x8e, 0xf9, 0x50, 0x8a, 0x76, 0x1c, 0x32, 0x46, 0xab, 0xc5, 0x10, 0x72, 0xec, - 0x9b, 0x68, 0xa3, 0xd5, 0xa2, 0xaf, 0xce, 0xc2, 0x04, 0x1d, 0xa3, 0x83, 0xdd, 0x76, 0xc3, 0xe3, - 0x4c, 0x46, 0x29, 0xce, 0x38, 0x79, 0xa1, 0x31, 0x38, 0xc5, 0xbd, 0x0f, 0xc6, 0xf0, 0x0d, 0xb3, - 0x86, 0xad, 0x2a, 0x66, 0x78, 0x63, 0x14, 0x6f, 0x54, 0x00, 0x29, 0xd2, 0x19, 0x28, 0xb4, 0x1c, - 0xbb, 0x65, 0xbb, 0xd8, 0xd1, 0x8d, 0x5a, 0xcd, 0xc1, 0xae, 0x3b, 0x9d, 0x67, 0xfc, 0x04, 0x7c, - 0x9e, 0x81, 0xd5, 0x87, 0x21, 0xb5, 0x68, 0x78, 0x06, 0xb1, 0x61, 0xde, 0x1e, 0x73, 0x01, 0xa3, - 0x1a, 0xf9, 0x19, 0xbb, 0xdc, 0xbe, 0x9c, 0x80, 0xd4, 0x35, 0xdb, 0xc3, 0xe8, 0x31, 0xc9, 0xef, - 0xe4, 0xe3, 0x74, 0x7c, 0xc3, 0xac, 0x5b, 0xb8, 0xb6, 0xe2, 0xd6, 0xa5, 0x6f, 0xc5, 0x02, 0x15, - 0x4b, 0x84, 0x54, 0x6c, 0x0a, 0x86, 0x1d, 0xbb, 0x6d, 0xd5, 0xc4, 0x29, 0x05, 0xfa, 0x80, 0x2a, - 0x90, 0xf1, 0x35, 0x27, 0xd5, 0x4f, 0x73, 0xc6, 0x89, 0xe6, 0x10, 0xbd, 0xe6, 0x00, 0x6d, 0x64, - 0x9b, 0x2b, 0x50, 0x19, 0xb2, 0xbe, 0x41, 0xe3, 0x1a, 0x38, 0x98, 0x12, 0x07, 0x64, 0xe8, 0x21, - 0x98, 0xf0, 0xf5, 0xc1, 0x17, 0x28, 0xd3, 0xc2, 0x82, 0xff, 0x82, 0x4b, 0x34, 0xa4, 0x6a, 0xfc, - 0xbb, 0xb5, 0x11, 0x3a, 0xae, 0x40, 0xd5, 0xd8, 0xb7, 0x6b, 0xf7, 0x40, 0xd6, 0x35, 0xeb, 0x96, - 0xe1, 0xb5, 0x1d, 0xcc, 0xb5, 0x31, 0x00, 0xa8, 0x9f, 0x49, 0x40, 0x9a, 0x69, 0xb7, 0x24, 0x37, - 0x25, 0x5e, 0x6e, 0x89, 0x6e, 0x72, 0x4b, 0xde, 0xb9, 0xdc, 0xe6, 0x01, 0xfc, 0xce, 0xb8, 0xfc, - 0x73, 0xa2, 0x13, 0x9d, 0x8c, 0x58, 0x17, 0x37, 0xcc, 0x3a, 0x5f, 0xbc, 0x12, 0x91, 0xaf, 0x41, - 0xc3, 0x92, 0x9d, 0xbc, 0x04, 0xd9, 0x6d, 0xd3, 0xd3, 0x0d, 0x12, 0x9d, 0x52, 0x11, 0xe6, 0xce, - 0x9f, 0x9a, 0x8b, 0x0b, 0x63, 0xe7, 0x44, 0x0c, 0xab, 0x65, 0xb6, 0xf9, 0x2f, 0xf5, 0x3f, 0x2b, - 0xc4, 0x19, 0xf3, 0x06, 0xd1, 0x3c, 0x8c, 0x89, 0x81, 0xea, 0x3b, 0x0d, 0xa3, 0xce, 0x95, 0xf1, - 0x64, 0xd7, 0xd1, 0x5e, 0x6e, 0x18, 0x75, 0x2d, 0xc7, 0x07, 0x48, 0x1e, 0xe2, 0x27, 0x36, 0xd1, - 0x65, 0x62, 0x43, 0x9a, 0x94, 0xbc, 0x33, 0x4d, 0x0a, 0xcd, 0x79, 0x2a, 0x3a, 0xe7, 0x3f, 0x97, - 0xa0, 0x41, 0x59, 0xcb, 0x76, 0x8d, 0xc6, 0x7b, 0xb1, 0xc4, 0x4e, 0x40, 0xb6, 0x65, 0x37, 0x74, - 0xf6, 0x86, 0x1d, 0x07, 0xca, 0xb4, 0xec, 0x86, 0xd6, 0xa1, 0x47, 0xc3, 0x77, 0x69, 0xfd, 0xa5, - 0xef, 0x82, 0xd4, 0x46, 0xa2, 0x52, 0x73, 0x60, 0x94, 0x89, 0x82, 0x3b, 0xcc, 0x47, 0x89, 0x0c, - 0xa8, 0x07, 0x56, 0x3a, 0x1d, 0x3c, 0xeb, 0x36, 0xc3, 0xd4, 0x38, 0x1e, 0xa1, 0x60, 0xfe, 0x25, - 0x2e, 0x9a, 0x97, 0xf5, 0x5c, 0xe3, 0x78, 0xea, 0x3f, 0x55, 0x20, 0x4b, 0x87, 0xba, 0x82, 0x3d, - 0x23, 0x24, 0x2a, 0xe5, 0xce, 0x45, 0x75, 0x12, 0x80, 0xb1, 0x71, 0xcd, 0x5b, 0x98, 0x4f, 0x60, - 0x96, 0x42, 0x36, 0xcc, 0x5b, 0x18, 0x3d, 0xe1, 0x8f, 0x2b, 0xd9, 0x7b, 0x5c, 0x7c, 0x29, 0x8a, - 0xd1, 0x1d, 0x83, 0x11, 0xfa, 0xd9, 0xfc, 0x1e, 0x3b, 0x0f, 0x97, 0xa4, 0xdf, 0xca, 0x6d, 0xee, - 0xb9, 0xea, 0x2b, 0x30, 0xb2, 0xb9, 0xc7, 0x52, 0xa9, 0x13, 0x90, 0x75, 0x6c, 0x9b, 0xfb, 0x57, - 0x16, 0xd7, 0x64, 0x08, 0x80, 0xba, 0x13, 0x91, 0x3e, 0x24, 0x82, 0xf4, 0x21, 0xc8, 0x7f, 0x92, - 0x03, 0xe5, 0x3f, 0x67, 0x7f, 0x4b, 0x81, 0x9c, 0xb4, 0x0c, 0xd1, 0x07, 0xe1, 0x48, 0x79, 0x79, - 0x6d, 0xe1, 0x79, 0x7d, 0x69, 0x51, 0xbf, 0xbc, 0x3c, 0x7f, 0x25, 0x38, 0x57, 0x5a, 0x3c, 0xfa, - 0xfa, 0x9b, 0xb3, 0x48, 0xc2, 0xdd, 0xb2, 0xae, 0x93, 0xfc, 0x18, 0x9d, 0x83, 0xa9, 0x30, 0xc9, - 0x7c, 0x79, 0xa3, 0xb2, 0xba, 0x59, 0x50, 0x8a, 0x47, 0x5e, 0x7f, 0x73, 0x76, 0x42, 0xa2, 0x98, - 0xdf, 0x76, 0xb1, 0xe5, 0x75, 0x12, 0x2c, 0xac, 0xad, 0xac, 0x2c, 0x6d, 0x16, 0x12, 0x1d, 0x04, - 0xdc, 0xd0, 0x9e, 0x81, 0x89, 0x30, 0xc1, 0xea, 0xd2, 0x72, 0x21, 0x59, 0x44, 0xaf, 0xbf, 0x39, - 0x9b, 0x97, 0xb0, 0x57, 0xcd, 0x46, 0x31, 0xf3, 0xa9, 0x9f, 0x38, 0x35, 0xf4, 0xb9, 0x9f, 0x3c, - 0xa5, 0x90, 0x91, 0x8d, 0x85, 0x96, 0x22, 0x7a, 0x18, 0x8e, 0x6d, 0x2c, 0x5d, 0x59, 0xad, 0x2c, - 0xea, 0x2b, 0x1b, 0x57, 0x74, 0xf6, 0x3d, 0xad, 0x3f, 0xba, 0xf1, 0xd7, 0xdf, 0x9c, 0xcd, 0xf1, - 0x21, 0x75, 0xc3, 0x5e, 0xd7, 0x2a, 0xd7, 0xd6, 0x36, 0x2b, 0x05, 0x85, 0x61, 0xaf, 0x3b, 0xf8, - 0x86, 0xed, 0xb1, 0x7b, 0x35, 0x1e, 0x85, 0xe3, 0x31, 0xd8, 0xfe, 0xc0, 0x26, 0x5e, 0x7f, 0x73, - 0x76, 0x6c, 0xdd, 0xc1, 0x4c, 0x4d, 0x29, 0xc5, 0x1c, 0x4c, 0x77, 0x52, 0xac, 0xad, 0xaf, 0x6d, - 0xcc, 0x2f, 0x17, 0x66, 0x8b, 0x85, 0xd7, 0xdf, 0x9c, 0x1d, 0x15, 0x36, 0x87, 0xe0, 0x07, 0x23, - 0x2b, 0xbf, 0xd0, 0x35, 0x7f, 0x79, 0xf2, 0xf0, 0xf9, 0x8b, 0x17, 0x2a, 0x6f, 0xfc, 0xe5, 0x04, + 0xd7, 0x6d, 0x53, 0xd6, 0x69, 0x5a, 0xfb, 0x47, 0x7a, 0xde, 0xd7, 0xcc, 0x9b, 0xd9, 0xd9, 0x0f, + 0x50, 0x94, 0xa2, 0x1c, 0xfb, 0x17, 0x76, 0xee, 0xdc, 0x7b, 0xdf, 0x7b, 0xf7, 0xdd, 0x77, 0xbf, + 0xde, 0x9b, 0x07, 0xf8, 0x5c, 0x02, 0x4e, 0x56, 0x6d, 0xb7, 0x69, 0xbb, 0xe7, 0x5e, 0x69, 0x63, + 0x67, 0xff, 0x5c, 0xcb, 0xa8, 0x9b, 0x96, 0xe1, 0x99, 0xb6, 0x35, 0xd7, 0x72, 0x6c, 0xcf, 0x46, + 0xa3, 0xec, 0xf5, 0x1c, 0x7d, 0xad, 0x5a, 0x90, 0x5b, 0x37, 0xea, 0x58, 0xc3, 0xaf, 0xb4, 0xb1, + 0xeb, 0xa1, 0x02, 0x24, 0xaf, 0xe3, 0xfd, 0x69, 0x65, 0x56, 0x39, 0x3d, 0xaa, 0x91, 0x9f, 0xe8, + 0x28, 0xa4, 0xed, 0x9d, 0x1d, 0x17, 0x7b, 0xd3, 0x89, 0x59, 0xe5, 0x74, 0x4a, 0xe3, 0x4f, 0x68, + 0x0a, 0x86, 0x1b, 0x66, 0xd3, 0xf4, 0xa6, 0x93, 0x14, 0xcc, 0x1e, 0xd0, 0x0c, 0xe4, 0xaa, 0x76, + 0xdb, 0xf2, 0x74, 0xcf, 0xf6, 0x8c, 0xc6, 0x74, 0x6a, 0x56, 0x39, 0x9d, 0xd1, 0x80, 0x82, 0x36, + 0x09, 0x44, 0x7d, 0x16, 0x46, 0x59, 0x7b, 0x6e, 0xcb, 0xb6, 0x5c, 0x8c, 0x8e, 0x43, 0xc6, 0xc2, + 0x7b, 0x9e, 0x1e, 0xb4, 0x3a, 0x42, 0x9e, 0x9f, 0xc7, 0xfb, 0xa4, 0x05, 0xc6, 0x85, 0x35, 0xcc, + 0x1e, 0xca, 0xe5, 0x5f, 0x7f, 0xeb, 0x94, 0xf2, 0x1b, 0x6f, 0x9d, 0x52, 0x7e, 0xef, 0xad, 0x53, + 0xca, 0xa7, 0xbe, 0x78, 0x6a, 0xe8, 0x37, 0xbe, 0x78, 0x6a, 0xe8, 0x77, 0xbe, 0x78, 0x6a, 0xe8, + 0xa5, 0xd3, 0x75, 0xd3, 0xdb, 0x6d, 0x6f, 0xcf, 0x55, 0xed, 0xe6, 0x39, 0x2e, 0x02, 0xf6, 0xe7, + 0x11, 0xb7, 0x76, 0xfd, 0x9c, 0xb7, 0xdf, 0xc2, 0x5c, 0x26, 0xdb, 0x69, 0x2a, 0x89, 0xc7, 0xe0, + 0x57, 0x2f, 0xc1, 0x6c, 0xdd, 0xb6, 0xeb, 0x0d, 0x7c, 0x8e, 0x42, 0xb6, 0xdb, 0x3b, 0xe7, 0x6a, + 0xd8, 0xad, 0x3a, 0x66, 0xcb, 0xb3, 0x1d, 0x2e, 0xaf, 0x71, 0x86, 0x31, 0x27, 0x30, 0xd4, 0x15, + 0x98, 0xb8, 0x6c, 0x36, 0xf0, 0xa2, 0x8f, 0xb8, 0x81, 0x3d, 0xf4, 0x14, 0xa4, 0x76, 0xcc, 0x06, + 0x9e, 0x56, 0x66, 0x93, 0xa7, 0x73, 0xe7, 0xdf, 0x37, 0x17, 0x21, 0x9a, 0x0b, 0x53, 0xac, 0x13, + 0xb0, 0x46, 0x29, 0xd4, 0x3f, 0x48, 0xc1, 0x64, 0xcc, 0x5b, 0x84, 0x20, 0x65, 0x19, 0x4d, 0x4c, + 0xa5, 0x92, 0xd5, 0xe8, 0x6f, 0x34, 0x0d, 0x23, 0x2d, 0xa3, 0x7a, 0xdd, 0xa8, 0x63, 0x2a, 0x94, + 0xac, 0x26, 0x1e, 0xd1, 0x29, 0x80, 0x1a, 0x6e, 0x61, 0xab, 0x86, 0xad, 0xea, 0xfe, 0x74, 0x72, + 0x36, 0x79, 0x3a, 0xab, 0x49, 0x10, 0xf4, 0x10, 0x4c, 0xb4, 0xda, 0xdb, 0x0d, 0xb3, 0xaa, 0x4b, + 0x68, 0x30, 0x9b, 0x3c, 0x3d, 0xac, 0x15, 0xd8, 0x8b, 0xc5, 0x00, 0xf9, 0x41, 0x18, 0xbf, 0x89, + 0x8d, 0xeb, 0x32, 0x6a, 0x8e, 0xa2, 0xe6, 0x09, 0x58, 0x42, 0x5c, 0x80, 0xd1, 0x26, 0x76, 0x5d, + 0xa3, 0x8e, 0x75, 0x22, 0xdf, 0xe9, 0x14, 0x1d, 0xfd, 0x6c, 0xc7, 0xe8, 0xa3, 0x23, 0xcf, 0x71, + 0xaa, 0xcd, 0xfd, 0x16, 0x46, 0xf3, 0x90, 0xc5, 0x56, 0xbb, 0xc9, 0x38, 0x0c, 0x77, 0x91, 0x5f, + 0xc5, 0x6a, 0x37, 0xa3, 0x5c, 0x32, 0x84, 0x8c, 0xb3, 0x18, 0x71, 0xb1, 0x73, 0xc3, 0xac, 0xe2, + 0xe9, 0x34, 0x65, 0xf0, 0x60, 0x07, 0x83, 0x0d, 0xf6, 0x3e, 0xca, 0x43, 0xd0, 0xa1, 0x05, 0xc8, + 0xe2, 0x3d, 0x0f, 0x5b, 0xae, 0x69, 0x5b, 0xd3, 0x23, 0x94, 0xc9, 0xfd, 0x31, 0xb3, 0x88, 0x1b, + 0xb5, 0x28, 0x8b, 0x80, 0x0e, 0x3d, 0x01, 0x23, 0x76, 0x8b, 0xac, 0x35, 0x77, 0x3a, 0x33, 0xab, + 0x9c, 0xce, 0x9d, 0xbf, 0x27, 0x56, 0x11, 0xd6, 0x18, 0x8e, 0x26, 0x90, 0xd1, 0x12, 0x14, 0x5c, + 0xbb, 0xed, 0x54, 0xb1, 0x5e, 0xb5, 0x6b, 0x58, 0x37, 0xad, 0x1d, 0x7b, 0x3a, 0x4b, 0x19, 0xcc, + 0x74, 0x0e, 0x84, 0x22, 0x2e, 0xd8, 0x35, 0xbc, 0x64, 0xed, 0xd8, 0x5a, 0xde, 0x0d, 0x3d, 0x93, + 0xf5, 0xea, 0xee, 0x5b, 0x9e, 0xb1, 0x37, 0x3d, 0x4a, 0x35, 0x84, 0x3f, 0xa9, 0xbf, 0x9c, 0x86, + 0xf1, 0x41, 0x54, 0xec, 0x12, 0x0c, 0xef, 0x90, 0x51, 0x4e, 0x27, 0x0e, 0x23, 0x03, 0x46, 0x13, + 0x16, 0x62, 0xfa, 0x0e, 0x85, 0x38, 0x0f, 0x39, 0x0b, 0xbb, 0x1e, 0xae, 0x31, 0x8d, 0x48, 0x0e, + 0xa8, 0x53, 0xc0, 0x88, 0x3a, 0x55, 0x2a, 0x75, 0x47, 0x2a, 0xf5, 0x22, 0x8c, 0xfb, 0x5d, 0xd2, + 0x1d, 0xc3, 0xaa, 0x0b, 0xdd, 0x3c, 0xd7, 0xaf, 0x27, 0x73, 0x15, 0x41, 0xa7, 0x11, 0x32, 0x2d, + 0x8f, 0x43, 0xcf, 0x68, 0x11, 0xc0, 0xb6, 0xb0, 0xbd, 0xa3, 0xd7, 0x70, 0xb5, 0x31, 0x9d, 0xe9, + 0x22, 0xa5, 0x35, 0x82, 0xd2, 0x21, 0x25, 0x9b, 0x41, 0xab, 0x0d, 0x74, 0x31, 0x50, 0xb5, 0x91, + 0x2e, 0x9a, 0xb2, 0xc2, 0x16, 0x59, 0x87, 0xb6, 0x6d, 0x41, 0xde, 0xc1, 0x44, 0xef, 0x71, 0x8d, + 0x8f, 0x2c, 0x4b, 0x3b, 0x31, 0xd7, 0x77, 0x64, 0x1a, 0x27, 0x63, 0x03, 0x1b, 0x73, 0xe4, 0x47, + 0x74, 0x1f, 0xf8, 0x00, 0x9d, 0xaa, 0x15, 0x50, 0x2b, 0x34, 0x2a, 0x80, 0xab, 0x46, 0x13, 0x17, + 0x6f, 0x41, 0x3e, 0x2c, 0x1e, 0x62, 0xe6, 0x5d, 0xcf, 0x70, 0x3c, 0xaa, 0x85, 0xc3, 0x1a, 0x7b, + 0x20, 0x8e, 0x08, 0x5b, 0x35, 0x6a, 0xe5, 0x86, 0x35, 0xf2, 0x13, 0x7d, 0x30, 0x18, 0x70, 0x92, + 0x0e, 0xf8, 0x81, 0xce, 0x19, 0x0d, 0x71, 0x8e, 0x8e, 0xbb, 0xf8, 0x24, 0x8c, 0x85, 0x06, 0x30, + 0x68, 0xd3, 0xea, 0xb7, 0xc2, 0x91, 0x58, 0xd6, 0xe8, 0x45, 0x98, 0x6a, 0x5b, 0xa6, 0xe5, 0x61, + 0xa7, 0xe5, 0x60, 0xa2, 0xb1, 0xac, 0xa9, 0xe9, 0x3f, 0x1c, 0xe9, 0xa2, 0x73, 0x5b, 0x32, 0x36, + 0xe3, 0xa2, 0x4d, 0xb6, 0x3b, 0x81, 0x67, 0xb3, 0x99, 0x2f, 0x8d, 0x14, 0x5e, 0x7d, 0xf5, 0xd5, + 0x57, 0x13, 0xea, 0x3f, 0x4e, 0xc3, 0x54, 0xdc, 0x9a, 0x89, 0x5d, 0xbe, 0x47, 0x21, 0x6d, 0xb5, + 0x9b, 0xdb, 0xd8, 0xa1, 0x42, 0x1a, 0xd6, 0xf8, 0x13, 0x9a, 0x87, 0xe1, 0x86, 0xb1, 0x8d, 0x99, + 0x4b, 0xce, 0x9f, 0x7f, 0x68, 0xa0, 0x55, 0x39, 0xb7, 0x4c, 0x48, 0x34, 0x46, 0x89, 0x9e, 0x81, + 0x14, 0x37, 0xd1, 0x84, 0xc3, 0xd9, 0xc1, 0x38, 0x90, 0xb5, 0xa4, 0x51, 0x3a, 0x74, 0x02, 0xb2, + 0xe4, 0x2f, 0xd3, 0x8d, 0x34, 0xed, 0x73, 0x86, 0x00, 0x88, 0x5e, 0xa0, 0x22, 0x64, 0xe8, 0x32, + 0xa9, 0x61, 0xe1, 0xda, 0xfc, 0x67, 0xa2, 0x58, 0x35, 0xbc, 0x63, 0xb4, 0x1b, 0x9e, 0x7e, 0xc3, + 0x68, 0xb4, 0x31, 0x55, 0xf8, 0xac, 0x36, 0xca, 0x81, 0xd7, 0x08, 0x8c, 0x44, 0x1e, 0x6c, 0x55, + 0x99, 0x56, 0x0d, 0xef, 0x51, 0xeb, 0x39, 0xac, 0xb1, 0x85, 0xb6, 0x44, 0x20, 0xa4, 0xf9, 0x97, + 0x5d, 0xdb, 0x12, 0xaa, 0x49, 0x9b, 0x20, 0x00, 0xda, 0xfc, 0x93, 0x51, 0xc3, 0x7d, 0x32, 0x7e, + 0x78, 0x1d, 0x6b, 0xe9, 0x41, 0x18, 0x67, 0xc1, 0x04, 0x9f, 0x7a, 0xa3, 0x31, 0x3d, 0x41, 0x83, + 0x9e, 0x3c, 0x03, 0xaf, 0x71, 0xa8, 0xfa, 0x8b, 0x09, 0x48, 0x51, 0xc3, 0x32, 0x0e, 0xb9, 0xcd, + 0x0f, 0xaf, 0x57, 0xf4, 0xc5, 0xb5, 0xad, 0xf2, 0x72, 0xa5, 0xa0, 0xa0, 0x3c, 0x00, 0x05, 0x5c, + 0x5e, 0x5e, 0x9b, 0xdf, 0x2c, 0x24, 0xfc, 0xe7, 0xa5, 0xd5, 0xcd, 0x27, 0x2e, 0x14, 0x92, 0x3e, + 0xc1, 0x16, 0x03, 0xa4, 0x64, 0x84, 0xc7, 0xce, 0x17, 0x86, 0x51, 0x01, 0x46, 0x19, 0x83, 0xa5, + 0x17, 0x2b, 0x8b, 0x4f, 0x5c, 0x28, 0xa4, 0xc3, 0x90, 0xc7, 0xce, 0x17, 0x46, 0xd0, 0x18, 0x64, + 0x29, 0xa4, 0xbc, 0xb6, 0xb6, 0x5c, 0xc8, 0xf8, 0x3c, 0x37, 0x36, 0xb5, 0xa5, 0xd5, 0x2b, 0x85, + 0xac, 0xcf, 0xf3, 0x8a, 0xb6, 0xb6, 0xb5, 0x5e, 0x00, 0x9f, 0xc3, 0x4a, 0x65, 0x63, 0x63, 0xfe, + 0x4a, 0xa5, 0x90, 0xf3, 0x31, 0xca, 0x1f, 0xde, 0xac, 0x6c, 0x14, 0x46, 0x43, 0xdd, 0x7a, 0xec, + 0x7c, 0x61, 0xcc, 0x6f, 0xa2, 0xb2, 0xba, 0xb5, 0x52, 0xc8, 0xa3, 0x09, 0x18, 0x63, 0x4d, 0x88, + 0x4e, 0x8c, 0x47, 0x40, 0x4f, 0x5c, 0x28, 0x14, 0x82, 0x8e, 0x30, 0x2e, 0x13, 0x21, 0xc0, 0x13, + 0x17, 0x0a, 0x48, 0x5d, 0x80, 0x61, 0xaa, 0x86, 0x08, 0x41, 0x7e, 0x79, 0xbe, 0x5c, 0x59, 0xd6, + 0xd7, 0xd6, 0x37, 0x97, 0xd6, 0x56, 0xe7, 0x97, 0x0b, 0x4a, 0x00, 0xd3, 0x2a, 0x1f, 0xda, 0x5a, + 0xd2, 0x2a, 0x8b, 0x85, 0x84, 0x0c, 0x5b, 0xaf, 0xcc, 0x6f, 0x56, 0x16, 0x0b, 0x49, 0xb5, 0x0a, + 0x53, 0x71, 0x06, 0x35, 0x76, 0x09, 0x49, 0xba, 0x90, 0xe8, 0xa2, 0x0b, 0x94, 0x57, 0x54, 0x17, + 0xd4, 0x2f, 0x26, 0x60, 0x32, 0xc6, 0xa9, 0xc4, 0x36, 0xf2, 0x2c, 0x0c, 0x33, 0x5d, 0x66, 0x6e, + 0xf6, 0x4c, 0xac, 0x77, 0xa2, 0x9a, 0xdd, 0xe1, 0x6a, 0x29, 0x9d, 0x1c, 0x6a, 0x24, 0xbb, 0x84, + 0x1a, 0x84, 0x45, 0x87, 0xc2, 0x7e, 0xb4, 0xc3, 0xf8, 0x33, 0xff, 0xf8, 0xc4, 0x20, 0xfe, 0x91, + 0xc2, 0x0e, 0xe7, 0x04, 0x86, 0x63, 0x9c, 0xc0, 0x25, 0x98, 0xe8, 0x60, 0x34, 0xb0, 0x31, 0xfe, + 0x84, 0x02, 0xd3, 0xdd, 0x84, 0xd3, 0xc7, 0x24, 0x26, 0x42, 0x26, 0xf1, 0x52, 0x54, 0x82, 0xf7, + 0x76, 0x9f, 0x84, 0x8e, 0xb9, 0xfe, 0x69, 0x05, 0x8e, 0xc6, 0x87, 0x94, 0xb1, 0x7d, 0x78, 0x06, + 0xd2, 0x4d, 0xec, 0xed, 0xda, 0x22, 0xac, 0x7a, 0x20, 0xc6, 0x59, 0x93, 0xd7, 0xd1, 0xc9, 0xe6, + 0x54, 0xb2, 0xb7, 0x4f, 0x76, 0x8b, 0x0b, 0x59, 0x6f, 0x3a, 0x7a, 0xfa, 0xdd, 0x09, 0x38, 0x12, + 0xcb, 0x3c, 0xb6, 0xa3, 0x27, 0x01, 0x4c, 0xab, 0xd5, 0xf6, 0x58, 0xe8, 0xc4, 0x2c, 0x71, 0x96, + 0x42, 0xa8, 0xf1, 0x22, 0x56, 0xb6, 0xed, 0xf9, 0xef, 0x93, 0xf4, 0x3d, 0x30, 0x10, 0x45, 0x78, + 0x2a, 0xe8, 0x68, 0x8a, 0x76, 0xf4, 0x54, 0x97, 0x91, 0x76, 0x28, 0xe6, 0xa3, 0x50, 0xa8, 0x36, + 0x4c, 0x6c, 0x79, 0xba, 0xeb, 0x39, 0xd8, 0x68, 0x9a, 0x56, 0x9d, 0xba, 0x9a, 0x4c, 0x69, 0x78, + 0xc7, 0x68, 0xb8, 0x58, 0x1b, 0x67, 0xaf, 0x37, 0xc4, 0x5b, 0x42, 0x41, 0x15, 0xc8, 0x91, 0x28, + 0xd2, 0x21, 0x0a, 0xf6, 0xda, 0xa7, 0x50, 0x3f, 0x9d, 0x85, 0x9c, 0x14, 0x80, 0xa3, 0x7b, 0x61, + 0xf4, 0x65, 0xe3, 0x86, 0xa1, 0x8b, 0xa4, 0x8a, 0x49, 0x22, 0x47, 0x60, 0xeb, 0x3c, 0xb1, 0x7a, + 0x14, 0xa6, 0x28, 0x8a, 0xdd, 0xf6, 0xb0, 0xa3, 0x57, 0x1b, 0x86, 0xeb, 0x52, 0xa1, 0x65, 0x28, + 0x2a, 0x22, 0xef, 0xd6, 0xc8, 0xab, 0x05, 0xf1, 0x06, 0x3d, 0x0e, 0x93, 0x94, 0xa2, 0xd9, 0x6e, + 0x78, 0x66, 0xab, 0x81, 0x75, 0x92, 0xe6, 0xb9, 0xd4, 0xe5, 0xf8, 0x3d, 0x9b, 0x20, 0x18, 0x2b, + 0x1c, 0x81, 0xf4, 0xc8, 0x45, 0x8b, 0x70, 0x92, 0x92, 0xd5, 0xb1, 0x85, 0x1d, 0xc3, 0xc3, 0x3a, + 0x7e, 0xa5, 0x6d, 0x34, 0x5c, 0xdd, 0xb0, 0x6a, 0xfa, 0xae, 0xe1, 0xee, 0x4e, 0x4f, 0x11, 0x06, + 0xe5, 0xc4, 0xb4, 0xa2, 0x1d, 0x27, 0x88, 0x57, 0x38, 0x5e, 0x85, 0xa2, 0xcd, 0x5b, 0xb5, 0xab, + 0x86, 0xbb, 0x8b, 0x4a, 0x70, 0x94, 0x72, 0x71, 0x3d, 0xc7, 0xb4, 0xea, 0x7a, 0x75, 0x17, 0x57, + 0xaf, 0xeb, 0x6d, 0x6f, 0xe7, 0xa9, 0xe9, 0x13, 0x72, 0xfb, 0xb4, 0x87, 0x1b, 0x14, 0x67, 0x81, + 0xa0, 0x6c, 0x79, 0x3b, 0x4f, 0xa1, 0x0d, 0x18, 0x25, 0x93, 0xd1, 0x34, 0x6f, 0x61, 0x7d, 0xc7, + 0x76, 0xa8, 0x0f, 0xcd, 0xc7, 0x98, 0x26, 0x49, 0x82, 0x73, 0x6b, 0x9c, 0x60, 0xc5, 0xae, 0xe1, + 0xd2, 0xf0, 0xc6, 0x7a, 0xa5, 0xb2, 0xa8, 0xe5, 0x04, 0x97, 0xcb, 0xb6, 0x43, 0x14, 0xaa, 0x6e, + 0xfb, 0x02, 0xce, 0x31, 0x85, 0xaa, 0xdb, 0x42, 0xbc, 0x8f, 0xc3, 0x64, 0xb5, 0xca, 0xc6, 0x6c, + 0x56, 0x75, 0x9e, 0x8c, 0xb9, 0xd3, 0x85, 0x90, 0xb0, 0xaa, 0xd5, 0x2b, 0x0c, 0x81, 0xeb, 0xb8, + 0x8b, 0x2e, 0xc2, 0x91, 0x40, 0x58, 0x32, 0xe1, 0x44, 0xc7, 0x28, 0xa3, 0xa4, 0x8f, 0xc3, 0x64, + 0x6b, 0xbf, 0x93, 0x10, 0x85, 0x5a, 0x6c, 0xed, 0x47, 0xc9, 0x9e, 0x84, 0xa9, 0xd6, 0x6e, 0xab, + 0x93, 0xee, 0xac, 0x4c, 0x87, 0x5a, 0xbb, 0xad, 0x28, 0xe1, 0xfd, 0x34, 0x33, 0x77, 0x70, 0xd5, + 0xf0, 0x70, 0x6d, 0xfa, 0x98, 0x8c, 0x2e, 0xbd, 0x40, 0x73, 0x50, 0xa8, 0x56, 0x75, 0x6c, 0x19, + 0xdb, 0x0d, 0xac, 0x1b, 0x0e, 0xb6, 0x0c, 0x77, 0x7a, 0x86, 0x22, 0xa7, 0x3c, 0xa7, 0x8d, 0xb5, + 0x7c, 0xb5, 0x5a, 0xa1, 0x2f, 0xe7, 0xe9, 0x3b, 0x74, 0x16, 0x26, 0xec, 0xed, 0x97, 0xab, 0x4c, + 0x23, 0xf5, 0x96, 0x83, 0x77, 0xcc, 0xbd, 0xe9, 0xf7, 0x51, 0xf1, 0x8e, 0x93, 0x17, 0x54, 0x1f, + 0xd7, 0x29, 0x18, 0x9d, 0x81, 0x42, 0xd5, 0xdd, 0x35, 0x9c, 0x16, 0x35, 0xc9, 0x6e, 0xcb, 0xa8, + 0xe2, 0xe9, 0xfb, 0x19, 0x2a, 0x83, 0xaf, 0x0a, 0x30, 0x59, 0x11, 0xee, 0x4d, 0x73, 0xc7, 0x13, + 0x1c, 0x1f, 0x64, 0x2b, 0x82, 0xc2, 0x38, 0xb7, 0xd3, 0x50, 0x20, 0x92, 0x08, 0x35, 0x7c, 0x9a, + 0xa2, 0xe5, 0x5b, 0xbb, 0x2d, 0xb9, 0xdd, 0xfb, 0x60, 0x8c, 0x60, 0x06, 0x8d, 0x9e, 0x61, 0x81, + 0x5b, 0x6b, 0x57, 0x6a, 0xf1, 0x02, 0x1c, 0x25, 0x48, 0x4d, 0xec, 0x19, 0x35, 0xc3, 0x33, 0x24, + 0xec, 0x87, 0x29, 0x36, 0x11, 0xfb, 0x0a, 0x7f, 0x19, 0xea, 0xa7, 0xd3, 0xde, 0xde, 0xf7, 0x15, + 0xeb, 0x11, 0xd6, 0x4f, 0x02, 0x13, 0xaa, 0xf5, 0x8e, 0x05, 0xe7, 0x6a, 0x09, 0x46, 0x65, 0xbd, + 0x47, 0x59, 0x60, 0x9a, 0x5f, 0x50, 0x48, 0x10, 0xb4, 0xb0, 0xb6, 0x48, 0xc2, 0x97, 0x97, 0x2a, + 0x85, 0x04, 0x09, 0xa3, 0x96, 0x97, 0x36, 0x2b, 0xba, 0xb6, 0xb5, 0xba, 0xb9, 0xb4, 0x52, 0x29, + 0x24, 0xa5, 0xc0, 0xfe, 0xb9, 0x54, 0xe6, 0x81, 0xc2, 0x83, 0xea, 0x6f, 0x26, 0x20, 0x1f, 0xce, + 0xd4, 0xd0, 0x07, 0xe0, 0x98, 0x28, 0xab, 0xb8, 0xd8, 0xd3, 0x6f, 0x9a, 0x0e, 0x5d, 0x90, 0x4d, + 0x83, 0x39, 0x47, 0x5f, 0x7f, 0xa6, 0x38, 0xd6, 0x06, 0xf6, 0x5e, 0x30, 0x1d, 0xb2, 0xdc, 0x9a, + 0x86, 0x87, 0x96, 0x61, 0xc6, 0xb2, 0x75, 0xd7, 0x33, 0xac, 0x9a, 0xe1, 0xd4, 0xf4, 0xa0, 0xa0, + 0xa5, 0x1b, 0xd5, 0x2a, 0x76, 0x5d, 0x9b, 0x39, 0x42, 0x9f, 0xcb, 0x3d, 0x96, 0xbd, 0xc1, 0x91, + 0x03, 0x0f, 0x31, 0xcf, 0x51, 0x23, 0xea, 0x9b, 0xec, 0xa6, 0xbe, 0x27, 0x20, 0xdb, 0x34, 0x5a, + 0x3a, 0xb6, 0x3c, 0x67, 0x9f, 0xc6, 0xe7, 0x19, 0x2d, 0xd3, 0x34, 0x5a, 0x15, 0xf2, 0xfc, 0xae, + 0xa4, 0x49, 0xcf, 0xa5, 0x32, 0x99, 0x42, 0xf6, 0xb9, 0x54, 0x26, 0x5b, 0x00, 0xf5, 0xad, 0x24, + 0x8c, 0xca, 0xf1, 0x3a, 0x49, 0x7f, 0xaa, 0xd4, 0x63, 0x29, 0xd4, 0xa6, 0xdd, 0xd7, 0x33, 0xba, + 0x9f, 0x5b, 0x20, 0xae, 0xac, 0x94, 0x66, 0xc1, 0xb1, 0xc6, 0x28, 0x49, 0x18, 0x41, 0x94, 0x0d, + 0xb3, 0x60, 0x24, 0xa3, 0xf1, 0x27, 0x74, 0x05, 0xd2, 0x2f, 0xbb, 0x94, 0x77, 0x9a, 0xf2, 0x7e, + 0x5f, 0x6f, 0xde, 0xcf, 0x6d, 0x50, 0xe6, 0xd9, 0xe7, 0x36, 0xf4, 0xd5, 0x35, 0x6d, 0x65, 0x7e, + 0x59, 0xe3, 0xe4, 0xe8, 0x38, 0xa4, 0x1a, 0xc6, 0xad, 0xfd, 0xb0, 0xd3, 0xa3, 0xa0, 0x41, 0x27, + 0xe1, 0x38, 0xa4, 0x6e, 0x62, 0xe3, 0x7a, 0xd8, 0xd5, 0x50, 0xd0, 0x3b, 0xb8, 0x18, 0xce, 0xc1, + 0x30, 0x95, 0x17, 0x02, 0xe0, 0x12, 0x2b, 0x0c, 0xa1, 0x0c, 0xa4, 0x16, 0xd6, 0x34, 0xb2, 0x20, + 0x0a, 0x30, 0xca, 0xa0, 0xfa, 0xfa, 0x52, 0x65, 0xa1, 0x52, 0x48, 0xa8, 0x8f, 0x43, 0x9a, 0x09, + 0x81, 0x2c, 0x16, 0x5f, 0x0c, 0x85, 0x21, 0xfe, 0xc8, 0x79, 0x28, 0xe2, 0xed, 0xd6, 0x4a, 0xb9, + 0xa2, 0x15, 0x12, 0xe1, 0xa9, 0x4e, 0x15, 0x86, 0x55, 0x17, 0x46, 0xe5, 0x38, 0xfc, 0xdd, 0x49, + 0xc6, 0xbf, 0xa0, 0x40, 0x4e, 0x8a, 0xab, 0x49, 0x40, 0x64, 0x34, 0x1a, 0xf6, 0x4d, 0xdd, 0x68, + 0x98, 0x86, 0xcb, 0x55, 0x03, 0x28, 0x68, 0x9e, 0x40, 0x06, 0x9d, 0xba, 0x77, 0x69, 0x89, 0x0c, + 0x17, 0xd2, 0xea, 0x8f, 0x29, 0x50, 0x88, 0x06, 0xb6, 0x91, 0x6e, 0x2a, 0x7f, 0x96, 0xdd, 0x54, + 0x7f, 0x54, 0x81, 0x7c, 0x38, 0x9a, 0x8d, 0x74, 0xef, 0xde, 0x3f, 0xd3, 0xee, 0xfd, 0x5e, 0x02, + 0xc6, 0x42, 0x31, 0xec, 0xa0, 0xbd, 0x7b, 0x05, 0x26, 0xcc, 0x1a, 0x6e, 0xb6, 0x6c, 0x0f, 0x5b, + 0xd5, 0x7d, 0xbd, 0x81, 0x6f, 0xe0, 0xc6, 0xb4, 0x4a, 0x8d, 0xc6, 0xb9, 0xde, 0x51, 0xf2, 0xdc, + 0x52, 0x40, 0xb7, 0x4c, 0xc8, 0x4a, 0x93, 0x4b, 0x8b, 0x95, 0x95, 0xf5, 0xb5, 0xcd, 0xca, 0xea, + 0xc2, 0x87, 0xf5, 0xad, 0xd5, 0xe7, 0x57, 0xd7, 0x5e, 0x58, 0xd5, 0x0a, 0x66, 0x04, 0xed, 0x1d, + 0x5c, 0xf6, 0xeb, 0x50, 0x88, 0x76, 0x0a, 0x1d, 0x83, 0xb8, 0x6e, 0x15, 0x86, 0xd0, 0x24, 0x8c, + 0xaf, 0xae, 0xe9, 0x1b, 0x4b, 0x8b, 0x15, 0xbd, 0x72, 0xf9, 0x72, 0x65, 0x61, 0x73, 0x83, 0xd5, + 0x3d, 0x7c, 0xec, 0xcd, 0xd0, 0x02, 0x57, 0x7f, 0x24, 0x09, 0x93, 0x31, 0x3d, 0x41, 0xf3, 0x3c, + 0x63, 0x61, 0x49, 0xd4, 0x23, 0x83, 0xf4, 0x7e, 0x8e, 0xc4, 0x0c, 0xeb, 0x86, 0xe3, 0xf1, 0x04, + 0xe7, 0x0c, 0x10, 0x29, 0x59, 0x9e, 0xb9, 0x63, 0x62, 0x87, 0xd7, 0x93, 0x58, 0x1a, 0x33, 0x1e, + 0xc0, 0x59, 0x49, 0xe9, 0x61, 0x40, 0x2d, 0xdb, 0x35, 0x3d, 0xf3, 0x06, 0xd6, 0x4d, 0x4b, 0x14, + 0x9f, 0x52, 0x74, 0x37, 0xaa, 0x20, 0xde, 0x2c, 0x59, 0x9e, 0x8f, 0x6d, 0xe1, 0xba, 0x11, 0xc1, + 0x26, 0xc6, 0x3c, 0xa9, 0x15, 0xc4, 0x1b, 0x1f, 0xfb, 0x5e, 0x18, 0xad, 0xd9, 0x6d, 0x12, 0xeb, + 0x31, 0x3c, 0xe2, 0x3b, 0x14, 0x2d, 0xc7, 0x60, 0x3e, 0x0a, 0x8f, 0xe2, 0x83, 0xaa, 0xd7, 0xa8, + 0x96, 0x63, 0x30, 0x86, 0xf2, 0x20, 0x8c, 0x1b, 0xf5, 0xba, 0x43, 0x98, 0x0b, 0x46, 0x2c, 0x2f, + 0xc9, 0xfb, 0x60, 0x8a, 0x58, 0x7c, 0x0e, 0x32, 0x42, 0x0e, 0xc4, 0x55, 0x13, 0x49, 0xe8, 0x2d, + 0x96, 0x6c, 0x27, 0x4e, 0x67, 0xb5, 0x8c, 0x25, 0x5e, 0xde, 0x0b, 0xa3, 0xa6, 0xab, 0x07, 0x45, + 0xfc, 0xc4, 0x6c, 0xe2, 0x74, 0x46, 0xcb, 0x99, 0xae, 0x5f, 0x00, 0x55, 0x7f, 0x3a, 0x01, 0xf9, + 0xf0, 0x26, 0x04, 0x5a, 0x84, 0x4c, 0xc3, 0xae, 0xd2, 0x5d, 0x46, 0xbe, 0x03, 0x76, 0xba, 0xcf, + 0xbe, 0xc5, 0xdc, 0x32, 0xc7, 0xd7, 0x7c, 0xca, 0xe2, 0xbf, 0x56, 0x20, 0x23, 0xc0, 0xe8, 0x28, + 0xa4, 0x5a, 0x86, 0xb7, 0x4b, 0xd9, 0x0d, 0x97, 0x13, 0x05, 0x45, 0xa3, 0xcf, 0x04, 0xee, 0xb6, + 0x0c, 0x8b, 0xaa, 0x00, 0x87, 0x93, 0x67, 0x32, 0xaf, 0x0d, 0x6c, 0xd4, 0x68, 0xd2, 0x63, 0x37, + 0x9b, 0xd8, 0xf2, 0x5c, 0x31, 0xaf, 0x1c, 0xbe, 0xc0, 0xc1, 0xe8, 0x21, 0x98, 0xf0, 0x1c, 0xc3, + 0x6c, 0x84, 0x70, 0x53, 0x14, 0xb7, 0x20, 0x5e, 0xf8, 0xc8, 0x25, 0x38, 0x2e, 0xf8, 0xd6, 0xb0, + 0x67, 0x54, 0x77, 0x71, 0x2d, 0x20, 0x4a, 0xd3, 0xe2, 0xc6, 0x31, 0x8e, 0xb0, 0xc8, 0xdf, 0x0b, + 0x5a, 0xf5, 0x37, 0x15, 0x98, 0x10, 0x69, 0x5a, 0xcd, 0x17, 0xd6, 0x0a, 0x80, 0x61, 0x59, 0xb6, + 0x27, 0x8b, 0xab, 0x53, 0x95, 0x3b, 0xe8, 0xe6, 0xe6, 0x7d, 0x22, 0x4d, 0x62, 0x50, 0x6c, 0x02, + 0x04, 0x6f, 0xba, 0x8a, 0x6d, 0x06, 0x72, 0x7c, 0x87, 0x89, 0x6e, 0x53, 0xb2, 0xc4, 0x1e, 0x18, + 0x88, 0xe4, 0x73, 0x68, 0x0a, 0x86, 0xb7, 0x71, 0xdd, 0xb4, 0x78, 0xdd, 0x98, 0x3d, 0x88, 0xf2, + 0x4b, 0xca, 0x2f, 0xbf, 0x94, 0xbf, 0x5f, 0x81, 0xc9, 0xaa, 0xdd, 0x8c, 0xf6, 0xb7, 0x5c, 0x88, + 0x54, 0x17, 0xdc, 0xab, 0xca, 0x4b, 0xcf, 0x48, 0x3b, 0xb2, 0x75, 0xbb, 0x61, 0x58, 0xf5, 0x60, + 0x9f, 0x95, 0xfe, 0xa8, 0x3e, 0x52, 0xc7, 0xd6, 0x23, 0x75, 0x5b, 0xda, 0x75, 0xbd, 0x14, 0xfc, + 0xfc, 0xbf, 0x8a, 0xf2, 0x13, 0x89, 0xe4, 0x95, 0xf5, 0xf2, 0xe7, 0x12, 0xc5, 0x2b, 0xac, 0xb9, + 0x75, 0x21, 0x1e, 0x0d, 0xef, 0x34, 0x70, 0x95, 0x0c, 0x19, 0xbe, 0xfc, 0x10, 0x4c, 0xd5, 0xed, + 0xba, 0x4d, 0x39, 0x9e, 0x23, 0xbf, 0xf8, 0xce, 0x6d, 0xd6, 0x87, 0x16, 0xfb, 0x6e, 0xf3, 0x96, + 0x56, 0x61, 0x92, 0x23, 0xeb, 0x74, 0xeb, 0x88, 0x25, 0x36, 0xa8, 0x67, 0x55, 0x6d, 0xfa, 0xe7, + 0xfe, 0x80, 0x3a, 0x74, 0x6d, 0x82, 0x93, 0x92, 0x77, 0x2c, 0xf7, 0x29, 0x69, 0x70, 0x24, 0xc4, + 0x8f, 0x2d, 0x5b, 0xec, 0xf4, 0xe1, 0xf8, 0xcf, 0x38, 0xc7, 0x49, 0x89, 0xe3, 0x06, 0x27, 0x2d, + 0x2d, 0xc0, 0xd8, 0x61, 0x78, 0xfd, 0x73, 0xce, 0x6b, 0x14, 0xcb, 0x4c, 0xae, 0xc0, 0x38, 0x65, + 0x52, 0x6d, 0xbb, 0x9e, 0xdd, 0xa4, 0x36, 0xb1, 0x37, 0x9b, 0x5f, 0xfb, 0x03, 0xb6, 0x8e, 0xf2, + 0x84, 0x6c, 0xc1, 0xa7, 0x2a, 0x95, 0x80, 0xee, 0x96, 0xd5, 0x70, 0xb5, 0xd1, 0x87, 0xc3, 0xaf, + 0xf3, 0x8e, 0xf8, 0xf8, 0xa5, 0x6b, 0x30, 0x45, 0x7e, 0x53, 0x93, 0x25, 0xf7, 0xa4, 0x7f, 0x09, + 0x6e, 0xfa, 0x37, 0x3f, 0xc1, 0x96, 0xea, 0xa4, 0xcf, 0x40, 0xea, 0x93, 0x34, 0x8b, 0x75, 0xec, + 0x79, 0xd8, 0x71, 0x75, 0xa3, 0x11, 0xd7, 0x3d, 0xa9, 0x86, 0x31, 0xfd, 0xc3, 0x5f, 0x09, 0xcf, + 0xe2, 0x15, 0x46, 0x39, 0xdf, 0x68, 0x94, 0xb6, 0xe0, 0x58, 0x8c, 0x56, 0x0c, 0xc0, 0xf3, 0x47, + 0x38, 0xcf, 0xa9, 0x0e, 0xcd, 0x20, 0x6c, 0xd7, 0x41, 0xc0, 0xfd, 0xb9, 0x1c, 0x80, 0xe7, 0x5f, + 0xe3, 0x3c, 0x11, 0xa7, 0x15, 0x53, 0x4a, 0x38, 0x3e, 0x07, 0x13, 0x37, 0xb0, 0xb3, 0x6d, 0xbb, + 0xbc, 0x6e, 0x34, 0x00, 0xbb, 0x1f, 0xe5, 0xec, 0xc6, 0x39, 0x21, 0x2d, 0x24, 0x11, 0x5e, 0x17, + 0x21, 0xb3, 0x63, 0x54, 0xf1, 0x00, 0x2c, 0xde, 0xe0, 0x2c, 0x46, 0x08, 0x3e, 0x21, 0x9d, 0x87, + 0xd1, 0xba, 0xcd, 0xbd, 0x56, 0x7f, 0xf2, 0x1f, 0xe3, 0xe4, 0x39, 0x41, 0xc3, 0x59, 0xb4, 0xec, + 0x56, 0xbb, 0x41, 0x5c, 0x5a, 0x7f, 0x16, 0x3f, 0x2e, 0x58, 0x08, 0x1a, 0xce, 0xe2, 0x10, 0x62, + 0x7d, 0x53, 0xb0, 0x70, 0x25, 0x79, 0x3e, 0x0b, 0x39, 0xdb, 0x6a, 0xec, 0xdb, 0xd6, 0x20, 0x9d, + 0xf8, 0x0c, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0xb8, 0x04, 0xd9, 0x41, 0x27, 0xe2, 0xaf, 0x7f, 0x45, + 0x2c, 0x0f, 0x31, 0x03, 0x57, 0x60, 0x5c, 0x18, 0x28, 0xd3, 0xb6, 0x06, 0x60, 0xf1, 0x37, 0x38, + 0x8b, 0xbc, 0x44, 0xc6, 0x87, 0xe1, 0x61, 0xd7, 0xab, 0xe3, 0x41, 0x98, 0xfc, 0xb4, 0x18, 0x06, + 0x27, 0xe1, 0xa2, 0xdc, 0xc6, 0x56, 0x75, 0x77, 0x30, 0x0e, 0x9f, 0x15, 0xa2, 0x14, 0x34, 0x84, + 0xc5, 0x02, 0x8c, 0x35, 0x0d, 0xc7, 0xdd, 0x35, 0x1a, 0x03, 0x4d, 0xc7, 0xdf, 0xe4, 0x3c, 0x46, + 0x7d, 0x22, 0x2e, 0x91, 0xb6, 0x75, 0x18, 0x36, 0x9f, 0x13, 0x12, 0x91, 0xc8, 0xf8, 0xd2, 0x73, + 0x3d, 0x5a, 0x64, 0x3b, 0x0c, 0xb7, 0xbf, 0x25, 0x96, 0x1e, 0xa3, 0x5d, 0x91, 0x39, 0x5e, 0x82, + 0xac, 0x6b, 0xde, 0x1a, 0x88, 0xcd, 0xdf, 0x16, 0x33, 0x4d, 0x09, 0x08, 0xf1, 0x87, 0xe1, 0x78, + 0xac, 0x9b, 0x18, 0x80, 0xd9, 0xdf, 0xe1, 0xcc, 0x8e, 0xc6, 0xb8, 0x0a, 0x6e, 0x12, 0x0e, 0xcb, + 0xf2, 0x67, 0x84, 0x49, 0xc0, 0x11, 0x5e, 0xeb, 0x24, 0x8f, 0x70, 0x8d, 0x9d, 0xc3, 0x49, 0xed, + 0x67, 0x85, 0xd4, 0x18, 0x6d, 0x48, 0x6a, 0x9b, 0x70, 0x94, 0x73, 0x3c, 0xdc, 0xbc, 0xfe, 0x5d, + 0x61, 0x58, 0x19, 0xf5, 0x56, 0x78, 0x76, 0x3f, 0x02, 0x45, 0x5f, 0x9c, 0x22, 0x60, 0x75, 0xf5, + 0xa6, 0xd1, 0x1a, 0x80, 0xf3, 0xcf, 0x71, 0xce, 0xc2, 0xe2, 0xfb, 0x11, 0xaf, 0xbb, 0x62, 0xb4, + 0x08, 0xf3, 0x17, 0x61, 0x5a, 0x30, 0x6f, 0x5b, 0x0e, 0xae, 0xda, 0x75, 0xcb, 0xbc, 0x85, 0x6b, + 0x03, 0xb0, 0xfe, 0x7b, 0x91, 0xa9, 0xda, 0x92, 0xc8, 0x09, 0xe7, 0x25, 0x28, 0xf8, 0xb1, 0x8a, + 0x6e, 0x36, 0x5b, 0xb6, 0xe3, 0xf5, 0xe1, 0xf8, 0xf3, 0x62, 0xa6, 0x7c, 0xba, 0x25, 0x4a, 0x56, + 0xaa, 0x00, 0xdb, 0x79, 0x1e, 0x54, 0x25, 0x7f, 0x81, 0x33, 0x1a, 0x0b, 0xa8, 0xb8, 0xe1, 0xa8, + 0xda, 0xcd, 0x96, 0xe1, 0x0c, 0x62, 0xff, 0xfe, 0xbe, 0x30, 0x1c, 0x9c, 0x84, 0x1b, 0x0e, 0x6f, + 0xbf, 0x85, 0x89, 0xb7, 0x1f, 0x80, 0xc3, 0x2f, 0x0a, 0xc3, 0x21, 0x68, 0x38, 0x0b, 0x11, 0x30, + 0x0c, 0xc0, 0xe2, 0x97, 0x04, 0x0b, 0x41, 0x43, 0x58, 0x7c, 0x28, 0x70, 0xb4, 0x0e, 0xae, 0x9b, + 0xae, 0xe7, 0xb0, 0x30, 0xb9, 0x37, 0xab, 0xcf, 0x7f, 0x25, 0x1c, 0x84, 0x69, 0x12, 0x29, 0xb1, + 0x44, 0xbc, 0xec, 0x4a, 0xb3, 0xa8, 0xfe, 0x1d, 0xfb, 0x65, 0x61, 0x89, 0x24, 0x32, 0xd2, 0x37, + 0x29, 0x42, 0x24, 0x62, 0xaf, 0x92, 0xdc, 0x61, 0x00, 0x76, 0xff, 0x20, 0xd2, 0xb9, 0x0d, 0x41, + 0x4b, 0x78, 0x4a, 0xf1, 0x4f, 0xdb, 0xba, 0x8e, 0xf7, 0x07, 0xd2, 0xce, 0x5f, 0x89, 0xc4, 0x3f, + 0x5b, 0x8c, 0x92, 0xd9, 0x90, 0xf1, 0x48, 0x3c, 0x85, 0xfa, 0x9d, 0x33, 0x9a, 0xfe, 0xb6, 0xaf, + 0xf2, 0xf1, 0x86, 0xc3, 0xa9, 0xd2, 0x32, 0x51, 0xf2, 0x70, 0xd0, 0xd3, 0x9f, 0xd9, 0x27, 0xbe, + 0xea, 0xeb, 0x79, 0x28, 0xe6, 0x29, 0x5d, 0x86, 0xb1, 0x50, 0xc0, 0xd3, 0x9f, 0xd5, 0xb7, 0x73, + 0x56, 0xa3, 0x72, 0xbc, 0x53, 0x7a, 0x1c, 0x52, 0x24, 0x78, 0xe9, 0x4f, 0xfe, 0x1d, 0x9c, 0x9c, + 0xa2, 0x97, 0x9e, 0x86, 0x8c, 0x08, 0x5a, 0xfa, 0x93, 0x7e, 0x27, 0x27, 0xf5, 0x49, 0x08, 0xb9, + 0x08, 0x58, 0xfa, 0x93, 0x7f, 0x97, 0x20, 0x17, 0x24, 0x84, 0x7c, 0x70, 0x11, 0x7e, 0xe1, 0x7b, + 0x52, 0xdc, 0xe9, 0x08, 0xd9, 0x5d, 0x82, 0x11, 0x1e, 0xa9, 0xf4, 0xa7, 0xfe, 0x6e, 0xde, 0xb8, + 0xa0, 0x28, 0x3d, 0x09, 0xc3, 0x03, 0x0a, 0xfc, 0x7b, 0x39, 0x29, 0xc3, 0x2f, 0x2d, 0x40, 0x4e, + 0x8a, 0x4e, 0xfa, 0x93, 0x7f, 0x1f, 0x27, 0x97, 0xa9, 0x48, 0xd7, 0x79, 0x74, 0xd2, 0x9f, 0xc1, + 0xf7, 0x8b, 0xae, 0x73, 0x0a, 0x22, 0x36, 0x11, 0x98, 0xf4, 0xa7, 0xfe, 0x94, 0x90, 0xba, 0x20, + 0x29, 0x3d, 0x0b, 0x59, 0xdf, 0xd9, 0xf4, 0xa7, 0xff, 0x34, 0xa7, 0x0f, 0x68, 0x88, 0x04, 0x24, + 0x67, 0xd7, 0x9f, 0xc5, 0x0f, 0x08, 0x09, 0x48, 0x54, 0x64, 0x19, 0x45, 0x03, 0x98, 0xfe, 0x9c, + 0xfe, 0xb2, 0x58, 0x46, 0x91, 0xf8, 0x85, 0xcc, 0x26, 0xb5, 0xf9, 0xfd, 0x59, 0xfc, 0xa0, 0x98, + 0x4d, 0x8a, 0x4f, 0xba, 0x11, 0x8d, 0x08, 0xfa, 0xf3, 0xf8, 0xab, 0xa2, 0x1b, 0x91, 0x80, 0xa0, + 0xb4, 0x0e, 0xa8, 0x33, 0x1a, 0xe8, 0xcf, 0xef, 0x75, 0xce, 0x6f, 0xa2, 0x23, 0x18, 0x28, 0xbd, + 0x00, 0x47, 0xe3, 0x23, 0x81, 0xfe, 0x5c, 0x7f, 0xf8, 0xab, 0x91, 0xdc, 0x4d, 0x0e, 0x04, 0x4a, + 0x9b, 0x81, 0x4b, 0x91, 0xa3, 0x80, 0xfe, 0x6c, 0x7f, 0xe4, 0xab, 0x61, 0xc3, 0x2d, 0x07, 0x01, + 0xa5, 0x79, 0x80, 0xc0, 0x01, 0xf7, 0xe7, 0xf5, 0xa3, 0x9c, 0x97, 0x44, 0x44, 0x96, 0x06, 0xf7, + 0xbf, 0xfd, 0xe9, 0xdf, 0x10, 0x4b, 0x83, 0x53, 0x90, 0xa5, 0x21, 0x5c, 0x6f, 0x7f, 0xea, 0x1f, + 0x13, 0x4b, 0x43, 0x90, 0x10, 0xcd, 0x96, 0xbc, 0x5b, 0x7f, 0x0e, 0x9f, 0x11, 0x9a, 0x2d, 0x51, + 0x95, 0x56, 0x61, 0xa2, 0xc3, 0x21, 0xf6, 0x67, 0xf5, 0x13, 0x9c, 0x55, 0x21, 0xea, 0x0f, 0x65, + 0xe7, 0xc5, 0x9d, 0x61, 0x7f, 0x6e, 0x3f, 0x19, 0x71, 0x5e, 0xdc, 0x17, 0x96, 0x2e, 0x41, 0xc6, + 0x6a, 0x37, 0x1a, 0x64, 0xf1, 0xa0, 0xde, 0x67, 0x03, 0xa7, 0xff, 0xeb, 0xd7, 0xb9, 0x74, 0x04, + 0x41, 0xe9, 0x71, 0x18, 0xc6, 0xcd, 0x6d, 0x5c, 0xeb, 0x47, 0xf9, 0xe5, 0xaf, 0x0b, 0x83, 0x49, + 0xb0, 0x4b, 0xcf, 0x02, 0xb0, 0xd2, 0x08, 0xdd, 0x1e, 0xec, 0x43, 0xfb, 0xdf, 0xbe, 0xce, 0x0f, + 0xe3, 0x04, 0x24, 0x01, 0x03, 0x76, 0xb4, 0xa7, 0x37, 0x83, 0xaf, 0x84, 0x19, 0xd0, 0x19, 0xb9, + 0x08, 0x23, 0x2f, 0xbb, 0xb6, 0xe5, 0x19, 0xf5, 0x7e, 0xd4, 0xff, 0x9d, 0x53, 0x0b, 0x7c, 0x22, + 0xb0, 0xa6, 0xed, 0x60, 0xcf, 0xa8, 0xbb, 0xfd, 0x68, 0xff, 0x07, 0xa7, 0xf5, 0x09, 0x08, 0x71, + 0xd5, 0x70, 0xbd, 0x41, 0xc6, 0xfd, 0x3f, 0x05, 0xb1, 0x20, 0x20, 0x9d, 0x26, 0xbf, 0xaf, 0xe3, + 0xfd, 0x7e, 0xb4, 0x7f, 0x24, 0x3a, 0xcd, 0xf1, 0x4b, 0x4f, 0x43, 0x96, 0xfc, 0x64, 0x27, 0xec, + 0xfa, 0x10, 0xff, 0x2f, 0x4e, 0x1c, 0x50, 0x90, 0x96, 0x5d, 0xaf, 0xe6, 0x99, 0xfd, 0x85, 0x7d, + 0x9b, 0xcf, 0xb4, 0xc0, 0x2f, 0xcd, 0x43, 0xce, 0xf5, 0x6a, 0xb5, 0x36, 0x8f, 0x4f, 0xfb, 0x90, + 0xff, 0xef, 0xaf, 0xfb, 0x25, 0x0b, 0x9f, 0x86, 0xcc, 0xf6, 0xcd, 0xeb, 0x5e, 0xcb, 0xa6, 0x5b, + 0x20, 0xfd, 0x38, 0x7c, 0x95, 0x73, 0x90, 0x48, 0x4a, 0x0b, 0x30, 0x4a, 0xc6, 0xe2, 0xe0, 0x16, + 0xa6, 0xfb, 0x55, 0x7d, 0x58, 0xfc, 0x31, 0x17, 0x40, 0x88, 0xa8, 0xfc, 0xd1, 0x6e, 0xdf, 0xe7, + 0xc4, 0x97, 0x8d, 0xe1, 0x8a, 0x7d, 0xc5, 0x66, 0x05, 0xe3, 0x97, 0xd4, 0x50, 0xb9, 0xb8, 0x6e, + 0x07, 0xd5, 0x5a, 0x3f, 0xc9, 0x81, 0x4f, 0x25, 0x60, 0x26, 0x5a, 0xcb, 0x25, 0x02, 0x74, 0x3d, + 0xa3, 0xd9, 0xea, 0xf6, 0xc5, 0xce, 0x25, 0xc8, 0x6e, 0x0a, 0x1c, 0x34, 0x0d, 0x23, 0x2e, 0xae, + 0xda, 0x56, 0xcd, 0xa5, 0xdb, 0x9c, 0x49, 0x4d, 0x3c, 0xa2, 0x29, 0x18, 0xb6, 0x0c, 0xcb, 0x76, + 0xf9, 0x39, 0x41, 0xf6, 0x50, 0xfe, 0x21, 0xe5, 0x70, 0x23, 0xca, 0xfb, 0x4d, 0xd1, 0x61, 0xad, + 0x2b, 0x2f, 0x3d, 0xd4, 0xab, 0x0c, 0xce, 0xbe, 0x4b, 0xf2, 0x87, 0x20, 0xd5, 0xbc, 0x4f, 0x45, + 0x6b, 0xde, 0x2f, 0xe0, 0x46, 0xe3, 0x79, 0xcb, 0xbe, 0x69, 0x6d, 0x12, 0x1a, 0xff, 0x2b, 0xa6, + 0x7f, 0xa5, 0xc0, 0x2c, 0x3d, 0x29, 0xed, 0x34, 0x4d, 0xcb, 0x3b, 0xd7, 0x30, 0xb7, 0xdd, 0x73, + 0xdb, 0xa6, 0xe7, 0xb2, 0x4f, 0x9e, 0xb8, 0x4c, 0xa6, 0x02, 0x8c, 0x39, 0x82, 0x31, 0x47, 0x30, + 0xd4, 0x0b, 0x90, 0x29, 0x9b, 0xde, 0xbc, 0xe3, 0x18, 0xfb, 0x08, 0x41, 0x8a, 0xc0, 0xb8, 0x50, + 0xe8, 0x6f, 0x22, 0x11, 0xdc, 0xc0, 0x4d, 0x97, 0xee, 0xb6, 0xa4, 0x34, 0xf6, 0x50, 0xde, 0xea, + 0xfa, 0x09, 0xd6, 0x25, 0x69, 0xa4, 0x52, 0x97, 0xa4, 0x9f, 0xac, 0x48, 0x1f, 0xd7, 0x5d, 0x7f, + 0x3c, 0x9f, 0x4b, 0xc1, 0x49, 0x09, 0xa1, 0xea, 0xec, 0xb7, 0x3c, 0xaa, 0x0b, 0xf6, 0x0e, 0x1f, + 0xcc, 0x84, 0x34, 0x18, 0xf6, 0xba, 0x18, 0xbb, 0x03, 0xa0, 0xee, 0xc0, 0xf0, 0x3a, 0xa1, 0x0b, + 0xbe, 0x25, 0x63, 0xa3, 0x63, 0x0f, 0x04, 0xca, 0x4e, 0x8b, 0x27, 0x18, 0xd4, 0x14, 0x07, 0xc5, + 0x1b, 0xd8, 0xd8, 0x61, 0x87, 0xee, 0x92, 0x74, 0xd3, 0x2d, 0x43, 0x00, 0xf4, 0x7c, 0xdd, 0x14, + 0x0c, 0x1b, 0x6d, 0xb6, 0x5f, 0x94, 0x3c, 0x3d, 0xaa, 0xb1, 0x07, 0xf5, 0x79, 0x18, 0xe1, 0x35, + 0xea, 0x98, 0x2f, 0xe8, 0xe6, 0x60, 0x98, 0x76, 0x9e, 0x9f, 0x26, 0x9e, 0x9e, 0xeb, 0xe8, 0xfd, + 0x1c, 0xed, 0xa4, 0xc6, 0xd0, 0xd4, 0xe7, 0x20, 0xb3, 0x68, 0x37, 0x4d, 0xcb, 0x0e, 0x73, 0xcb, + 0x32, 0x6e, 0xb4, 0xcf, 0xad, 0xb6, 0xc7, 0xb7, 0x70, 0xd8, 0x03, 0xfd, 0x4a, 0x8f, 0x1e, 0xc2, + 0xe4, 0x7b, 0x5e, 0xfc, 0x49, 0x5d, 0x80, 0x11, 0xca, 0x7b, 0xad, 0x45, 0xe6, 0xd7, 0x3f, 0x01, + 0x93, 0xe5, 0x47, 0xf2, 0x39, 0xfb, 0x44, 0xd0, 0x59, 0x04, 0xa9, 0x9a, 0xe1, 0x19, 0x7c, 0xdc, + 0xf4, 0xb7, 0xfa, 0x0c, 0x64, 0x38, 0x13, 0x17, 0x9d, 0x87, 0xa4, 0xdd, 0x72, 0xf9, 0xae, 0x55, + 0xb1, 0xdb, 0x50, 0xd6, 0x5a, 0xe5, 0xd4, 0xaf, 0x1f, 0xcc, 0x0c, 0x69, 0x04, 0xb9, 0xac, 0x75, + 0xd5, 0x97, 0xa7, 0x0e, 0xaf, 0x2f, 0xac, 0x19, 0x5f, 0x59, 0x3e, 0x93, 0x80, 0x53, 0xd2, 0xdb, + 0x1b, 0xd8, 0x21, 0x81, 0x5a, 0x48, 0xf5, 0x91, 0xd4, 0x49, 0xfe, 0xbe, 0x8b, 0xba, 0x3c, 0x0d, + 0xc9, 0xf9, 0x56, 0x0b, 0x15, 0x21, 0xc3, 0x76, 0xa7, 0x6c, 0xa6, 0x2f, 0x29, 0xcd, 0x7f, 0x26, + 0xef, 0x5c, 0x7b, 0xc7, 0xbb, 0x69, 0x38, 0xfe, 0x77, 0x0a, 0xe2, 0x59, 0xbd, 0x08, 0xd9, 0x05, + 0xdb, 0x72, 0xb1, 0xe5, 0xb6, 0xe9, 0xd2, 0xd9, 0x6e, 0xd8, 0xd5, 0xeb, 0x9c, 0x03, 0x7b, 0x20, + 0x02, 0x37, 0x5a, 0x2d, 0xfe, 0x45, 0x23, 0xf9, 0x59, 0x4a, 0x7d, 0xe9, 0xcd, 0x19, 0xa5, 0xbc, + 0xd1, 0x55, 0x44, 0x17, 0x0f, 0x2f, 0x22, 0x3e, 0x48, 0x5f, 0x46, 0xbf, 0x72, 0x1c, 0xee, 0x91, + 0x49, 0x99, 0xc5, 0x91, 0x24, 0x54, 0x90, 0x24, 0x44, 0xe1, 0xf1, 0xf2, 0x29, 0xf6, 0xb3, 0xbc, + 0xc5, 0xbe, 0x76, 0xa8, 0xd8, 0x7b, 0x65, 0x17, 0xfb, 0xcc, 0xa5, 0x7a, 0x11, 0xc6, 0xd6, 0x0d, + 0xc7, 0xdb, 0xc0, 0xde, 0x55, 0x6c, 0xd4, 0xb0, 0x13, 0x5e, 0xd8, 0x63, 0x62, 0x61, 0x23, 0x48, + 0xd1, 0xd5, 0xcb, 0x14, 0x9b, 0xfe, 0x56, 0x77, 0x21, 0x45, 0x77, 0xb8, 0xfd, 0x45, 0xcf, 0x29, + 0xd8, 0xa2, 0x27, 0xd3, 0xb5, 0xef, 0x61, 0x97, 0x93, 0xb0, 0x07, 0x74, 0x41, 0x2c, 0xdd, 0x64, + 0xef, 0xa5, 0xcb, 0xb5, 0x9d, 0x2f, 0xe0, 0x06, 0x8c, 0x94, 0xc9, 0x6c, 0x2f, 0x2d, 0xfa, 0x1d, + 0x51, 0x82, 0x8e, 0xa0, 0x15, 0x18, 0x6f, 0x19, 0x8e, 0x47, 0x8f, 0xf6, 0xed, 0xd2, 0x51, 0x70, + 0xcb, 0x30, 0x33, 0x17, 0x9d, 0x87, 0xb9, 0xd0, 0x60, 0x79, 0x2b, 0x63, 0x2d, 0x19, 0xa8, 0xfe, + 0x97, 0x14, 0xa4, 0xb9, 0x30, 0x9e, 0x86, 0x11, 0x2e, 0x34, 0xda, 0x60, 0xee, 0xfc, 0xc9, 0xb9, + 0x4e, 0xdd, 0x9f, 0xf3, 0x75, 0x94, 0xf3, 0x13, 0x34, 0xe8, 0x01, 0xc8, 0x54, 0x77, 0x0d, 0xd3, + 0xd2, 0x4d, 0x76, 0xc6, 0x2d, 0x5b, 0xce, 0xbd, 0x75, 0x30, 0x33, 0xb2, 0x40, 0x60, 0x4b, 0x8b, + 0xda, 0x08, 0x7d, 0xb9, 0x54, 0x23, 0xc6, 0x66, 0x17, 0x9b, 0xf5, 0x5d, 0x66, 0x6c, 0x92, 0x1a, + 0x7f, 0x42, 0x4f, 0x41, 0x8a, 0x28, 0x04, 0x3f, 0xf8, 0x5d, 0xec, 0x88, 0x1e, 0x7c, 0xc7, 0x58, + 0xce, 0x90, 0x86, 0x3f, 0xf5, 0xbb, 0x33, 0x8a, 0x46, 0x29, 0xd0, 0x02, 0x8c, 0x35, 0x0c, 0xd7, + 0xd3, 0xe9, 0x22, 0x21, 0xcd, 0x0f, 0x53, 0x16, 0xc7, 0x3b, 0x05, 0xc2, 0x05, 0xcb, 0xbb, 0x9e, + 0x23, 0x54, 0x0c, 0x54, 0x43, 0xa7, 0xa1, 0x40, 0x99, 0x54, 0xed, 0x66, 0xd3, 0xf4, 0x98, 0xf9, + 0x4e, 0x53, 0xb9, 0xe7, 0x09, 0x7c, 0x81, 0x82, 0xa9, 0x11, 0x3f, 0x01, 0x59, 0x7a, 0xd4, 0x94, + 0xa2, 0xb0, 0x63, 0x15, 0x19, 0x02, 0xa0, 0x2f, 0x1f, 0x84, 0xf1, 0x1b, 0x46, 0xc3, 0xac, 0x19, + 0x9e, 0xed, 0xb8, 0x0c, 0x25, 0xc3, 0xb8, 0x04, 0x60, 0x8a, 0xf8, 0x28, 0x4c, 0xd1, 0x4f, 0x97, + 0xa3, 0xd8, 0x59, 0x8a, 0x8d, 0xc8, 0xbb, 0x6b, 0x61, 0x8a, 0xfb, 0x21, 0x5f, 0x15, 0xc2, 0x67, + 0xb8, 0x40, 0x71, 0xc7, 0x7c, 0x28, 0x45, 0x3b, 0x0e, 0x19, 0xa3, 0xd5, 0x62, 0x08, 0x39, 0xf6, + 0x4d, 0xb4, 0xd1, 0x6a, 0xd1, 0x57, 0x67, 0x61, 0x82, 0x8e, 0xd1, 0xc1, 0x6e, 0xbb, 0xe1, 0x71, + 0x26, 0xa3, 0x14, 0x67, 0x9c, 0xbc, 0xd0, 0x18, 0x9c, 0xe2, 0xde, 0x07, 0x63, 0xf8, 0x86, 0x59, + 0xc3, 0x56, 0x15, 0x33, 0xbc, 0x31, 0x8a, 0x37, 0x2a, 0x80, 0x14, 0xe9, 0x0c, 0x14, 0x5a, 0x8e, + 0xdd, 0xb2, 0x5d, 0xec, 0xe8, 0x46, 0xad, 0xe6, 0x60, 0xd7, 0x9d, 0xce, 0x33, 0x7e, 0x02, 0x3e, + 0xcf, 0xc0, 0xea, 0xc3, 0x90, 0x5a, 0x34, 0x3c, 0x83, 0xd8, 0x30, 0x6f, 0x8f, 0xb9, 0x80, 0x51, + 0x8d, 0xfc, 0x8c, 0x5d, 0x6e, 0x5f, 0x4a, 0x40, 0xea, 0x9a, 0xed, 0x61, 0xf4, 0x98, 0xe4, 0x77, + 0xf2, 0x71, 0x3a, 0xbe, 0x61, 0xd6, 0x2d, 0x5c, 0x5b, 0x71, 0xeb, 0xd2, 0xb7, 0x62, 0x81, 0x8a, + 0x25, 0x42, 0x2a, 0x36, 0x05, 0xc3, 0x8e, 0xdd, 0xb6, 0x6a, 0xe2, 0x94, 0x02, 0x7d, 0x40, 0x15, + 0xc8, 0xf8, 0x9a, 0x93, 0xea, 0xa7, 0x39, 0xe3, 0x44, 0x73, 0x88, 0x5e, 0x73, 0x80, 0x36, 0xb2, + 0xcd, 0x15, 0xa8, 0x0c, 0x59, 0xdf, 0xa0, 0x71, 0x0d, 0x1c, 0x4c, 0x89, 0x03, 0x32, 0xf4, 0x10, + 0x4c, 0xf8, 0xfa, 0xe0, 0x0b, 0x94, 0x69, 0x61, 0xc1, 0x7f, 0xc1, 0x25, 0x1a, 0x52, 0x35, 0xfe, + 0xdd, 0xda, 0x08, 0x1d, 0x57, 0xa0, 0x6a, 0xec, 0xdb, 0xb5, 0x7b, 0x20, 0xeb, 0x9a, 0x75, 0xcb, + 0xf0, 0xda, 0x0e, 0xe6, 0xda, 0x18, 0x00, 0xd4, 0x4f, 0x27, 0x20, 0xcd, 0xb4, 0x5b, 0x92, 0x9b, + 0x12, 0x2f, 0xb7, 0x44, 0x37, 0xb9, 0x25, 0xef, 0x5c, 0x6e, 0xf3, 0x00, 0x7e, 0x67, 0x5c, 0xfe, + 0x39, 0xd1, 0x89, 0x4e, 0x46, 0xac, 0x8b, 0x1b, 0x66, 0x9d, 0x2f, 0x5e, 0x89, 0xc8, 0xd7, 0xa0, + 0x61, 0xc9, 0x4e, 0x5e, 0x82, 0xec, 0xb6, 0xe9, 0xe9, 0x06, 0x89, 0x4e, 0xa9, 0x08, 0x73, 0xe7, + 0x4f, 0xcd, 0xc5, 0x85, 0xb1, 0x73, 0x22, 0x86, 0xd5, 0x32, 0xdb, 0xfc, 0x97, 0xfa, 0x9f, 0x14, + 0xe2, 0x8c, 0x79, 0x83, 0x68, 0x1e, 0xc6, 0xc4, 0x40, 0xf5, 0x9d, 0x86, 0x51, 0xe7, 0xca, 0x78, + 0xb2, 0xeb, 0x68, 0x2f, 0x37, 0x8c, 0xba, 0x96, 0xe3, 0x03, 0x24, 0x0f, 0xf1, 0x13, 0x9b, 0xe8, + 0x32, 0xb1, 0x21, 0x4d, 0x4a, 0xde, 0x99, 0x26, 0x85, 0xe6, 0x3c, 0x15, 0x9d, 0xf3, 0x9f, 0x4f, + 0xd0, 0xa0, 0xac, 0x65, 0xbb, 0x46, 0xe3, 0xdd, 0x58, 0x62, 0x27, 0x20, 0xdb, 0xb2, 0x1b, 0x3a, + 0x7b, 0xc3, 0x8e, 0x03, 0x65, 0x5a, 0x76, 0x43, 0xeb, 0xd0, 0xa3, 0xe1, 0xbb, 0xb4, 0xfe, 0xd2, + 0x77, 0x41, 0x6a, 0x23, 0x51, 0xa9, 0x39, 0x30, 0xca, 0x44, 0xc1, 0x1d, 0xe6, 0xa3, 0x44, 0x06, + 0xd4, 0x03, 0x2b, 0x9d, 0x0e, 0x9e, 0x75, 0x9b, 0x61, 0x6a, 0x1c, 0x8f, 0x50, 0x30, 0xff, 0x12, + 0x17, 0xcd, 0xcb, 0x7a, 0xae, 0x71, 0x3c, 0xf5, 0x9f, 0x28, 0x90, 0xa5, 0x43, 0x5d, 0xc1, 0x9e, + 0x11, 0x12, 0x95, 0x72, 0xe7, 0xa2, 0x3a, 0x09, 0xc0, 0xd8, 0xb8, 0xe6, 0x2d, 0xcc, 0x27, 0x30, + 0x4b, 0x21, 0x1b, 0xe6, 0x2d, 0x8c, 0x9e, 0xf0, 0xc7, 0x95, 0xec, 0x3d, 0x2e, 0xbe, 0x14, 0xc5, + 0xe8, 0x8e, 0xc1, 0x08, 0xfd, 0x6c, 0x7e, 0x8f, 0x9d, 0x87, 0x4b, 0xd2, 0x6f, 0xe5, 0x36, 0xf7, + 0x5c, 0xf5, 0x65, 0x18, 0xd9, 0xdc, 0x63, 0xa9, 0xd4, 0x09, 0xc8, 0x3a, 0xb6, 0xcd, 0xfd, 0x2b, + 0x8b, 0x6b, 0x32, 0x04, 0x40, 0xdd, 0x89, 0x48, 0x1f, 0x12, 0x41, 0xfa, 0x10, 0xe4, 0x3f, 0xc9, + 0x81, 0xf2, 0x9f, 0xb3, 0xbf, 0xad, 0x40, 0x4e, 0x5a, 0x86, 0xe8, 0xfd, 0x70, 0xa4, 0xbc, 0xbc, + 0xb6, 0xf0, 0xbc, 0xbe, 0xb4, 0xa8, 0x5f, 0x5e, 0x9e, 0xbf, 0x12, 0x9c, 0x2b, 0x2d, 0x1e, 0x7d, + 0xed, 0x8d, 0x59, 0x24, 0xe1, 0x6e, 0x59, 0xd7, 0x49, 0x7e, 0x8c, 0xce, 0xc1, 0x54, 0x98, 0x64, + 0xbe, 0xbc, 0x51, 0x59, 0xdd, 0x2c, 0x28, 0xc5, 0x23, 0xaf, 0xbd, 0x31, 0x3b, 0x21, 0x51, 0xcc, + 0x6f, 0xbb, 0xd8, 0xf2, 0x3a, 0x09, 0x16, 0xd6, 0x56, 0x56, 0x96, 0x36, 0x0b, 0x89, 0x0e, 0x02, + 0x6e, 0x68, 0xcf, 0xc0, 0x44, 0x98, 0x60, 0x75, 0x69, 0xb9, 0x90, 0x2c, 0xa2, 0xd7, 0xde, 0x98, + 0xcd, 0x4b, 0xd8, 0xab, 0x66, 0xa3, 0x98, 0xf9, 0xe4, 0x4f, 0x9e, 0x1a, 0xfa, 0xec, 0x4f, 0x9d, + 0x52, 0xc8, 0xc8, 0xc6, 0x42, 0x4b, 0x11, 0x3d, 0x0c, 0xc7, 0x36, 0x96, 0xae, 0xac, 0x56, 0x16, + 0xf5, 0x95, 0x8d, 0x2b, 0x3a, 0xfb, 0x9e, 0xd6, 0x1f, 0xdd, 0xf8, 0x6b, 0x6f, 0xcc, 0xe6, 0xf8, + 0x90, 0xba, 0x61, 0xaf, 0x6b, 0x95, 0x6b, 0x6b, 0x9b, 0x95, 0x82, 0xc2, 0xb0, 0xd7, 0x1d, 0x7c, + 0xc3, 0xf6, 0xd8, 0xbd, 0x1a, 0x8f, 0xc2, 0xf1, 0x18, 0x6c, 0x7f, 0x60, 0x13, 0xaf, 0xbd, 0x31, + 0x3b, 0xb6, 0xee, 0x60, 0xa6, 0xa6, 0x94, 0x62, 0x0e, 0xa6, 0x3b, 0x29, 0xd6, 0xd6, 0xd7, 0x36, + 0xe6, 0x97, 0x0b, 0xb3, 0xc5, 0xc2, 0x6b, 0x6f, 0xcc, 0x8e, 0x0a, 0x9b, 0x43, 0xf0, 0x83, 0x91, + 0x95, 0x3f, 0xd4, 0x35, 0x7f, 0x79, 0xf2, 0xf0, 0xf9, 0x8b, 0x17, 0x2a, 0x6f, 0xfc, 0xa5, 0x04, 0x9c, 0xea, 0x38, 0xbd, 0xc7, 0x6b, 0x5e, 0xdd, 0x0a, 0x3e, 0x25, 0xc8, 0x2c, 0x8a, 0x52, 0xda, - 0x61, 0xeb, 0x3d, 0x3f, 0x70, 0xc8, 0x7a, 0xcf, 0x98, 0x68, 0x49, 0x94, 0x7b, 0xce, 0xf6, 0x2f, - 0xf7, 0x88, 0xfe, 0xdf, 0x41, 0xb5, 0xe7, 0x7b, 0x13, 0xa1, 0x64, 0x8e, 0xe7, 0x50, 0xd7, 0xf1, + 0x61, 0xeb, 0x3d, 0x3f, 0x78, 0xc8, 0x7a, 0xcf, 0x98, 0x68, 0x49, 0x94, 0x7b, 0xce, 0xf6, 0x2f, + 0xf7, 0x88, 0xfe, 0xdf, 0x41, 0xb5, 0xe7, 0xfb, 0x12, 0xa1, 0x64, 0x8e, 0xe7, 0x50, 0xd7, 0xf1, 0xbe, 0x7b, 0xd8, 0xe2, 0xc8, 0x53, 0x90, 0x5d, 0xa7, 0x37, 0xbf, 0x3c, 0x8f, 0xf7, 0x51, 0x11, - 0x46, 0x70, 0xed, 0xfc, 0xe3, 0x8f, 0x7f, 0xf0, 0x22, 0x5b, 0xd3, 0x57, 0x87, 0x34, 0x01, 0x28, - 0x65, 0x48, 0x8a, 0xfa, 0xe5, 0xcf, 0xce, 0x28, 0xe5, 0x61, 0x48, 0xba, 0xed, 0xa6, 0x7a, 0x0e, - 0x60, 0xdd, 0x31, 0x6f, 0x18, 0x1e, 0xee, 0x43, 0xca, 0x09, 0xde, 0xd5, 0x0a, 0xc0, 0x1f, 0x8f, + 0x46, 0x70, 0xed, 0xfc, 0xe3, 0x8f, 0xbf, 0xff, 0x22, 0x5b, 0xd3, 0x57, 0x87, 0x34, 0x01, 0x28, + 0x65, 0x48, 0x8a, 0xfa, 0xa5, 0xcf, 0xcc, 0x28, 0xe5, 0x61, 0x48, 0xba, 0xed, 0xa6, 0x7a, 0x0e, + 0x60, 0xdd, 0x31, 0x6f, 0x18, 0x1e, 0xee, 0x43, 0xca, 0x09, 0xde, 0xd1, 0x0a, 0xc0, 0x9f, 0x8c, 0x84, 0xca, 0x45, 0x4c, 0xc0, 0x2d, 0xc3, 0x31, 0x9a, 0x87, 0x4d, 0x6f, 0xfb, 0xa8, 0x99, 0xfa, - 0x46, 0x02, 0xc6, 0xfd, 0xe4, 0x69, 0x9d, 0xb6, 0x80, 0x2e, 0xca, 0x69, 0x7e, 0xae, 0x6b, 0x44, + 0x7a, 0x02, 0xc6, 0xfd, 0xe4, 0x69, 0x9d, 0xb6, 0x80, 0x2e, 0xca, 0x69, 0x7e, 0xae, 0x6b, 0x44, 0xc1, 0xb0, 0x45, 0x9a, 0xc8, 0x6a, 0x01, 0x65, 0xc8, 0x88, 0x50, 0x9c, 0x3b, 0x93, 0xd9, 0x4e, 0xea, 0x0a, 0xc7, 0x08, 0x31, 0xf0, 0xe9, 0x50, 0x05, 0xb2, 0x7e, 0xf0, 0xe1, 0x7f, 0xc5, 0xdc, 0xc1, 0xc4, 0x4f, 0x43, 0x42, 0x5c, 0x02, 0x4a, 0xf4, 0x6c, 0x90, 0x38, 0xa6, 0xba, 0xa5, 0xa2, @@ -1939,21 +1939,21 @@ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descri 0x9d, 0x65, 0xd4, 0x6c, 0xd5, 0x65, 0x9a, 0xc6, 0x5e, 0x99, 0x26, 0xd5, 0xc7, 0x60, 0x84, 0xbc, 0xac, 0xf3, 0xcf, 0x65, 0x92, 0x5a, 0xba, 0x69, 0xec, 0x5d, 0x31, 0x5c, 0x34, 0x0b, 0xa3, 0xc4, 0x91, 0xeb, 0xa6, 0xed, 0x19, 0x7a, 0xd3, 0xe5, 0xd9, 0x25, 0x10, 0xd8, 0x92, 0xed, 0x19, 0x2b, - 0xae, 0xfa, 0x9b, 0x0a, 0xe4, 0xc3, 0x12, 0x41, 0x0f, 0x01, 0x22, 0xdc, 0x8c, 0x3a, 0xd6, 0x89, + 0xae, 0xfa, 0x5b, 0x0a, 0xe4, 0xc3, 0x12, 0x41, 0x0f, 0x01, 0x22, 0xdc, 0x8c, 0x3a, 0xd6, 0x89, 0xeb, 0xa2, 0xa2, 0x15, 0x6d, 0x8e, 0x37, 0x8d, 0xbd, 0xf9, 0x3a, 0x5e, 0x6d, 0x37, 0x69, 0xe7, 0x5c, 0xb4, 0x02, 0x05, 0x81, 0x2c, 0xe6, 0x96, 0x8b, 0xfe, 0x78, 0xe7, 0xdd, 0x27, 0x1c, 0x81, - 0xc5, 0x19, 0x6f, 0x90, 0x38, 0x23, 0xcf, 0xf8, 0xf9, 0xa6, 0x85, 0x8f, 0xc4, 0x6a, 0x37, 0x69, + 0xc5, 0x19, 0xaf, 0x93, 0x38, 0x23, 0xcf, 0xf8, 0xf9, 0xa6, 0x85, 0x8f, 0xc4, 0x6a, 0x37, 0x69, 0x5f, 0xc7, 0xe8, 0x48, 0x56, 0xdb, 0x4d, 0xfa, 0xe5, 0x00, 0xf1, 0x65, 0xba, 0xe7, 0x98, 0x46, 0x43, 0x6f, 0x61, 0xc7, 0xb4, 0x6b, 0xdc, 0xa5, 0x16, 0xe8, 0x9b, 0x4d, 0xf2, 0x62, 0x9d, 0xc2, 0xd5, 0x67, 0x61, 0x3c, 0x32, 0x43, 0x48, 0x85, 0xb1, 0x56, 0x7b, 0x5b, 0xbf, 0x8e, 0xf7, 0xe9, 0x87, 0xd6, 0x2c, 0xdb, 0xca, 0x6a, 0xb9, 0x56, 0x7b, 0xfb, 0x79, 0xbc, 0x4f, 0x2d, 0x42, 0x29, - 0xf3, 0x05, 0xb2, 0x2c, 0xdf, 0x9a, 0x51, 0xd4, 0x12, 0x8c, 0x85, 0x66, 0x87, 0x7e, 0x95, 0xd4, - 0x6a, 0xe9, 0x72, 0x31, 0x20, 0xa5, 0x81, 0xd1, 0x6a, 0x71, 0x34, 0x89, 0xf6, 0x65, 0x18, 0x25, + 0xf3, 0x79, 0xb2, 0x2c, 0xdf, 0x9c, 0x51, 0xd4, 0x12, 0x8c, 0x85, 0x66, 0x87, 0x7e, 0x95, 0xd4, + 0x6a, 0xe9, 0x72, 0x31, 0x20, 0xa5, 0x81, 0xd1, 0x6a, 0x71, 0x34, 0x89, 0xf6, 0x25, 0x18, 0x25, 0x9e, 0x1b, 0xd7, 0x38, 0xe9, 0x03, 0x30, 0xce, 0x22, 0x8b, 0xe8, 0x04, 0xb2, 0x08, 0x7a, 0x45, - 0xcc, 0xa2, 0x2a, 0x42, 0xea, 0xf0, 0x5c, 0xe6, 0x04, 0xd6, 0x15, 0xc3, 0x2d, 0x6f, 0x7d, 0xee, - 0xed, 0x53, 0xca, 0xbb, 0xe7, 0x19, 0x7e, 0xe8, 0x32, 0x9c, 0x90, 0x5e, 0x1a, 0xdb, 0x55, 0x33, + 0xcc, 0xa2, 0x2a, 0x42, 0xea, 0xf0, 0x5c, 0xe6, 0x04, 0xd6, 0x15, 0xc3, 0x2d, 0x6f, 0x7d, 0xf6, + 0xad, 0x53, 0xca, 0x3b, 0xe7, 0x19, 0x7e, 0xf8, 0x32, 0x9c, 0x90, 0x5e, 0x1a, 0xdb, 0x55, 0x33, 0x54, 0xd6, 0x1a, 0x97, 0x74, 0x98, 0xbc, 0xec, 0x57, 0x7c, 0xea, 0x59, 0x24, 0x2b, 0xf6, 0xb4, - 0xba, 0xc5, 0xde, 0x26, 0xa8, 0x7f, 0xe5, 0x2c, 0xde, 0x44, 0x7f, 0x26, 0x03, 0x23, 0xe2, 0x6a, + 0xba, 0xc5, 0xde, 0x26, 0xa8, 0x7f, 0xe5, 0x2c, 0xde, 0x44, 0x7f, 0x3a, 0x03, 0x23, 0xe2, 0x6a, 0xb6, 0xf3, 0x90, 0xc2, 0xd5, 0x5d, 0x9b, 0x1b, 0x9a, 0x7b, 0xe6, 0x22, 0x83, 0x9b, 0xe3, 0x78, 0x95, 0xea, 0xae, 0x7d, 0x75, 0x48, 0xa3, 0xb8, 0xe8, 0x71, 0x18, 0xde, 0x69, 0xb4, 0x79, 0x66, 0x1e, 0xb1, 0x4e, 0x32, 0xd1, 0x65, 0x82, 0x74, 0x75, 0x48, 0x63, 0xd8, 0xa4, 0x29, 0x7a, 0x05, @@ -1961,105 +1961,105 @@ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descri 0x7d, 0x51, 0xaa, 0xd3, 0x14, 0xc9, 0x94, 0x1b, 0xd8, 0x63, 0xbb, 0x48, 0x57, 0x87, 0xb4, 0xac, 0x2b, 0x1e, 0x08, 0x0f, 0xd3, 0x32, 0x3d, 0x9d, 0x16, 0x9a, 0x78, 0x26, 0x71, 0x6f, 0xf7, 0xd6, 0x4d, 0x8f, 0x96, 0xa6, 0x08, 0x0f, 0x53, 0x3c, 0x90, 0x21, 0xd3, 0x4b, 0xde, 0x78, 0x02, 0xd1, - 0x75, 0xc8, 0x2f, 0x10, 0x24, 0x32, 0x64, 0x8a, 0x8d, 0x2a, 0x90, 0xa3, 0x5f, 0x3c, 0x30, 0x03, - 0xc2, 0xaf, 0x54, 0x52, 0xbb, 0x11, 0x97, 0x09, 0x2a, 0xb5, 0x29, 0x57, 0x87, 0x34, 0xd8, 0xf6, - 0x9f, 0xd0, 0x87, 0x20, 0xc3, 0x3e, 0xb9, 0xf7, 0xf6, 0xf8, 0x45, 0x32, 0x33, 0xdd, 0x78, 0xd0, - 0xef, 0xee, 0x37, 0xf7, 0x88, 0xb7, 0xac, 0xb2, 0x9f, 0x64, 0xfc, 0x35, 0xdc, 0x30, 0x6f, 0x60, - 0x87, 0xd0, 0x67, 0x7b, 0x8f, 0x7f, 0x91, 0x61, 0x52, 0x0e, 0xd9, 0x9a, 0x78, 0x40, 0xcf, 0x42, - 0x16, 0x5b, 0x35, 0x3e, 0x0c, 0xe8, 0x74, 0x2b, 0x21, 0x5d, 0xb1, 0x6a, 0x62, 0x10, 0x19, 0xcc, - 0x7f, 0xa3, 0xa7, 0xfc, 0x0c, 0x27, 0xd7, 0x99, 0x73, 0x87, 0x06, 0xc0, 0x0a, 0x6a, 0x43, 0x22, - 0xd3, 0x41, 0xab, 0x90, 0x6f, 0x98, 0xae, 0xa7, 0xbb, 0x96, 0xd1, 0x72, 0x77, 0x6d, 0xcf, 0xa5, - 0x95, 0xa9, 0xdc, 0xf9, 0xfb, 0xbb, 0x71, 0x58, 0x36, 0x5d, 0x6f, 0x43, 0x20, 0x5f, 0x1d, 0xd2, - 0xc6, 0x1a, 0x32, 0x80, 0xf0, 0xb3, 0x77, 0x76, 0xb0, 0xe3, 0x33, 0xa4, 0x15, 0xac, 0x1e, 0xfc, - 0xd6, 0x08, 0xb6, 0xa0, 0x27, 0xfc, 0x6c, 0x19, 0x80, 0x3e, 0x0a, 0x93, 0x0d, 0xdb, 0xa8, 0xf9, - 0xec, 0xf4, 0xea, 0x6e, 0xdb, 0xba, 0x4e, 0xcb, 0x5d, 0xb9, 0xf3, 0x67, 0xba, 0x76, 0xd2, 0x36, - 0x6a, 0x82, 0xc5, 0x02, 0x21, 0xb8, 0x3a, 0xa4, 0x4d, 0x34, 0xa2, 0x40, 0xf4, 0x71, 0x98, 0x32, - 0x5a, 0xad, 0xc6, 0x7e, 0x94, 0xfb, 0x38, 0xe5, 0x7e, 0xb6, 0x1b, 0xf7, 0x79, 0x42, 0x13, 0x65, - 0x8f, 0x8c, 0x0e, 0x68, 0x79, 0x84, 0x5f, 0x18, 0xa3, 0x3e, 0x08, 0x39, 0x69, 0xa9, 0x93, 0xf0, - 0x96, 0x9f, 0xa1, 0xe0, 0x3b, 0x3b, 0xe2, 0x51, 0xcd, 0xc3, 0xa8, 0xbc, 0xbc, 0xd5, 0xa6, 0x4f, - 0x48, 0x3f, 0x43, 0x9a, 0x0e, 0x17, 0x8b, 0xb3, 0x41, 0x1d, 0xf8, 0x3e, 0x61, 0xda, 0xc5, 0x7b, - 0xb6, 0x5d, 0x31, 0x4a, 0x81, 0xdc, 0x83, 0x10, 0x17, 0xd3, 0x3a, 0x1f, 0xb8, 0x18, 0x76, 0x0b, - 0x24, 0xb4, 0xce, 0x0b, 0x17, 0xa3, 0x96, 0xa0, 0x10, 0x5d, 0xed, 0xf1, 0xdb, 0x59, 0xe2, 0x1e, - 0x1c, 0xba, 0x9d, 0xc5, 0xc6, 0xf8, 0x93, 0x09, 0x9f, 0xd8, 0x5f, 0xe6, 0x7e, 0x79, 0x59, 0x39, - 0x74, 0x79, 0xf9, 0x78, 0xb4, 0xb0, 0x1d, 0xd4, 0xb2, 0x9f, 0x87, 0x42, 0x50, 0x92, 0x65, 0x26, - 0x9b, 0x9b, 0xbd, 0xce, 0x55, 0x13, 0x89, 0xfd, 0xb4, 0xf1, 0x6a, 0x24, 0x18, 0xbc, 0x0c, 0x10, - 0x14, 0x83, 0xfd, 0xcb, 0x10, 0xa3, 0x6c, 0x7c, 0x5f, 0xbf, 0xd5, 0xaa, 0x19, 0x1e, 0x16, 0xd5, - 0xb0, 0x80, 0x92, 0xf8, 0x60, 0xe2, 0xbe, 0x5d, 0xcf, 0xf0, 0x30, 0xf7, 0xc1, 0xac, 0x30, 0x36, - 0x66, 0xb4, 0x5a, 0x1b, 0x04, 0x4a, 0x7d, 0xb0, 0x5a, 0xf3, 0x67, 0x98, 0x5a, 0x33, 0x3f, 0xfb, - 0x56, 0xa4, 0xec, 0x1b, 0xf1, 0x0f, 0xc2, 0xd8, 0xb8, 0xc5, 0x37, 0x74, 0xf1, 0x05, 0xfc, 0x29, - 0x9a, 0xa9, 0xdf, 0xc0, 0xfc, 0xde, 0x4e, 0xf6, 0xa0, 0x7e, 0x5b, 0x02, 0x26, 0x3a, 0xec, 0x5e, - 0xec, 0xce, 0x46, 0x50, 0x76, 0x48, 0x1c, 0xaa, 0xec, 0xb0, 0x16, 0xae, 0xdc, 0x4b, 0xbe, 0xa7, - 0xd3, 0x7a, 0x2e, 0xfb, 0xa5, 0x7c, 0xa2, 0xc5, 0x9c, 0x91, 0x54, 0xe0, 0xa7, 0xba, 0xad, 0xc1, - 0xd4, 0xf6, 0xfe, 0x2d, 0xc3, 0xf2, 0x4c, 0x0b, 0xeb, 0x1d, 0x53, 0x72, 0xbc, 0x83, 0xa9, 0x88, - 0x29, 0x39, 0xbb, 0x49, 0x9f, 0x38, 0x28, 0xe0, 0xab, 0x1a, 0xe4, 0xc3, 0x96, 0x1b, 0xe5, 0x21, - 0xe1, 0xed, 0x71, 0x01, 0x24, 0xbc, 0x3d, 0xf4, 0x28, 0x2f, 0xc3, 0x25, 0x68, 0x19, 0xae, 0xd3, - 0x6d, 0x72, 0xba, 0xa0, 0x06, 0xa7, 0xaa, 0xbe, 0x9a, 0xfb, 0xd6, 0x3c, 0xca, 0x55, 0x3d, 0x03, - 0xe3, 0x11, 0x73, 0xdd, 0xad, 0xca, 0xab, 0x8e, 0xc3, 0x58, 0xc8, 0x36, 0xab, 0x47, 0x61, 0x2a, - 0xce, 0xd4, 0xaa, 0xbb, 0x3e, 0x3c, 0x64, 0x32, 0xd1, 0xe3, 0x90, 0xf1, 0x6d, 0x6d, 0x4c, 0x75, - 0x8a, 0x8e, 0x42, 0x20, 0x6b, 0x3e, 0x6a, 0x68, 0xc3, 0x22, 0x11, 0xda, 0xb0, 0x50, 0x3f, 0x01, - 0xd3, 0xdd, 0xec, 0x68, 0x64, 0x18, 0x29, 0x5f, 0x0d, 0x8f, 0x42, 0x9a, 0xdf, 0x76, 0x91, 0x60, - 0x51, 0x35, 0x7b, 0x22, 0xea, 0xc9, 0x6c, 0x2a, 0x0b, 0xb6, 0xd9, 0x83, 0xaa, 0xc3, 0xf1, 0xae, - 0xb6, 0xb4, 0xfb, 0x66, 0x1f, 0x63, 0xc4, 0x37, 0xfb, 0xaa, 0xa2, 0x3b, 0x2e, 0x1d, 0xab, 0xd8, - 0x43, 0x67, 0x4f, 0xea, 0x7f, 0xc9, 0x40, 0xc6, 0xbf, 0xaf, 0xb6, 0x0c, 0x59, 0xbc, 0x57, 0xc5, - 0x2d, 0x2f, 0xd8, 0x64, 0x8b, 0x8b, 0x12, 0x18, 0x76, 0x45, 0x60, 0x12, 0x17, 0xed, 0x93, 0xa1, - 0xc7, 0x78, 0x24, 0xd7, 0x3d, 0x28, 0xe3, 0xe4, 0x72, 0x28, 0xf7, 0x84, 0x08, 0xe5, 0x92, 0x5d, - 0xbd, 0x32, 0xa3, 0x8a, 0xc4, 0x72, 0x8f, 0xf1, 0x58, 0x2e, 0xd5, 0xa7, 0xb1, 0x50, 0x30, 0xb7, - 0x10, 0x0a, 0xe6, 0x86, 0xfb, 0x0c, 0xb3, 0x4b, 0x34, 0xb7, 0x10, 0x8a, 0xe6, 0xd2, 0x7d, 0x98, - 0x74, 0x09, 0xe7, 0x9e, 0x10, 0xe1, 0xdc, 0x48, 0x9f, 0x61, 0x47, 0xe2, 0xb9, 0xcb, 0xe1, 0x78, - 0x8e, 0xc5, 0x62, 0xf7, 0x75, 0xa5, 0xee, 0x1a, 0xd0, 0x3d, 0x2d, 0x05, 0x74, 0xd9, 0xae, 0xd1, - 0x14, 0x63, 0x12, 0x13, 0xd1, 0x2d, 0x84, 0x22, 0x3a, 0xe8, 0x23, 0x83, 0x2e, 0x21, 0xdd, 0x87, - 0xe5, 0x90, 0x2e, 0xd7, 0x35, 0x2a, 0xe4, 0x4a, 0x13, 0x17, 0xd3, 0x5d, 0xf4, 0x63, 0xba, 0xd1, - 0xae, 0x41, 0x29, 0x1f, 0x43, 0x34, 0xa8, 0x5b, 0xeb, 0x08, 0xea, 0xc6, 0xf8, 0xed, 0x9b, 0xdd, - 0x58, 0xf4, 0x89, 0xea, 0xd6, 0x3a, 0xa2, 0xba, 0x7c, 0x1f, 0x86, 0x7d, 0xc2, 0xba, 0x6f, 0x89, - 0x0f, 0xeb, 0xba, 0x07, 0x5e, 0xbc, 0x9b, 0x83, 0xc5, 0x75, 0x7a, 0x97, 0xb8, 0xae, 0x40, 0xd9, - 0x3f, 0xd4, 0x95, 0xfd, 0xe1, 0x03, 0xbb, 0x33, 0xc4, 0xcd, 0x46, 0x0c, 0x07, 0x3d, 0x81, 0xe5, - 0x38, 0xb6, 0xc3, 0x63, 0x26, 0xf6, 0xa0, 0x9e, 0x26, 0x8e, 0x3f, 0x30, 0x12, 0x3d, 0x82, 0x40, - 0xea, 0x12, 0x24, 0xc3, 0xa0, 0x7e, 0x41, 0x09, 0x68, 0xa9, 0xaf, 0x94, 0x83, 0x86, 0x2c, 0x0f, - 0x1a, 0xa4, 0xd8, 0x30, 0x11, 0x8e, 0x0d, 0x23, 0x95, 0x85, 0x64, 0xb4, 0xb2, 0xe0, 0xef, 0x50, - 0xb3, 0x08, 0x92, 0xdb, 0x77, 0x56, 0xf9, 0x18, 0xf7, 0x77, 0xeb, 0xaf, 0x32, 0x43, 0xff, 0x08, - 0x4c, 0x4a, 0xb8, 0xbe, 0x0b, 0x61, 0xb1, 0x4e, 0xc1, 0xc7, 0x9e, 0xe7, 0xbe, 0x64, 0x25, 0x10, - 0x50, 0x10, 0x52, 0x22, 0x48, 0x55, 0xed, 0x1a, 0xe6, 0x06, 0x9e, 0xfe, 0x26, 0x61, 0x66, 0xc3, - 0xae, 0x73, 0x33, 0x4e, 0x7e, 0x12, 0x2c, 0xdf, 0x0a, 0x66, 0x99, 0x91, 0x53, 0x3f, 0xa7, 0x04, - 0xfc, 0x82, 0x28, 0x33, 0x2e, 0x20, 0x54, 0xee, 0x4e, 0x40, 0x98, 0xb8, 0xd3, 0x80, 0x50, 0xfd, - 0x63, 0x25, 0x98, 0x46, 0x3f, 0xd4, 0xbb, 0xb3, 0x61, 0x07, 0x2e, 0x71, 0x58, 0x3e, 0xf4, 0xc6, - 0x23, 0xf3, 0x74, 0x70, 0x12, 0xcc, 0x8f, 0xcc, 0xd9, 0x2e, 0x1a, 0xbf, 0x76, 0xf2, 0x29, 0xc8, - 0xb2, 0xca, 0x96, 0xdd, 0x12, 0x57, 0xa5, 0x9e, 0xe8, 0x7e, 0x0a, 0xcc, 0xa5, 0x27, 0xa7, 0xd8, - 0xc9, 0xb1, 0xc0, 0xdb, 0x67, 0x43, 0x41, 0xe7, 0x3d, 0x90, 0x25, 0xbd, 0x67, 0x57, 0x7e, 0x01, - 0x3f, 0x52, 0x2b, 0x00, 0xea, 0xc7, 0x01, 0x75, 0xda, 0x68, 0x74, 0x15, 0xd2, 0xf8, 0x06, 0xbd, - 0x81, 0x81, 0x1d, 0x44, 0x3b, 0x1a, 0x13, 0xd1, 0x61, 0xcb, 0x2b, 0x4f, 0x13, 0x49, 0x7e, 0xe5, - 0x60, 0xa6, 0xc0, 0xb0, 0x1f, 0xb6, 0x9b, 0xa6, 0x87, 0x9b, 0x2d, 0x6f, 0x5f, 0xe3, 0xf4, 0xea, - 0x27, 0x13, 0x24, 0xbc, 0x0a, 0xd9, 0xef, 0x58, 0xd9, 0xc6, 0x6d, 0x6c, 0x0d, 0x26, 0xef, 0x53, - 0x00, 0x75, 0xc3, 0xd5, 0x6f, 0x1a, 0x96, 0x87, 0x6b, 0x5c, 0xe8, 0x12, 0x04, 0x15, 0x21, 0x43, - 0x9e, 0xda, 0x2e, 0xae, 0x51, 0xf1, 0x27, 0x35, 0xff, 0x59, 0x1a, 0xe7, 0xc8, 0x3b, 0x1b, 0x67, - 0x58, 0xca, 0x99, 0xa8, 0x94, 0xbf, 0x3d, 0x11, 0x2c, 0x85, 0x20, 0x12, 0xfd, 0xf3, 0x27, 0x87, - 0xef, 0xa6, 0x79, 0x67, 0xd8, 0x91, 0xa2, 0x0d, 0x79, 0xe7, 0xbf, 0x4d, 0x97, 0xa8, 0xd0, 0xbb, - 0x41, 0xd7, 0x72, 0x70, 0x42, 0x80, 0x81, 0x5d, 0xf4, 0x12, 0x1c, 0x8b, 0x98, 0x19, 0x9f, 0x75, - 0x62, 0x40, 0x6b, 0x73, 0x24, 0x6c, 0x6d, 0x04, 0xe7, 0x40, 0x56, 0xc9, 0x77, 0xb8, 0x36, 0x96, + 0x75, 0xc8, 0x1f, 0x22, 0x48, 0x64, 0xc8, 0x14, 0x1b, 0x55, 0x20, 0x47, 0xbf, 0x78, 0x60, 0x06, + 0x84, 0x5f, 0xa9, 0xa4, 0x76, 0x23, 0x2e, 0x13, 0x54, 0x6a, 0x53, 0xae, 0x0e, 0x69, 0xb0, 0xed, + 0x3f, 0xa1, 0x0f, 0x40, 0x86, 0x7d, 0x72, 0xef, 0xed, 0xf1, 0x8b, 0x64, 0x66, 0xba, 0xf1, 0xa0, + 0xdf, 0xdd, 0x6f, 0xee, 0x11, 0x6f, 0x59, 0x65, 0x3f, 0xc9, 0xf8, 0x6b, 0xb8, 0x61, 0xde, 0xc0, + 0x0e, 0xa1, 0xcf, 0xf6, 0x1e, 0xff, 0x22, 0xc3, 0xa4, 0x1c, 0xb2, 0x35, 0xf1, 0x80, 0x9e, 0x85, + 0x2c, 0xb6, 0x6a, 0x7c, 0x18, 0xd0, 0xe9, 0x56, 0x42, 0xba, 0x62, 0xd5, 0xc4, 0x20, 0x32, 0x98, + 0xff, 0x46, 0x4f, 0xf9, 0x19, 0x4e, 0xae, 0x33, 0xe7, 0x0e, 0x0d, 0x80, 0x15, 0xd4, 0x86, 0x44, + 0xa6, 0x83, 0x56, 0x21, 0xdf, 0x30, 0x5d, 0x4f, 0x77, 0x2d, 0xa3, 0xe5, 0xee, 0xda, 0x9e, 0x4b, + 0x2b, 0x53, 0xb9, 0xf3, 0xf7, 0x77, 0xe3, 0xb0, 0x6c, 0xba, 0xde, 0x86, 0x40, 0xbe, 0x3a, 0xa4, + 0x8d, 0x35, 0x64, 0x00, 0xe1, 0x67, 0xef, 0xec, 0x60, 0xc7, 0x67, 0x48, 0x2b, 0x58, 0x3d, 0xf8, + 0xad, 0x11, 0x6c, 0x41, 0x4f, 0xf8, 0xd9, 0x32, 0x00, 0x7d, 0x04, 0x26, 0x1b, 0xb6, 0x51, 0xf3, + 0xd9, 0xe9, 0xd5, 0xdd, 0xb6, 0x75, 0x9d, 0x96, 0xbb, 0x72, 0xe7, 0xcf, 0x74, 0xed, 0xa4, 0x6d, + 0xd4, 0x04, 0x8b, 0x05, 0x42, 0x70, 0x75, 0x48, 0x9b, 0x68, 0x44, 0x81, 0xe8, 0x63, 0x30, 0x65, + 0xb4, 0x5a, 0x8d, 0xfd, 0x28, 0xf7, 0x71, 0xca, 0xfd, 0x6c, 0x37, 0xee, 0xf3, 0x84, 0x26, 0xca, + 0x1e, 0x19, 0x1d, 0xd0, 0xf2, 0x08, 0xbf, 0x30, 0x46, 0x7d, 0x10, 0x72, 0xd2, 0x52, 0x27, 0xe1, + 0x2d, 0x3f, 0x43, 0xc1, 0x77, 0x76, 0xc4, 0xa3, 0x9a, 0x87, 0x51, 0x79, 0x79, 0xab, 0x4d, 0x9f, + 0x90, 0x7e, 0x86, 0x34, 0x1d, 0x2e, 0x16, 0x67, 0x83, 0x3a, 0xf0, 0x7d, 0xc2, 0xb4, 0x8b, 0xf7, + 0x6c, 0xbb, 0x62, 0x94, 0x02, 0xb9, 0x07, 0x21, 0x2e, 0xa6, 0x75, 0x3e, 0x70, 0x31, 0xec, 0x16, + 0x48, 0x68, 0x9d, 0x17, 0x2e, 0x46, 0x2d, 0x41, 0x21, 0xba, 0xda, 0xe3, 0xb7, 0xb3, 0xc4, 0x3d, + 0x38, 0x74, 0x3b, 0x8b, 0x8d, 0xf1, 0xa7, 0x12, 0x3e, 0xb1, 0xbf, 0xcc, 0xfd, 0xf2, 0xb2, 0x72, + 0xe8, 0xf2, 0xf2, 0xf1, 0x68, 0x61, 0x3b, 0xa8, 0x65, 0x3f, 0x0f, 0x85, 0xa0, 0x24, 0xcb, 0x4c, + 0x36, 0x37, 0x7b, 0x9d, 0xab, 0x26, 0x12, 0xfb, 0x69, 0xe3, 0xd5, 0x48, 0x30, 0x78, 0x19, 0x20, + 0x28, 0x06, 0xfb, 0x97, 0x21, 0x46, 0xd9, 0xf8, 0xbe, 0x7e, 0xab, 0x55, 0x33, 0x3c, 0x2c, 0xaa, + 0x61, 0x01, 0x25, 0xf1, 0xc1, 0xc4, 0x7d, 0xbb, 0x9e, 0xe1, 0x61, 0xee, 0x83, 0x59, 0x61, 0x6c, + 0xcc, 0x68, 0xb5, 0x36, 0x08, 0x94, 0xfa, 0x60, 0xb5, 0xe6, 0xcf, 0x30, 0xb5, 0x66, 0x7e, 0xf6, + 0xad, 0x48, 0xd9, 0x37, 0xe2, 0x1f, 0x84, 0xb1, 0x71, 0x8b, 0x6f, 0xe8, 0xe2, 0x0b, 0xf8, 0x53, + 0x34, 0x53, 0xbf, 0x81, 0xf9, 0xbd, 0x9d, 0xec, 0x41, 0xfd, 0xf6, 0x04, 0x4c, 0x74, 0xd8, 0xbd, + 0xd8, 0x9d, 0x8d, 0xa0, 0xec, 0x90, 0x38, 0x54, 0xd9, 0x61, 0x2d, 0x5c, 0xb9, 0x97, 0x7c, 0x4f, + 0xa7, 0xf5, 0x5c, 0xf6, 0x4b, 0xf9, 0x44, 0x8b, 0x39, 0x23, 0xa9, 0xc0, 0x4f, 0x75, 0x5b, 0x83, + 0xa9, 0xed, 0xfd, 0x5b, 0x86, 0xe5, 0x99, 0x16, 0xd6, 0x3b, 0xa6, 0xe4, 0x78, 0x07, 0x53, 0x11, + 0x53, 0x72, 0x76, 0x93, 0x3e, 0x71, 0x50, 0xc0, 0x57, 0x35, 0xc8, 0x87, 0x2d, 0x37, 0xca, 0x43, + 0xc2, 0xdb, 0xe3, 0x02, 0x48, 0x78, 0x7b, 0xe8, 0x51, 0x5e, 0x86, 0x4b, 0xd0, 0x32, 0x5c, 0xa7, + 0xdb, 0xe4, 0x74, 0x41, 0x0d, 0x4e, 0x55, 0x7d, 0x35, 0xf7, 0xad, 0x79, 0x94, 0xab, 0x7a, 0x06, + 0xc6, 0x23, 0xe6, 0xba, 0x5b, 0x95, 0x57, 0x1d, 0x87, 0xb1, 0x90, 0x6d, 0x56, 0x8f, 0xc2, 0x54, + 0x9c, 0xa9, 0x55, 0x77, 0x7d, 0x78, 0xc8, 0x64, 0xa2, 0xc7, 0x21, 0xe3, 0xdb, 0xda, 0x98, 0xea, + 0x14, 0x1d, 0x85, 0x40, 0xd6, 0x7c, 0xd4, 0xd0, 0x86, 0x45, 0x22, 0xb4, 0x61, 0xa1, 0x7e, 0x1c, + 0xa6, 0xbb, 0xd9, 0xd1, 0xc8, 0x30, 0x52, 0xbe, 0x1a, 0x1e, 0x85, 0x34, 0xbf, 0xed, 0x22, 0xc1, + 0xa2, 0x6a, 0xf6, 0x44, 0xd4, 0x93, 0xd9, 0x54, 0x16, 0x6c, 0xb3, 0x07, 0x55, 0x87, 0xe3, 0x5d, + 0x6d, 0x69, 0xf7, 0xcd, 0x3e, 0xc6, 0x88, 0x6f, 0xf6, 0x55, 0x45, 0x77, 0x5c, 0x3a, 0x56, 0xb1, + 0x87, 0xce, 0x9e, 0xd4, 0xff, 0x9c, 0x81, 0x8c, 0x7f, 0x5f, 0x6d, 0x19, 0xb2, 0x78, 0xaf, 0x8a, + 0x5b, 0x5e, 0xb0, 0xc9, 0x16, 0x17, 0x25, 0x30, 0xec, 0x8a, 0xc0, 0x24, 0x2e, 0xda, 0x27, 0x43, + 0x8f, 0xf1, 0x48, 0xae, 0x7b, 0x50, 0xc6, 0xc9, 0xe5, 0x50, 0xee, 0x09, 0x11, 0xca, 0x25, 0xbb, + 0x7a, 0x65, 0x46, 0x15, 0x89, 0xe5, 0x1e, 0xe3, 0xb1, 0x5c, 0xaa, 0x4f, 0x63, 0xa1, 0x60, 0x6e, + 0x21, 0x14, 0xcc, 0x0d, 0xf7, 0x19, 0x66, 0x97, 0x68, 0x6e, 0x21, 0x14, 0xcd, 0xa5, 0xfb, 0x30, + 0xe9, 0x12, 0xce, 0x3d, 0x21, 0xc2, 0xb9, 0x91, 0x3e, 0xc3, 0x8e, 0xc4, 0x73, 0x97, 0xc3, 0xf1, + 0x1c, 0x8b, 0xc5, 0xee, 0xeb, 0x4a, 0xdd, 0x35, 0xa0, 0x7b, 0x5a, 0x0a, 0xe8, 0xb2, 0x5d, 0xa3, + 0x29, 0xc6, 0x24, 0x26, 0xa2, 0x5b, 0x08, 0x45, 0x74, 0xd0, 0x47, 0x06, 0x5d, 0x42, 0xba, 0x0f, + 0xca, 0x21, 0x5d, 0xae, 0x6b, 0x54, 0xc8, 0x95, 0x26, 0x2e, 0xa6, 0xbb, 0xe8, 0xc7, 0x74, 0xa3, + 0x5d, 0x83, 0x52, 0x3e, 0x86, 0x68, 0x50, 0xb7, 0xd6, 0x11, 0xd4, 0x8d, 0xf1, 0xdb, 0x37, 0xbb, + 0xb1, 0xe8, 0x13, 0xd5, 0xad, 0x75, 0x44, 0x75, 0xf9, 0x3e, 0x0c, 0xfb, 0x84, 0x75, 0xdf, 0x12, + 0x1f, 0xd6, 0x75, 0x0f, 0xbc, 0x78, 0x37, 0x07, 0x8b, 0xeb, 0xf4, 0x2e, 0x71, 0x5d, 0x81, 0xb2, + 0x7f, 0xa8, 0x2b, 0xfb, 0xc3, 0x07, 0x76, 0x67, 0x88, 0x9b, 0x8d, 0x18, 0x0e, 0x7a, 0x02, 0xcb, + 0x71, 0x6c, 0x87, 0xc7, 0x4c, 0xec, 0x41, 0x3d, 0x4d, 0x1c, 0x7f, 0x60, 0x24, 0x7a, 0x04, 0x81, + 0xd4, 0x25, 0x48, 0x86, 0x41, 0xfd, 0xbc, 0x12, 0xd0, 0x52, 0x5f, 0x29, 0x07, 0x0d, 0x59, 0x1e, + 0x34, 0x48, 0xb1, 0x61, 0x22, 0x1c, 0x1b, 0x46, 0x2a, 0x0b, 0xc9, 0x68, 0x65, 0xc1, 0xdf, 0xa1, + 0x66, 0x11, 0x24, 0xb7, 0xef, 0xac, 0xf2, 0x31, 0xee, 0xef, 0xd6, 0x5f, 0x65, 0x86, 0xfe, 0x11, + 0x98, 0x94, 0x70, 0x7d, 0x17, 0xc2, 0x62, 0x9d, 0x82, 0x8f, 0x3d, 0xcf, 0x7d, 0xc9, 0x4a, 0x20, + 0xa0, 0x20, 0xa4, 0x44, 0x90, 0xaa, 0xda, 0x35, 0xcc, 0x0d, 0x3c, 0xfd, 0x4d, 0xc2, 0xcc, 0x86, + 0x5d, 0xe7, 0x66, 0x9c, 0xfc, 0x24, 0x58, 0xbe, 0x15, 0xcc, 0x32, 0x23, 0xa7, 0x7e, 0x56, 0x09, + 0xf8, 0x05, 0x51, 0x66, 0x5c, 0x40, 0xa8, 0xdc, 0x9d, 0x80, 0x30, 0x71, 0xa7, 0x01, 0xa1, 0xfa, + 0x27, 0x4a, 0x30, 0x8d, 0x7e, 0xa8, 0x77, 0x67, 0xc3, 0x0e, 0x5c, 0xe2, 0xb0, 0x7c, 0xe8, 0x8d, + 0x47, 0xe6, 0xe9, 0xe0, 0x24, 0x98, 0x1f, 0x99, 0xb3, 0x5d, 0x34, 0x7e, 0xed, 0xe4, 0x53, 0x90, + 0x65, 0x95, 0x2d, 0xbb, 0x25, 0xae, 0x4a, 0x3d, 0xd1, 0xfd, 0x14, 0x98, 0x4b, 0x4f, 0x4e, 0xb1, + 0x93, 0x63, 0x81, 0xb7, 0xcf, 0x86, 0x82, 0xce, 0x7b, 0x20, 0x4b, 0x7a, 0xcf, 0xae, 0xfc, 0x02, + 0x7e, 0xa4, 0x56, 0x00, 0xd4, 0x8f, 0x01, 0xea, 0xb4, 0xd1, 0xe8, 0x2a, 0xa4, 0xf1, 0x0d, 0x7a, + 0x03, 0x03, 0x3b, 0x88, 0x76, 0x34, 0x26, 0xa2, 0xc3, 0x96, 0x57, 0x9e, 0x26, 0x92, 0xfc, 0xf2, + 0xc1, 0x4c, 0x81, 0x61, 0x3f, 0x6c, 0x37, 0x4d, 0x0f, 0x37, 0x5b, 0xde, 0xbe, 0xc6, 0xe9, 0xd5, + 0x4f, 0x24, 0x48, 0x78, 0x15, 0xb2, 0xdf, 0xb1, 0xb2, 0x8d, 0xdb, 0xd8, 0x1a, 0x4c, 0xde, 0xa7, + 0x00, 0xea, 0x86, 0xab, 0xdf, 0x34, 0x2c, 0x0f, 0xd7, 0xb8, 0xd0, 0x25, 0x08, 0x2a, 0x42, 0x86, + 0x3c, 0xb5, 0x5d, 0x5c, 0xa3, 0xe2, 0x4f, 0x6a, 0xfe, 0xb3, 0x34, 0xce, 0x91, 0xb7, 0x37, 0xce, + 0xb0, 0x94, 0x33, 0x51, 0x29, 0x7f, 0x47, 0x22, 0x58, 0x0a, 0x41, 0x24, 0xfa, 0x8d, 0x27, 0x87, + 0xef, 0xa1, 0x79, 0x67, 0xd8, 0x91, 0xa2, 0x0d, 0x79, 0xe7, 0xbf, 0x4d, 0x97, 0xa8, 0xd0, 0xbb, + 0x41, 0xd7, 0x72, 0x70, 0x42, 0x80, 0x81, 0x5d, 0xf4, 0x22, 0x1c, 0x8b, 0x98, 0x19, 0x9f, 0x75, + 0x62, 0x40, 0x6b, 0x73, 0x24, 0x6c, 0x6d, 0x04, 0xe7, 0x40, 0x56, 0xc9, 0xb7, 0xb9, 0x36, 0x96, 0x48, 0xc6, 0x23, 0x87, 0x05, 0xb1, 0xb3, 0x4f, 0x6f, 0x7c, 0xf5, 0x48, 0x76, 0x1d, 0xca, 0x29, 0x47, 0x19, 0x90, 0x59, 0x7a, 0x75, 0x1d, 0x8e, 0xc4, 0x86, 0x07, 0xe8, 0x49, 0xc8, 0x06, 0x91, - 0x85, 0xd2, 0x25, 0x3d, 0xf3, 0x53, 0x8e, 0x00, 0x57, 0xfd, 0xc7, 0x4a, 0xc0, 0x32, 0x9c, 0xc4, + 0x85, 0xd2, 0x25, 0x3d, 0xf3, 0x53, 0x8e, 0x00, 0x57, 0xfd, 0x47, 0x4a, 0xc0, 0x32, 0x9c, 0xc4, 0x54, 0x20, 0xcd, 0x8e, 0x47, 0xf1, 0xf3, 0x10, 0x8f, 0x0c, 0x16, 0x58, 0xcc, 0xb1, 0xb3, 0x53, - 0x1a, 0x27, 0x56, 0x3f, 0x0e, 0x69, 0x06, 0x41, 0x39, 0x18, 0x09, 0xae, 0x32, 0x02, 0x48, 0xcf, + 0x1a, 0x27, 0x56, 0x3f, 0x06, 0x69, 0x06, 0x41, 0x39, 0x18, 0x09, 0xae, 0x32, 0x02, 0x48, 0xcf, 0x2f, 0x2c, 0x54, 0xd6, 0x37, 0x0b, 0x0a, 0xca, 0xc2, 0xf0, 0x7c, 0x79, 0x4d, 0xdb, 0x2c, 0x24, 0x08, 0x58, 0xab, 0x3c, 0x57, 0x59, 0xd8, 0x2c, 0x24, 0xd1, 0x04, 0x8c, 0xb1, 0xdf, 0xfa, 0xe5, 0x35, 0x6d, 0x65, 0x7e, 0xb3, 0x90, 0x92, 0x40, 0x1b, 0x95, 0xd5, 0xc5, 0x8a, 0x56, 0x18, 0x56, - 0x3f, 0x48, 0xf2, 0x96, 0x2e, 0xa1, 0x48, 0x90, 0xa1, 0x28, 0x52, 0x86, 0xa2, 0xbe, 0x91, 0x80, + 0xdf, 0x4f, 0xf2, 0x96, 0x2e, 0xa1, 0x48, 0x90, 0xa1, 0x28, 0x52, 0x86, 0xa2, 0xbe, 0x9e, 0x80, 0x62, 0xf7, 0xf8, 0x02, 0x3d, 0x17, 0x19, 0xf8, 0xf9, 0x43, 0x04, 0x27, 0x91, 0xd1, 0xa3, 0xfb, 0x21, 0xef, 0xe0, 0x1d, 0xec, 0x55, 0x77, 0x59, 0xbc, 0xc3, 0xbc, 0xd7, 0x98, 0x36, 0xc6, 0xa1, - 0x94, 0xc8, 0x65, 0x68, 0xaf, 0xe0, 0xaa, 0xa7, 0xb3, 0x64, 0xc9, 0xe5, 0xff, 0x7a, 0x62, 0x8c, - 0x41, 0x37, 0x18, 0x50, 0xfd, 0xc4, 0xa1, 0x64, 0x99, 0x85, 0x61, 0xad, 0xb2, 0xa9, 0x7d, 0xa4, + 0x94, 0xc8, 0x65, 0x68, 0x2f, 0xe3, 0xaa, 0xa7, 0xb3, 0x64, 0xc9, 0xe5, 0xff, 0x7a, 0x62, 0x8c, + 0x41, 0x37, 0x18, 0x50, 0xfd, 0xf8, 0xa1, 0x64, 0x99, 0x85, 0x61, 0xad, 0xb2, 0xa9, 0x7d, 0xb8, 0x90, 0x44, 0x08, 0xf2, 0xf4, 0xa7, 0xbe, 0xb1, 0x3a, 0xbf, 0xbe, 0x71, 0x75, 0x8d, 0xc8, 0x72, - 0x12, 0xc6, 0x85, 0x2c, 0x05, 0x70, 0x58, 0xfd, 0x13, 0xa5, 0x73, 0x6f, 0xee, 0x7c, 0x78, 0x6f, - 0xae, 0x33, 0x21, 0x97, 0xb6, 0xac, 0xc4, 0xa6, 0xdc, 0x87, 0x0e, 0xbf, 0x29, 0x27, 0x6d, 0xc7, + 0x12, 0xc6, 0x85, 0x2c, 0x05, 0x70, 0x58, 0xfd, 0x53, 0xa5, 0x73, 0x6f, 0xee, 0x7c, 0x78, 0x6f, + 0xae, 0x33, 0x21, 0x97, 0xb6, 0xac, 0xc4, 0xa6, 0xdc, 0x07, 0x0e, 0xbf, 0x29, 0x27, 0x6d, 0xc7, 0x3d, 0x7b, 0x27, 0xdb, 0x71, 0xf2, 0x46, 0xdc, 0xc5, 0xc3, 0x6e, 0xc4, 0x05, 0x5b, 0x70, 0x0b, - 0x77, 0x61, 0x0b, 0x4e, 0xfd, 0x18, 0xe4, 0xc3, 0x05, 0x96, 0xe0, 0x38, 0x90, 0x22, 0x1f, 0x07, + 0x77, 0x61, 0x0b, 0x4e, 0xfd, 0x28, 0xe4, 0xc3, 0x05, 0x96, 0xe0, 0x38, 0x90, 0x22, 0x1f, 0x07, 0x7a, 0x1c, 0x86, 0x6f, 0xd8, 0xcc, 0x58, 0xc5, 0x2f, 0xd9, 0x6b, 0xb6, 0x87, 0xa5, 0x02, 0x0d, - 0xc3, 0x56, 0x6f, 0xc1, 0x30, 0x35, 0x3e, 0xb1, 0x87, 0xd1, 0x3f, 0x06, 0x60, 0x78, 0x9e, 0x63, + 0xc3, 0x56, 0x6f, 0xc1, 0x30, 0x35, 0x3e, 0xb1, 0x87, 0xd1, 0x3f, 0x0a, 0x60, 0x78, 0x9e, 0x63, 0x6e, 0xb7, 0x03, 0xc6, 0x33, 0xf1, 0xc6, 0x6b, 0x5e, 0xe0, 0x95, 0xef, 0xe1, 0x56, 0x6c, 0x2a, 0x20, 0x95, 0x2c, 0x99, 0xc4, 0x50, 0x5d, 0x85, 0x7c, 0x98, 0x36, 0xe6, 0xa8, 0x7e, 0xa8, 0x1a, - 0xe9, 0xc7, 0x3c, 0x7e, 0xc4, 0xc4, 0xbf, 0xce, 0xa2, 0x0f, 0xea, 0xeb, 0x0a, 0x64, 0x36, 0xf7, + 0xe9, 0xc7, 0x3c, 0x7e, 0xc4, 0xc4, 0xbf, 0xce, 0xa2, 0x0f, 0xea, 0x6b, 0x0a, 0x64, 0x36, 0xf7, 0xb8, 0x5a, 0xf7, 0x38, 0x77, 0x17, 0x7c, 0x61, 0xe0, 0xd7, 0x1f, 0x58, 0x89, 0x27, 0xe9, 0x17, - 0x8e, 0x3e, 0xec, 0x2f, 0xdc, 0xd4, 0xa0, 0x19, 0xa2, 0xa8, 0xa0, 0x71, 0x63, 0x75, 0x09, 0xb2, + 0x8e, 0x3e, 0xe8, 0x2f, 0xdc, 0xd4, 0xa0, 0x19, 0xa2, 0xa8, 0xa0, 0x71, 0x63, 0x75, 0x09, 0xb2, 0xbe, 0x56, 0x91, 0xe8, 0x5d, 0x1c, 0x50, 0xe3, 0xff, 0x52, 0x87, 0x3f, 0xd2, 0x02, 0x9f, 0x7d, 0x93, 0x57, 0x38, 0x92, 0x1a, 0x7b, 0x50, 0x6b, 0xd2, 0xfe, 0x23, 0xf3, 0x22, 0xe8, 0x12, 0x8c, 0xf0, 0xfd, 0xc7, 0xb8, 0xc5, 0x23, 0x82, 0x3c, 0x71, 0x7a, 0x40, 0x74, 0x86, 0xed, 0x4e, 0x06, @@ -2068,12 +2068,12 @@ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descri 0xbd, 0x38, 0xce, 0x5e, 0x2c, 0x8b, 0xe4, 0x41, 0x3d, 0x50, 0x20, 0x23, 0x16, 0x6c, 0xac, 0xde, 0x85, 0x3a, 0x93, 0x38, 0x7c, 0x67, 0xee, 0xfe, 0x71, 0xe8, 0x87, 0x01, 0xd1, 0x73, 0xec, 0xfa, 0x0d, 0xdb, 0x33, 0xad, 0xba, 0xce, 0xa4, 0xc9, 0xaf, 0x92, 0xa3, 0x6f, 0xae, 0xd1, 0x17, 0xeb, - 0x54, 0xb0, 0x7f, 0x49, 0x81, 0x8c, 0xef, 0xfc, 0x0e, 0x5b, 0x53, 0x3b, 0x0a, 0x69, 0x6e, 0xdf, + 0x54, 0xb0, 0x7f, 0x51, 0x81, 0x8c, 0xef, 0xfc, 0x0e, 0x5b, 0x53, 0x3b, 0x0a, 0x69, 0x6e, 0xdf, 0xf9, 0x0e, 0x36, 0x7b, 0xf2, 0xcb, 0xbb, 0x29, 0xa9, 0xbc, 0x5b, 0x84, 0x8c, 0xb8, 0xa5, 0x97, - 0xe7, 0x68, 0xfe, 0xf3, 0xd9, 0x8b, 0x90, 0x93, 0xca, 0x9b, 0x64, 0x69, 0xad, 0x56, 0x5e, 0x2c, - 0x0c, 0x15, 0x47, 0x5e, 0x7f, 0x73, 0x36, 0xb9, 0x8a, 0x6f, 0x12, 0xa5, 0xd4, 0x2a, 0x0b, 0x57, - 0x2b, 0x0b, 0xcf, 0x17, 0x94, 0x62, 0xee, 0xf5, 0x37, 0x67, 0x47, 0x34, 0x4c, 0xab, 0x24, 0xe7, - 0x3f, 0x09, 0x30, 0x3e, 0x5f, 0x5e, 0x58, 0x22, 0x4e, 0xc9, 0xe4, 0xb7, 0xbf, 0x2d, 0x40, 0x8a, + 0xe7, 0x68, 0xfe, 0xf3, 0xd9, 0x8b, 0x90, 0x93, 0xca, 0x9b, 0x64, 0x69, 0xad, 0x56, 0x5e, 0x28, + 0x0c, 0x15, 0x47, 0x5e, 0x7b, 0x63, 0x36, 0xb9, 0x8a, 0x6f, 0x12, 0xa5, 0xd4, 0x2a, 0x0b, 0x57, + 0x2b, 0x0b, 0xcf, 0x17, 0x94, 0x62, 0xee, 0xb5, 0x37, 0x66, 0x47, 0x34, 0x4c, 0xab, 0x24, 0xe7, + 0x3f, 0x01, 0x30, 0x3e, 0x5f, 0x5e, 0x58, 0x22, 0x4e, 0xc9, 0xe4, 0xb7, 0xbf, 0x2d, 0x40, 0x8a, 0x26, 0xb6, 0x3d, 0xb7, 0x39, 0x8b, 0xbd, 0x4b, 0x67, 0xe8, 0x32, 0x0c, 0xd3, 0x9c, 0x17, 0xf5, 0xde, 0xf7, 0x2c, 0xf6, 0xa9, 0xa5, 0x91, 0xce, 0x50, 0xad, 0xed, 0xb9, 0x11, 0x5a, 0xec, 0x5d, 0x5a, 0x43, 0x1a, 0x64, 0x83, 0xa4, 0xb5, 0xff, 0xc6, 0x68, 0x71, 0x80, 0x72, 0x1b, 0xe1, 0x19, @@ -2082,211 +2082,211 @@ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descri 0x3d, 0xb4, 0xe4, 0x9f, 0x70, 0xee, 0xb3, 0x1d, 0x59, 0xec, 0x57, 0xda, 0x22, 0x42, 0x0b, 0xb2, 0xfd, 0xfe, 0xbb, 0xcb, 0xc5, 0x01, 0x4a, 0x96, 0x68, 0x0b, 0x40, 0xca, 0x4e, 0x07, 0xd8, 0x36, 0x2e, 0x0e, 0x52, 0x8a, 0x44, 0x6b, 0x90, 0xf1, 0xb3, 0x90, 0xbe, 0x9b, 0xb8, 0xc5, 0xfe, 0x35, - 0x41, 0xf4, 0x71, 0x18, 0x0b, 0x87, 0xdf, 0x83, 0x6d, 0xcd, 0x16, 0x07, 0x2c, 0xf6, 0x11, 0xfe, - 0xe1, 0x58, 0x7c, 0xb0, 0xad, 0xda, 0xe2, 0x80, 0xb5, 0x3f, 0xf4, 0x0a, 0x4c, 0x74, 0xc6, 0xca, + 0x41, 0xf4, 0x31, 0x18, 0x0b, 0x87, 0xdf, 0x83, 0x6d, 0xcd, 0x16, 0x07, 0x2c, 0xf6, 0x11, 0xfe, + 0xe1, 0x58, 0x7c, 0xb0, 0xad, 0xda, 0xe2, 0x80, 0xb5, 0x3f, 0xf4, 0x32, 0x4c, 0x74, 0xc6, 0xca, 0x83, 0xef, 0xdc, 0x16, 0x0f, 0x51, 0x0d, 0x44, 0x4d, 0x40, 0x31, 0x31, 0xf6, 0x21, 0x36, 0x72, 0x8b, 0x87, 0x29, 0x0e, 0x96, 0x2b, 0x5d, 0xcf, 0xc9, 0x3c, 0xd4, 0xf7, 0x9c, 0x4c, 0x70, 0xf2, - 0xc5, 0x3f, 0x1b, 0xf3, 0x47, 0x0a, 0x1c, 0x8f, 0x9e, 0x39, 0x31, 0xac, 0xfd, 0x2e, 0x07, 0x26, - 0xbb, 0x1c, 0x3f, 0xf9, 0x10, 0x24, 0xe7, 0xad, 0x7d, 0x74, 0x9c, 0xdd, 0x0d, 0xa0, 0xb7, 0x9d, - 0x86, 0x28, 0x2f, 0x92, 0xe7, 0x2d, 0xa7, 0x11, 0x1f, 0x30, 0x95, 0x52, 0x7f, 0xf8, 0xd9, 0x99, - 0xa1, 0xf2, 0xf5, 0xe8, 0x88, 0xbe, 0xd8, 0xf7, 0x2c, 0x65, 0x66, 0xde, 0xda, 0x17, 0xc7, 0x28, - 0x87, 0xe9, 0x80, 0x0e, 0x7b, 0x3c, 0xf2, 0xb7, 0x46, 0x09, 0x67, 0xe9, 0x9f, 0xff, 0xf1, 0x11, + 0xc5, 0x3f, 0x1b, 0xf3, 0xc7, 0x0a, 0x1c, 0x8f, 0x9e, 0x39, 0x31, 0xac, 0xfd, 0x2e, 0x07, 0x26, + 0xbb, 0x1c, 0x3f, 0xf9, 0x00, 0x24, 0xe7, 0xad, 0x7d, 0x74, 0x9c, 0xdd, 0x0d, 0xa0, 0xb7, 0x9d, + 0x86, 0x28, 0x2f, 0x92, 0xe7, 0x2d, 0xa7, 0x11, 0x1f, 0x30, 0x95, 0x52, 0x7f, 0xf4, 0x99, 0x99, + 0xa1, 0xf2, 0xf5, 0xe8, 0x88, 0xbe, 0xd0, 0xf7, 0x2c, 0x65, 0x66, 0xde, 0xda, 0x17, 0xc7, 0x28, + 0x87, 0xe9, 0x80, 0x0e, 0x7b, 0x3c, 0xf2, 0xb7, 0x47, 0x09, 0x67, 0xe9, 0x9f, 0xff, 0xf1, 0x11, 0xa7, 0xd9, 0x53, 0x97, 0x93, 0x7f, 0xbd, 0x8e, 0x11, 0x15, 0xbb, 0xcb, 0x51, 0xbd, 0x02, 0xa9, 0x05, 0xdb, 0xa4, 0x55, 0xda, 0x1a, 0xb6, 0xec, 0xa6, 0xa8, 0xd2, 0xd2, 0x07, 0x74, 0x1f, 0xa4, - 0x8d, 0xa6, 0xdd, 0xb6, 0x3c, 0xf1, 0x35, 0x15, 0x71, 0xf3, 0xff, 0xf1, 0x60, 0x26, 0xb9, 0x64, + 0x8d, 0xa6, 0xdd, 0xb6, 0x3c, 0xf1, 0x35, 0x15, 0x71, 0xf3, 0xff, 0xe1, 0x60, 0x26, 0xb9, 0x64, 0x79, 0x1a, 0x7f, 0xc5, 0xbe, 0xff, 0x53, 0x9f, 0x83, 0x91, 0x45, 0x5c, 0xbd, 0x13, 0x5e, 0x8b, 0xb8, 0x1a, 0xe1, 0x75, 0x06, 0x32, 0x4b, 0x96, 0xc7, 0xfe, 0xc5, 0xc7, 0x49, 0x48, 0x9a, 0x16, 0x8b, 0x05, 0x22, 0xed, 0x13, 0x38, 0x41, 0x5d, 0xc4, 0x55, 0x1f, 0xb5, 0x86, 0xab, 0x51, 0x54, 0xc2, 0x9e, 0xc0, 0xd5, 0x32, 0x8c, 0x5e, 0x33, 0x1a, 0xfc, 0x03, 0x07, 0xec, 0xa2, 0x87, 0x21, - 0x6b, 0x88, 0x07, 0xf6, 0x2d, 0x50, 0x39, 0xff, 0xf5, 0x83, 0x19, 0x08, 0x90, 0xb4, 0x00, 0xa1, - 0x94, 0x7a, 0xed, 0x3f, 0xcd, 0x2a, 0xaa, 0x0d, 0x23, 0x57, 0x0c, 0x97, 0xba, 0xc3, 0x0b, 0xa1, + 0x6b, 0x88, 0x07, 0xf6, 0x2d, 0x50, 0x39, 0xff, 0xb5, 0x83, 0x19, 0x08, 0x90, 0xb4, 0x00, 0xa1, + 0x94, 0x7a, 0xf5, 0x3f, 0xce, 0x2a, 0xaa, 0x0d, 0x23, 0x57, 0x0c, 0x97, 0xba, 0xc3, 0x0b, 0xa1, 0x6a, 0x10, 0x8d, 0x55, 0xca, 0x47, 0x6e, 0x1f, 0xcc, 0x4c, 0xec, 0x1b, 0xcd, 0x46, 0x49, 0x0d, - 0xde, 0xa9, 0x5a, 0xb6, 0x6e, 0xb8, 0x2f, 0xb2, 0x1a, 0xd1, 0x9c, 0x54, 0x23, 0xa2, 0x87, 0x12, + 0xde, 0xa9, 0x5a, 0xb6, 0x6e, 0xb8, 0x2f, 0xb0, 0x1a, 0xd1, 0x9c, 0x54, 0x23, 0xa2, 0x87, 0x12, 0xca, 0x93, 0xb7, 0x0f, 0x66, 0xc6, 0x03, 0x1a, 0xf2, 0x46, 0xd5, 0x46, 0xea, 0x86, 0xbb, 0x45, - 0x7e, 0xbd, 0xe2, 0xe7, 0x9d, 0x71, 0x5b, 0xe3, 0xbc, 0x6e, 0x95, 0x08, 0xea, 0x56, 0x17, 0x06, - 0xac, 0x9d, 0xf0, 0x78, 0x97, 0xe1, 0x96, 0x52, 0x9f, 0x7a, 0x6b, 0x66, 0x48, 0x75, 0x00, 0x6d, + 0x7e, 0xbd, 0xec, 0xe7, 0x9d, 0x71, 0x5b, 0xe3, 0xbc, 0x6e, 0x95, 0x08, 0xea, 0x56, 0x17, 0x06, + 0xac, 0x9d, 0xf0, 0x78, 0x97, 0xe1, 0x96, 0x52, 0x9f, 0x7c, 0x73, 0x66, 0x48, 0x75, 0x00, 0x6d, 0x98, 0xcd, 0x76, 0x83, 0xdd, 0xd0, 0x2a, 0xf6, 0x0b, 0x2f, 0xb0, 0x1e, 0xd3, 0x6a, 0x18, 0x0b, - 0x74, 0xc7, 0xe7, 0xb8, 0x62, 0x72, 0x51, 0xb0, 0xe8, 0xef, 0xd7, 0x0f, 0x66, 0x14, 0xda, 0x6f, + 0x74, 0xc7, 0xe7, 0xb8, 0x62, 0x72, 0x51, 0xb0, 0xe8, 0xef, 0x37, 0x0e, 0x66, 0x14, 0xda, 0x6f, 0x2a, 0x9d, 0x07, 0xfc, 0x84, 0x80, 0xc5, 0xa3, 0x79, 0x41, 0x13, 0xa9, 0x51, 0x3c, 0x03, 0x23, 0x2b, 0x6e, 0x9d, 0x7e, 0x95, 0x75, 0x1c, 0x32, 0x4d, 0xb7, 0xae, 0x4b, 0xd1, 0xed, 0x48, 0x93, 0x1f, 0x32, 0x8f, 0xa9, 0xda, 0xf0, 0x09, 0x79, 0x0c, 0xd2, 0x9b, 0x7b, 0x8b, 0xac, 0x8a, 0x23, - 0xe4, 0x93, 0x94, 0xfb, 0xc8, 0xb9, 0x87, 0x88, 0xbe, 0x2d, 0x09, 0x40, 0x13, 0x1f, 0x36, 0xc2, - 0x6e, 0xa9, 0x8f, 0x0a, 0x69, 0x6f, 0xcf, 0xdf, 0x12, 0xce, 0x96, 0xe1, 0xed, 0x83, 0x99, 0xf4, + 0xe4, 0x93, 0x94, 0xfb, 0xc8, 0xb9, 0x87, 0x88, 0xbe, 0x3d, 0x09, 0x40, 0x13, 0x1f, 0x36, 0xc2, + 0x6e, 0xa9, 0x8f, 0x0a, 0x69, 0x6f, 0xcf, 0xdf, 0x12, 0xce, 0x96, 0xe1, 0xad, 0x83, 0x99, 0xf4, 0xe6, 0xde, 0x55, 0xc3, 0xdd, 0xd5, 0xf8, 0x9b, 0x70, 0x35, 0x2e, 0x19, 0xa9, 0xc6, 0xf9, 0xf5, 0xc7, 0x54, 0x4c, 0xfd, 0x71, 0x58, 0xda, 0xad, 0x38, 0x06, 0x23, 0x8e, 0x71, 0x53, 0x27, 0x73, 0xc9, 0xfe, 0xad, 0x58, 0xda, 0x31, 0x6e, 0x2e, 0xdb, 0x75, 0x12, 0xb8, 0x35, 0xec, 0x7a, 0x50, 0x34, 0xe4, 0x83, 0x22, 0xc1, 0x26, 0xbf, 0xf6, 0x63, 0xd9, 0xae, 0x97, 0x8f, 0x11, 0xf9, 0x7f, - 0xfe, 0x77, 0x66, 0xc6, 0xc3, 0x70, 0x57, 0xa3, 0xc4, 0x7e, 0x2d, 0x33, 0x23, 0xd5, 0x32, 0x4f, + 0xee, 0x77, 0x67, 0xc6, 0xc3, 0x70, 0x57, 0xa3, 0xc4, 0x7e, 0x2d, 0x33, 0x23, 0xd5, 0x32, 0x4f, 0x86, 0xb4, 0x97, 0xd5, 0xb3, 0x25, 0x35, 0x3d, 0x2e, 0xa9, 0x29, 0xb0, 0x33, 0xe7, 0x5c, 0x23, - 0xd1, 0x07, 0x68, 0xea, 0xc7, 0x36, 0xf1, 0xa6, 0x3a, 0x52, 0x82, 0x79, 0x6b, 0x9f, 0x26, 0x84, - 0xf7, 0xc8, 0x5f, 0xc2, 0xb0, 0xff, 0xe3, 0x18, 0x00, 0xb8, 0xbe, 0x7d, 0x4a, 0x81, 0x7c, 0xb8, + 0xd1, 0xfb, 0x68, 0xea, 0xc7, 0x36, 0xf1, 0xa6, 0x3a, 0x52, 0x82, 0x79, 0x6b, 0x9f, 0x26, 0x84, + 0xf7, 0xc8, 0x5f, 0xc2, 0xb0, 0xff, 0xe3, 0x18, 0x00, 0xb8, 0xbe, 0x7d, 0x52, 0x81, 0x7c, 0xb8, 0xc7, 0x34, 0xe7, 0x77, 0xeb, 0xba, 0xbc, 0xe3, 0x4d, 0x94, 0x62, 0x49, 0x54, 0xf8, 0x23, 0xda, 0x3e, 0x1f, 0xd1, 0xf6, 0x49, 0x21, 0x20, 0x76, 0xc9, 0x16, 0x53, 0xf5, 0x29, 0x2e, 0x9d, 0x51, - 0x09, 0xe8, 0x06, 0xaa, 0x4f, 0x35, 0xe2, 0x13, 0x90, 0x93, 0xde, 0xc6, 0x26, 0x59, 0x4f, 0xc6, + 0x09, 0xe8, 0x06, 0xaa, 0x4f, 0x35, 0xe2, 0xe3, 0x90, 0x93, 0xde, 0xc6, 0x26, 0x59, 0x4f, 0xc6, 0x24, 0xf7, 0x13, 0xfe, 0x84, 0xf8, 0xe9, 0x3c, 0xdf, 0xfa, 0x08, 0x50, 0x7d, 0x45, 0xcd, 0xc6, - 0xe6, 0xed, 0xbd, 0x4e, 0x11, 0x95, 0x17, 0x7f, 0xfb, 0xf7, 0x4e, 0x0d, 0xbd, 0xf6, 0xf6, 0xa9, - 0xa1, 0xae, 0xae, 0x55, 0xed, 0xff, 0x2f, 0x63, 0x7d, 0xcf, 0xf2, 0x27, 0xcf, 0xc2, 0x3d, 0x1c, - 0xc7, 0xf5, 0x8c, 0xeb, 0xa6, 0x55, 0x17, 0x7f, 0xb9, 0x8b, 0xc9, 0xf3, 0xd1, 0x70, 0x68, 0x17, - 0x57, 0xd3, 0xfb, 0x90, 0x69, 0xdf, 0x73, 0xa2, 0x7d, 0xce, 0xa8, 0x17, 0xe3, 0x9c, 0x9f, 0x7a, - 0x90, 0x02, 0xb4, 0xe2, 0xd6, 0x17, 0x1c, 0xcc, 0x2e, 0x04, 0xe7, 0x89, 0x6b, 0xf8, 0x42, 0x2e, - 0x6e, 0x9e, 0x4e, 0xcc, 0x85, 0x87, 0xe1, 0xff, 0x0f, 0x48, 0xd3, 0xb6, 0xc4, 0x57, 0xb7, 0xf2, - 0x35, 0x5e, 0x15, 0x00, 0xba, 0x53, 0xec, 0xba, 0xc1, 0x61, 0xea, 0x99, 0x28, 0x8f, 0x05, 0x1f, - 0x43, 0x33, 0x3c, 0x2c, 0x4e, 0x8f, 0x4b, 0x84, 0xe8, 0x5b, 0x61, 0xb2, 0x69, 0x5a, 0xba, 0x8b, - 0x1b, 0x3b, 0x7a, 0x0d, 0x37, 0xe8, 0x75, 0xe9, 0x7c, 0x7f, 0x31, 0x5b, 0x5e, 0xe6, 0xde, 0xe8, - 0x81, 0xfe, 0xd3, 0x35, 0xb7, 0x64, 0x79, 0xb7, 0x0f, 0x66, 0x8a, 0xcc, 0x25, 0xc4, 0xb0, 0x54, - 0xb5, 0x89, 0xa6, 0x69, 0x6d, 0xe0, 0xc6, 0xce, 0xa2, 0x0f, 0x43, 0xb7, 0x60, 0x82, 0x63, 0x48, - 0x1f, 0xf7, 0xd1, 0xd4, 0xb7, 0xbc, 0x72, 0xfb, 0x60, 0x66, 0x9a, 0x71, 0xeb, 0x40, 0x51, 0xbf, - 0x7e, 0x30, 0xf3, 0xc8, 0x00, 0x7d, 0x9a, 0xaf, 0x56, 0x85, 0x4f, 0x2c, 0xf8, 0x4c, 0xc4, 0xb7, - 0x82, 0xb7, 0xe2, 0x3e, 0x2c, 0x1c, 0x8e, 0xb6, 0xdd, 0x81, 0x32, 0x68, 0xdb, 0x92, 0x3f, 0xee, - 0xfc, 0x4e, 0xf1, 0x28, 0xa4, 0x5b, 0xed, 0x6d, 0xb1, 0xf1, 0x97, 0xd5, 0xf8, 0x13, 0x3a, 0x2d, - 0xef, 0xfd, 0xe5, 0xce, 0x8f, 0x8a, 0xf9, 0x24, 0x01, 0x8a, 0x5f, 0xd1, 0x63, 0xa1, 0x1e, 0x0d, - 0x39, 0xbe, 0x90, 0x84, 0xc2, 0x8a, 0x5b, 0xaf, 0xd4, 0x4c, 0xef, 0x2e, 0xab, 0x57, 0xab, 0xeb, - 0x67, 0x97, 0xe5, 0x85, 0xdb, 0x07, 0x33, 0x79, 0x26, 0x9d, 0xbb, 0x29, 0x93, 0x26, 0x8c, 0x07, - 0x7a, 0xa9, 0x3b, 0x86, 0xc7, 0x3d, 0x53, 0x79, 0x71, 0x40, 0x0d, 0x5c, 0xc4, 0xd5, 0xdb, 0x07, - 0x33, 0x47, 0x59, 0xcf, 0x22, 0xac, 0x54, 0x2d, 0x5f, 0x0d, 0xad, 0x05, 0xb4, 0x17, 0xaf, 0xf8, - 0x74, 0xe7, 0xac, 0x7c, 0xf5, 0x5d, 0x54, 0x7a, 0x3e, 0x75, 0xbf, 0x98, 0x80, 0x1c, 0xf1, 0xf2, - 0x0c, 0x8e, 0xe3, 0x97, 0x82, 0xf2, 0xa7, 0xb8, 0x14, 0x12, 0xef, 0xcd, 0x52, 0x38, 0xeb, 0x07, - 0xd8, 0xc9, 0xae, 0x3a, 0x1f, 0x8e, 0xb3, 0xff, 0x6d, 0x92, 0x5a, 0x55, 0x9a, 0xaf, 0x6b, 0xb8, - 0xf6, 0x7e, 0x10, 0xe0, 0xb7, 0x2b, 0x70, 0x24, 0x10, 0x8f, 0xeb, 0x54, 0x23, 0x52, 0x7c, 0xe1, - 0xf6, 0xc1, 0xcc, 0x3d, 0x51, 0x29, 0x4a, 0x68, 0x77, 0x20, 0xc9, 0x49, 0x9f, 0xd1, 0x86, 0x53, - 0x8d, 0xef, 0x47, 0xcd, 0xf5, 0xfc, 0x7e, 0x24, 0xbb, 0xf7, 0x43, 0x42, 0x7b, 0x47, 0xfd, 0x58, - 0x74, 0xbd, 0xce, 0x49, 0x4d, 0x0d, 0x38, 0xa9, 0xbf, 0x94, 0x80, 0xb1, 0x15, 0xb7, 0xbe, 0x65, - 0xd5, 0xbe, 0xb9, 0x20, 0x0e, 0xbb, 0x20, 0xbe, 0x53, 0x81, 0xfc, 0x55, 0xd3, 0xf5, 0x6c, 0xc7, - 0xac, 0x1a, 0x0d, 0x9a, 0xc8, 0x3c, 0x31, 0xe8, 0x07, 0xd6, 0x91, 0x13, 0xc1, 0x4f, 0x42, 0xfa, - 0x86, 0xd1, 0x70, 0xb1, 0xe7, 0x6f, 0x30, 0x45, 0xdc, 0x46, 0xb4, 0x1e, 0xcf, 0xd1, 0x79, 0x4f, - 0x7e, 0x86, 0x7e, 0xa9, 0x17, 0x8a, 0x39, 0x50, 0x19, 0x52, 0xd4, 0x98, 0xb3, 0x04, 0x77, 0xee, - 0x10, 0x21, 0x05, 0xc9, 0x81, 0x29, 0x2d, 0xfa, 0x16, 0xc8, 0x34, 0x8d, 0x3d, 0xe6, 0x14, 0x58, - 0x56, 0x33, 0x7f, 0x38, 0x3e, 0x41, 0xb6, 0x2a, 0xf8, 0xa8, 0xda, 0x48, 0xd3, 0xd8, 0xa3, 0xae, - 0xa0, 0x05, 0xe3, 0x04, 0x5a, 0xdd, 0x35, 0xac, 0x3a, 0x96, 0x3d, 0xcf, 0xd5, 0x43, 0x37, 0x72, - 0x34, 0x68, 0x44, 0x62, 0xa7, 0x6a, 0x63, 0x4d, 0x63, 0x6f, 0x81, 0x02, 0x48, 0x8b, 0xa5, 0xcc, - 0x1b, 0x6f, 0xcd, 0x0c, 0x51, 0x89, 0xfd, 0x4b, 0x05, 0x20, 0x90, 0x18, 0xda, 0x84, 0x42, 0xc4, - 0x73, 0x89, 0x53, 0x50, 0x7d, 0x63, 0xbb, 0x20, 0x9d, 0x1d, 0xaf, 0x46, 0xa6, 0xe0, 0xa3, 0x90, - 0x63, 0x87, 0x1c, 0x74, 0xba, 0x31, 0x92, 0xe8, 0xbb, 0x31, 0x72, 0x8a, 0xf0, 0xba, 0x7d, 0x30, - 0x83, 0xd8, 0x70, 0x24, 0x62, 0x95, 0x6e, 0x97, 0x00, 0x83, 0x10, 0x82, 0xf0, 0x58, 0x72, 0x52, - 0x58, 0x41, 0x4f, 0xc7, 0xd9, 0x96, 0x79, 0x1d, 0x3b, 0x7e, 0x66, 0xcc, 0x1e, 0x51, 0x11, 0x32, - 0xec, 0x9f, 0xfe, 0x78, 0xfb, 0xe2, 0x36, 0x27, 0xf1, 0x4c, 0xa8, 0x6e, 0xe2, 0x6d, 0xd7, 0x14, - 0xb3, 0xa0, 0x89, 0x47, 0x74, 0x19, 0x0a, 0x2e, 0xae, 0xb6, 0x1d, 0xd3, 0xdb, 0xd7, 0xab, 0xb6, - 0xe5, 0x19, 0x55, 0x8f, 0xfb, 0xeb, 0x13, 0xb7, 0x0f, 0x66, 0x8e, 0xb1, 0xbe, 0x46, 0x31, 0x54, - 0x6d, 0x5c, 0x80, 0x16, 0x18, 0x84, 0xb4, 0x50, 0xc3, 0x9e, 0x61, 0x36, 0x5c, 0x9e, 0xce, 0x8a, - 0x47, 0x69, 0x2c, 0x3f, 0x3d, 0x22, 0xef, 0xec, 0xdd, 0x84, 0x82, 0xdd, 0xc2, 0x4e, 0x8c, 0x29, - 0x5a, 0x0e, 0x5a, 0x8e, 0x62, 0xdc, 0x81, 0x35, 0x18, 0x17, 0x3c, 0x84, 0x31, 0xb8, 0x1c, 0x3a, - 0x15, 0xc7, 0x42, 0xc6, 0x44, 0x74, 0xc8, 0x51, 0x0c, 0x55, 0x3e, 0x10, 0xc7, 0x02, 0xcb, 0xa3, - 0x90, 0x7e, 0xc5, 0x30, 0x1b, 0xe2, 0x3f, 0xa1, 0x69, 0xfc, 0x09, 0x2d, 0x41, 0xda, 0xf5, 0x0c, - 0xaf, 0xcd, 0xa2, 0xee, 0xe1, 0xf2, 0x07, 0x07, 0xec, 0x73, 0xd9, 0xb6, 0x6a, 0x1b, 0x94, 0x50, - 0xe3, 0x0c, 0xd0, 0x65, 0x48, 0x7b, 0xf6, 0x75, 0x6c, 0x71, 0xa1, 0x1e, 0x6a, 0xa5, 0xd3, 0xc2, - 0x1c, 0xa3, 0x46, 0x1e, 0x04, 0xf6, 0x58, 0x77, 0x77, 0x0d, 0x07, 0xb3, 0x8b, 0x5c, 0xb2, 0xe5, - 0xa5, 0x43, 0x2f, 0xc7, 0x63, 0x51, 0x27, 0xc1, 0xf8, 0xa9, 0xda, 0xb8, 0x0f, 0xda, 0xa0, 0x90, - 0x68, 0xd0, 0x3c, 0x72, 0x47, 0x41, 0xf3, 0x65, 0x28, 0xb4, 0xad, 0x6d, 0xdb, 0xa2, 0xff, 0xb5, - 0x88, 0x17, 0x67, 0x32, 0xb3, 0xca, 0xe9, 0xa4, 0x3c, 0x5b, 0x51, 0x0c, 0x55, 0x1b, 0xf7, 0x41, - 0xfc, 0x7c, 0x66, 0x0d, 0xf2, 0x01, 0x16, 0x5d, 0xb2, 0xd9, 0xbe, 0x4b, 0xf6, 0x5e, 0xbe, 0x64, - 0x8f, 0x44, 0x5b, 0x09, 0x56, 0xed, 0x98, 0x0f, 0x24, 0x64, 0xe8, 0xc3, 0xa1, 0x0c, 0x12, 0x78, - 0x0b, 0x5d, 0xad, 0xcc, 0xe0, 0xc9, 0x63, 0xee, 0x3d, 0x49, 0x1e, 0x4b, 0xa3, 0x9f, 0x7a, 0x6b, - 0x66, 0xc8, 0x5f, 0xb0, 0xaf, 0x27, 0x20, 0xbd, 0x78, 0x6d, 0xdd, 0x30, 0x9d, 0x3f, 0xaf, 0x91, - 0x83, 0x64, 0xbd, 0x9e, 0x86, 0x11, 0x26, 0x0b, 0x7a, 0x18, 0xa7, 0x45, 0x7e, 0xf8, 0x27, 0x36, - 0xa3, 0x2a, 0x4d, 0xf1, 0xfc, 0x8b, 0xd4, 0x08, 0xaa, 0xfa, 0xe3, 0x49, 0x80, 0xc5, 0x6b, 0xd7, - 0x36, 0x1d, 0xb3, 0xd5, 0xc0, 0xde, 0x37, 0x23, 0xeb, 0xf7, 0x4f, 0x64, 0x2d, 0xcd, 0xf1, 0xf3, - 0x90, 0x0b, 0xe6, 0xc8, 0x45, 0x1f, 0x82, 0x8c, 0xc7, 0x7f, 0xfb, 0xb7, 0x44, 0x76, 0x4c, 0xb5, - 0x40, 0x17, 0xf7, 0x19, 0x08, 0x0a, 0xf5, 0x3f, 0x24, 0x00, 0xfa, 0xd5, 0x65, 0xfe, 0x1c, 0xc4, - 0xde, 0x97, 0x21, 0xcd, 0x3d, 0x4e, 0xf2, 0x8e, 0xa2, 0x55, 0x4e, 0x2d, 0xcd, 0xd2, 0xef, 0x25, - 0x60, 0x72, 0x4b, 0x98, 0xdd, 0x6f, 0x4a, 0x18, 0x5d, 0x85, 0x11, 0x6c, 0x79, 0x8e, 0x89, 0x45, - 0xf1, 0xfb, 0x74, 0x54, 0x4b, 0x63, 0xa4, 0x45, 0xff, 0x9b, 0xb1, 0xb8, 0xfa, 0x82, 0x93, 0x4b, - 0x32, 0xfe, 0xbe, 0x24, 0x4c, 0x77, 0xa3, 0x42, 0x0b, 0x30, 0x5e, 0x75, 0x30, 0x05, 0xe8, 0xf2, - 0x7e, 0x49, 0xb9, 0x28, 0x15, 0x8b, 0xc2, 0x08, 0xaa, 0x96, 0x17, 0x10, 0xee, 0x90, 0xeb, 0xb4, - 0x36, 0x45, 0x96, 0x0a, 0xc1, 0x1a, 0x30, 0x88, 0x56, 0xb9, 0x47, 0x0e, 0x2a, 0x52, 0x32, 0x03, - 0xe6, 0x92, 0xf3, 0x01, 0x94, 0xfa, 0xe4, 0x57, 0x61, 0xdc, 0xb4, 0x4c, 0xcf, 0x34, 0x1a, 0xfa, - 0xb6, 0xd1, 0x30, 0xac, 0xea, 0x9d, 0xa4, 0x22, 0xcc, 0x9b, 0xf2, 0x66, 0x23, 0xec, 0x54, 0x2d, - 0xcf, 0x21, 0x65, 0x06, 0x20, 0x33, 0x22, 0x9a, 0x4a, 0xdd, 0x51, 0xe0, 0x26, 0xc8, 0xa5, 0x19, - 0xf9, 0x9e, 0x24, 0x4c, 0xf8, 0xa5, 0x99, 0x6f, 0x4e, 0xc5, 0xa0, 0x53, 0xb1, 0x02, 0xc0, 0x0c, - 0x08, 0xf1, 0x1c, 0x77, 0x30, 0x1b, 0xc4, 0x04, 0x65, 0x19, 0x87, 0x45, 0xd7, 0x93, 0xe6, 0xe3, - 0x0f, 0x92, 0x30, 0x2a, 0xcf, 0xc7, 0x37, 0x5d, 0xfa, 0xfb, 0xa8, 0x58, 0x36, 0x1f, 0x98, 0x44, - 0xf6, 0x9d, 0xf4, 0xbd, 0x51, 0x93, 0xd8, 0xb1, 0x94, 0xba, 0xdb, 0xc2, 0xff, 0x9b, 0x80, 0x34, - 0x3f, 0x89, 0x5c, 0xed, 0xc8, 0x22, 0x94, 0x7e, 0x57, 0xee, 0xf4, 0x4e, 0x22, 0xde, 0x88, 0x4d, - 0x22, 0xf2, 0x4d, 0x63, 0x4f, 0x0f, 0x7d, 0x6d, 0xa5, 0x9c, 0x1e, 0x2b, 0x1f, 0x0f, 0xb8, 0x84, - 0xdf, 0xb3, 0x5a, 0x48, 0xf0, 0x7d, 0x37, 0x7a, 0x12, 0x72, 0x04, 0x23, 0xf0, 0x0a, 0x84, 0xfc, - 0x68, 0x50, 0x7c, 0x90, 0x5e, 0xaa, 0x1a, 0x34, 0x8d, 0xbd, 0x0a, 0x7b, 0x40, 0xcb, 0x80, 0x76, - 0xfd, 0xaa, 0x97, 0x1e, 0x88, 0x90, 0xd0, 0x9f, 0xbc, 0x7d, 0x30, 0x73, 0x9c, 0xd1, 0x77, 0xe2, - 0xa8, 0xda, 0x44, 0x00, 0x14, 0xdc, 0x2e, 0x00, 0x90, 0x71, 0xe9, 0xec, 0x0c, 0x08, 0x4b, 0x61, - 0xa5, 0x83, 0x11, 0xc1, 0x3b, 0x55, 0xcb, 0x92, 0x87, 0x45, 0xf2, 0x5b, 0x12, 0xfc, 0xf7, 0x2a, - 0x80, 0x02, 0xdf, 0xe3, 0xef, 0xd2, 0x7f, 0x98, 0x7e, 0x88, 0x2a, 0x32, 0x23, 0x25, 0x3e, 0xc9, - 0x0a, 0xe8, 0x44, 0x92, 0x25, 0x2d, 0xd5, 0x87, 0x03, 0xfb, 0x9c, 0xe8, 0x5a, 0x10, 0x8c, 0xb1, - 0xc1, 0xbf, 0xa2, 0xc0, 0xf1, 0x0e, 0xc5, 0xf1, 0xfb, 0x75, 0x0d, 0x90, 0x23, 0xbd, 0xa4, 0xa2, - 0x11, 0x67, 0x8e, 0x07, 0xd6, 0xbf, 0x09, 0xa7, 0xc3, 0xc6, 0xdf, 0x3d, 0x6f, 0xc2, 0x2b, 0x8a, - 0x0a, 0x4c, 0xc9, 0xcd, 0xfb, 0x03, 0xb8, 0x0c, 0xa3, 0x72, 0xeb, 0xfe, 0x71, 0xe9, 0x1e, 0x5d, - 0xe7, 0xbd, 0x0e, 0xd1, 0xa1, 0xa5, 0x60, 0xf5, 0xb1, 0x92, 0xe7, 0x99, 0xbe, 0xa3, 0xf7, 0x4f, - 0x0c, 0x46, 0x56, 0x21, 0xeb, 0xf1, 0x9f, 0x28, 0x90, 0x5a, 0xb7, 0xed, 0x06, 0xb2, 0x61, 0xc2, - 0xb2, 0x3d, 0x9d, 0x28, 0x0b, 0xae, 0xe9, 0xbc, 0x36, 0xc2, 0xaa, 0xa0, 0x0b, 0x87, 0x13, 0xca, - 0x57, 0x0e, 0x66, 0x3a, 0x59, 0x69, 0xe3, 0x96, 0xed, 0x95, 0x29, 0x64, 0x93, 0x55, 0x4e, 0xbe, - 0x15, 0xc6, 0xc2, 0x8d, 0xb1, 0x4a, 0xd1, 0x8b, 0x87, 0x6e, 0x2c, 0xcc, 0xe6, 0xf6, 0xc1, 0xcc, - 0x54, 0xb0, 0x08, 0x7c, 0xb0, 0xaa, 0x8d, 0x6e, 0x4b, 0xad, 0xb3, 0xdb, 0xea, 0xfe, 0xf0, 0xad, - 0x19, 0xa5, 0x7c, 0xb9, 0xeb, 0xbe, 0xff, 0xc3, 0x3d, 0xbb, 0xb0, 0xe7, 0x6f, 0xf0, 0x87, 0x4f, - 0x00, 0x7c, 0xf9, 0x1c, 0x14, 0x23, 0x27, 0x00, 0xe8, 0xc7, 0xe6, 0x5d, 0xf6, 0xff, 0x4f, 0x72, - 0x5c, 0x8a, 0x73, 0xae, 0x65, 0xd4, 0x4d, 0x4b, 0xde, 0xa9, 0xef, 0x72, 0x3c, 0xa0, 0xd7, 0x11, - 0x03, 0xf5, 0x3a, 0x1c, 0xa5, 0xe7, 0x61, 0x03, 0xb3, 0x25, 0x6e, 0x87, 0x3a, 0xea, 0x17, 0xd0, - 0x14, 0x7e, 0x79, 0x01, 0xab, 0x86, 0x5d, 0x04, 0x08, 0x5a, 0xf6, 0xef, 0x3a, 0xe3, 0x3d, 0x65, - 0xbd, 0x5f, 0x37, 0xea, 0x98, 0xb3, 0xd1, 0x24, 0x64, 0xf5, 0x07, 0x15, 0x38, 0xd6, 0xd1, 0x1a, - 0xd7, 0xfa, 0x67, 0x43, 0x1f, 0xb6, 0x2a, 0x83, 0xd5, 0xe8, 0xe5, 0x2b, 0x4e, 0x4a, 0x31, 0xfd, - 0x2a, 0xc6, 0xf5, 0x8b, 0x35, 0x18, 0xea, 0xd8, 0xab, 0x70, 0x24, 0xdc, 0x2f, 0x21, 0x84, 0x97, - 0x20, 0x1f, 0xce, 0x16, 0x78, 0x28, 0xf1, 0xc1, 0xc3, 0x7b, 0xc8, 0xb1, 0x50, 0xc6, 0xa0, 0xbe, - 0x18, 0x15, 0xbc, 0x2f, 0x89, 0xa7, 0x3b, 0x3f, 0x65, 0xe8, 0x2b, 0x88, 0x80, 0x42, 0xfd, 0x45, - 0x05, 0x66, 0xc3, 0x9c, 0x03, 0x23, 0xec, 0xbe, 0xeb, 0xe3, 0x7a, 0x27, 0xea, 0xf1, 0x9b, 0x0a, - 0xdc, 0xdb, 0xa3, 0xe7, 0x5c, 0x3c, 0x0e, 0x4c, 0x49, 0xd6, 0xdd, 0xe1, 0x60, 0xa1, 0x32, 0x6a, - 0x77, 0x0f, 0xe4, 0x1b, 0xb7, 0x13, 0xfc, 0x00, 0xd2, 0x64, 0xe7, 0x3b, 0x57, 0x9b, 0xec, 0xb4, - 0xc8, 0xef, 0x4c, 0xb7, 0xbe, 0xa8, 0xc0, 0x99, 0xf0, 0xa8, 0x62, 0x32, 0xba, 0xf7, 0xf7, 0xc4, - 0xfc, 0x33, 0x05, 0xce, 0x0e, 0x32, 0x04, 0x3e, 0x43, 0x2f, 0xc3, 0x64, 0x10, 0x5f, 0x45, 0x27, - 0xe8, 0xbe, 0x01, 0xb2, 0x62, 0xae, 0xd4, 0xc8, 0xe7, 0x72, 0x77, 0x66, 0xe2, 0x5f, 0x29, 0x7c, - 0xcd, 0xc9, 0xf3, 0xee, 0x8b, 0x3d, 0x9c, 0x12, 0x1c, 0x52, 0xec, 0x52, 0x5a, 0x30, 0x16, 0x4a, - 0x0b, 0x62, 0x26, 0x34, 0x71, 0x97, 0x2c, 0xc8, 0x77, 0x08, 0x6b, 0x1a, 0x13, 0x9c, 0x5d, 0x87, - 0xc9, 0x98, 0x45, 0xe2, 0x5f, 0x2f, 0xd3, 0x7f, 0x8d, 0x1c, 0xfd, 0xfa, 0xc1, 0x4c, 0x4c, 0xd4, - 0xa7, 0xa1, 0xce, 0xe5, 0xa1, 0xfe, 0x7b, 0x05, 0x66, 0x68, 0x47, 0x62, 0xa6, 0xf2, 0xcf, 0xb2, - 0x80, 0x31, 0x37, 0xa4, 0xb1, 0xc3, 0xe2, 0x82, 0x9e, 0x87, 0x34, 0xd3, 0x52, 0x2e, 0xdb, 0x43, - 0xa8, 0x37, 0x27, 0x0c, 0x0c, 0xf6, 0xa2, 0x18, 0x57, 0xbc, 0x5d, 0x78, 0x97, 0xe4, 0xf7, 0x0e, - 0xec, 0xc2, 0x3f, 0x12, 0x06, 0x3b, 0xbe, 0xe7, 0x5c, 0x44, 0x1f, 0x7d, 0xc7, 0x06, 0x9b, 0xdf, - 0xa1, 0xf5, 0xae, 0x59, 0x66, 0xbf, 0xfb, 0x7d, 0x2c, 0xf3, 0xfb, 0x6f, 0x06, 0x7c, 0xcb, 0xdc, - 0x67, 0x08, 0xef, 0x73, 0xcb, 0x7c, 0x3b, 0x01, 0xc7, 0xe9, 0x30, 0xe4, 0x8c, 0xe4, 0x3d, 0x90, - 0xbc, 0x0e, 0xc8, 0x75, 0xaa, 0xfa, 0xdd, 0xb2, 0x1f, 0x05, 0xd7, 0xa9, 0x5e, 0x0b, 0x39, 0x5d, - 0x1d, 0x50, 0xcd, 0xf5, 0xa2, 0x0d, 0x24, 0xef, 0xb8, 0x81, 0x9a, 0xeb, 0x5d, 0xeb, 0xe1, 0xd5, - 0x53, 0x87, 0xd1, 0x9d, 0x5f, 0x56, 0xa0, 0x18, 0x27, 0x74, 0xae, 0x2b, 0x06, 0x1c, 0x0d, 0xe5, - 0xd1, 0x51, 0x75, 0xf9, 0x40, 0xaf, 0x6c, 0x32, 0xb2, 0x74, 0x8f, 0x38, 0xf8, 0x6e, 0x2f, 0xde, - 0x5f, 0x10, 0x4e, 0xc7, 0xd7, 0xfc, 0xce, 0x14, 0xe6, 0x7d, 0xb9, 0x64, 0x7f, 0xac, 0xc3, 0xdc, - 0xbf, 0xdf, 0xb2, 0xa1, 0x7f, 0xa7, 0xc0, 0xa9, 0x2e, 0x3d, 0xfc, 0xb3, 0xec, 0xce, 0x3f, 0xd1, - 0x55, 0x61, 0xee, 0x56, 0xea, 0x75, 0x81, 0x2f, 0xa8, 0xf0, 0x91, 0x35, 0x29, 0xa1, 0x8e, 0xbd, - 0x63, 0xf1, 0x05, 0x38, 0x11, 0x4b, 0xc5, 0xfb, 0x74, 0x1e, 0x52, 0xbb, 0xa6, 0x2b, 0x6e, 0x4f, - 0x3c, 0x15, 0xed, 0x4e, 0x84, 0x8a, 0xe2, 0xaa, 0x08, 0x0a, 0x94, 0xe5, 0xba, 0x6d, 0x37, 0x78, - 0xf3, 0xea, 0x02, 0x4c, 0x48, 0x30, 0xce, 0x7c, 0x0e, 0x52, 0x2d, 0x9b, 0xff, 0x53, 0xba, 0xdc, - 0xf9, 0xa9, 0x28, 0x73, 0x82, 0xcb, 0x87, 0x49, 0xf1, 0xd4, 0x29, 0x40, 0x8c, 0x09, 0xbb, 0x2a, - 0x82, 0xb3, 0xfe, 0x4e, 0x05, 0x26, 0x43, 0x60, 0xff, 0x53, 0xa5, 0x74, 0xe8, 0xbe, 0xab, 0x8e, - 0x2d, 0xfa, 0xd0, 0xd5, 0xef, 0x1c, 0xf7, 0x9d, 0xa8, 0xee, 0xf9, 0x5f, 0x1d, 0x15, 0x9f, 0x07, - 0xeb, 0x00, 0x52, 0x29, 0xf6, 0x81, 0x68, 0xcb, 0xf1, 0x45, 0x8f, 0xe2, 0x83, 0x7d, 0xf1, 0x78, - 0xcc, 0x3b, 0x84, 0xbe, 0x45, 0x3e, 0x46, 0x75, 0x7f, 0x6f, 0x3a, 0xc1, 0xfe, 0x81, 0x7e, 0x68, - 0x3e, 0xf7, 0xbf, 0x00, 0x53, 0x71, 0x59, 0x30, 0x7a, 0xb4, 0x37, 0x87, 0xce, 0xb8, 0xa5, 0xf8, - 0xc1, 0x43, 0x50, 0xf8, 0xcd, 0xbf, 0xa1, 0xc0, 0xc9, 0x9e, 0xc9, 0x1e, 0xba, 0xd8, 0x9b, 0x6d, - 0x8f, 0x48, 0xaa, 0x58, 0xba, 0x13, 0x52, 0xbf, 0x6b, 0x7a, 0x68, 0x3f, 0x3f, 0x5e, 0xa2, 0x1d, - 0xf9, 0x47, 0x97, 0x89, 0xed, 0x8c, 0x35, 0xd5, 0x21, 0x74, 0x2b, 0x7e, 0x5f, 0xfb, 0x5c, 0x2c, - 0x87, 0xee, 0x29, 0x4f, 0xf1, 0xd1, 0xc1, 0x09, 0xe4, 0x69, 0x8f, 0x8b, 0xa5, 0xbb, 0x4c, 0x7b, - 0x8f, 0x84, 0xa1, 0xcb, 0xb4, 0xf7, 0x0a, 0xd4, 0xf9, 0xb4, 0xf7, 0x8c, 0x24, 0xbb, 0x4c, 0xfb, - 0x20, 0x01, 0x74, 0x97, 0x69, 0x1f, 0x28, 0x70, 0x55, 0x87, 0xd0, 0x2e, 0x8c, 0x85, 0xe2, 0x14, - 0x74, 0x26, 0x96, 0x5d, 0x5c, 0x00, 0x59, 0x3c, 0x3b, 0x08, 0xaa, 0x3c, 0xff, 0x31, 0xae, 0xb9, - 0xcb, 0xfc, 0x77, 0x8f, 0x3e, 0x8a, 0x8f, 0x0e, 0x4e, 0xe0, 0xb7, 0x7d, 0xd3, 0xdf, 0x6a, 0x91, - 0x10, 0xd0, 0xdc, 0x80, 0x9c, 0x44, 0xcb, 0xe7, 0x06, 0xc6, 0xf7, 0x1b, 0xbe, 0xde, 0x71, 0xd0, - 0x3a, 0x5e, 0x68, 0xb1, 0xae, 0xad, 0xf8, 0xd0, 0x40, 0xb8, 0x7e, 0x63, 0x2b, 0x7c, 0x1f, 0x61, - 0x36, 0x96, 0x4c, 0x72, 0x5a, 0xc5, 0x7b, 0x7b, 0x60, 0xf8, 0xec, 0x36, 0xfc, 0x8d, 0x41, 0x35, - 0x1e, 0x5d, 0x76, 0x56, 0xc5, 0xfb, 0x7a, 0xe2, 0x08, 0xa6, 0x77, 0xbd, 0xd4, 0xff, 0xf3, 0x99, - 0x8e, 0x8f, 0xfd, 0xea, 0xd8, 0xc2, 0xae, 0xe9, 0x1e, 0xee, 0x63, 0xbf, 0x9e, 0xd5, 0xfc, 0xef, - 0x48, 0xc3, 0xe8, 0x15, 0xc6, 0x95, 0x5e, 0xea, 0x8d, 0x9e, 0x19, 0xd0, 0x03, 0xe7, 0x89, 0x07, - 0xfe, 0xfa, 0xc1, 0x0c, 0x17, 0xa4, 0xef, 0x8b, 0x5d, 0x7e, 0x8f, 0x36, 0xbb, 0x3c, 0x26, 0xb8, - 0x83, 0x67, 0xf4, 0x50, 0x47, 0x56, 0xd9, 0x59, 0x01, 0x7e, 0x4a, 0x34, 0xca, 0x4f, 0x65, 0x77, - 0x6d, 0x6f, 0x12, 0x08, 0xbd, 0x7e, 0x06, 0x7d, 0xbf, 0x02, 0x47, 0x28, 0x56, 0x10, 0x08, 0x52, - 0x4c, 0x71, 0xb0, 0xa6, 0x63, 0x96, 0x97, 0x0d, 0x29, 0x2d, 0xa2, 0x3c, 0xca, 0x25, 0xbe, 0xdf, - 0x7b, 0x8f, 0xd4, 0x68, 0x94, 0x9d, 0xfa, 0xf5, 0x83, 0x19, 0xd4, 0x49, 0xab, 0xd1, 0x2b, 0x44, - 0xc3, 0x30, 0x17, 0x2d, 0xc7, 0xdc, 0xc4, 0xde, 0x23, 0x36, 0x9c, 0xe0, 0x02, 0x0d, 0x62, 0x84, - 0x50, 0x78, 0xbe, 0x0e, 0x39, 0xc9, 0xf8, 0x4c, 0x0f, 0x77, 0x39, 0xd6, 0x16, 0xe4, 0xdd, 0x88, - 0xf3, 0x93, 0x7c, 0x9f, 0x26, 0xb3, 0x40, 0x7f, 0x55, 0x81, 0x23, 0x41, 0x6e, 0x2f, 0x33, 0x4f, - 0x0f, 0x9e, 0xdd, 0x5f, 0x0a, 0x4b, 0x2d, 0x96, 0x1f, 0x91, 0x5a, 0x9c, 0x83, 0xd4, 0xa6, 0xda, - 0x71, 0x0e, 0xe3, 0x25, 0x18, 0x93, 0x93, 0x3f, 0xf1, 0xe9, 0x74, 0xef, 0xed, 0xcc, 0x29, 0x3e, - 0xda, 0xd0, 0xd1, 0x0e, 0x2d, 0xcc, 0x08, 0x15, 0x21, 0x83, 0xf7, 0x5a, 0xb6, 0xe3, 0xe1, 0x1a, - 0x3d, 0x8b, 0x9c, 0xd1, 0xfc, 0x67, 0xf5, 0x26, 0xc4, 0x4c, 0x2c, 0x7a, 0x3e, 0x72, 0x8d, 0xd5, - 0x9d, 0x24, 0x15, 0x9d, 0x37, 0x5f, 0xc9, 0x77, 0x52, 0xdd, 0x6d, 0xb3, 0xf1, 0xff, 0x03, 0x00, - 0x00, 0xff, 0xff, 0x4a, 0xe9, 0xe7, 0xd1, 0x7e, 0xb3, 0x00, 0x00, + 0xe6, 0xed, 0xbd, 0x4e, 0x11, 0x95, 0x17, 0x7f, 0xe7, 0xf7, 0x4f, 0x0d, 0xbd, 0xfa, 0xd6, 0xa9, + 0xa1, 0xae, 0xae, 0x55, 0xed, 0xff, 0x2f, 0x63, 0x7d, 0xcf, 0xf2, 0xff, 0x9e, 0x85, 0x7b, 0x38, + 0x8e, 0xeb, 0x19, 0xd7, 0x4d, 0xab, 0x2e, 0xfe, 0x72, 0x17, 0x93, 0xe7, 0xa3, 0xe1, 0xd0, 0x2e, + 0xae, 0xa6, 0xf7, 0x21, 0xd3, 0xbe, 0xe7, 0x44, 0xfb, 0x9c, 0x51, 0x2f, 0xc6, 0x39, 0x3f, 0xf5, + 0x20, 0x05, 0x68, 0xc5, 0xad, 0x2f, 0x38, 0x98, 0x5d, 0x08, 0xce, 0x13, 0xd7, 0xf0, 0x85, 0x5c, + 0xdc, 0x3c, 0x9d, 0x98, 0x0b, 0x0f, 0xc3, 0xff, 0x1f, 0x90, 0xa6, 0x6d, 0x89, 0xaf, 0x6e, 0xe5, + 0x6b, 0xbc, 0x2a, 0x00, 0x74, 0xa7, 0xd8, 0x75, 0x83, 0xc3, 0xd4, 0x33, 0x51, 0x1e, 0x0b, 0x3e, + 0x86, 0x66, 0x78, 0x58, 0x9c, 0x1e, 0x97, 0x08, 0xd1, 0xb7, 0xc2, 0x64, 0xd3, 0xb4, 0x74, 0x17, + 0x37, 0x76, 0xf4, 0x1a, 0x6e, 0xd0, 0xeb, 0xd2, 0xf9, 0xfe, 0x62, 0xb6, 0xbc, 0xcc, 0xbd, 0xd1, + 0x03, 0xfd, 0xa7, 0x6b, 0x6e, 0xc9, 0xf2, 0x6e, 0x1f, 0xcc, 0x14, 0x99, 0x4b, 0x88, 0x61, 0xa9, + 0x6a, 0x13, 0x4d, 0xd3, 0xda, 0xc0, 0x8d, 0x9d, 0x45, 0x1f, 0x86, 0x6e, 0xc1, 0x04, 0xc7, 0x90, + 0x3e, 0xee, 0xa3, 0xa9, 0x6f, 0x79, 0xe5, 0xf6, 0xc1, 0xcc, 0x34, 0xe3, 0xd6, 0x81, 0xa2, 0x7e, + 0xed, 0x60, 0xe6, 0x91, 0x01, 0xfa, 0x34, 0x5f, 0xad, 0x0a, 0x9f, 0x58, 0xf0, 0x99, 0x88, 0x6f, + 0x05, 0x6f, 0xc5, 0x7d, 0x58, 0x38, 0x1c, 0x6d, 0xbb, 0x03, 0x65, 0xd0, 0xb6, 0x25, 0x7f, 0xdc, + 0xf9, 0x9d, 0xe2, 0x51, 0x48, 0xb7, 0xda, 0xdb, 0x62, 0xe3, 0x2f, 0xab, 0xf1, 0x27, 0x74, 0x5a, + 0xde, 0xfb, 0xcb, 0x9d, 0x1f, 0x15, 0xf3, 0x49, 0x02, 0x14, 0xbf, 0xa2, 0xc7, 0x42, 0x3d, 0x1a, + 0x72, 0x7c, 0x3e, 0x09, 0x85, 0x15, 0xb7, 0x5e, 0xa9, 0x99, 0xde, 0x5d, 0x56, 0xaf, 0x56, 0xd7, + 0xcf, 0x2e, 0xcb, 0x0b, 0xb7, 0x0f, 0x66, 0xf2, 0x4c, 0x3a, 0x77, 0x53, 0x26, 0x4d, 0x18, 0x0f, + 0xf4, 0x52, 0x77, 0x0c, 0x8f, 0x7b, 0xa6, 0xf2, 0xe2, 0x80, 0x1a, 0xb8, 0x88, 0xab, 0xb7, 0x0f, + 0x66, 0x8e, 0xb2, 0x9e, 0x45, 0x58, 0xa9, 0x5a, 0xbe, 0x1a, 0x5a, 0x0b, 0x68, 0x2f, 0x5e, 0xf1, + 0xe9, 0xce, 0x59, 0xf9, 0xea, 0x3b, 0xa8, 0xf4, 0x7c, 0xea, 0x7e, 0x29, 0x01, 0x39, 0xe2, 0xe5, + 0x19, 0x1c, 0xc7, 0x2f, 0x05, 0xe5, 0xcf, 0x70, 0x29, 0x24, 0xde, 0x9d, 0xa5, 0x70, 0xd6, 0x0f, + 0xb0, 0x93, 0x5d, 0x75, 0x3e, 0x1c, 0x67, 0xff, 0x9b, 0x24, 0xb5, 0xaa, 0x34, 0x5f, 0xd7, 0x70, + 0xed, 0xbd, 0x20, 0xc0, 0xef, 0x50, 0xe0, 0x48, 0x20, 0x1e, 0xd7, 0xa9, 0x46, 0xa4, 0xf8, 0xa1, + 0xdb, 0x07, 0x33, 0xf7, 0x44, 0xa5, 0x28, 0xa1, 0xdd, 0x81, 0x24, 0x27, 0x7d, 0x46, 0x1b, 0x4e, + 0x35, 0xbe, 0x1f, 0x35, 0xd7, 0xf3, 0xfb, 0x91, 0xec, 0xde, 0x0f, 0x09, 0xed, 0x6d, 0xf5, 0x63, + 0xd1, 0xf5, 0x3a, 0x27, 0x35, 0x35, 0xe0, 0xa4, 0xfe, 0x72, 0x02, 0xc6, 0x56, 0xdc, 0xfa, 0x96, + 0x55, 0xfb, 0xe6, 0x82, 0x38, 0xec, 0x82, 0xf8, 0x36, 0x05, 0xf2, 0x57, 0x4d, 0xd7, 0xb3, 0x1d, + 0xb3, 0x6a, 0x34, 0x68, 0x22, 0xf3, 0xc4, 0xa0, 0x1f, 0x58, 0x47, 0x4e, 0x04, 0x3f, 0x09, 0xe9, + 0x1b, 0x46, 0xc3, 0xc5, 0x9e, 0xbf, 0xc1, 0x14, 0x71, 0x1b, 0xd1, 0x7a, 0x3c, 0x47, 0x57, 0x7f, + 0x96, 0x7e, 0xa3, 0x17, 0x8a, 0x36, 0x50, 0x19, 0x52, 0xd4, 0x8c, 0xb3, 0xd4, 0x76, 0xee, 0x10, + 0xc1, 0x04, 0xc9, 0x7e, 0x29, 0x2d, 0xfa, 0x16, 0xc8, 0x34, 0x8d, 0x3d, 0xe6, 0x0e, 0x58, 0x3e, + 0x33, 0x7f, 0x38, 0x3e, 0x41, 0x9e, 0x2a, 0xf8, 0xa8, 0xda, 0x48, 0xd3, 0xd8, 0xa3, 0x4e, 0xa0, + 0x05, 0xe3, 0x04, 0x5a, 0xdd, 0x35, 0xac, 0x3a, 0x96, 0x7d, 0xce, 0xd5, 0x43, 0x37, 0x72, 0x34, + 0x68, 0x44, 0x62, 0xa7, 0x6a, 0x63, 0x4d, 0x63, 0x6f, 0x81, 0x02, 0x48, 0x8b, 0xa5, 0xcc, 0xeb, + 0x6f, 0xce, 0x0c, 0xd1, 0x59, 0xfb, 0x17, 0x0a, 0x40, 0x20, 0x31, 0xb4, 0x09, 0x85, 0x88, 0xcf, + 0x12, 0xe7, 0x9f, 0xfa, 0x46, 0x75, 0x41, 0x22, 0x3b, 0x5e, 0x8d, 0x4c, 0xc1, 0x47, 0x20, 0xc7, + 0x8e, 0x37, 0xe8, 0x74, 0x4b, 0x24, 0xd1, 0x77, 0x4b, 0xe4, 0x14, 0xe1, 0x75, 0xfb, 0x60, 0x06, + 0xb1, 0xe1, 0x48, 0xc4, 0x2a, 0xdd, 0x28, 0x01, 0x06, 0x21, 0x04, 0xe1, 0xb1, 0xe4, 0xa4, 0x80, + 0x82, 0x9e, 0x8b, 0xb3, 0x2d, 0xf3, 0x3a, 0x76, 0xfc, 0x9c, 0x98, 0x3d, 0xa2, 0x22, 0x64, 0xd8, + 0xbf, 0xfb, 0xf1, 0xf6, 0xc5, 0x3d, 0x4e, 0xe2, 0x99, 0x50, 0xdd, 0xc4, 0xdb, 0xae, 0x29, 0x66, + 0x41, 0x13, 0x8f, 0xe8, 0x32, 0x14, 0x5c, 0x5c, 0x6d, 0x3b, 0xa6, 0xb7, 0xaf, 0x57, 0x6d, 0xcb, + 0x33, 0xaa, 0x1e, 0xf7, 0xd4, 0x27, 0x6e, 0x1f, 0xcc, 0x1c, 0x63, 0x7d, 0x8d, 0x62, 0xa8, 0xda, + 0xb8, 0x00, 0x2d, 0x30, 0x08, 0x69, 0xa1, 0x86, 0x3d, 0xc3, 0x6c, 0xb8, 0x3c, 0x91, 0x15, 0x8f, + 0xd2, 0x58, 0x7e, 0x66, 0x44, 0xde, 0xd3, 0xbb, 0x09, 0x05, 0xbb, 0x85, 0x9d, 0x18, 0x23, 0xb4, + 0x1c, 0xb4, 0x1c, 0xc5, 0xb8, 0x03, 0x3b, 0x30, 0x2e, 0x78, 0x08, 0x33, 0x70, 0x39, 0x74, 0x1e, + 0x8e, 0x05, 0x8b, 0x89, 0xe8, 0x90, 0xa3, 0x18, 0xaa, 0x7c, 0x14, 0x8e, 0x85, 0x94, 0x47, 0x21, + 0xfd, 0xb2, 0x61, 0x36, 0xc4, 0xff, 0x40, 0xd3, 0xf8, 0x13, 0x5a, 0x82, 0xb4, 0xeb, 0x19, 0x5e, + 0x9b, 0xc5, 0xdb, 0xc3, 0xe5, 0xf7, 0x0f, 0xd8, 0xe7, 0xb2, 0x6d, 0xd5, 0x36, 0x28, 0xa1, 0xc6, + 0x19, 0xa0, 0xcb, 0x90, 0xf6, 0xec, 0xeb, 0xd8, 0xe2, 0x42, 0x3d, 0xd4, 0x4a, 0xa7, 0x25, 0x39, + 0x46, 0x8d, 0x3c, 0x08, 0x2c, 0xb1, 0xee, 0xee, 0x1a, 0x0e, 0x66, 0x57, 0xb8, 0x64, 0xcb, 0x4b, + 0x87, 0x5e, 0x8e, 0xc7, 0xa2, 0xee, 0x81, 0xf1, 0x53, 0xb5, 0x71, 0x1f, 0xb4, 0x41, 0x21, 0xd1, + 0x70, 0x79, 0xe4, 0x8e, 0xc2, 0xe5, 0xcb, 0x50, 0x68, 0x5b, 0xdb, 0xb6, 0x45, 0xff, 0x5f, 0x11, + 0x2f, 0xcb, 0x64, 0x66, 0x95, 0xd3, 0x49, 0x79, 0xb6, 0xa2, 0x18, 0xaa, 0x36, 0xee, 0x83, 0xf8, + 0xc9, 0xcc, 0x1a, 0xe4, 0x03, 0x2c, 0xba, 0x64, 0xb3, 0x7d, 0x97, 0xec, 0xbd, 0x7c, 0xc9, 0x1e, + 0x89, 0xb6, 0x12, 0xac, 0xda, 0x31, 0x1f, 0x48, 0xc8, 0xd0, 0x07, 0x43, 0xb9, 0x23, 0xf0, 0x16, + 0xba, 0x5a, 0x99, 0xc1, 0xd3, 0xc6, 0xdc, 0xbb, 0x92, 0x36, 0x96, 0x46, 0x3f, 0xf9, 0xe6, 0xcc, + 0x90, 0xbf, 0x60, 0x5f, 0x4b, 0x40, 0x7a, 0xf1, 0xda, 0xba, 0x61, 0x3a, 0xdf, 0xa8, 0x31, 0x83, + 0x64, 0xbd, 0x9e, 0x86, 0x11, 0x26, 0x0b, 0x7a, 0x0c, 0xa7, 0x45, 0x7e, 0xf8, 0x67, 0x35, 0xa3, + 0x2a, 0x4d, 0xf1, 0xfc, 0x2b, 0xd4, 0x08, 0xaa, 0xfa, 0x13, 0x49, 0x80, 0xc5, 0x6b, 0xd7, 0x36, + 0x1d, 0xb3, 0xd5, 0xc0, 0xde, 0x37, 0x63, 0xea, 0xf7, 0x4e, 0x4c, 0x2d, 0xcd, 0xf1, 0xf3, 0x90, + 0x0b, 0xe6, 0xc8, 0x45, 0x1f, 0x80, 0x8c, 0xc7, 0x7f, 0xfb, 0xf7, 0x43, 0x76, 0x4c, 0xb5, 0x40, + 0x17, 0x37, 0x19, 0x08, 0x0a, 0xf5, 0xdf, 0x27, 0x00, 0xfa, 0x55, 0x64, 0xbe, 0x01, 0xa2, 0xee, + 0xcb, 0x90, 0xe6, 0x1e, 0x27, 0x79, 0x47, 0xd1, 0x2a, 0xa7, 0x96, 0x66, 0xe9, 0xf7, 0x13, 0x30, + 0xb9, 0x25, 0xcc, 0xee, 0x37, 0x25, 0x8c, 0xae, 0xc2, 0x08, 0xb6, 0x3c, 0xc7, 0xc4, 0xa2, 0xec, + 0x7d, 0x3a, 0xaa, 0xa5, 0x31, 0xd2, 0xa2, 0xff, 0xc7, 0x58, 0x5c, 0x7a, 0xc1, 0xc9, 0x25, 0x19, + 0x7f, 0x7f, 0x12, 0xa6, 0xbb, 0x51, 0xa1, 0x05, 0x18, 0xaf, 0x3a, 0x98, 0x02, 0x74, 0x79, 0xa7, + 0xa4, 0x5c, 0x94, 0xca, 0x44, 0x61, 0x04, 0x55, 0xcb, 0x0b, 0x08, 0x77, 0xc8, 0x75, 0x5a, 0x95, + 0x22, 0x4b, 0x85, 0x60, 0x0d, 0x18, 0x44, 0xab, 0xdc, 0x23, 0x07, 0xb5, 0x28, 0x99, 0x01, 0x73, + 0xc9, 0xf9, 0x00, 0x4a, 0x7d, 0xf2, 0x2b, 0x30, 0x6e, 0x5a, 0xa6, 0x67, 0x1a, 0x0d, 0x7d, 0xdb, + 0x68, 0x18, 0x56, 0xf5, 0x4e, 0x52, 0x11, 0xe6, 0x4d, 0x79, 0xb3, 0x11, 0x76, 0xaa, 0x96, 0xe7, + 0x90, 0x32, 0x03, 0x90, 0x19, 0x11, 0x4d, 0xa5, 0xee, 0x28, 0x70, 0x13, 0xe4, 0xd2, 0x8c, 0x7c, + 0x6f, 0x12, 0x26, 0xfc, 0xa2, 0xcc, 0x37, 0xa7, 0x62, 0xd0, 0xa9, 0x58, 0x01, 0x60, 0x06, 0x84, + 0x78, 0x8e, 0x3b, 0x98, 0x0d, 0x62, 0x82, 0xb2, 0x8c, 0xc3, 0xa2, 0xeb, 0x49, 0xf3, 0xf1, 0x87, + 0x49, 0x18, 0x95, 0xe7, 0xe3, 0x9b, 0x2e, 0xfd, 0x3d, 0x54, 0x26, 0x9b, 0x0f, 0x4c, 0x22, 0xfb, + 0x42, 0xfa, 0xde, 0xa8, 0x49, 0xec, 0x58, 0x4a, 0xdd, 0x6d, 0xe1, 0xff, 0x49, 0x40, 0x9a, 0x9f, + 0x41, 0xae, 0x76, 0x64, 0x11, 0x4a, 0xbf, 0xcb, 0x76, 0x7a, 0x27, 0x11, 0xaf, 0xc7, 0x26, 0x11, + 0xf9, 0xa6, 0xb1, 0xa7, 0x87, 0xbe, 0xb3, 0x52, 0x4e, 0x8f, 0x95, 0x8f, 0x07, 0x5c, 0xc2, 0xef, + 0x59, 0x2d, 0x24, 0xf8, 0xb2, 0x1b, 0x3d, 0x09, 0x39, 0x82, 0x11, 0x78, 0x05, 0x42, 0x7e, 0x34, + 0x28, 0x3e, 0x48, 0x2f, 0x55, 0x0d, 0x9a, 0xc6, 0x5e, 0x85, 0x3d, 0xa0, 0x65, 0x40, 0xbb, 0x7e, + 0xbd, 0x4b, 0x0f, 0x44, 0x48, 0xe8, 0x4f, 0xde, 0x3e, 0x98, 0x39, 0xce, 0xe8, 0x3b, 0x71, 0x54, + 0x6d, 0x22, 0x00, 0x0a, 0x6e, 0x17, 0x00, 0xc8, 0xb8, 0x74, 0x76, 0xfa, 0x83, 0xa5, 0xb0, 0xd2, + 0x91, 0x88, 0xe0, 0x9d, 0xaa, 0x65, 0xc9, 0xc3, 0x22, 0xf9, 0x2d, 0x09, 0xfe, 0xfb, 0x14, 0x40, + 0x81, 0xef, 0xf1, 0xf7, 0xe7, 0x3f, 0x48, 0x3f, 0x41, 0x15, 0x99, 0x91, 0x12, 0x9f, 0x64, 0x05, + 0x74, 0x22, 0xc9, 0x92, 0x96, 0xea, 0xc3, 0x81, 0x7d, 0x4e, 0x74, 0x2d, 0x05, 0xc6, 0xd8, 0xe0, + 0x5f, 0x55, 0xe0, 0x78, 0x87, 0xe2, 0xf8, 0xfd, 0xba, 0x06, 0xc8, 0x91, 0x5e, 0x52, 0xd1, 0x88, + 0xd3, 0xc6, 0x03, 0xeb, 0xdf, 0x84, 0xd3, 0x61, 0xe3, 0xef, 0x9e, 0x37, 0x61, 0x55, 0xcd, 0x9f, + 0x55, 0x60, 0x4a, 0x6e, 0xde, 0x1f, 0xc0, 0x65, 0x18, 0x95, 0x5b, 0xf7, 0x0f, 0x4a, 0xf7, 0xe8, + 0x3a, 0xef, 0x75, 0x88, 0x0e, 0x2d, 0x05, 0xab, 0x8f, 0x15, 0x3b, 0xcf, 0xf4, 0x1d, 0xbd, 0x7f, + 0x56, 0x30, 0xb2, 0x0a, 0x59, 0x8f, 0xff, 0x54, 0x81, 0xd4, 0xba, 0x6d, 0x37, 0x90, 0x0d, 0x13, + 0x96, 0xed, 0xe9, 0x44, 0x59, 0x70, 0x4d, 0xe7, 0xb5, 0x11, 0x56, 0x05, 0x5d, 0x38, 0x9c, 0x50, + 0xbe, 0x7c, 0x30, 0xd3, 0xc9, 0x4a, 0x1b, 0xb7, 0x6c, 0xaf, 0x4c, 0x21, 0x9b, 0xac, 0x72, 0xf2, + 0xad, 0x30, 0x16, 0x6e, 0x8c, 0x55, 0x8a, 0x5e, 0x38, 0x74, 0x63, 0x61, 0x36, 0xb7, 0x0f, 0x66, + 0xa6, 0x82, 0x45, 0xe0, 0x83, 0x55, 0x6d, 0x74, 0x5b, 0x6a, 0x9d, 0xdd, 0x53, 0xf7, 0x47, 0x6f, + 0xce, 0x28, 0xe5, 0xcb, 0x5d, 0x77, 0xfc, 0x1f, 0xee, 0xd9, 0x85, 0x3d, 0x7f, 0x6b, 0x3f, 0xbc, + 0xf7, 0xff, 0xa5, 0x73, 0x50, 0x8c, 0xec, 0xfd, 0xd3, 0xcf, 0xcc, 0xbb, 0xec, 0xfc, 0x9f, 0xe4, + 0xb8, 0x14, 0xe7, 0x5c, 0xcb, 0xa8, 0x9b, 0x96, 0xbc, 0x47, 0xdf, 0xe5, 0x60, 0x40, 0xaf, 0xc3, + 0x05, 0xea, 0x75, 0x38, 0x4a, 0x4f, 0xc2, 0x06, 0x66, 0x4b, 0xdc, 0x0b, 0x75, 0xd4, 0x2f, 0xa0, + 0x29, 0xfc, 0xda, 0x02, 0x56, 0x0d, 0xbb, 0x08, 0x10, 0xb4, 0xec, 0xdf, 0x72, 0xc6, 0x7b, 0xca, + 0x7a, 0xbf, 0x6e, 0xd4, 0x31, 0x67, 0xa3, 0x49, 0xc8, 0xea, 0x0f, 0x29, 0x70, 0xac, 0xa3, 0x35, + 0xae, 0xf5, 0xcf, 0x86, 0x3e, 0x69, 0x55, 0x06, 0xab, 0xce, 0xcb, 0x97, 0x9b, 0x94, 0x62, 0xfa, + 0x55, 0x8c, 0xeb, 0x17, 0x6b, 0x30, 0xd4, 0xb1, 0x57, 0xe0, 0x48, 0xb8, 0x5f, 0x42, 0x08, 0x2f, + 0x42, 0x3e, 0x9c, 0x2d, 0xf0, 0x50, 0xe2, 0xfd, 0x87, 0xf7, 0x90, 0x63, 0xa1, 0x8c, 0x41, 0x7d, + 0x21, 0x2a, 0x78, 0x5f, 0x12, 0x4f, 0x77, 0x7e, 0xc4, 0xd0, 0x57, 0x10, 0x01, 0x85, 0xfa, 0x4b, + 0x0a, 0xcc, 0x86, 0x39, 0x07, 0x46, 0xd8, 0x7d, 0xc7, 0xc7, 0xf5, 0x76, 0xd4, 0xe3, 0xb7, 0x14, + 0xb8, 0xb7, 0x47, 0xcf, 0xb9, 0x78, 0x1c, 0x98, 0x92, 0xac, 0xbb, 0xc3, 0xc1, 0x42, 0x65, 0xd4, + 0xee, 0x1e, 0xc8, 0x37, 0x6e, 0x27, 0xf8, 0xd1, 0xa3, 0xc9, 0xce, 0x77, 0xae, 0x36, 0xd9, 0x69, + 0x91, 0xdf, 0x9e, 0x6e, 0x7d, 0x41, 0x81, 0x33, 0xe1, 0x51, 0xc5, 0x64, 0x74, 0xef, 0xed, 0x89, + 0xf9, 0xa7, 0x0a, 0x9c, 0x1d, 0x64, 0x08, 0x7c, 0x86, 0x5e, 0x82, 0xc9, 0x20, 0xbe, 0x8a, 0x4e, + 0xd0, 0x7d, 0x03, 0x64, 0xc5, 0x5c, 0xa9, 0x91, 0xcf, 0xe5, 0xee, 0xcc, 0xc4, 0xbf, 0x54, 0xf8, + 0x9a, 0x93, 0xe7, 0xdd, 0x17, 0x7b, 0x38, 0x25, 0x38, 0xa4, 0xd8, 0xa5, 0xb4, 0x60, 0x2c, 0x94, + 0x16, 0xc4, 0x4c, 0x68, 0xe2, 0x2e, 0x59, 0x90, 0xef, 0x14, 0xd6, 0x34, 0x26, 0x38, 0xbb, 0x0e, + 0x93, 0x31, 0x8b, 0xc4, 0xbf, 0x58, 0xa6, 0xff, 0x1a, 0x39, 0xfa, 0xb5, 0x83, 0x99, 0x98, 0xa8, + 0x4f, 0x43, 0x9d, 0xcb, 0x43, 0xfd, 0x77, 0x0a, 0xcc, 0xd0, 0x8e, 0xc4, 0x4c, 0xe5, 0x9f, 0x67, + 0x01, 0x63, 0x6e, 0x48, 0x63, 0x87, 0xc5, 0x05, 0x3d, 0x0f, 0x69, 0xa6, 0xa5, 0x5c, 0xb6, 0x87, + 0x50, 0x6f, 0x4e, 0x18, 0x18, 0xec, 0x45, 0x31, 0xae, 0x78, 0xbb, 0xf0, 0x0e, 0xc9, 0xef, 0x6d, + 0xd8, 0x85, 0x7f, 0x28, 0x0c, 0x76, 0x7c, 0xcf, 0xb9, 0x88, 0x3e, 0xf2, 0xb6, 0x0d, 0x36, 0xbf, + 0x3d, 0xeb, 0x1d, 0xb3, 0xcc, 0x7e, 0xf7, 0xfb, 0x58, 0xe6, 0xf7, 0xde, 0x0c, 0xf8, 0x96, 0xb9, + 0xcf, 0x10, 0xde, 0xe3, 0x96, 0xf9, 0x76, 0x02, 0x8e, 0xd3, 0x61, 0xc8, 0x19, 0xc9, 0xbb, 0x20, + 0x79, 0x1d, 0x90, 0xeb, 0x54, 0xf5, 0xbb, 0x65, 0x3f, 0x0a, 0xae, 0x53, 0xbd, 0x16, 0x72, 0xba, + 0x3a, 0xa0, 0x9a, 0xeb, 0x45, 0x1b, 0x48, 0xde, 0x71, 0x03, 0x35, 0xd7, 0xbb, 0xd6, 0xc3, 0xab, + 0xa7, 0x0e, 0xa3, 0x3b, 0xbf, 0xa2, 0x40, 0x31, 0x4e, 0xe8, 0x5c, 0x57, 0x0c, 0x38, 0x1a, 0xca, + 0xa3, 0xa3, 0xea, 0xf2, 0xbe, 0x5e, 0xd9, 0x64, 0x64, 0xe9, 0x1e, 0x71, 0xf0, 0xdd, 0x5e, 0xbc, + 0xbf, 0x28, 0x9c, 0x8e, 0xaf, 0xf9, 0x9d, 0x29, 0xcc, 0x7b, 0x72, 0xc9, 0xfe, 0x78, 0x87, 0xb9, + 0x7f, 0xaf, 0x65, 0x43, 0xff, 0x56, 0x81, 0x53, 0x5d, 0x7a, 0xf8, 0xe7, 0xd9, 0x9d, 0x7f, 0xbc, + 0xab, 0xc2, 0xdc, 0xad, 0xd4, 0xeb, 0x02, 0x5f, 0x50, 0xe1, 0xc3, 0x6a, 0x52, 0x42, 0x1d, 0x7b, + 0xbb, 0xe2, 0x87, 0xe0, 0x44, 0x2c, 0x15, 0xef, 0xd3, 0x79, 0x48, 0xed, 0x9a, 0xae, 0xb8, 0x37, + 0xf1, 0x54, 0xb4, 0x3b, 0x11, 0x2a, 0x8a, 0xab, 0x22, 0x28, 0x50, 0x96, 0xeb, 0xb6, 0xdd, 0xe0, + 0xcd, 0xab, 0x0b, 0x30, 0x21, 0xc1, 0x38, 0xf3, 0x39, 0x48, 0xb5, 0x6c, 0xfe, 0xef, 0xe8, 0x72, + 0xe7, 0xa7, 0xa2, 0xcc, 0x09, 0x2e, 0x1f, 0x26, 0xc5, 0x53, 0xa7, 0x00, 0x31, 0x26, 0xec, 0x92, + 0x08, 0xce, 0xfa, 0xbb, 0x14, 0x98, 0x0c, 0x81, 0xfd, 0x8f, 0x94, 0xd2, 0xa1, 0x9b, 0xae, 0x3a, + 0xb6, 0xe8, 0x43, 0x97, 0xbe, 0x73, 0xdc, 0xb7, 0xa3, 0xba, 0xe7, 0x7f, 0x6d, 0x54, 0x7c, 0x18, + 0xac, 0x03, 0x48, 0xa5, 0xd8, 0x07, 0xa2, 0x2d, 0xc7, 0x17, 0x3d, 0x8a, 0x0f, 0xf6, 0xc5, 0xe3, + 0x31, 0xef, 0x10, 0xfa, 0x16, 0xf9, 0x18, 0xd5, 0xfd, 0xbd, 0xe9, 0x04, 0xfb, 0x07, 0xfa, 0xa1, + 0xf9, 0xdc, 0xff, 0x02, 0x4c, 0xc5, 0x65, 0xc1, 0xe8, 0xd1, 0xde, 0x1c, 0x3a, 0xe3, 0x96, 0xe2, + 0xfb, 0x0f, 0x41, 0xe1, 0x37, 0xff, 0xba, 0x02, 0x27, 0x7b, 0x26, 0x7b, 0xe8, 0x62, 0x6f, 0xb6, + 0x3d, 0x22, 0xa9, 0x62, 0xe9, 0x4e, 0x48, 0xfd, 0xae, 0xe9, 0xa1, 0xfd, 0xfc, 0x78, 0x89, 0x76, + 0xe4, 0x1f, 0x5d, 0x26, 0xb6, 0x33, 0xd6, 0x54, 0x87, 0xd0, 0xad, 0xf8, 0x7d, 0xed, 0x73, 0xb1, + 0x1c, 0xba, 0xa7, 0x3c, 0xc5, 0x47, 0x07, 0x27, 0x90, 0xa7, 0x3d, 0x2e, 0x96, 0xee, 0x32, 0xed, + 0x3d, 0x12, 0x86, 0x2e, 0xd3, 0xde, 0x2b, 0x50, 0xe7, 0xd3, 0xde, 0x33, 0x92, 0xec, 0x32, 0xed, + 0x83, 0x04, 0xd0, 0x5d, 0xa6, 0x7d, 0xa0, 0xc0, 0x55, 0x1d, 0x42, 0xbb, 0x30, 0x16, 0x8a, 0x53, + 0xd0, 0x99, 0x58, 0x76, 0x71, 0x01, 0x64, 0xf1, 0xec, 0x20, 0xa8, 0xf2, 0xfc, 0xc7, 0xb8, 0xe6, + 0x2e, 0xf3, 0xdf, 0x3d, 0xfa, 0x28, 0x3e, 0x3a, 0x38, 0x81, 0xdf, 0xf6, 0x4d, 0x7f, 0xab, 0x45, + 0x42, 0x40, 0x73, 0x03, 0x72, 0x12, 0x2d, 0x9f, 0x1b, 0x18, 0xdf, 0x6f, 0xf8, 0x7a, 0xc7, 0x11, + 0xeb, 0x78, 0xa1, 0xc5, 0xba, 0xb6, 0xe2, 0x43, 0x03, 0xe1, 0xfa, 0x8d, 0xad, 0xf0, 0x7d, 0x84, + 0xd9, 0x58, 0x32, 0xc9, 0x69, 0x15, 0xef, 0xed, 0x81, 0xe1, 0xb3, 0xdb, 0xf0, 0x37, 0x06, 0xd5, + 0x78, 0x74, 0xd9, 0x59, 0x15, 0xef, 0xeb, 0x89, 0x23, 0x98, 0xde, 0xf5, 0x52, 0xff, 0x2f, 0x64, + 0x3a, 0x3e, 0xf3, 0xab, 0x63, 0x0b, 0xbb, 0xa6, 0x7b, 0xb8, 0xcf, 0xfc, 0x7a, 0x56, 0xf3, 0xbf, + 0x33, 0x0d, 0xa3, 0x57, 0x18, 0x57, 0x7a, 0x9d, 0x37, 0x7a, 0x66, 0x40, 0x0f, 0x9c, 0x27, 0x1e, + 0xf8, 0x6b, 0x07, 0x33, 0x5c, 0x90, 0xbe, 0x2f, 0x76, 0xf9, 0x0d, 0xda, 0xec, 0xda, 0x98, 0xe0, + 0xf6, 0x9d, 0xd1, 0x43, 0x1d, 0x59, 0x65, 0x67, 0x05, 0xf8, 0x29, 0xd1, 0x28, 0x3f, 0x95, 0xdd, + 0xb2, 0xbd, 0x49, 0x20, 0xf4, 0xe2, 0x19, 0xf4, 0x03, 0x0a, 0x1c, 0xa1, 0x58, 0x41, 0x20, 0x48, + 0x31, 0xc5, 0xc1, 0x9a, 0x8e, 0x59, 0x5e, 0x36, 0xa4, 0xb4, 0x88, 0xf2, 0x28, 0x97, 0xf8, 0x7e, + 0xef, 0x3d, 0x52, 0xa3, 0x51, 0x76, 0xea, 0xd7, 0x0e, 0x66, 0x50, 0x27, 0xad, 0x46, 0x2f, 0x0f, + 0x0d, 0xc3, 0x5c, 0xb4, 0x1c, 0x73, 0x07, 0x7b, 0x8f, 0xd8, 0x70, 0x82, 0x0b, 0x34, 0x88, 0x11, + 0x42, 0xe1, 0xf9, 0x3a, 0xe4, 0x24, 0xe3, 0x33, 0x3d, 0xdc, 0xe5, 0x58, 0x5b, 0x90, 0x77, 0x23, + 0xce, 0x4f, 0xf2, 0x7d, 0x9a, 0xcc, 0x02, 0xfd, 0x15, 0x05, 0x8e, 0x04, 0xb9, 0xbd, 0xcc, 0x3c, + 0x3d, 0x78, 0x76, 0x7f, 0x29, 0x2c, 0xb5, 0x58, 0x7e, 0x44, 0x6a, 0x71, 0x0e, 0x52, 0x9b, 0x6a, + 0xc7, 0x39, 0x8c, 0x17, 0x61, 0x4c, 0x4e, 0xfe, 0xc4, 0x47, 0xd3, 0xbd, 0xb7, 0x33, 0xa7, 0xf8, + 0x68, 0x43, 0x47, 0x3b, 0xb4, 0x30, 0x23, 0x54, 0x84, 0x0c, 0xde, 0x6b, 0xd9, 0x8e, 0x87, 0x6b, + 0xf4, 0x2c, 0x72, 0x46, 0xf3, 0x9f, 0xd5, 0x9b, 0x10, 0x33, 0xb1, 0xe8, 0xf9, 0xc8, 0x05, 0x56, + 0x77, 0x92, 0x54, 0x74, 0xde, 0x79, 0x25, 0xdf, 0x46, 0x75, 0xb7, 0xcd, 0xc6, 0xff, 0x0f, 0x00, + 0x00, 0xff, 0xff, 0xd9, 0x29, 0x37, 0x3e, 0x78, 0xb3, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2478,38 +2478,6 @@ func (this *MsgUndelegate) Equal(that interface{}) bool { } return true } -func (this *HistoricalInfo) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HistoricalInfo) - if !ok { - that2, ok := that.(HistoricalInfo) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Header.Equal(&that1.Header) { - return false - } - if len(this.Valset) != len(that1.Valset) { - return false - } - for i := range this.Valset { - if !this.Valset[i].Equal(&that1.Valset[i]) { - return false - } - } - return true -} func (this *CommissionRates) Equal(that interface{}) bool { if that == nil { return this == nil diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index b18d3eb2ecd9..ef7af32a42fe 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -9,6 +9,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" + cryptoenc "github.com/tendermint/tendermint/crypto/encoding" tmtypes "github.com/tendermint/tendermint/types" yaml "gopkg.in/yaml.v2" @@ -223,8 +224,13 @@ func (d Description) EnsureLength() (Description, error) { // ABCIValidatorUpdate returns an abci.ValidatorUpdate from a staking validator type // with the full validator power func (v Validator) ABCIValidatorUpdate() abci.ValidatorUpdate { + pk, err := cryptoenc.PubKeyToProto(v.GetConsPubKey()) + if err != nil { + panic(err) + } + return abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(v.GetConsPubKey()), + PubKey: pk, Power: v.ConsensusPower(), } } @@ -232,8 +238,13 @@ func (v Validator) ABCIValidatorUpdate() abci.ValidatorUpdate { // ABCIValidatorUpdateZero returns an abci.ValidatorUpdate from a staking validator type // with zero power used for validator updates. func (v Validator) ABCIValidatorUpdateZero() abci.ValidatorUpdate { + pk, err := cryptoenc.PubKeyToProto(v.GetConsPubKey()) + if err != nil { + panic(err) + } + return abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(v.GetConsPubKey()), + PubKey: pk, Power: 0, } } From 91173b13c36fb0cc5cd587b6a81ac8344632b619 Mon Sep 17 00:00:00 2001 From: Marko Date: Thu, 6 Aug 2020 18:18:30 +0200 Subject: [PATCH 10/18] tendermint: update 5 (#6923) Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> --- client/debug/main.go | 2 +- crypto/armor.go | 3 +- crypto/armor_test.go | 7 +- crypto/hd/algo.go | 2 +- crypto/keyring/keyring.go | 4 +- crypto/keyring/types_test.go | 2 +- crypto/ledger/encode_test.go | 82 +++---------------- crypto/ledger/ledger_mock.go | 4 +- crypto/ledger/ledger_secp256k1.go | 12 +-- crypto/ledger/ledger_test.go | 8 +- go.sum | 47 +++++++++++ server/export.go | 9 +- server/tm_cmds.go | 4 +- server/util.go | 1 - simapp/test_helpers.go | 4 +- std/pubkey.go | 9 +- store/gaskv/store_test.go | 12 ++- store/rootmulti/proof_test.go | 40 ++++----- store/tracekv/store_test.go | 17 +--- types/address.go | 7 +- types/address_bench_test.go | 8 +- types/address_test.go | 4 +- x/auth/ante/sigverify.go | 4 +- x/auth/ante/testutil_test.go | 4 +- x/auth/module_test.go | 3 +- x/auth/tx/builder_test.go | 9 +- x/auth/types/account.go | 2 +- x/auth/types/stdtx_test.go | 4 +- x/distribution/module_test.go | 3 +- x/gov/client/utils/query_test.go | 12 ++- x/gov/module_test.go | 3 +- x/ibc/02-client/client/utils/utils.go | 14 +++- x/ibc/02-client/keeper/keeper_test.go | 3 +- x/ibc/03-connection/types/msgs_test.go | 2 +- x/ibc/04-channel/types/msgs_test.go | 2 +- x/ibc/07-tendermint/client/cli/tx.go | 3 - x/ibc/07-tendermint/misbehaviour.go | 6 +- x/ibc/07-tendermint/types/client_state.go | 1 - .../07-tendermint/types/client_state_test.go | 6 -- x/ibc/07-tendermint/types/evidence_test.go | 5 +- x/ibc/07-tendermint/types/fraction.go | 4 +- x/ibc/07-tendermint/types/msgs_test.go | 2 - x/ibc/testing/chain.go | 16 ++-- x/mint/module_test.go | 3 +- x/slashing/app_test.go | 8 +- x/slashing/genesis_test.go | 4 +- x/staking/app_test.go | 18 ++-- x/staking/common_test.go | 4 + x/staking/handler.go | 7 +- x/staking/handler_test.go | 10 +-- x/staking/keeper/slash_test.go | 1 + x/staking/module_test.go | 3 +- x/staking/types/historical_info_test.go | 1 + x/staking/types/validator_test.go | 9 +- x/upgrade/keeper/grpc_query_test.go | 1 + x/upgrade/types/storeloader_test.go | 1 + 56 files changed, 231 insertions(+), 235 deletions(-) diff --git a/client/debug/main.go b/client/debug/main.go index 782531745b4f..5ce659721add 100644 --- a/client/debug/main.go +++ b/client/debug/main.go @@ -34,7 +34,7 @@ func Cmd() *cobra.Command { // to decode the pubkey string from hex, base64, and finally bech32. If all // encodings fail, an error is returned. func getPubKeyFromString(pkstr string) (crypto.PubKey, error) { - var pubKey ed25519.PubKey + pubKey := make(ed25519.PubKey, ed25519.PubKeySize) bz, err := hex.DecodeString(pkstr) if err == nil { diff --git a/crypto/armor.go b/crypto/armor.go index 933f2eafc0bc..d0637c709d13 100644 --- a/crypto/armor.go +++ b/crypto/armor.go @@ -9,6 +9,7 @@ import ( "github.com/tendermint/tendermint/crypto/armor" "github.com/tendermint/tendermint/crypto/xsalsa20symmetric" + "github.com/cosmos/cosmos-sdk/codec/legacy" cryptoAmino "github.com/cosmos/cosmos-sdk/crypto/codec" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -151,7 +152,7 @@ func encryptPrivKey(privKey crypto.PrivKey, passphrase string) (saltBytes []byte } key = crypto.Sha256(key) // get 32 bytes - privKeyBytes := privKey.Bytes() + privKeyBytes := legacy.Cdc.Amino.MustMarshalBinaryBare(privKey) return saltBytes, xsalsa20symmetric.EncryptSymmetric(privKeyBytes, key) } diff --git a/crypto/armor_test.go b/crypto/armor_test.go index 52d2922b54cd..120b88e045da 100644 --- a/crypto/armor_test.go +++ b/crypto/armor_test.go @@ -14,6 +14,7 @@ import ( "github.com/tendermint/tendermint/crypto/secp256k1" "github.com/tendermint/tendermint/crypto/xsalsa20symmetric" + "github.com/cosmos/cosmos-sdk/codec/legacy" "github.com/cosmos/cosmos-sdk/crypto" cryptoAmino "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/hd" @@ -50,7 +51,7 @@ func TestArmorUnarmorPrivKey(t *testing.T) { key, err := bcrypt.GenerateFromPassword(saltBytes, []byte(passphrase), crypto.BcryptSecurityParameter) require.NoError(t, err) key = tmcrypto.Sha256(key) // get 32 bytes - privKeyBytes := privKey.Bytes() + privKeyBytes := legacy.Cdc.Amino.MustMarshalBinaryBare(privKey) return saltBytes, xsalsa20symmetric.EncryptSymmetric(privKeyBytes, key) } saltBytes, encBytes := encryptPrivKeyFn(priv, "passphrase") @@ -74,7 +75,7 @@ func TestArmorUnarmorPubKey(t *testing.T) { // Add keys and see they return in alphabetical order info, _, err := cstore.NewMnemonic("Bob", keyring.English, types.FullFundraiserPath, hd.Secp256k1) require.NoError(t, err) - armored := crypto.ArmorPubKeyBytes(info.GetPubKey().Bytes(), "") + armored := crypto.ArmorPubKeyBytes(legacy.Cdc.Amino.MustMarshalBinaryBare(info.GetPubKey()), "") pubBytes, algo, err := crypto.UnarmorPubKeyBytes(armored) require.NoError(t, err) pub, err := cryptoAmino.PubKeyFromBytes(pubBytes) @@ -82,7 +83,7 @@ func TestArmorUnarmorPubKey(t *testing.T) { require.Equal(t, string(hd.Secp256k1Type), algo) require.True(t, pub.Equals(info.GetPubKey())) - armored = crypto.ArmorPubKeyBytes(info.GetPubKey().Bytes(), "unknown") + armored = crypto.ArmorPubKeyBytes(legacy.Cdc.Amino.MustMarshalBinaryBare(info.GetPubKey()), "unknown") pubBytes, algo, err = crypto.UnarmorPubKeyBytes(armored) require.NoError(t, err) pub, err = cryptoAmino.PubKeyFromBytes(pubBytes) diff --git a/crypto/hd/algo.go b/crypto/hd/algo.go index f76834be6f68..9a32835d0531 100644 --- a/crypto/hd/algo.go +++ b/crypto/hd/algo.go @@ -55,7 +55,7 @@ func (s secp256k1Algo) Derive() DeriveFn { } derivedKey, err := DerivePrivateKeyForPath(masterPriv, ch, hdPath) - return derivedKey[:], err + return derivedKey, err } } diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 56ed1f1cabb4..99c9101fb730 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -197,7 +197,7 @@ func (ks keystore) ExportPubKeyArmor(uid string) (string, error) { return "", fmt.Errorf("no key to export with name: %s", uid) } - return crypto.ArmorPubKeyBytes(bz.GetPubKey().Bytes(), string(bz.GetAlgo())), nil + return crypto.ArmorPubKeyBytes(CryptoCdc.MustMarshalBinaryBare(bz.GetPubKey()), string(bz.GetAlgo())), nil } func (ks keystore) ExportPubKeyArmorByAddress(address sdk.Address) (string, error) { @@ -687,7 +687,7 @@ func (ks keystore) writeLocalKey(name string, priv tmcrypto.PrivKey, algo hd.Pub // encrypt private key using keyring pub := priv.PubKey() - info := newLocalInfo(name, pub, string(priv.Bytes()), algo) + info := newLocalInfo(name, pub, string(CryptoCdc.MustMarshalBinaryBare(priv)), algo) if err := ks.writeInfo(info); err != nil { return nil, err } diff --git a/crypto/keyring/types_test.go b/crypto/keyring/types_test.go index 0ee5c75c431b..50981d177bed 100644 --- a/crypto/keyring/types_test.go +++ b/crypto/keyring/types_test.go @@ -12,7 +12,7 @@ import ( ) func Test_writeReadLedgerInfo(t *testing.T) { - var tmpKey secp256k1.PubKey + tmpKey := make(secp256k1.PubKey, secp256k1.PubKeySize) bz, _ := hex.DecodeString("035AD6810A47F073553FF30D2FCC7E0D3B1C0B74B61A1AAA2582344037151E143A") copy(tmpKey[:], bz) diff --git a/crypto/ledger/encode_test.go b/crypto/ledger/encode_test.go index 146d3a50ea80..6e0cf99f5242 100644 --- a/crypto/ledger/encode_test.go +++ b/crypto/ledger/encode_test.go @@ -7,31 +7,12 @@ import ( "github.com/stretchr/testify/require" tcrypto "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/ed25519" - "github.com/tendermint/tendermint/crypto/secp256k1" ) type byter interface { Bytes() []byte } -func checkAminoBinary(t *testing.T, src, dst interface{}, size int) { - // Marshal to binary bytes. - bz, err := cdc.MarshalBinaryBare(src) - require.Nil(t, err, "%+v", err) - if byterSrc, ok := src.(byter); ok { - // Make sure this is compatible with current (Bytes()) encoding. - require.Equal(t, byterSrc.Bytes(), bz, "Amino binary vs Bytes() mismatch") - } - // Make sure we have the expected length. - if size != -1 { - require.Equal(t, size, len(bz), "Amino binary size mismatch") - } - // Unmarshal. - err = cdc.UnmarshalBinaryBare(bz, dst) - require.Nil(t, err, "%+v", err) -} - func checkAminoJSON(t *testing.T, src interface{}, dst interface{}, isNil bool) { // Marshal to JSON bytes. js, err := cdc.MarshalJSON(src) @@ -50,59 +31,16 @@ func checkAminoJSON(t *testing.T, src interface{}, dst interface{}, isNil bool) // nolint: govet func ExamplePrintRegisteredTypes() { cdc.PrintTypes(os.Stdout) - // Output: | Type | Name | Prefix | Length | Notes | - //| ---- | ---- | ------ | ----- | ------ | - //| PrivKeyLedgerSecp256k1 | tendermint/PrivKeyLedgerSecp256k1 | 0x10CAB393 | variable | | - //| PubKeyEd25519 | tendermint/PubKeyEd25519 | 0x1624DE64 | 0x20 | | - //| PubKeySr25519 | tendermint/PubKeySr25519 | 0x0DFB1005 | 0x20 | | - //| PubKeySecp256k1 | tendermint/PubKeySecp256k1 | 0xEB5AE987 | 0x21 | | - //| PubKeyMultisigThreshold | tendermint/PubKeyMultisigThreshold | 0x22C1F7E2 | variable | | - //| PrivKeyEd25519 | tendermint/PrivKeyEd25519 | 0xA3288910 | 0x40 | | - //| PrivKeySr25519 | tendermint/PrivKeySr25519 | 0x2F82D78B | 0x20 | | - //| PrivKeySecp256k1 | tendermint/PrivKeySecp256k1 | 0xE1B0F79B | 0x20 | | -} - -func TestKeyEncodings(t *testing.T) { - cases := []struct { - privKey tcrypto.PrivKey - privSize, pubSize int // binary sizes with the amino overhead - }{ - { - privKey: ed25519.GenPrivKey(), - privSize: 69, - pubSize: 37, - }, - { - privKey: secp256k1.GenPrivKey(), - privSize: 37, - pubSize: 38, - }, - } - - for _, tc := range cases { - - // Check (de/en)codings of PrivKeys. - var priv2, priv3 tcrypto.PrivKey - checkAminoBinary(t, tc.privKey, &priv2, tc.privSize) - require.EqualValues(t, tc.privKey, priv2) - checkAminoJSON(t, tc.privKey, &priv3, false) // TODO also check Prefix bytes. - require.EqualValues(t, tc.privKey, priv3) - - // Check (de/en)codings of Signatures. - var sig1, sig2 []byte - sig1, err := tc.privKey.Sign([]byte("something")) - require.NoError(t, err) - checkAminoBinary(t, sig1, &sig2, -1) // Signature size changes for Secp anyways. - require.EqualValues(t, sig1, sig2) - - // Check (de/en)codings of PubKeys. - pubKey := tc.privKey.PubKey() - var pub2, pub3 tcrypto.PubKey - checkAminoBinary(t, pubKey, &pub2, tc.pubSize) - require.EqualValues(t, pubKey, pub2) - checkAminoJSON(t, pubKey, &pub3, false) // TODO also check Prefix bytes. - require.EqualValues(t, pubKey, pub3) - } + // | Type | Name | Prefix | Length | Notes | + // | ---- | ---- | ------ | ----- | ------ | + // | PrivKeyLedgerSecp256k1 | tendermint/PrivKeyLedgerSecp256k1 | 0x10CAB393 | variable | | + // | PubKey | tendermint/PubKeyEd25519 | 0x1624DE64 | variable | | + // | PubKey | tendermint/PubKeySr25519 | 0x0DFB1005 | variable | | + // | PubKey | tendermint/PubKeySecp256k1 | 0xEB5AE987 | variable | | + // | PubKeyMultisigThreshold | tendermint/PubKeyMultisigThreshold | 0x22C1F7E2 | variable | | + // | PrivKey | tendermint/PrivKeyEd25519 | 0xA3288910 | variable | | + // | PrivKey | tendermint/PrivKeySr25519 | 0x2F82D78B | variable | | + // | PrivKey | tendermint/PrivKeySecp256k1 | 0xE1B0F79B | variable | | } func TestNilEncodings(t *testing.T) { diff --git a/crypto/ledger/ledger_mock.go b/crypto/ledger/ledger_mock.go index 16b44745d46b..cb75a00884a9 100644 --- a/crypto/ledger/ledger_mock.go +++ b/crypto/ledger/ledger_mock.go @@ -77,8 +77,8 @@ func (mock LedgerSECP256K1Mock) GetAddressPubKeySECP256K1(derivationPath []uint3 return nil, "", fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKey - copy(compressedPublicKey[:], cmp.SerializeCompressed()) + compressedPublicKey := make(tmsecp256k1.PubKey, tmsecp256k1.PubKeySize) + copy(compressedPublicKey, cmp.SerializeCompressed()) // Generate the bech32 addr using existing tmcrypto/etc. addr := sdk.AccAddress(compressedPublicKey.Address()).String() diff --git a/crypto/ledger/ledger_secp256k1.go b/crypto/ledger/ledger_secp256k1.go index 9c3f2a52f364..6ad8c7ff43d8 100644 --- a/crypto/ledger/ledger_secp256k1.go +++ b/crypto/ledger/ledger_secp256k1.go @@ -115,7 +115,7 @@ func ShowAddress(path hd.BIP44Params, expectedPubKey tmcrypto.PubKey, return err } - if pubKey != expectedPubKey { + if !pubKey.Equals(expectedPubKey) { return fmt.Errorf("the key's pubkey does not match with the one retrieved from Ledger. Check that the HD path and device are the correct ones") } @@ -124,7 +124,7 @@ func ShowAddress(path hd.BIP44Params, expectedPubKey tmcrypto.PubKey, return err } - if pubKey2 != expectedPubKey { + if !pubKey2.Equals(expectedPubKey) { return fmt.Errorf("the key's pubkey does not match with the one retrieved from Ledger. Check that the HD path and device are the correct ones") } @@ -246,8 +246,8 @@ func getPubKeyUnsafe(device SECP256K1, path hd.BIP44Params) (tmcrypto.PubKey, er return nil, fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKey - copy(compressedPublicKey[:], cmp.SerializeCompressed()) + compressedPublicKey := make(tmsecp256k1.PubKey, tmsecp256k1.PubKeySize) + copy(compressedPublicKey, cmp.SerializeCompressed()) return compressedPublicKey, nil } @@ -270,8 +270,8 @@ func getPubKeyAddrSafe(device SECP256K1, path hd.BIP44Params, hrp string) (tmcry return nil, "", fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKey - copy(compressedPublicKey[:], cmp.SerializeCompressed()) + compressedPublicKey := make(tmsecp256k1.PubKey, tmsecp256k1.PubKeySize) + copy(compressedPublicKey, cmp.SerializeCompressed()) return compressedPublicKey, addr, nil } diff --git a/crypto/ledger/ledger_test.go b/crypto/ledger/ledger_test.go index 3de8ff5a386b..37869fa67654 100644 --- a/crypto/ledger/ledger_test.go +++ b/crypto/ledger/ledger_test.go @@ -29,7 +29,7 @@ func TestPublicKeyUnsafe(t *testing.T) { require.NotNil(t, priv) require.Equal(t, "eb5ae98721034fef9cd7c4c63588d3b03feb5281b9d232cba34d6f3d71aee59211ffbfe1fe87", - fmt.Sprintf("%x", priv.PubKey().Bytes()), + fmt.Sprintf("%x", cdc.Amino.MustMarshalBinaryBare(priv.PubKey())), "Is your device using test mnemonic: %s ?", testutil.TestMnemonic) pubKeyAddr, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, priv.PubKey()) @@ -107,7 +107,7 @@ func TestPublicKeySafe(t *testing.T) { require.Nil(t, ShowAddress(path, priv.PubKey(), sdk.GetConfig().GetBech32AccountAddrPrefix())) require.Equal(t, "eb5ae98721034fef9cd7c4c63588d3b03feb5281b9d232cba34d6f3d71aee59211ffbfe1fe87", - fmt.Sprintf("%x", priv.PubKey().Bytes()), + fmt.Sprintf("%x", cdc.Amino.MustMarshalBinaryBare(priv.PubKey())), "Is your device using test mnemonic: %s ?", testutil.TestMnemonic) pubKeyAddr, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, priv.PubKey()) @@ -238,7 +238,7 @@ func TestRealDeviceSecp256k1(t *testing.T) { require.True(t, valid) // now, let's serialize the public key and make sure it still works - bs := priv.PubKey().Bytes() + bs := cdc.Amino.MustMarshalBinaryBare(priv.PubKey()) pub2, err := cryptoAmino.PubKeyFromBytes(bs) require.Nil(t, err, "%+v", err) @@ -252,7 +252,7 @@ func TestRealDeviceSecp256k1(t *testing.T) { require.True(t, valid) // make sure pubkeys serialize properly as well - bs = pub.Bytes() + bs = cdc.Amino.MustMarshalBinaryBare(pub) bpub, err := cryptoAmino.PubKeyFromBytes(bs) require.NoError(t, err) require.Equal(t, pub, bpub) diff --git a/go.sum b/go.sum index ae8f4f6c3477..ba7023f8ef2b 100644 --- a/go.sum +++ b/go.sum @@ -97,11 +97,14 @@ github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fj github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/iavl v0.15.0-rc1 h1:cYMPAxu5xpGPhGYvGlpeCmgmgH7oY+kebZm2oHfh2nE= github.com/cosmos/iavl v0.15.0-rc1/go.mod h1:qFTkoCC00sBKWCG3Ws8GAUaYR1jIOtwNZ9p8uFOu4Jo= +github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= +github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -123,10 +126,14 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= @@ -143,7 +150,9 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -153,6 +162,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= @@ -178,8 +188,10 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -188,11 +200,14 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -203,6 +218,7 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= @@ -225,6 +241,7 @@ github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= @@ -238,12 +255,15 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -253,6 +273,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= @@ -265,6 +286,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= @@ -285,6 +307,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/minio/highwayhash v1.0.0 h1:iMSDhgUILCr0TNm8LWlSjF8N0ZIj2qbO8WHp6Q/J2BA= github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -310,13 +333,16 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= @@ -327,19 +353,24 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1 h1:BCmzIS3n71sGfHB5NMNDB3lHYPz8fWSkCAErHed//qc= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -348,6 +379,7 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -381,6 +413,7 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= @@ -391,16 +424,20 @@ github.com/regen-network/protobuf v1.3.2-alpha.regen.4 h1:c9jEnU+xm6vqyrQe3M94UF github.com/regen-network/protobuf v1.3.2-alpha.regen.4/go.mod h1:/J8/bR1T/NXyIdQDLUaq15LjNE83nRzkyrLAMcPewig= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.2.0 h1:lMqc+fUb7RrFS3gQLtoQsJ7/6TV/pAIFvBsqX73DK8Y= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -431,15 +468,18 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= @@ -459,9 +499,11 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -602,6 +644,7 @@ golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200110213125-a7a6caa82ab2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -659,14 +702,17 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= @@ -676,6 +722,7 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/server/export.go b/server/export.go index 5be74127d789..c38499a34bc4 100644 --- a/server/export.go +++ b/server/export.go @@ -8,6 +8,7 @@ import ( "os" "github.com/spf13/cobra" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" @@ -79,17 +80,17 @@ func ExportCmd(appExporter types.AppExporter, defaultNodeHome string) *cobra.Com doc.AppState = appState doc.Validators = validators - doc.ConsensusParams = &tmtypes.ConsensusParams{ - Block: tmtypes.BlockParams{ + doc.ConsensusParams = &tmproto.ConsensusParams{ + Block: tmproto.BlockParams{ MaxBytes: cp.Block.MaxBytes, MaxGas: cp.Block.MaxGas, TimeIotaMs: doc.ConsensusParams.Block.TimeIotaMs, }, - Evidence: tmtypes.EvidenceParams{ + Evidence: tmproto.EvidenceParams{ MaxAgeNumBlocks: cp.Evidence.MaxAgeNumBlocks, MaxAgeDuration: cp.Evidence.MaxAgeDuration, }, - Validator: tmtypes.ValidatorParams{ + Validator: tmproto.ValidatorParams{ PubKeyTypes: cp.Validator.PubKeyTypes, }, } diff --git a/server/tm_cmds.go b/server/tm_cmds.go index 7a906380084c..6bcba09aa83a 100644 --- a/server/tm_cmds.go +++ b/server/tm_cmds.go @@ -116,8 +116,8 @@ against which this app has been compiled. }{ Tendermint: tversion.Version, ABCI: tversion.ABCIVersion, - BlockProtocol: tversion.BlockProtocol.Uint64(), - P2PProtocol: tversion.P2PProtocol.Uint64(), + BlockProtocol: tversion.BlockProtocol, + P2PProtocol: tversion.P2PProtocol, }) if err != nil { return err diff --git a/server/util.go b/server/util.go index 7db8742d38b9..b19f7942bc9a 100644 --- a/server/util.go +++ b/server/util.go @@ -129,7 +129,6 @@ func interceptConfigs(ctx *Context, rootViper *viper.Viper) (*tmcfg.Config, erro conf.ProfListenAddress = "localhost:6060" conf.P2P.RecvRate = 5120000 conf.P2P.SendRate = 5120000 - conf.TxIndex.IndexAllKeys = true conf.Consensus.TimeoutCommit = 5 * time.Second tmcfg.WriteConfigFile(configFile, conf) } else { diff --git a/simapp/test_helpers.go b/simapp/test_helpers.go index f2610bef128a..a22cc70709fc 100644 --- a/simapp/test_helpers.go +++ b/simapp/test_helpers.go @@ -420,7 +420,7 @@ func NewPubKeyFromHex(pk string) (res crypto.PubKey) { if err != nil { panic(err) } - var pkEd ed25519.PubKey - copy(pkEd[:], pkBytes) + pkEd := make(ed25519.PubKey, ed25519.PubKeySize) + copy(pkEd, pkBytes) return pkEd } diff --git a/std/pubkey.go b/std/pubkey.go index 0069fd5f0aeb..ff7a636b7877 100644 --- a/std/pubkey.go +++ b/std/pubkey.go @@ -26,6 +26,7 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er if n != secp256k1.PubKeySize { return nil, fmt.Errorf("wrong length %d for secp256k1 public key", n) } + res := make(secp256k1.PubKey, secp256k1.PubKeySize) copy(res, key.Secp256K1) return res, nil @@ -34,6 +35,7 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er if n != ed255192.PubKeySize { return nil, fmt.Errorf("wrong length %d for ed25519 public key", n) } + res := make(ed255192.PubKey, ed255192.PubKeySize) copy(res, key.Ed25519) return res, nil @@ -42,6 +44,7 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er if n != sr25519.PubKeySize { return nil, fmt.Errorf("wrong length %d for sr25519 public key", n) } + res := make(sr25519.PubKey, sr25519.PubKeySize) copy(res, key.Sr25519) @@ -67,11 +70,11 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er func (cdc DefaultPublicKeyCodec) Encode(key crypto.PubKey) (*types.PublicKey, error) { switch key := key.(type) { case secp256k1.PubKey: - return &types.PublicKey{Sum: &types.PublicKey_Secp256K1{Secp256K1: key[:]}}, nil + return &types.PublicKey{Sum: &types.PublicKey_Secp256K1{Secp256K1: key}}, nil case ed255192.PubKey: - return &types.PublicKey{Sum: &types.PublicKey_Ed25519{Ed25519: key[:]}}, nil + return &types.PublicKey{Sum: &types.PublicKey_Ed25519{Ed25519: key}}, nil case sr25519.PubKey: - return &types.PublicKey{Sum: &types.PublicKey_Sr25519{Sr25519: key[:]}}, nil + return &types.PublicKey{Sum: &types.PublicKey_Sr25519{Sr25519: key}}, nil case multisig.PubKeyMultisigThreshold: pubKeys := key.PubKeys resKeys := make([]*types.PublicKey, len(pubKeys)) diff --git a/store/gaskv/store_test.go b/store/gaskv/store_test.go index 55378666c02b..432fbe376343 100644 --- a/store/gaskv/store_test.go +++ b/store/gaskv/store_test.go @@ -55,7 +55,11 @@ func TestGasKVStoreIterator(t *testing.T) { require.Nil(t, end) require.NoError(t, iterator.Error()) - t.Cleanup(iterator.Close) + t.Cleanup(func() { + if err := iterator.Close(); err != nil { + t.Fatal(err) + } + }) ka := iterator.Key() require.Equal(t, ka, keyFmt(1)) va := iterator.Value() @@ -71,7 +75,11 @@ func TestGasKVStoreIterator(t *testing.T) { require.NoError(t, iterator.Error()) reverseIterator := st.ReverseIterator(nil, nil) - t.Cleanup(reverseIterator.Close) + t.Cleanup(func() { + if err := reverseIterator.Close(); err != nil { + t.Fatal(err) + } + }) require.Equal(t, reverseIterator.Key(), keyFmt(2)) reverseIterator.Next() require.Equal(t, reverseIterator.Key(), keyFmt(1)) diff --git a/store/rootmulti/proof_test.go b/store/rootmulti/proof_test.go index bac54aada52e..f0bd29063ad1 100644 --- a/store/rootmulti/proof_test.go +++ b/store/rootmulti/proof_test.go @@ -26,31 +26,31 @@ func TestVerifyIAVLStoreQueryProof(t *testing.T) { Data: []byte("MYKEY"), Prove: true, }) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) // Verify proof. prt := DefaultProofRuntime() - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte("MYVALUE")) require.Nil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY_NOT", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY_NOT", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte("MYVALUE_NOT")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte("MYVALUE_NOT")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte(nil)) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte(nil)) require.NotNil(t, err) } @@ -73,39 +73,39 @@ func TestVerifyMultiStoreQueryProof(t *testing.T) { Data: []byte("MYKEY"), Prove: true, }) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) // Verify proof. prt := DefaultProofRuntime() - err := prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) + err := prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) require.Nil(t, err) // Verify proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) require.Nil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY_NOT", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY_NOT", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "iavlStoreKey/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "iavlStoreKey/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE_NOT")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE_NOT")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte(nil)) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte(nil)) require.NotNil(t, err) } @@ -129,20 +129,20 @@ func TestVerifyMultiStoreQueryProofAbsence(t *testing.T) { Data: []byte("MYABSENTKEY"), Prove: true, }) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) // Verify proof. prt := DefaultProofRuntime() - err = prt.VerifyAbsence(res.Proof, cid.Hash, "/iavlStoreKey/MYABSENTKEY") + err = prt.VerifyAbsence(res.ProofOps, cid.Hash, "/iavlStoreKey/MYABSENTKEY") require.Nil(t, err) // Verify (bad) proof. prt = DefaultProofRuntime() - err = prt.VerifyAbsence(res.Proof, cid.Hash, "/MYABSENTKEY") + err = prt.VerifyAbsence(res.ProofOps, cid.Hash, "/MYABSENTKEY") require.NotNil(t, err) // Verify (bad) proof. prt = DefaultProofRuntime() - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYABSENTKEY", []byte("")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYABSENTKEY", []byte("")) require.NotNil(t, err) } diff --git a/store/tracekv/store_test.go b/store/tracekv/store_test.go index ec2e95567038..e2c4e2a0fe5d 100644 --- a/store/tracekv/store_test.go +++ b/store/tracekv/store_test.go @@ -50,11 +50,6 @@ func TestTraceKVStoreGet(t *testing.T) { expectedValue []byte expectedOut string }{ - { - key: []byte{}, - expectedValue: nil, - expectedOut: "{\"operation\":\"read\",\"key\":\"\",\"value\":\"\",\"metadata\":{\"blockHeight\":64}}\n", - }, { key: kvPairs[0].Key, expectedValue: kvPairs[0].Value, @@ -124,10 +119,6 @@ func TestTraceKVStoreDelete(t *testing.T) { key []byte expectedOut string }{ - { - key: []byte{}, - expectedOut: "{\"operation\":\"delete\",\"key\":\"\",\"value\":\"\",\"metadata\":{\"blockHeight\":64}}\n", - }, { key: kvPairs[0].Key, expectedOut: "{\"operation\":\"delete\",\"key\":\"a2V5MDAwMDAwMDE=\",\"value\":\"\",\"metadata\":{\"blockHeight\":64}}\n", @@ -150,10 +141,6 @@ func TestTraceKVStoreHas(t *testing.T) { key []byte expected bool }{ - { - key: []byte{}, - expected: false, - }, { key: kvPairs[0].Key, expected: true, @@ -224,7 +211,7 @@ func TestTestTraceKVStoreIterator(t *testing.T) { require.False(t, iterator.Valid()) require.Panics(t, iterator.Next) - require.NotPanics(t, iterator.Close) + require.NoError(t, iterator.Close()) } func TestTestTraceKVStoreReverseIterator(t *testing.T) { @@ -280,7 +267,7 @@ func TestTestTraceKVStoreReverseIterator(t *testing.T) { require.False(t, iterator.Valid()) require.Panics(t, iterator.Next) - require.NotPanics(t, iterator.Close) + require.NoError(t, iterator.Close()) } func TestTraceKVStorePrefix(t *testing.T) { diff --git a/types/address.go b/types/address.go index 36b327cf5b7b..1add0873f02b 100644 --- a/types/address.go +++ b/types/address.go @@ -11,7 +11,8 @@ import ( "github.com/tendermint/tendermint/crypto" yaml "gopkg.in/yaml.v2" - tmamino "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/types/bech32" ) @@ -625,7 +626,7 @@ func Bech32ifyPubKey(pkt Bech32PubKeyType, pubkey crypto.PubKey) (string, error) } - return bech32.ConvertAndEncode(bech32Prefix, pubkey.Bytes()) + return bech32.ConvertAndEncode(bech32Prefix, legacy.Cdc.MustMarshalBinaryBare(pubkey)) } // MustBech32ifyPubKey calls Bech32ifyPubKey except it panics on error. @@ -660,7 +661,7 @@ func GetPubKeyFromBech32(pkt Bech32PubKeyType, pubkeyStr string) (crypto.PubKey, return nil, err } - pk, err := tmamino.PubKeyFromBytes(bz) + pk, err := cryptocodec.PubKeyFromBytes(bz) if err != nil { return nil, err } diff --git a/types/address_bench_test.go b/types/address_bench_test.go index 205954280774..640d18041177 100644 --- a/types/address_bench_test.go +++ b/types/address_bench_test.go @@ -13,14 +13,14 @@ import ( ) func BenchmarkBech32ifyPubKey(b *testing.B) { - var pk ed25519.PubKey + pk := make(ed25519.PubKey, ed25519.PubKeySize) rng := rand.New(rand.NewSource(time.Now().Unix())) b.ResetTimer() for i := 0; i < b.N; i++ { b.StopTimer() - rng.Read(pk[:]) + rng.Read(pk) b.StartTimer() _, err := types.Bech32ifyPubKey(types.Bech32PubKeyTypeConsPub, pk) @@ -29,14 +29,14 @@ func BenchmarkBech32ifyPubKey(b *testing.B) { } func BenchmarkGetPubKeyFromBech32(b *testing.B) { - var pk ed25519.PubKey + pk := make(ed25519.PubKey, ed25519.PubKeySize) rng := rand.New(rand.NewSource(time.Now().Unix())) b.ResetTimer() for i := 0; i < b.N; i++ { b.StopTimer() - rng.Read(pk[:]) + rng.Read(pk) pkStr, err := types.Bech32ifyPubKey(types.Bech32PubKeyTypeConsPub, pk) require.NoError(b, err) diff --git a/types/address_test.go b/types/address_test.go index c3afabd51d57..a61991ee1436 100644 --- a/types/address_test.go +++ b/types/address_test.go @@ -61,7 +61,7 @@ func TestRandBech32PubkeyConsistency(t *testing.T) { pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 1000; i++ { - rand.Read(pub[:]) + rand.Read(pub) mustBech32AccPub := types.MustBech32ifyPubKey(types.Bech32PubKeyTypeAccPub, pub) bech32AccPub, err := types.Bech32ifyPubKey(types.Bech32PubKeyTypeAccPub, pub) @@ -119,7 +119,7 @@ func TestRandBech32AccAddrConsistency(t *testing.T) { pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 1000; i++ { - rand.Read(pub[:]) + rand.Read(pub) acc := types.AccAddress(pub.Address()) res := types.AccAddress{} diff --git a/x/auth/ante/sigverify.go b/x/auth/ante/sigverify.go index e8be3934d5f5..a11dd6ec885e 100644 --- a/x/auth/ante/sigverify.go +++ b/x/auth/ante/sigverify.go @@ -20,7 +20,7 @@ import ( var ( // simulation signature values used to estimate gas consumption - simSecp256k1Pubkey secp256k1.PubKey + simSecp256k1Pubkey = make(secp256k1.PubKey, secp256k1.PubKeySize) simSecp256k1Sig [64]byte _ authsigning.SigVerifiableTx = (*types.StdTx)(nil) // assert StdTx implements SigVerifiableTx @@ -29,7 +29,7 @@ var ( func init() { // This decodes a valid hex string into a sepc256k1Pubkey for use in transaction simulation bz, _ := hex.DecodeString("035AD6810A47F073553FF30D2FCC7E0D3B1C0B74B61A1AAA2582344037151E143A") - copy(simSecp256k1Pubkey[:], bz) + copy(simSecp256k1Pubkey, bz) } // SignatureVerificationGasConsumer is the type of function that is used to both diff --git a/x/auth/ante/testutil_test.go b/x/auth/ante/testutil_test.go index f81f7cb5468e..280a8a375c8d 100644 --- a/x/auth/ante/testutil_test.go +++ b/x/auth/ante/testutil_test.go @@ -6,8 +6,8 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" @@ -41,7 +41,7 @@ type AnteTestSuite struct { // returns context and app with params set on account keeper func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) return app, ctx diff --git a/x/auth/module_test.go b/x/auth/module_test.go index 849f2d15409d..0bf268ddba5c 100644 --- a/x/auth/module_test.go +++ b/x/auth/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -12,7 +13,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/auth/tx/builder_test.go b/x/auth/tx/builder_test.go index 09206f274653..a0dea1041a06 100644 --- a/x/auth/tx/builder_test.go +++ b/x/auth/tx/builder_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/std" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -47,7 +48,7 @@ func TestTxBuilder(t *testing.T) { PubKey: pubkey, Data: &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: pubkey.Bytes(), + Signature: legacy.Cdc.MustMarshalBinaryBare(pubkey), }, } @@ -106,7 +107,7 @@ func TestTxBuilder(t *testing.T) { require.Equal(t, len(msgs), len(txBuilder.GetMsgs())) require.Equal(t, 1, len(txBuilder.GetPubKeys())) - require.Equal(t, pubkey.Bytes(), txBuilder.GetPubKeys()[0].Bytes()) + require.Equal(t, legacy.Cdc.MustMarshalBinaryBare(pubkey), legacy.Cdc.MustMarshalBinaryBare(txBuilder.GetPubKeys()[0])) txBuilder = &builder{} require.NotPanics(t, func() { @@ -134,7 +135,7 @@ func TestBuilderValidateBasic(t *testing.T) { PubKey: pubKey1, Data: &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: pubKey1.Bytes(), + Signature: legacy.Cdc.MustMarshalBinaryBare(pubKey1), }, } @@ -142,7 +143,7 @@ func TestBuilderValidateBasic(t *testing.T) { PubKey: pubKey2, Data: &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: pubKey2.Bytes(), + Signature: legacy.Cdc.MustMarshalBinaryBare(pubKey2), }, } diff --git a/x/auth/types/account.go b/x/auth/types/account.go index 1e85ac8f2049..180f1053588d 100644 --- a/x/auth/types/account.go +++ b/x/auth/types/account.go @@ -75,7 +75,7 @@ func (acc *BaseAccount) SetPubKey(pubKey crypto.PubKey) error { if pubKey == nil { acc.PubKey = nil } else { - acc.PubKey = pubKey.Bytes() + acc.PubKey = amino.MustMarshalBinaryBare(pubKey) } return nil diff --git a/x/auth/types/stdtx_test.go b/x/auth/types/stdtx_test.go index 962a51ac48cd..a39102132733 100644 --- a/x/auth/types/stdtx_test.go +++ b/x/auth/types/stdtx_test.go @@ -12,6 +12,7 @@ import ( yaml "gopkg.in/yaml.v2" "github.com/cosmos/cosmos-sdk/codec" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -258,6 +259,7 @@ func TestGetSignaturesV2(t *testing.T) { cdc := codec.New() sdk.RegisterCodec(cdc) + cryptocodec.RegisterCrypto(cdc) RegisterCodec(cdc) fee := NewStdFee(50000, sdk.Coins{sdk.NewInt64Coin("atom", 150)}) @@ -268,7 +270,7 @@ func TestGetSignaturesV2(t *testing.T) { require.Nil(t, err) require.Equal(t, len(sigs), 1) - require.Equal(t, sigs[0].PubKey.Bytes(), sig.GetPubKey().Bytes()) + require.Equal(t, cdc.MustMarshalBinaryBare(sigs[0].PubKey), cdc.MustMarshalBinaryBare(sig.GetPubKey())) require.Equal(t, sigs[0].Data, &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: sig.GetSignature(), diff --git a/x/distribution/module_test.go b/x/distribution/module_test.go index f9c1cb2ce415..113622d208e9 100644 --- a/x/distribution/module_test.go +++ b/x/distribution/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/gov/client/utils/query_test.go b/x/gov/client/utils/query_test.go index 85f0983fa3db..55a652299078 100644 --- a/x/gov/client/utils/query_test.go +++ b/x/gov/client/utils/query_test.go @@ -20,8 +20,16 @@ type TxSearchMock struct { txs []tmtypes.Tx } -func (mock TxSearchMock) TxSearch(query string, prove bool, page, perPage int, orderBy string) (*ctypes.ResultTxSearch, error) { - start, end := client.Paginate(len(mock.txs), page, perPage, 100) +func (mock TxSearchMock) TxSearch(query string, prove bool, page, perPage *int, orderBy string) (*ctypes.ResultTxSearch, error) { + if page == nil { + *page = 0 + } + + if perPage == nil { + *perPage = 0 + } + + start, end := client.Paginate(len(mock.txs), *page, *perPage, 100) if start < 0 || end < 0 { // nil result with nil error crashes utils.QueryTxsByEvents return &ctypes.ResultTxSearch{}, nil diff --git a/x/gov/module_test.go b/x/gov/module_test.go index a4b44922460b..4e54c0b79af3 100644 --- a/x/gov/module_test.go +++ b/x/gov/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/ibc/02-client/client/utils/utils.go b/x/ibc/02-client/client/utils/utils.go index dbd11ac222a3..f3d4055eac86 100644 --- a/x/ibc/02-client/client/utils/utils.go +++ b/x/ibc/02-client/client/utils/utils.go @@ -58,7 +58,7 @@ func QueryClientState( return types.StateResponse{}, err } - clientStateRes := types.NewClientStateResponse(clientID, clientState, res.Proof, res.Height) + clientStateRes := types.NewClientStateResponse(clientID, clientState, res.ProofOps, res.Height) return clientStateRes, nil } @@ -86,7 +86,7 @@ func QueryConsensusState( return conStateRes, err } - return types.NewConsensusStateResponse(clientID, cs, res.Proof, res.Height), nil + return types.NewConsensusStateResponse(clientID, cs, res.ProofOps, res.Height), nil } // QueryTendermintHeader takes a client context and returns the appropriate @@ -109,7 +109,10 @@ func QueryTendermintHeader(clientCtx client.Context) (ibctmtypes.Header, int64, return ibctmtypes.Header{}, 0, err } - validators, err := node.Validators(&height, 0, 10000) + page := 0 + count := 10_000 + + validators, err := node.Validators(&height, &page, &count) if err != nil { return ibctmtypes.Header{}, 0, err } @@ -142,8 +145,11 @@ func QueryNodeConsensusState(clientCtx client.Context) (*ibctmtypes.ConsensusSta return &ibctmtypes.ConsensusState{}, 0, err } + page := 0 + count := 10_000 + nextHeight := height + 1 - nextVals, err := node.Validators(&nextHeight, 0, 10000) + nextVals, err := node.Validators(&nextHeight, &page, &count) if err != nil { return &ibctmtypes.ConsensusState{}, 0, err } diff --git a/x/ibc/02-client/keeper/keeper_test.go b/x/ibc/02-client/keeper/keeper_test.go index 5284b28c1e45..f7ced696e6ea 100644 --- a/x/ibc/02-client/keeper/keeper_test.go +++ b/x/ibc/02-client/keeper/keeper_test.go @@ -6,9 +6,8 @@ import ( "time" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" tmbytes "github.com/tendermint/tendermint/libs/bytes" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" diff --git a/x/ibc/03-connection/types/msgs_test.go b/x/ibc/03-connection/types/msgs_test.go index 6ea55060b6ad..6f272960b3b9 100644 --- a/x/ibc/03-connection/types/msgs_test.go +++ b/x/ibc/03-connection/types/msgs_test.go @@ -49,7 +49,7 @@ func (suite *MsgTestSuite) SetupTest() { Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{Proof: res.Proof} + merkleProof := commitmenttypes.MerkleProof{Proof: res.ProofOps} proof, err := app.AppCodec().MarshalBinaryBare(&merkleProof) suite.NoError(err) diff --git a/x/ibc/04-channel/types/msgs_test.go b/x/ibc/04-channel/types/msgs_test.go index bcd0aba614b2..d886213b3e99 100644 --- a/x/ibc/04-channel/types/msgs_test.go +++ b/x/ibc/04-channel/types/msgs_test.go @@ -90,7 +90,7 @@ func (suite *MsgTestSuite) SetupTest() { Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{Proof: res.Proof} + merkleProof := commitmenttypes.MerkleProof{Proof: res.ProofOps} proof, err := app.AppCodec().MarshalBinaryBare(&merkleProof) suite.NoError(err) diff --git a/x/ibc/07-tendermint/client/cli/tx.go b/x/ibc/07-tendermint/client/cli/tx.go index 3772d9a70983..83346c5e860f 100644 --- a/x/ibc/07-tendermint/client/cli/tx.go +++ b/x/ibc/07-tendermint/client/cli/tx.go @@ -9,10 +9,7 @@ import ( ics23 "github.com/confio/ics23/go" "github.com/pkg/errors" - "github.com/spf13/cobra" - - tmmath "github.com/tendermint/tendermint/libs/math" "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/client" diff --git a/x/ibc/07-tendermint/misbehaviour.go b/x/ibc/07-tendermint/misbehaviour.go index 6e4f45a7d295..09778eb23e71 100644 --- a/x/ibc/07-tendermint/misbehaviour.go +++ b/x/ibc/07-tendermint/misbehaviour.go @@ -123,15 +123,13 @@ func checkMisbehaviour( // - ValidatorSet must have 2/3 similarity with trusted FromValidatorSet // - ValidatorSets on both headers are valid given the last trusted ValidatorSet if err := evidence.Header1.TrustedValidators.VerifyCommitLightTrusting( - evidence.ChainID, evidence.Header1.Commit.BlockID, evidence.Header1.Height, - evidence.Header1.Commit, clientState.TrustLevel.ToTendermint(), + evidence.ChainID, evidence.Header1.Commit, clientState.TrustLevel.ToTendermint(), ); err != nil { return sdkerrors.Wrapf(clienttypes.ErrInvalidEvidence, "validator set in header 1 has too much change from trusted validator set: %v", err) } if err := evidence.Header2.TrustedValidators.VerifyCommitLightTrusting( - evidence.ChainID, evidence.Header2.Commit.BlockID, evidence.Header2.Height, - evidence.Header2.Commit, clientState.TrustLevel.ToTendermint(), + evidence.ChainID, evidence.Header2.Commit, clientState.TrustLevel.ToTendermint(), ); err != nil { return sdkerrors.Wrapf(clienttypes.ErrInvalidEvidence, "validator set in header 2 has too much change from trusted validator set: %v", err) } diff --git a/x/ibc/07-tendermint/types/client_state.go b/x/ibc/07-tendermint/types/client_state.go index 52e6eb487f24..52b1a84069fb 100644 --- a/x/ibc/07-tendermint/types/client_state.go +++ b/x/ibc/07-tendermint/types/client_state.go @@ -5,7 +5,6 @@ import ( "time" ics23 "github.com/confio/ics23/go" - tmmath "github.com/tendermint/tendermint/libs/math" "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/codec" diff --git a/x/ibc/07-tendermint/types/client_state_test.go b/x/ibc/07-tendermint/types/client_state_test.go index beb61e96aa99..729e919f3d19 100644 --- a/x/ibc/07-tendermint/types/client_state_test.go +++ b/x/ibc/07-tendermint/types/client_state_test.go @@ -2,8 +2,6 @@ package types_test import ( ics23 "github.com/confio/ics23/go" - tmmath "github.com/tendermint/tendermint/libs/math" - "github.com/tendermint/tendermint/light" connectiontypes "github.com/cosmos/cosmos-sdk/x/ibc/03-connection/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/types" @@ -58,15 +56,11 @@ func (suite *TendermintTestSuite) TestValidate() { }, { name: "invalid height", - clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()), - { clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "proof specs is nil", - clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, nil), - { clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, []*ics23.ProofSpec{ics23.TendermintSpec, nil}), expPass: false, }, diff --git a/x/ibc/07-tendermint/types/evidence_test.go b/x/ibc/07-tendermint/types/evidence_test.go index 9e99b3bed02b..757dfdf72f79 100644 --- a/x/ibc/07-tendermint/types/evidence_test.go +++ b/x/ibc/07-tendermint/types/evidence_test.go @@ -6,6 +6,7 @@ import ( "github.com/tendermint/tendermint/crypto/tmhash" tmbytes "github.com/tendermint/tendermint/libs/bytes" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" @@ -161,7 +162,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() { }, func(ev *ibctmtypes.Evidence) error { // voteSet contains only altVal which is less than 2/3 of total power (height/1height) - wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header1.Height, 1, tmtypes.PrecommitType, altValSet) + wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header1.Height, 1, tmproto.PrecommitType, altValSet) var err error ev.Header1.Commit, err = tmtypes.MakeCommit(ev.Header1.Commit.BlockID, ev.Header2.Height, ev.Header1.Commit.Round, wrongVoteSet, altSigners, suite.now) return err @@ -178,7 +179,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() { }, func(ev *ibctmtypes.Evidence) error { // voteSet contains only altVal which is less than 2/3 of total power (height/1height) - wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header2.Height, 1, tmtypes.PrecommitType, altValSet) + wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header2.Height, 1, tmproto.PrecommitType, altValSet) var err error ev.Header2.Commit, err = tmtypes.MakeCommit(ev.Header2.Commit.BlockID, ev.Header2.Height, ev.Header2.Commit.Round, wrongVoteSet, altSigners, suite.now) return err diff --git a/x/ibc/07-tendermint/types/fraction.go b/x/ibc/07-tendermint/types/fraction.go index e12e184c56a5..e445f19ba6f8 100644 --- a/x/ibc/07-tendermint/types/fraction.go +++ b/x/ibc/07-tendermint/types/fraction.go @@ -2,11 +2,11 @@ package types import ( tmmath "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" ) // DefaultTrustLevel is the tendermint light client default trust level -var DefaultTrustLevel = NewFractionFromTm(lite.DefaultTrustLevel) +var DefaultTrustLevel = NewFractionFromTm(light.DefaultTrustLevel) // NewFractionFromTm returns a new Fraction instance from a tmmath.Fraction func NewFractionFromTm(f tmmath.Fraction) Fraction { diff --git a/x/ibc/07-tendermint/types/msgs_test.go b/x/ibc/07-tendermint/types/msgs_test.go index af342523a233..8c516ec28791 100644 --- a/x/ibc/07-tendermint/types/msgs_test.go +++ b/x/ibc/07-tendermint/types/msgs_test.go @@ -3,8 +3,6 @@ package types_test import ( ics23 "github.com/confio/ics23/go" "github.com/tendermint/tendermint/crypto/secp256k1" - "github.com/tendermint/tendermint/libs/math" - "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index 75412786a174..9370cc206974 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -13,11 +13,9 @@ import ( "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/secp256k1" "github.com/tendermint/tendermint/crypto/tmhash" - tmmath "github.com/tendermint/tendermint/libs/math" - "github.com/tendermint/tendermint/light" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/tendermint/tendermint/proto/tendermint/version" tmtypes "github.com/tendermint/tendermint/types" - "github.com/tendermint/tendermint/version" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/simapp" @@ -49,8 +47,6 @@ const ( InvalidID = "IDisInvalid" ConnectionIDPrefix = "connectionid" - - maxInt = int(^uint(0) >> 1) ) // Default params variables used to create a TM client @@ -165,7 +161,7 @@ func (chain *TestChain) QueryProof(key []byte) ([]byte, uint64) { }) merkleProof := commitmenttypes.MerkleProof{ - Proof: res.Proof, + Proof: res.ProofOps, } proof, err := chain.App.AppCodec().MarshalBinaryBare(&merkleProof) @@ -398,7 +394,7 @@ func (chain *TestChain) CreateTMClientHeader() ibctmtypes.Header { ChainID: chain.ChainID, Height: chain.CurrentHeader.Height, Time: chain.CurrentHeader.Time, - LastBlockID: MakeBlockID(make([]byte, tmhash.Size), maxInt, make([]byte, tmhash.Size)), + LastBlockID: MakeBlockID(make([]byte, tmhash.Size), 10_000, make([]byte, tmhash.Size)), LastCommitHash: chain.App.LastCommitID().Hash, DataHash: tmhash.Sum([]byte("data_hash")), ValidatorsHash: vsetHash, @@ -413,7 +409,7 @@ func (chain *TestChain) CreateTMClientHeader() ibctmtypes.Header { blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) - voteSet := tmtypes.NewVoteSet(chain.ChainID, chain.CurrentHeader.Height, 1, tmtypes.PrecommitType, chain.Vals) + voteSet := tmtypes.NewVoteSet(chain.ChainID, chain.CurrentHeader.Height, 1, tmproto.PrecommitType, chain.Vals) commit, err := tmtypes.MakeCommit(blockID, chain.CurrentHeader.Height, 1, voteSet, chain.Signers, chain.CurrentHeader.Time) require.NoError(chain.t, err) @@ -432,10 +428,10 @@ func (chain *TestChain) CreateTMClientHeader() ibctmtypes.Header { } // MakeBlockID copied unimported test functions from tmtypes to use them here -func MakeBlockID(hash []byte, partSetSize int, partSetHash []byte) tmtypes.BlockID { +func MakeBlockID(hash []byte, partSetSize uint32, partSetHash []byte) tmtypes.BlockID { return tmtypes.BlockID{ Hash: hash, - PartsHeader: tmtypes.PartSetHeader{ + PartSetHeader: tmtypes.PartSetHeader{ Total: partSetSize, Hash: partSetHash, }, diff --git a/x/mint/module_test.go b/x/mint/module_test.go index 92e22d4986b9..3b2df369e661 100644 --- a/x/mint/module_test.go +++ b/x/mint/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index 6b4a33e43e48..efc8395d5a11 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/secp256k1" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -20,6 +21,9 @@ import ( var ( priv1 = secp256k1.GenPrivKey() addr1 = sdk.AccAddress(priv1.PubKey().Address()) + + valKey = ed25519.GenPrivKey() + valAddr = sdk.AccAddress(valKey.PubKey().Address()) ) func checkValidator(t *testing.T, app *simapp.SimApp, _ sdk.AccAddress, expFound bool) stakingtypes.Validator { @@ -60,7 +64,7 @@ func TestSlashingMsgs(t *testing.T) { commission := stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) createValidatorMsg := stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(addr1), priv1.PubKey(), bondCoin, description, commission, sdk.OneInt(), + sdk.ValAddress(valAddr), valKey.PubKey(), bondCoin, description, commission, sdk.OneInt(), ) header := tmproto.Header{Height: app.LastBlockHeight() + 1} @@ -73,7 +77,7 @@ func TestSlashingMsgs(t *testing.T) { app.BeginBlock(abci.RequestBeginBlock{Header: header}) validator := checkValidator(t, app, addr1, true) - require.Equal(t, sdk.ValAddress(addr1), validator.OperatorAddress) + require.Equal(t, sdk.ValAddress(valAddr), validator.OperatorAddress) require.Equal(t, sdk.Bonded, validator.Status) require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) unjailMsg := &types.MsgUnjail{ValidatorAddr: sdk.ValAddress(validator.GetConsPubKey().Address())} diff --git a/x/slashing/genesis_test.go b/x/slashing/genesis_test.go index 0eb40070b8f1..8b9b9a4639c5 100644 --- a/x/slashing/genesis_test.go +++ b/x/slashing/genesis_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( func TestExportAndInitGenesis(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) diff --git a/x/staking/app_test.go b/x/staking/app_test.go index 062413ee978c..be924def67c9 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -66,7 +66,7 @@ func TestStakingMsgs(t *testing.T) { // create validator description := types.NewDescription("foo_moniker", "", "", "", "") createValidatorMsg := types.NewMsgCreateValidator( - sdk.ValAddress(addr1), priv1.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(), + sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(), ) header := tmproto.Header{Height: app.LastBlockHeight() + 1} @@ -78,8 +78,8 @@ func TestStakingMsgs(t *testing.T) { header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) - validator := checkValidator(t, app, sdk.ValAddress(addr1), true) - require.Equal(t, sdk.ValAddress(addr1), validator.OperatorAddress) + validator := checkValidator(t, app, sdk.ValAddress(valAddr), true) + require.Equal(t, sdk.ValAddress(valAddr), validator.OperatorAddress) require.Equal(t, sdk.Bonded, validator.Status) require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) @@ -88,34 +88,34 @@ func TestStakingMsgs(t *testing.T) { // edit the validator description = types.NewDescription("bar_moniker", "", "", "", "") - editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil) + editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(valAddr), description, nil, nil) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{editValidatorMsg}, []uint64{0}, []uint64{1}, true, true, priv1) require.NoError(t, err) - validator = checkValidator(t, app, sdk.ValAddress(addr1), true) + validator = checkValidator(t, app, sdk.ValAddress(valAddr), true) require.Equal(t, description, validator.Description) // delegate simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin}) - delegateMsg := types.NewMsgDelegate(addr2, sdk.ValAddress(addr1), bondCoin) + delegateMsg := types.NewMsgDelegate(addr2, sdk.ValAddress(valAddr), bondCoin) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{delegateMsg}, []uint64{1}, []uint64{0}, true, true, priv2) require.NoError(t, err) simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin.Sub(bondCoin)}) - checkDelegation(t, app, addr2, sdk.ValAddress(addr1), true, bondTokens.ToDec()) + checkDelegation(t, app, addr2, sdk.ValAddress(valAddr), true, bondTokens.ToDec()) // begin unbonding - beginUnbondingMsg := types.NewMsgUndelegate(addr2, sdk.ValAddress(addr1), bondCoin) + beginUnbondingMsg := types.NewMsgUndelegate(addr2, sdk.ValAddress(valAddr), bondCoin) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{beginUnbondingMsg}, []uint64{1}, []uint64{1}, true, true, priv2) require.NoError(t, err) // delegation should exist anymore - checkDelegation(t, app, addr2, sdk.ValAddress(addr1), false, sdk.Dec{}) + checkDelegation(t, app, addr2, sdk.ValAddress(valAddr), false, sdk.Dec{}) // balance should be the same because bonding not yet complete simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin.Sub(bondCoin)}) diff --git a/x/staking/common_test.go b/x/staking/common_test.go index e552bf0c8bcf..c5567c99847d 100644 --- a/x/staking/common_test.go +++ b/x/staking/common_test.go @@ -2,6 +2,7 @@ package staking_test import ( "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/secp256k1" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -19,6 +20,9 @@ var ( priv2 = secp256k1.GenPrivKey() addr2 = sdk.AccAddress(priv2.PubKey().Address()) + valKey = ed25519.GenPrivKey() + valAddr = sdk.AccAddress(valKey.PubKey().Address()) + commissionRates = types.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) PKs = simapp.CreateTestPubKeys(500) diff --git a/x/staking/handler.go b/x/staking/handler.go index 43dd7441fecf..8159365fa035 100644 --- a/x/staking/handler.go +++ b/x/staking/handler.go @@ -6,7 +6,6 @@ import ( metrics "github.com/armon/go-metrics" gogotypes "github.com/gogo/protobuf/types" tmstrings "github.com/tendermint/tendermint/libs/strings" - tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" @@ -70,12 +69,10 @@ func handleMsgCreateValidator(ctx sdk.Context, msg *types.MsgCreateValidator, k cp := ctx.ConsensusParams() if cp != nil && cp.Validator != nil { - tmPubKey := tmtypes.TM2PB.PubKey(pk) - - if !tmstrings.StringInSlice(tmPubKey.Type, cp.Validator.PubKeyTypes) { + if !tmstrings.StringInSlice(pk.Type(), cp.Validator.PubKeyTypes) { return nil, sdkerrors.Wrapf( types.ErrValidatorPubKeyTypeNotSupported, - "got: %s, expected: %s", tmPubKey.Type, cp.Validator.PubKeyTypes, + "got: %s, expected: %s", pk.Type(), cp.Validator.PubKeyTypes, ) } } diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go index 97132af98336..2e9f6f51ae2f 100644 --- a/x/staking/handler_test.go +++ b/x/staking/handler_test.go @@ -195,7 +195,7 @@ func TestInvalidPubKeyTypeMsgCreateValidator(t *testing.T) { app, ctx, _, valAddrs := bootstrapHandlerGenesisTest(t, 1000, 1, 1000) handler := staking.NewHandler(app.StakingKeeper) ctx = ctx.WithConsensusParams(&abci.ConsensusParams{ - Validator: &abci.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeEd25519}}, + Validator: &tmproto.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeEd25519}}, }) addr := valAddrs[0] @@ -206,14 +206,6 @@ func TestInvalidPubKeyTypeMsgCreateValidator(t *testing.T) { res, err := handler(ctx, msgCreateValidator) require.Error(t, err) require.Nil(t, res) - - ctx = ctx.WithConsensusParams(&abci.ConsensusParams{ - Validator: &abci.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeSecp256k1}}, - }) - - res, err = handler(ctx, msgCreateValidator) - require.NoError(t, err) - require.NotNil(t, res) } func TestLegacyValidatorDelegations(t *testing.T) { diff --git a/x/staking/keeper/slash_test.go b/x/staking/keeper/slash_test.go index 6b96e43b0a53..7eb277b41a26 100644 --- a/x/staking/keeper/slash_test.go +++ b/x/staking/keeper/slash_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/staking/module_test.go b/x/staking/module_test.go index fa7cf6a83f63..b1d126d0c38a 100644 --- a/x/staking/module_test.go +++ b/x/staking/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/staking/types/historical_info_test.go b/x/staking/types/historical_info_test.go index 91a47f554cb5..e37ca88218b5 100644 --- a/x/staking/types/historical_info_test.go +++ b/x/staking/types/historical_info_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) var ( diff --git a/x/staking/types/validator_test.go b/x/staking/types/validator_test.go index e914a87e8792..c4714c1f5374 100644 --- a/x/staking/types/validator_test.go +++ b/x/staking/types/validator_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/ed25519" + cryptoenc "github.com/tendermint/tendermint/crypto/encoding" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec/legacy" @@ -61,7 +62,9 @@ func TestABCIValidatorUpdate(t *testing.T) { validator := NewValidator(valAddr1, pk1, Description{}) abciVal := validator.ABCIValidatorUpdate() - require.Equal(t, tmtypes.TM2PB.PubKey(validator.GetConsPubKey()), abciVal.PubKey) + pk, err := cryptoenc.PubKeyToProto(validator.GetConsPubKey()) + require.NoError(t, err) + require.Equal(t, pk, abciVal.PubKey) require.Equal(t, validator.BondedTokens().Int64(), abciVal.Power) } @@ -69,7 +72,9 @@ func TestABCIValidatorUpdateZero(t *testing.T) { validator := NewValidator(valAddr1, pk1, Description{}) abciVal := validator.ABCIValidatorUpdateZero() - require.Equal(t, tmtypes.TM2PB.PubKey(validator.GetConsPubKey()), abciVal.PubKey) + pk, err := cryptoenc.PubKeyToProto(validator.GetConsPubKey()) + require.NoError(t, err) + require.Equal(t, pk, abciVal.PubKey) require.Equal(t, int64(0), abciVal.Power) } diff --git a/x/upgrade/keeper/grpc_query_test.go b/x/upgrade/keeper/grpc_query_test.go index 470f22420acb..d307157402de 100644 --- a/x/upgrade/keeper/grpc_query_test.go +++ b/x/upgrade/keeper/grpc_query_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/stretchr/testify/suite" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" diff --git a/x/upgrade/types/storeloader_test.go b/x/upgrade/types/storeloader_test.go index fa7742133e67..7fd147013e55 100644 --- a/x/upgrade/types/storeloader_test.go +++ b/x/upgrade/types/storeloader_test.go @@ -10,6 +10,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/baseapp" From b37f69d238cf1276da1d32ed611ba212ef6ad79f Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Thu, 6 Aug 2020 20:56:24 +0200 Subject: [PATCH 11/18] bump to latest master --- go.mod | 2 +- go.sum | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index c0b4e688d6a2..2e6493a760ed 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ require ( github.com/tendermint/btcd v0.1.1 github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 - github.com/tendermint/tendermint v0.34.0-rc2 + github.com/tendermint/tendermint v0.34.0-rc2.0.20200806175020-3413a0dbd8c3 github.com/tendermint/tm-db v0.6.0 google.golang.org/grpc v1.31.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index ba7023f8ef2b..129de11a013a 100644 --- a/go.sum +++ b/go.sum @@ -487,8 +487,9 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.15.1 h1:D2uk35eT4iTsvJd9jWIetzthE5C0/k2QmMFkCN+4JgQ= github.com/tendermint/go-amino v0.15.1/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.0-rc2 h1:kYyHum2Ys05qv0i5j/X47icRSO1zVbQrvVK6hjllQnY= github.com/tendermint/tendermint v0.34.0-rc2/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= +github.com/tendermint/tendermint v0.34.0-rc2.0.20200806175020-3413a0dbd8c3 h1:kiV2No1WgLdtz1qXiVCMkPX1uA66o/fbQyyVDtBXXOQ= +github.com/tendermint/tendermint v0.34.0-rc2.0.20200806175020-3413a0dbd8c3/go.mod h1:CGdv8jV1jV96tRRkvjQqh3ddnxO2ffaB5B1OFIOv1YM= github.com/tendermint/tm-db v0.6.0 h1:Us30k7H1UDcdqoSPhmP8ztAW/SWV6c6OfsfeCiboTC4= github.com/tendermint/tm-db v0.6.0/go.mod h1:xj3AWJ08kBDlCHKijnhJ7mTcDMOikT1r8Poxy2pJn7Q= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= From 82f0abcc1a1ddb6870f10a7ca92277e2054c6782 Mon Sep 17 00:00:00 2001 From: Marko Date: Fri, 14 Aug 2020 10:16:15 +0200 Subject: [PATCH 12/18] tendermint: update (#6972) Co-authored-by: Aleksandr Bezobchuk Co-authored-by: Cory Levinson --- baseapp/abci.go | 4 +- baseapp/params.go | 8 ++ baseapp/params_test.go | 6 +- client/keys/show_test.go | 2 +- crypto/keyring/keyring_ledger_test.go | 4 +- crypto/keyring/keyring_test.go | 10 +- crypto/ledger/ledger_test.go | 6 +- crypto/types/multisig/threshold_pubkey.go | 6 +- go.mod | 4 +- go.sum | 30 ++++- server/export.go | 6 +- simapp/state.go | 2 +- store/internal/maps/maps_test.go | 4 +- .../adr-024-coin-metadata_genesis.json | 109 ++++++++++-------- types/simulation/account.go | 6 +- x/auth/signing/verify.go | 2 +- x/genutil/utils_test.go | 2 +- x/ibc/02-client/keeper/client_test.go | 12 +- x/ibc/07-tendermint/misbehaviour_test.go | 14 +-- x/ibc/07-tendermint/types/evidence_test.go | 13 +-- x/ibc/07-tendermint/types/test_utils.go | 22 ++++ x/ibc/07-tendermint/update_test.go | 13 +-- x/ibc/genesis_test.go | 5 +- x/simulation/mock_tendermint.go | 23 ++-- x/simulation/simulate.go | 9 +- x/slashing/app_test.go | 8 +- x/staking/app_test.go | 16 +-- x/staking/simulation/genesis.go | 2 +- x/staking/simulation/genesis_test.go | 2 +- x/staking/simulation/operations.go | 3 +- x/staking/simulation/operations_test.go | 2 +- 31 files changed, 195 insertions(+), 160 deletions(-) diff --git a/baseapp/abci.go b/baseapp/abci.go index 1778f572d376..6c662862931f 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -57,8 +57,8 @@ func (app *BaseApp) InitChain(req abci.RequestInitChain) (res abci.ResponseInitC sort.Sort(abci.ValidatorUpdates(req.Validators)) sort.Sort(abci.ValidatorUpdates(res.Validators)) - for i, val := range res.Validators { - if proto.Equal(&val, &req.Validators[i]) { + for i := range res.Validators { + if proto.Equal(&res.Validators[i], &req.Validators[i]) { panic(fmt.Errorf("genesisValidators[%d] != req.Validators[%d] ", i, i)) } } diff --git a/baseapp/params.go b/baseapp/params.go index a49145fb1418..7dd1d526ccdf 100644 --- a/baseapp/params.go +++ b/baseapp/params.go @@ -63,6 +63,14 @@ func ValidateEvidenceParams(i interface{}) error { return fmt.Errorf("evidence maximum age time duration must be positive: %v", v.MaxAgeDuration) } + if v.MaxNum <= 0 { + return fmt.Errorf("evidence maximum number of evidence must be positive: %v", v.MaxAgeDuration) + } + + if v.ProofTrialPeriod <= 0 { + return fmt.Errorf("proof of trial period must be greater than 0: %v", v.MaxAgeDuration) + } + return nil } diff --git a/baseapp/params_test.go b/baseapp/params_test.go index a3265a86bcb9..1d6c7b9090a6 100644 --- a/baseapp/params_test.go +++ b/baseapp/params_test.go @@ -36,9 +36,9 @@ func TestValidateEvidenceParams(t *testing.T) { {nil, true}, {&tmproto.EvidenceParams{}, true}, {tmproto.EvidenceParams{}, true}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: -1, MaxAgeDuration: 18004000}, true}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: -1}, true}, - {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000}, false}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: -1, MaxAgeDuration: 18004000, MaxNum: 50, ProofTrialPeriod: 10_000}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000, MaxNum: 50, ProofTrialPeriod: -1}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000, MaxNum: 50, ProofTrialPeriod: 50_0000}, false}, } for _, tc := range testCases { diff --git a/client/keys/show_test.go b/client/keys/show_test.go index 6e367b3ad911..dc102c97280b 100644 --- a/client/keys/show_test.go +++ b/client/keys/show_test.go @@ -18,7 +18,7 @@ import ( ) func Test_multiSigKey_Properties(t *testing.T) { - tmpKey1 := secp256k1.GenPrivKeySecp256k1([]byte("mySecret")) + tmpKey1 := secp256k1.GenPrivKeyFromSecret([]byte("mySecret")) pk := multisig.NewPubKeyMultisigThreshold(1, []crypto.PubKey{tmpKey1.PubKey()}) tmp := keyring.NewMultiInfo("myMultisig", pk) diff --git a/crypto/keyring/keyring_ledger_test.go b/crypto/keyring/keyring_ledger_test.go index e94ba395aaaa..dd193d9d5002 100644 --- a/crypto/keyring/keyring_ledger_test.go +++ b/crypto/keyring/keyring_ledger_test.go @@ -77,8 +77,8 @@ func TestSignVerifyKeyRingWithLedger(t *testing.T) { require.Equal(t, i1.GetPubKey(), pub1) require.Equal(t, i1.GetPubKey(), pub2) - require.True(t, pub1.VerifyBytes(d1, s1)) - require.True(t, i1.GetPubKey().VerifyBytes(d1, s1)) + require.True(t, pub1.VerifySignature(d1, s1)) + require.True(t, i1.GetPubKey().VerifySignature(d1, s1)) require.True(t, bytes.Equal(s1, s2)) localInfo, _, err := kb.NewMnemonic("test", English, types.FullFundraiserPath, hd.Secp256k1) diff --git a/crypto/keyring/keyring_test.go b/crypto/keyring/keyring_test.go index 4b63b1efd3f7..918eb5e5e0fe 100644 --- a/crypto/keyring/keyring_test.go +++ b/crypto/keyring/keyring_test.go @@ -188,7 +188,7 @@ func TestSignVerifyKeyRing(t *testing.T) { } for i, tc := range cases { - valid := tc.key.VerifyBytes(tc.data, tc.sig) + valid := tc.key.VerifySignature(tc.data, tc.sig) require.Equal(t, tc.valid, valid, "%d", i) } @@ -549,7 +549,7 @@ func TestInMemorySignVerify(t *testing.T) { } for i, tc := range cases { - valid := tc.key.VerifyBytes(tc.data, tc.sig) + valid := tc.key.VerifySignature(tc.data, tc.sig) require.Equal(t, tc.valid, valid, "%d", i) } @@ -788,7 +788,7 @@ func ExampleNew() { if pub.Equals(binfo.GetPubKey()) { fmt.Println("signed by Bob") } - if !pub.VerifyBytes(tx, sig) { + if !pub.VerifySignature(tx, sig) { fmt.Println("invalid signature") } @@ -1008,7 +1008,7 @@ func TestAltKeyring_Sign(t *testing.T) { sign, key, err := keyring.Sign(uid, msg) require.NoError(t, err) - require.True(t, key.VerifyBytes(msg, sign)) + require.True(t, key.VerifySignature(msg, sign)) } func TestAltKeyring_SignByAddress(t *testing.T) { @@ -1027,7 +1027,7 @@ func TestAltKeyring_SignByAddress(t *testing.T) { sign, key, err := keyring.SignByAddress(mnemonic.GetAddress(), msg) require.NoError(t, err) - require.True(t, key.VerifyBytes(msg, sign)) + require.True(t, key.VerifySignature(msg, sign)) } func TestAltKeyring_ImportExportPrivKey(t *testing.T) { diff --git a/crypto/ledger/ledger_test.go b/crypto/ledger/ledger_test.go index 37869fa67654..9b21e464bcdb 100644 --- a/crypto/ledger/ledger_test.go +++ b/crypto/ledger/ledger_test.go @@ -219,7 +219,7 @@ func TestSignaturesHD(t *testing.T) { sig, err := priv.Sign(msg) require.Nil(t, err) - valid := pub.VerifyBytes(msg, sig) + valid := pub.VerifySignature(msg, sig) require.True(t, valid, "Is your device using test mnemonic: %s ?", testutil.TestMnemonic) } } @@ -234,7 +234,7 @@ func TestRealDeviceSecp256k1(t *testing.T) { sig, err := priv.Sign(msg) require.Nil(t, err) - valid := pub.VerifyBytes(msg, sig) + valid := pub.VerifySignature(msg, sig) require.True(t, valid) // now, let's serialize the public key and make sure it still works @@ -248,7 +248,7 @@ func TestRealDeviceSecp256k1(t *testing.T) { // signing with the loaded key should match the original pubkey sig, err = priv.Sign(msg) require.Nil(t, err) - valid = pub.VerifyBytes(msg, sig) + valid = pub.VerifySignature(msg, sig) require.True(t, valid) // make sure pubkeys serialize properly as well diff --git a/crypto/types/multisig/threshold_pubkey.go b/crypto/types/multisig/threshold_pubkey.go index d89b2dadc255..1c5cabf72f09 100644 --- a/crypto/types/multisig/threshold_pubkey.go +++ b/crypto/types/multisig/threshold_pubkey.go @@ -42,7 +42,7 @@ func NewPubKeyMultisigThreshold(k int, pubkeys []crypto.PubKey) PubKey { // // NOTE: VerifyMultisignature should preferred to VerifyBytes which only works // with amino multisignatures. -func (pk PubKeyMultisigThreshold) VerifyBytes(msg []byte, marshalledSig []byte) bool { +func (pk PubKeyMultisigThreshold) VerifySignature(msg []byte, marshalledSig []byte) bool { var sig AminoMultisignature err := Cdc.UnmarshalBinaryBare(marshalledSig, &sig) if err != nil { @@ -65,7 +65,7 @@ func (pk PubKeyMultisigThreshold) VerifyBytes(msg []byte, marshalledSig []byte) sigIndex := 0 for i := 0; i < size; i++ { if sig.BitArray.GetIndex(i) { - if !pk.PubKeys[i].VerifyBytes(msg, sig.Sigs[sigIndex]) { + if !pk.PubKeys[i].VerifySignature(msg, sig.Sigs[sigIndex]) { return false } sigIndex++ @@ -102,7 +102,7 @@ func (pk PubKeyMultisigThreshold) VerifyMultisignature(getSignBytes GetSignBytes if err != nil { return err } - if !pk.PubKeys[i].VerifyBytes(msg, si.Signature) { + if !pk.PubKeys[i].VerifySignature(msg, si.Signature) { return err } case *signing.MultiSignatureData: diff --git a/go.mod b/go.mod index 2bdb7381932f..506e92b8929c 100644 --- a/go.mod +++ b/go.mod @@ -36,8 +36,8 @@ require ( github.com/tendermint/btcd v0.1.1 github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 - github.com/tendermint/tendermint v0.34.0-rc2.0.20200806175020-3413a0dbd8c3 - github.com/tendermint/tm-db v0.6.0 + github.com/tendermint/tendermint v0.34.0-rc3 + github.com/tendermint/tm-db v0.6.1 google.golang.org/grpc v1.31.0 google.golang.org/protobuf v1.25.0 gopkg.in/yaml.v2 v2.3.0 diff --git a/go.sum b/go.sum index 4a14c4fc487c..1e848d1d808f 100644 --- a/go.sum +++ b/go.sum @@ -19,7 +19,10 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= +github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= @@ -88,6 +91,7 @@ github.com/confio/ics23/go v0.0.0-20200804135932-65ad804e8539/go.mod h1:E45Nqnlp github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -102,6 +106,7 @@ github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6 github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -111,9 +116,17 @@ github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgraph-io/badger/v2 v2.0.3 h1:inzdf6VF/NZ+tJ8RwwYMjJMvsOALTHYdozn0qSl6XJI= +github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= +github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3 h1:MQLRM35Pp0yAyBYksjbj1nZI/w6eyRY/mWoM1sFf4kU= +github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dvsekhvalnov/jose2go v0.0.0-20180829124132-7f401d37b68a h1:mq+R6XEM6lJX5VlLyZIrUSP8tSuJp82xTK89hvBwJbU= github.com/dvsekhvalnov/jose2go v0.0.0-20180829124132-7f401d37b68a/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= @@ -433,6 +446,7 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -451,6 +465,8 @@ github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPH github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= @@ -458,6 +474,7 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -467,6 +484,7 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= @@ -496,14 +514,19 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM github.com/tendermint/go-amino v0.15.1 h1:D2uk35eT4iTsvJd9jWIetzthE5C0/k2QmMFkCN+4JgQ= github.com/tendermint/go-amino v0.15.1/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.0-rc2/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= -github.com/tendermint/tendermint v0.34.0-rc2.0.20200806175020-3413a0dbd8c3 h1:kiV2No1WgLdtz1qXiVCMkPX1uA66o/fbQyyVDtBXXOQ= -github.com/tendermint/tendermint v0.34.0-rc2.0.20200806175020-3413a0dbd8c3/go.mod h1:CGdv8jV1jV96tRRkvjQqh3ddnxO2ffaB5B1OFIOv1YM= +github.com/tendermint/tendermint v0.34.0-rc2.0.20200812132357-b1b82c493a9c h1:Etao0mhX+apc+ka6Zs4mJvDUrkictXT6O/eINkZ/oKk= +github.com/tendermint/tendermint v0.34.0-rc2.0.20200812132357-b1b82c493a9c/go.mod h1:BoHcEpjfpBHc1Be7RQz3AHaXFNObcDG7SNHCev6Or4g= +github.com/tendermint/tendermint v0.34.0-rc3 h1:d7Fsd5rdbxq4GmJ0kRfx7l7LesQM7e70f0ytWLTQ/Go= +github.com/tendermint/tendermint v0.34.0-rc3/go.mod h1:BoHcEpjfpBHc1Be7RQz3AHaXFNObcDG7SNHCev6Or4g= github.com/tendermint/tm-db v0.6.0 h1:Us30k7H1UDcdqoSPhmP8ztAW/SWV6c6OfsfeCiboTC4= github.com/tendermint/tm-db v0.6.0/go.mod h1:xj3AWJ08kBDlCHKijnhJ7mTcDMOikT1r8Poxy2pJn7Q= +github.com/tendermint/tm-db v0.6.1 h1:w3X87itMPXopcRPlFiqspEKhw4FXihPk2rnFFkP0zGk= +github.com/tendermint/tm-db v0.6.1/go.mod h1:m3x9kRP4UFd7JODJL0yBAZqE7wTw+S37uAE90cTx7OA= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -531,6 +554,7 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -601,6 +625,7 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -610,6 +635,7 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/server/export.go b/server/export.go index b829baf03775..d54a859addf2 100644 --- a/server/export.go +++ b/server/export.go @@ -83,8 +83,10 @@ func ExportCmd(appExporter types.AppExporter, defaultNodeHome string) *cobra.Com TimeIotaMs: doc.ConsensusParams.Block.TimeIotaMs, }, Evidence: tmproto.EvidenceParams{ - MaxAgeNumBlocks: cp.Evidence.MaxAgeNumBlocks, - MaxAgeDuration: cp.Evidence.MaxAgeDuration, + MaxAgeNumBlocks: cp.Evidence.MaxAgeNumBlocks, + MaxAgeDuration: cp.Evidence.MaxAgeDuration, + MaxNum: cp.Evidence.MaxNum, + ProofTrialPeriod: cp.Evidence.ProofTrialPeriod, }, Validator: tmproto.ValidatorParams{ PubKeyTypes: cp.Validator.PubKeyTypes, diff --git a/simapp/state.go b/simapp/state.go index 9d646461c43f..54629441c3dd 100644 --- a/simapp/state.go +++ b/simapp/state.go @@ -152,7 +152,7 @@ func AppStateFromGenesisFileFn(r io.Reader, cdc codec.JSONMarshaler, genesisFile panic(err) } - privKey := secp256k1.GenPrivKeySecp256k1(privkeySeed) + privKey := secp256k1.GenPrivKeyFromSecret(privkeySeed) a, ok := acc.GetCachedValue().(authtypes.AccountI) if !ok { diff --git a/store/internal/maps/maps_test.go b/store/internal/maps/maps_test.go index 14754f008dea..8f6b1163eaec 100644 --- a/store/internal/maps/maps_test.go +++ b/store/internal/maps/maps_test.go @@ -18,7 +18,7 @@ func TestMerkleMap(t *testing.T) { values []string // each string gets converted to []byte in test want string }{ - {[]string{}, []string{}, ""}, + {[]string{}, []string{}, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {[]string{"key1"}, []string{"value1"}, "a44d3cc7daba1a4600b00a2434b30f8b970652169810d6dfa9fb1793a2189324"}, {[]string{"key1"}, []string{"value2"}, "0638e99b3445caec9d95c05e1a3fc1487b4ddec6a952ff337080360b0dcc078c"}, // swap order with 2 keys @@ -65,7 +65,7 @@ func TestSimpleMap(t *testing.T) { values []string // each string gets converted to []byte in test want string }{ - {[]string{}, []string{}, ""}, + {[]string{}, []string{}, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {[]string{"key1"}, []string{"value1"}, "a44d3cc7daba1a4600b00a2434b30f8b970652169810d6dfa9fb1793a2189324"}, {[]string{"key1"}, []string{"value2"}, "0638e99b3445caec9d95c05e1a3fc1487b4ddec6a952ff337080360b0dcc078c"}, // swap order with 2 keys diff --git a/tests/fixtures/adr-024-coin-metadata_genesis.json b/tests/fixtures/adr-024-coin-metadata_genesis.json index c77a0c14330d..d56ed836fa89 100644 --- a/tests/fixtures/adr-024-coin-metadata_genesis.json +++ b/tests/fixtures/adr-024-coin-metadata_genesis.json @@ -9,7 +9,9 @@ }, "evidence": { "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000" + "max_age_duration": "172800000000000", + "max_num": 50, + "proof_trial_period": "50000" }, "validator": { "pub_key_types": [ @@ -23,57 +25,62 @@ "params": { "default_send_enabled": true }, - "balances": [ {"address": "cosmos106vrzv5xkheqhjm023pxcxlqmcjvuhtfyachz4", - "coins": [ - { - "denom": "nametoken", - "amount": "1000" - }, - { - "denom": "stake", - "amount": "100000000" - } - ] - }, - { "address": "cosmos1xztun2634zplhajda7tmjaxy488qj44n765t58", - "coins": [ - { - "denom": "nametoken", - "amount": "1000" - }, - { - "denom": "stake", - "amount": "100000000" - } - ] - } - ], - + "balances": [ + { + "address": "cosmos106vrzv5xkheqhjm023pxcxlqmcjvuhtfyachz4", + "coins": [ + { + "denom": "nametoken", + "amount": "1000" + }, + { + "denom": "stake", + "amount": "100000000" + } + ] + }, + { + "address": "cosmos1xztun2634zplhajda7tmjaxy488qj44n765t58", + "coins": [ + { + "denom": "nametoken", + "amount": "1000" + }, + { + "denom": "stake", + "amount": "100000000" + } + ] + } + ], "supply": [], - "denom_metadata": [{ - "description": "The native staking token of the Cosmos Hub.", - "denom_units": [ { - "denom": "uatom", - "exponent": 0, - "aliases": [ - "microatom" - ] - }, - { - "denom": "matom", - "exponent": 3, - "aliases": [ - "milliatom" - ] - }, - { - "denom": "atom", - "exponent": 6 - }], - "base": "uatom", - "display": "atom" - }] - + "denom_metadata": [ + { + "description": "The native staking token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "uatom", + "exponent": 0, + "aliases": [ + "microatom" + ] + }, + { + "denom": "matom", + "exponent": 3, + "aliases": [ + "milliatom" + ] + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "base": "uatom", + "display": "atom" + } + ] }, "genutil": { "gentxs": [] diff --git a/types/simulation/account.go b/types/simulation/account.go index 21bffd05fe84..2078cddc2d87 100644 --- a/types/simulation/account.go +++ b/types/simulation/account.go @@ -4,6 +4,7 @@ import ( "math/rand" "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,6 +17,7 @@ type Account struct { PrivKey crypto.PrivKey PubKey crypto.PubKey Address sdk.AccAddress + ConsKey crypto.PrivKey } // Equals returns true if two accounts are equal @@ -39,9 +41,11 @@ func RandomAccounts(r *rand.Rand, n int) []Account { privkeySeed := make([]byte, 15) r.Read(privkeySeed) - accs[i].PrivKey = secp256k1.GenPrivKeySecp256k1(privkeySeed) + accs[i].PrivKey = secp256k1.GenPrivKeyFromSecret(privkeySeed) accs[i].PubKey = accs[i].PrivKey.PubKey() accs[i].Address = sdk.AccAddress(accs[i].PubKey.Address()) + + accs[i].ConsKey = ed25519.GenPrivKeyFromSecret(privkeySeed) } return accs diff --git a/x/auth/signing/verify.go b/x/auth/signing/verify.go index 9f9de4c4ae13..0e66f026fa8f 100644 --- a/x/auth/signing/verify.go +++ b/x/auth/signing/verify.go @@ -19,7 +19,7 @@ func VerifySignature(pubKey crypto.PubKey, signerData SignerData, sigData signin if err != nil { return err } - if !pubKey.VerifyBytes(signBytes, data.Signature) { + if !pubKey.VerifySignature(signBytes, data.Signature) { return fmt.Errorf("unable to verify single signer signature") } return nil diff --git a/x/genutil/utils_test.go b/x/genutil/utils_test.go index bf8cf9f5d0ac..5327664ec1ef 100644 --- a/x/genutil/utils_test.go +++ b/x/genutil/utils_test.go @@ -17,5 +17,5 @@ func TestExportGenesisFileWithTime(t *testing.T) { t.Cleanup(cleanup) fname := filepath.Join(dir, "genesis.json") - require.NoError(t, ExportGenesisFileWithTime(fname, "test", nil, json.RawMessage(""), time.Now())) + require.NoError(t, ExportGenesisFileWithTime(fname, "test", nil, json.RawMessage(`{"account_owner": "Bob"}`), time.Now())) } diff --git a/x/ibc/02-client/keeper/client_test.go b/x/ibc/02-client/keeper/client_test.go index b740405f65db..f7e166f5b4a4 100644 --- a/x/ibc/02-client/keeper/client_test.go +++ b/x/ibc/02-client/keeper/client_test.go @@ -1,7 +1,6 @@ package keeper_test import ( - "bytes" "fmt" "time" @@ -257,16 +256,9 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { // Create alternative validator set with only altVal altValSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{altVal}) - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + _, suiteVal := suite.valSet.GetByIndex(0) + bothSigners := ibctmtypes.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} diff --git a/x/ibc/07-tendermint/misbehaviour_test.go b/x/ibc/07-tendermint/misbehaviour_test.go index bdd492f43171..413dc21f0d2e 100644 --- a/x/ibc/07-tendermint/misbehaviour_test.go +++ b/x/ibc/07-tendermint/misbehaviour_test.go @@ -1,7 +1,6 @@ package tendermint_test import ( - "bytes" "time" abci "github.com/tendermint/tendermint/abci/types" @@ -28,17 +27,10 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { // Create alternative validator set with only altVal altValSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{altVal}) - // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) + _, suiteVal := suite.valSet.GetByIndex(0) - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + // Create signer array and ensure it is in same order as bothValSet + bothSigners := types.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} diff --git a/x/ibc/07-tendermint/types/evidence_test.go b/x/ibc/07-tendermint/types/evidence_test.go index 6243a1e3fe8c..32fdfeb7fb02 100644 --- a/x/ibc/07-tendermint/types/evidence_test.go +++ b/x/ibc/07-tendermint/types/evidence_test.go @@ -1,7 +1,6 @@ package types_test import ( - "bytes" "time" "github.com/tendermint/tendermint/crypto/tmhash" @@ -10,6 +9,7 @@ import ( tmtypes "github.com/tendermint/tendermint/types" clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" + "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types" ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types" ) @@ -45,16 +45,9 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() { signers := []tmtypes.PrivValidator{suite.privVal} - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + _, suiteVal := suite.valSet.GetByIndex(0) + bothSigners := types.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} diff --git a/x/ibc/07-tendermint/types/test_utils.go b/x/ibc/07-tendermint/types/test_utils.go index 0f0d8e5a8f17..65c280483fcf 100644 --- a/x/ibc/07-tendermint/types/test_utils.go +++ b/x/ibc/07-tendermint/types/test_utils.go @@ -1,6 +1,7 @@ package types import ( + "bytes" "math" "time" @@ -40,6 +41,7 @@ func CreateTestHeader(chainID string, height, trustedHeight int64, timestamp tim EvidenceHash: tmhash.Sum([]byte("evidence_hash")), ProposerAddress: valSet.Proposer.Address, } + hhash := tmHeader.Hash() blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) voteSet := tmtypes.NewVoteSet(chainID, height, 1, tmproto.PrecommitType, valSet) @@ -60,3 +62,23 @@ func CreateTestHeader(chainID string, height, trustedHeight int64, timestamp tim TrustedValidators: trustedVals, } } + +// CreateSortedSignerArray takes two PrivValidators, and the corresponding Validator structs +// (including voting power). It returns a signer array of PrivValidators that matches the +// sorting of ValidatorSet. +// The sorting is first by .VotingPower (descending), with secondary index of .Address (ascending). +func CreateSortedSignerArray(altPrivVal, suitePrivVal tmtypes.PrivValidator, + altVal, suiteVal *tmtypes.Validator) []tmtypes.PrivValidator { + + switch { + case altVal.VotingPower > suiteVal.VotingPower: + return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} + case altVal.VotingPower < suiteVal.VotingPower: + return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} + default: + if bytes.Compare(altVal.Address, suiteVal.Address) == -1 { + return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} + } + return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} + } +} diff --git a/x/ibc/07-tendermint/update_test.go b/x/ibc/07-tendermint/update_test.go index b3a3bfac9d4a..bdebe6704fee 100644 --- a/x/ibc/07-tendermint/update_test.go +++ b/x/ibc/07-tendermint/update_test.go @@ -1,7 +1,6 @@ package tendermint_test import ( - "bytes" "time" tmtypes "github.com/tendermint/tendermint/types" @@ -33,16 +32,9 @@ func (suite *TendermintTestSuite) TestCheckValidity() { signers := []tmtypes.PrivValidator{suite.privVal} - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + _, suiteVal := suite.valSet.GetByIndex(0) + bothSigners := types.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} @@ -69,6 +61,7 @@ func (suite *TendermintTestSuite) TestCheckValidity() { newHeader = types.CreateTestHeader(chainID, height+5, height, suite.headerTime, bothValSet, suite.valSet, bothSigners) currentTime = suite.now }, + expPass: true, }, { name: "successful update with next height and different validator set", diff --git a/x/ibc/genesis_test.go b/x/ibc/genesis_test.go index 7ac9b69d1988..c0a26cce9442 100644 --- a/x/ibc/genesis_test.go +++ b/x/ibc/genesis_test.go @@ -3,8 +3,6 @@ package ibc_test import ( "fmt" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/x/ibc" @@ -18,6 +16,7 @@ import ( host "github.com/cosmos/cosmos-sdk/x/ibc/24-host" ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" "github.com/cosmos/cosmos-sdk/x/ibc/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func (suite *IBCTestSuite) TestValidateGenesis() { @@ -225,7 +224,7 @@ func (suite *IBCTestSuite) TestInitGenesis() { app := simapp.Setup(false) suite.NotPanics(func() { - ibc.InitGenesis(app.BaseApp.NewContext(false, abci.Header{Height: 1}), *app.IBCKeeper, true, tc.genState) + ibc.InitGenesis(app.BaseApp.NewContext(false, tmproto.Header{Height: 1}), *app.IBCKeeper, true, tc.genState) }) } } diff --git a/x/simulation/mock_tendermint.go b/x/simulation/mock_tendermint.go index 8070abbfb51f..152e4de29511 100644 --- a/x/simulation/mock_tendermint.go +++ b/x/simulation/mock_tendermint.go @@ -33,9 +33,8 @@ func newMockValidators(r *rand.Rand, abciVals []abci.ValidatorUpdate, params Par validators := make(mockValidators) for _, validator := range abciVals { - str := fmt.Sprintf("%v", validator.PubKey) - liveliness := GetMemberOfInitialState(r, - params.InitialLivenessWeightings()) + str := fmt.Sprintf("%X", validator.PubKey.GetEd25519()) + liveliness := GetMemberOfInitialState(r, params.InitialLivenessWeightings()) validators[str] = mockValidator{ val: validator, @@ -81,18 +80,22 @@ func (vals mockValidators) randomProposer(r *rand.Rand) tmbytes.HexBytes { return pk.Address() } -// updateValidators mimicks Tendermint's update logic -// nolint: unparam -func updateValidators(tb testing.TB, r *rand.Rand, params Params, - current map[string]mockValidator, updates []abci.ValidatorUpdate, +// updateValidators mimics Tendermint's update logic. +func updateValidators( + tb testing.TB, + r *rand.Rand, + params Params, + current map[string]mockValidator, + updates []abci.ValidatorUpdate, + event func(route, op, evResult string), +) map[string]mockValidator { - event func(route, op, evResult string)) map[string]mockValidator { for _, update := range updates { - str := fmt.Sprintf("%v", update.PubKey) + str := fmt.Sprintf("%X", update.PubKey.GetEd25519()) if update.Power == 0 { if _, ok := current[str]; !ok { - tb.Fatalf("tried to delete a nonexistent validator") + tb.Fatalf("tried to delete a nonexistent validator: %s", str) } event("end_block", "validator_updates", "kicked") diff --git a/x/simulation/simulate.go b/x/simulation/simulate.go index 636111fc7549..5d6e155a7b59 100644 --- a/x/simulation/simulate.go +++ b/x/simulation/simulate.go @@ -84,7 +84,6 @@ func SimulateFromSeed( } accs = tmpAccs - nextValidators := validators header := tmproto.Header{ @@ -188,22 +187,18 @@ func SimulateFromSeed( if header.ProposerAddress == nil { fmt.Fprintf(w, "\nSimulation stopped early as all validators have been unbonded; nobody left to propose a block!\n") - stopEarly = true - break } // Generate a random RequestBeginBlock with the current validator set // for the next block - request = RandomRequestBeginBlock(r, params, validators, - pastTimes, pastVoteInfos, eventStats.Tally, header) + request = RandomRequestBeginBlock(r, params, validators, pastTimes, pastVoteInfos, eventStats.Tally, header) // Update the validator set, which will be reflected in the application // on the next block validators = nextValidators - nextValidators = updateValidators(tb, r, params, - validators, res.ValidatorUpdates, eventStats.Tally) + nextValidators = updateValidators(tb, r, params, validators, res.ValidatorUpdates, eventStats.Tally) // update the exported params if config.ExportParamsPath != "" && config.ExportParamsHeight == height { diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index efc8395d5a11..2191ede320f0 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -64,7 +64,7 @@ func TestSlashingMsgs(t *testing.T) { commission := stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) createValidatorMsg := stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(valAddr), valKey.PubKey(), bondCoin, description, commission, sdk.OneInt(), + sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission, sdk.OneInt(), ) header := tmproto.Header{Height: app.LastBlockHeight() + 1} @@ -77,12 +77,12 @@ func TestSlashingMsgs(t *testing.T) { app.BeginBlock(abci.RequestBeginBlock{Header: header}) validator := checkValidator(t, app, addr1, true) - require.Equal(t, sdk.ValAddress(valAddr), validator.OperatorAddress) + require.Equal(t, sdk.ValAddress(addr1), validator.OperatorAddress) require.Equal(t, sdk.Bonded, validator.Status) require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) - unjailMsg := &types.MsgUnjail{ValidatorAddr: sdk.ValAddress(validator.GetConsPubKey().Address())} + unjailMsg := &types.MsgUnjail{ValidatorAddr: sdk.ValAddress(addr1)} - checkValidatorSigningInfo(t, app, sdk.ConsAddress(addr1), true) + checkValidatorSigningInfo(t, app, sdk.ConsAddress(valAddr), true) // unjail should fail with unknown validator header = tmproto.Header{Height: app.LastBlockHeight() + 1} diff --git a/x/staking/app_test.go b/x/staking/app_test.go index be924def67c9..2de07c62a957 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -78,8 +78,8 @@ func TestStakingMsgs(t *testing.T) { header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) - validator := checkValidator(t, app, sdk.ValAddress(valAddr), true) - require.Equal(t, sdk.ValAddress(valAddr), validator.OperatorAddress) + validator := checkValidator(t, app, sdk.ValAddress(addr1), true) + require.Equal(t, sdk.ValAddress(addr1), validator.OperatorAddress) require.Equal(t, sdk.Bonded, validator.Status) require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) @@ -88,34 +88,34 @@ func TestStakingMsgs(t *testing.T) { // edit the validator description = types.NewDescription("bar_moniker", "", "", "", "") - editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(valAddr), description, nil, nil) + editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{editValidatorMsg}, []uint64{0}, []uint64{1}, true, true, priv1) require.NoError(t, err) - validator = checkValidator(t, app, sdk.ValAddress(valAddr), true) + validator = checkValidator(t, app, sdk.ValAddress(addr1), true) require.Equal(t, description, validator.Description) // delegate simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin}) - delegateMsg := types.NewMsgDelegate(addr2, sdk.ValAddress(valAddr), bondCoin) + delegateMsg := types.NewMsgDelegate(addr2, sdk.ValAddress(addr1), bondCoin) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{delegateMsg}, []uint64{1}, []uint64{0}, true, true, priv2) require.NoError(t, err) simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin.Sub(bondCoin)}) - checkDelegation(t, app, addr2, sdk.ValAddress(valAddr), true, bondTokens.ToDec()) + checkDelegation(t, app, addr2, sdk.ValAddress(addr1), true, bondTokens.ToDec()) // begin unbonding - beginUnbondingMsg := types.NewMsgUndelegate(addr2, sdk.ValAddress(valAddr), bondCoin) + beginUnbondingMsg := types.NewMsgUndelegate(addr2, sdk.ValAddress(addr1), bondCoin) header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{beginUnbondingMsg}, []uint64{1}, []uint64{1}, true, true, priv2) require.NoError(t, err) // delegation should exist anymore - checkDelegation(t, app, addr2, sdk.ValAddress(valAddr), false, sdk.Dec{}) + checkDelegation(t, app, addr2, sdk.ValAddress(addr1), false, sdk.Dec{}) // balance should be the same because bonding not yet complete simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin.Sub(bondCoin)}) diff --git a/x/staking/simulation/genesis.go b/x/staking/simulation/genesis.go index ffe07f68094a..d30f19b079dd 100644 --- a/x/staking/simulation/genesis.go +++ b/x/staking/simulation/genesis.go @@ -85,7 +85,7 @@ func RandomizedGenState(simState *module.SimulationState) { simulation.RandomDecAmount(simState.Rand, maxCommission), ) - validator := types.NewValidator(valAddr, simState.Accounts[i].PubKey, types.Description{}) + validator := types.NewValidator(valAddr, simState.Accounts[i].ConsKey.PubKey(), types.Description{}) validator.Tokens = sdk.NewInt(simState.InitialStake) validator.DelegatorShares = sdk.NewDec(simState.InitialStake) validator.Commission = commission diff --git a/x/staking/simulation/genesis_test.go b/x/staking/simulation/genesis_test.go index 7d8d8feaa69f..66acafb52f17 100644 --- a/x/staking/simulation/genesis_test.go +++ b/x/staking/simulation/genesis_test.go @@ -50,7 +50,7 @@ func TestRandomizedGenState(t *testing.T) { require.Equal(t, "1000.000000000000000000", stakingGenesis.Delegations[0].Shares.String()) // check validators require.Equal(t, "cosmosvaloper1ghekyjucln7y67ntx7cf27m9dpuxxemnsvnaes", stakingGenesis.Validators[2].OperatorAddress.String()) - require.Equal(t, "cosmosvalconspub1addwnpepqwr8k5g44urevkvz5ys2qjag0nnp6xkd2f8lejn5pw2rehkjt6ftv5d9nrp", stakingGenesis.Validators[2].ConsensusPubkey) + require.Equal(t, "cosmosvalconspub1zcjduepq280tm686ma80cva9z620dmknd9a858pd2zmq9ackfenfllecjxds0hg9n7", stakingGenesis.Validators[2].ConsensusPubkey) require.Equal(t, false, stakingGenesis.Validators[2].Jailed) require.Equal(t, "Unbonded", stakingGenesis.Validators[2].Status.String()) require.Equal(t, "1000", stakingGenesis.Validators[2].Tokens.String()) diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index f53762df37d7..5c0e21a4916f 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -148,8 +148,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k simtypes.RandomDecAmount(r, maxCommission), ) - msg := types.NewMsgCreateValidator(address, simAccount.PubKey, - selfDelegation, description, commission, sdk.OneInt()) + msg := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission, sdk.OneInt()) txGen := simappparams.MakeEncodingConfig().TxConfig tx, err := helpers.GenTx( diff --git a/x/staking/simulation/operations_test.go b/x/staking/simulation/operations_test.go index db69d1ab71ea..13553ed1228e 100644 --- a/x/staking/simulation/operations_test.go +++ b/x/staking/simulation/operations_test.go @@ -85,8 +85,8 @@ func TestSimulateMsgCreateValidator(t *testing.T) { require.Equal(t, "0.660000000000000000", msg.Commission.MaxRate.String()) require.Equal(t, "0.047464127245687382", msg.Commission.Rate.String()) require.Equal(t, types.TypeMsgCreateValidator, msg.Type()) + require.Equal(t, "cosmosvalconspub1zcjduepq280tm686ma80cva9z620dmknd9a858pd2zmq9ackfenfllecjxds0hg9n7", msg.Pubkey) require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.DelegatorAddress.String()) - require.Equal(t, "cosmosvalconspub1addwnpepqwr8k5g44urevkvz5ys2qjag0nnp6xkd2f8lejn5pw2rehkjt6ftv5d9nrp", msg.Pubkey) require.Equal(t, "cosmosvaloper1ghekyjucln7y67ntx7cf27m9dpuxxemnsvnaes", msg.ValidatorAddress.String()) require.Len(t, futureOperations, 0) } From b5e7705fd5fff6c91337eaf318f99ca9864ace91 Mon Sep 17 00:00:00 2001 From: Marko Date: Fri, 14 Aug 2020 17:21:08 +0200 Subject: [PATCH 13/18] Update x/ibc/07-tendermint/types/test_utils.go Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> --- x/ibc/07-tendermint/types/test_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/ibc/07-tendermint/types/test_utils.go b/x/ibc/07-tendermint/types/test_utils.go index 65c280483fcf..114988477e54 100644 --- a/x/ibc/07-tendermint/types/test_utils.go +++ b/x/ibc/07-tendermint/types/test_utils.go @@ -30,7 +30,7 @@ func CreateTestHeader(chainID string, height, trustedHeight int64, timestamp tim ChainID: chainID, Height: height, Time: timestamp, - LastBlockID: MakeBlockID(make([]byte, tmhash.Size), math.MaxUint32, make([]byte, tmhash.Size)), + LastBlockID: MakeBlockID(make([]byte, tmhash.Size), 10_000, make([]byte, tmhash.Size)), LastCommitHash: tmhash.Sum([]byte("last_commit_hash")), DataHash: tmhash.Sum([]byte("data_hash")), ValidatorsHash: vsetHash, From 22d47e2c8aae5745b1e8e63aa6d64d6a56908512 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 14 Aug 2020 17:21:22 +0200 Subject: [PATCH 14/18] address comment --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f2ae349e0b22..f007397ec20d 100644 --- a/Makefile +++ b/Makefile @@ -335,7 +335,7 @@ proto-check-breaking-docker: @$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master .PHONY: proto-check-breaking-ci -TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc2/proto/tendermint +TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-3/proto/tendermint GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/master From 12a7ac5e5d9d9a7241c6304bad6ea21d3d63e6c6 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 14 Aug 2020 17:29:22 +0200 Subject: [PATCH 15/18] go mod --- go.mod | 1 + go.sum | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 56f5ee8e66c4..f037eb99935e 100644 --- a/go.mod +++ b/go.mod @@ -39,6 +39,7 @@ require ( github.com/tendermint/go-amino v0.15.1 github.com/tendermint/tendermint v0.34.0-rc3 github.com/tendermint/tm-db v0.6.1 + google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 google.golang.org/grpc v1.31.0 google.golang.org/protobuf v1.25.0 gopkg.in/yaml.v2 v2.3.0 diff --git a/go.sum b/go.sum index d997218d7619..438bfa71adaf 100644 --- a/go.sum +++ b/go.sum @@ -518,8 +518,6 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM github.com/tendermint/go-amino v0.15.1 h1:D2uk35eT4iTsvJd9jWIetzthE5C0/k2QmMFkCN+4JgQ= github.com/tendermint/go-amino v0.15.1/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.0-rc2/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= -github.com/tendermint/tendermint v0.34.0-rc2.0.20200812132357-b1b82c493a9c h1:Etao0mhX+apc+ka6Zs4mJvDUrkictXT6O/eINkZ/oKk= -github.com/tendermint/tendermint v0.34.0-rc2.0.20200812132357-b1b82c493a9c/go.mod h1:BoHcEpjfpBHc1Be7RQz3AHaXFNObcDG7SNHCev6Or4g= github.com/tendermint/tendermint v0.34.0-rc3 h1:d7Fsd5rdbxq4GmJ0kRfx7l7LesQM7e70f0ytWLTQ/Go= github.com/tendermint/tendermint v0.34.0-rc3/go.mod h1:BoHcEpjfpBHc1Be7RQz3AHaXFNObcDG7SNHCev6Or4g= github.com/tendermint/tm-db v0.6.0 h1:Us30k7H1UDcdqoSPhmP8ztAW/SWV6c6OfsfeCiboTC4= @@ -730,6 +728,7 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= From dc4782ca365637cee96ba3ccde9183741523b205 Mon Sep 17 00:00:00 2001 From: Marko Baricevic Date: Fri, 14 Aug 2020 17:42:41 +0200 Subject: [PATCH 16/18] bring back things --- x/ibc/07-tendermint/types/client_state_test.go | 10 ++++++++++ x/ibc/07-tendermint/types/header.go | 7 ------- x/ibc/07-tendermint/types/misbehaviour_test.go | 1 - x/ibc/07-tendermint/types/test_utils.go | 1 - 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/x/ibc/07-tendermint/types/client_state_test.go b/x/ibc/07-tendermint/types/client_state_test.go index f6ae1dcefb2a..79a12623e6eb 100644 --- a/x/ibc/07-tendermint/types/client_state_test.go +++ b/x/ibc/07-tendermint/types/client_state_test.go @@ -62,11 +62,21 @@ func (suite *TendermintTestSuite) TestValidate() { }, { name: "invalid height", + clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, 0, commitmenttypes.GetSDKSpecs()), + expPass: false, + }, + { + name: "trusting period not less than unbonding period", clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, commitmenttypes.GetSDKSpecs()), expPass: false, }, { name: "proof specs is nil", + clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, nil), + expPass: false, + }, + { + name: "proof specs contains nil", clientState: ibctmtypes.NewClientState(chainID, types.DefaultTrustLevel, ubdPeriod, ubdPeriod, maxClockDrift, height, []*ics23.ProofSpec{ics23.TendermintSpec, nil}), expPass: false, }, diff --git a/x/ibc/07-tendermint/types/header.go b/x/ibc/07-tendermint/types/header.go index 3a9dec5f0e77..94e47e543414 100644 --- a/x/ibc/07-tendermint/types/header.go +++ b/x/ibc/07-tendermint/types/header.go @@ -3,7 +3,6 @@ package types import ( "bytes" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -74,9 +73,3 @@ func (h Header) ValidateBasic(chainID string) error { } return nil } - -// ToABCIHeader parses the header to an ABCI header type. -// NOTE: only for testing use. -func (h Header) ToABCIHeader() tmproto.Header { - return tmtypes.TM2PB.Header(h.SignedHeader.Header) -} diff --git a/x/ibc/07-tendermint/types/misbehaviour_test.go b/x/ibc/07-tendermint/types/misbehaviour_test.go index 8def3b753c97..8ad9596b4810 100644 --- a/x/ibc/07-tendermint/types/misbehaviour_test.go +++ b/x/ibc/07-tendermint/types/misbehaviour_test.go @@ -1,7 +1,6 @@ package types_test import ( - "bytes" "fmt" "time" diff --git a/x/ibc/07-tendermint/types/test_utils.go b/x/ibc/07-tendermint/types/test_utils.go index 114988477e54..0f7e3bff6667 100644 --- a/x/ibc/07-tendermint/types/test_utils.go +++ b/x/ibc/07-tendermint/types/test_utils.go @@ -2,7 +2,6 @@ package types import ( "bytes" - "math" "time" "github.com/tendermint/tendermint/crypto/tmhash" From 09feb5d7c14559467cb03d3609401f3eca8fd66c Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Fri, 14 Aug 2020 19:08:55 +0200 Subject: [PATCH 17/18] fix test --- x/ibc/02-client/abci_test.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/x/ibc/02-client/abci_test.go b/x/ibc/02-client/abci_test.go index 9785f317b8a2..5d108cb7a329 100644 --- a/x/ibc/02-client/abci_test.go +++ b/x/ibc/02-client/abci_test.go @@ -5,11 +5,6 @@ import ( ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" "github.com/stretchr/testify/suite" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/simapp" - sdk "github.com/cosmos/cosmos-sdk/types" ) type ClientTestSuite struct { From 9cdb89098e47ac9cc51738cf2d03682cbc919b56 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Fri, 14 Aug 2020 19:24:47 +0200 Subject: [PATCH 18/18] update tm proto files --- Makefile | 4 ++-- third_party/proto/tendermint/abci/types.proto | 5 +++++ third_party/proto/tendermint/types/evidence.proto | 15 +++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index f007397ec20d..dc2e68c58f7e 100644 --- a/Makefile +++ b/Makefile @@ -335,10 +335,10 @@ proto-check-breaking-docker: @$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master .PHONY: proto-check-breaking-ci -TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-3/proto/tendermint +TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc3/proto/tendermint GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master -CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/master +CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/v0.6.2 TM_CRYPTO_TYPES = third_party/proto/tendermint/crypto TM_ABCI_TYPES = third_party/proto/tendermint/abci diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto index 59309f0709a7..c08cca2bdc27 100644 --- a/third_party/proto/tendermint/abci/types.proto +++ b/third_party/proto/tendermint/abci/types.proto @@ -64,6 +64,7 @@ message RequestInitChain { ConsensusParams consensus_params = 3; repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; bytes app_state_bytes = 5; + int64 initial_height = 6; } message RequestQuery { @@ -180,6 +181,7 @@ message ResponseSetOption { message ResponseInitChain { ConsensusParams consensus_params = 1; repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; } message ResponseQuery { @@ -351,8 +353,11 @@ message VoteInfo { message Evidence { string type = 1; + // The offending validator Validator validator = 2 [(gogoproto.nullable) = false]; + // The height when the offense occurred int64 height = 3; + // The corresponding time where the offense occurred google.protobuf.Timestamp time = 4 [ (gogoproto.nullable) = false, (gogoproto.stdtime) = true diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto index 782f4cdcb823..c2bb74ca410b 100644 --- a/third_party/proto/tendermint/types/evidence.proto +++ b/third_party/proto/tendermint/types/evidence.proto @@ -4,6 +4,7 @@ package tendermint.types; option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; import "tendermint/types/types.proto"; import "tendermint/crypto/keys.proto"; @@ -12,6 +13,9 @@ import "tendermint/crypto/keys.proto"; message DuplicateVoteEvidence { Vote vote_a = 1; Vote vote_b = 2; + + google.protobuf.Timestamp timestamp = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; } message PotentialAmnesiaEvidence { @@ -19,6 +23,8 @@ message PotentialAmnesiaEvidence { Vote vote_b = 2; int64 height_stamp = 3; + google.protobuf.Timestamp timestamp = 4 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; } message AmnesiaEvidence { @@ -35,11 +41,9 @@ message LunaticValidatorEvidence { Header header = 1; Vote vote = 2; string invalid_header_field = 3; -} - -message PhantomValidatorEvidence { - Vote vote = 1; - int64 last_height_validator_was_in_set = 2; + + google.protobuf.Timestamp timestamp = 4 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; } message Evidence { @@ -49,7 +53,6 @@ message Evidence { LunaticValidatorEvidence lunatic_validator_evidence = 3; PotentialAmnesiaEvidence potential_amnesia_evidence = 4; AmnesiaEvidence amnesia_evidence = 5; - PhantomValidatorEvidence phantom_validator_evidence = 6; } }