From e3ae6b8617a66e689cdb5fa7c84e738e9a454567 Mon Sep 17 00:00:00 2001 From: Connor Stein Date: Wed, 5 Jan 2022 14:18:34 -0500 Subject: [PATCH] Txm part 1 (#18) - Backfilled some test coverage on the terra client - Simplify using cosmos client for queries and sending txes as well as ws mgmt - Added gas price querying from FCD node and the ability to specify a gas limit multiplier and fallback gas price in the spec - Bug fix: ContractID needs to be ContractAddress in the wasm contract interactions - Consistent receiver semantics on the terrra client (needs to use pointer semantics for the head tracker) - Introduce a Start method for the client which boots the ws connection and starts the head tracker --- go.mod | 31 +- go.sum | 417 ++++++++++++++++-- pkg/terra/client.go | 112 +++++ pkg/terra/client_test.go | 258 +++++++++++ pkg/terra/contract_config_tracker.go | 108 ++--- pkg/terra/contract_transmitter.go | 40 +- pkg/terra/median_contract.go | 43 +- pkg/terra/mocks/Logger.go | 74 ++++ pkg/terra/relay.go | 17 +- pkg/terra/terra.go | 500 ---------------------- pkg/terra/testdata/my_first_contract.wasm | Bin 0 -> 129231 bytes pkg/terra/types.go | 27 -- 12 files changed, 934 insertions(+), 693 deletions(-) create mode 100644 pkg/terra/client.go create mode 100644 pkg/terra/client_test.go create mode 100644 pkg/terra/mocks/Logger.go delete mode 100644 pkg/terra/terra.go create mode 100644 pkg/terra/testdata/my_first_contract.wasm diff --git a/go.mod b/go.mod index c034d143..e53b0fb7 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,18 @@ module github.com/smartcontractkit/chainlink-terra go 1.17 require ( + github.com/pelletier/go-toml v1.9.4 + github.com/pkg/errors v0.9.1 github.com/satori/go.uuid v1.2.0 github.com/smartcontractkit/chainlink v1.0.1-0.20211210170943-531c638ebd9c + golang.org/x/net v0.0.0-20211216030914-fe4d6282115f ) require ( filippo.io/edwards25519 v1.0.0-rc.1 // indirect github.com/99designs/keyring v1.1.6 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/CosmWasm/wasmvm v0.16.2 // indirect + github.com/CosmWasm/wasmvm v0.16.3 // indirect github.com/DataDog/zstd v1.4.5 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect github.com/OneOfOne/xxhash v1.2.5 // indirect @@ -26,7 +29,7 @@ require ( github.com/cosmos/btcutil v1.0.4 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/iavl v0.17.3 // indirect - github.com/cosmos/ibc-go v1.1.3 // indirect + github.com/cosmos/ibc-go v1.1.5 // indirect github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect github.com/cosmos/ledger-go v0.9.2 // indirect github.com/danieljoos/wincred v1.0.2 // indirect @@ -42,8 +45,9 @@ require ( github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/getsentry/sentry-go v0.11.0 // indirect - github.com/go-kit/kit v0.10.0 // indirect - github.com/go-logfmt/logfmt v0.5.0 // indirect + github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/log v0.2.0 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect @@ -62,7 +66,7 @@ require ( github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/go-immutable-radix v1.0.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect @@ -82,9 +86,7 @@ require ( github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/onsi/ginkgo v1.16.5 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.11.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect @@ -95,6 +97,7 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 // indirect github.com/rjeczalik/notify v0.9.2 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect + github.com/rs/zerolog v1.26.0 // indirect github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect github.com/shirou/gopsutil v3.21.10+incompatible // indirect github.com/shopspring/decimal v1.3.1 // indirect @@ -105,27 +108,27 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.9.0 // indirect + github.com/stretchr/objx v0.3.0 // indirect github.com/subosito/gotenv v1.2.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tendermint/tm-db v0.6.4 // indirect + github.com/tendermint/tm-db v0.6.6 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/tklauser/go-sysconf v0.3.9 // indirect github.com/tklauser/numcpus v0.3.0 // indirect github.com/zondax/hid v0.9.0 // indirect - go.etcd.io/bbolt v1.3.5 // indirect + go.etcd.io/bbolt v1.3.6 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.7.0 // indirect go.uber.org/zap v1.19.1 // indirect - golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect golang.org/x/sys v0.0.0-20211102192858-4dd72447c267 // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect - google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 // indirect + google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect google.golang.org/grpc v1.42.0 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/ini.v1 v1.63.2 // indirect @@ -140,9 +143,8 @@ require ( github.com/gorilla/websocket v1.4.2 github.com/smartcontractkit/libocr v0.0.0-20211210213233-5443fb9db7f7 github.com/stretchr/testify v1.7.0 - github.com/tendermint/tendermint v0.34.14 - github.com/terra-money/core v0.5.13 - github.com/terra-project/terra.go v1.0.1-0.20210907074752-0a5391f2dfe2 + github.com/tendermint/tendermint v0.34.15 + github.com/terra-money/core v0.5.14 github.com/tidwall/gjson v1.9.3 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 ) @@ -155,5 +157,4 @@ replace ( require ( github.com/hdevalence/ed25519consensus v0.0.0-20210430192048-0962ce16b305 // indirect github.com/terra-money/terra.go v1.0.1-0.20211220063124-386f2075291e - gopkg.in/guregu/null.v4 v4.0.0 ) diff --git a/go.sum b/go.sum index 7b81b6bb..51ff4ec8 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,5 @@ bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.33.1/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -51,17 +52,22 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +contrib.go.opencensus.io/exporter/stackdriver v0.12.6/go.mod h1:8x999/OcIPy5ivx/wDiV7Gx4D+VUPODf0mWRGRc5kSk= contrib.go.opencensus.io/exporter/stackdriver v0.13.4 h1:ksUxwH3OD5sxkjzEqGxNTl+Xjsmu3BnC/300MhSVTSc= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM= github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= +github.com/AlekSi/pointer v1.1.0/go.mod h1:y7BvfRI3wXPWKXEBhU71nbnIEEZX0QTSB2Bj48UJIZE= github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= @@ -80,14 +86,17 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 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/ClickHouse/clickhouse-go v1.4.5/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= +github.com/ClickHouse/clickhouse-go v1.5.1/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= -github.com/CosmWasm/wasmvm v0.16.0/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= -github.com/CosmWasm/wasmvm v0.16.2 h1:grOU0p5Fd/GN4j8ZvQ7bdgmNStk6FFqFp5NSPvrkO1s= github.com/CosmWasm/wasmvm v0.16.2/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= +github.com/CosmWasm/wasmvm v0.16.3 h1:hUf33EHRmyyvKMhwVl7nMaAOY0vYJVB4bhU+HPfHfBM= +github.com/CosmWasm/wasmvm v0.16.3/go.mod h1:Id107qllDJyJjVQQsKMOy2YYF98sqPJ2t+jX1QES40A= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DATA-DOG/go-txdb v0.1.3/go.mod h1:DhAhxMXZpUJVGnT+p9IbzJoRKvlArO2pkHjnGX7o0n0= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -98,6 +107,10 @@ github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t github.com/Depado/ginprom v1.2.1-0.20200115153638-53bbba851bd8/go.mod h1:VHRucFf/9saDXsYg6uzQ8Oo8gUwngtWec9ZJ00H+ZCc= github.com/Depado/ginprom v1.7.2 h1:uwarHKylLo2CVvx45ajxY/GnCsqPzez5tFT4pwrZWIs= github.com/Depado/ginprom v1.7.2/go.mod h1:cMlQwg/daHJdgGlaDHBlzse+7CZxkVgcqZqvDcIKg6c= +github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= +github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= @@ -117,19 +130,23 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= +github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= +github.com/adlio/schema v1.1.14/go.mod h1:hQveFEMiDlG/M9yz9RAajnH5DzT6nAfqOG9YkEQU2pg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -138,6 +155,7 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5 github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= +github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= @@ -162,19 +180,26 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -186,15 +211,18 @@ github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= +github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boj/redistore v0.0.0-20160128113310-fc113767cd6b/go.mod h1:5r9chGCb4uUhBCGMDDCYfyHU/awSRoBeG53Zaj1crhU= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff h1:RmdPFa+slIr4SCBg4st/l/vZWVe9QJKMXGO60Bxbe04= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= @@ -222,16 +250,20 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -243,11 +275,14 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7 h1:Puu1hUwfps3+1CUzYdAZXijuvLuRMirgiXdf3zsM2Ig= +github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -256,6 +291,7 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= 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/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= @@ -271,6 +307,8 @@ github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1 github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/continuity v0.2.0/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= +github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= 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= @@ -280,13 +318,12 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.43.0/go.mod h1:ctcrTEAhei9s8O3KSNvL0dxe+fVQGp07QyRb/7H9JYE= -github.com/cosmos/cosmos-sdk v0.44.0/go.mod h1:orG0jzFJ2KsDfzLd/X0JSOMzF4Oxc/BQz2GkcYF4gRE= github.com/cosmos/cosmos-sdk v0.44.3/go.mod h1:bA3+VenaR/l/vDiYzaiwbWvRPWHMBX2jG0ygiFtiBp0= github.com/cosmos/cosmos-sdk v0.44.5 h1:t5h+KPzZb0Zsag1RP1DCMQlyJyIQqJcqSPJrbUCDGHY= github.com/cosmos/cosmos-sdk v0.44.5/go.mod h1:maUA6m2TBxOJZkbwl0eRtEBgTX37kcaiOWU5t1HEGaY= @@ -296,13 +333,12 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE= github.com/cosmos/iavl v0.15.0-rc5/go.mod h1:WqoPL9yPTQ85QBMT45OOUzPxG/U/JcJoN7uMjgxke/I= github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mVvSA4= -github.com/cosmos/iavl v0.16.0/go.mod h1:2A8O/Jz9YwtjqXMO0CjnnbTYEEaovE8jWcwrakH3PoE= github.com/cosmos/iavl v0.17.1/go.mod h1:7aisPZK8yCpQdy3PMvKeO+bhq1NwDjUwjzxwwROUxFk= github.com/cosmos/iavl v0.17.3 h1:s2N819a2olOmiauVa0WAhoIJq9EhSXE9HDBAoR9k+8Y= github.com/cosmos/iavl v0.17.3/go.mod h1:prJoErZFABYZGDHka1R6Oay4z9PrNeFFiMKHDAMOi4w= -github.com/cosmos/ibc-go v1.0.1/go.mod h1:pfLnoW9yUdjSMw3rD0baIsqLBauVAlGFQ1zQ3HGK6J0= -github.com/cosmos/ibc-go v1.1.3 h1:rurhlyf8zLFA9H4ln5MmwANnQ8/vTDNiHjhPp5HYpOI= github.com/cosmos/ibc-go v1.1.3/go.mod h1:TNJMo+fPU4GmpAGxqedjuA1l6izRLGPvuIRLpWAbXuE= +github.com/cosmos/ibc-go v1.1.5 h1:H+q6G0szM5lePgLDQbTAaKQU5UR28ZjOIA3JJjNhuPQ= +github.com/cosmos/ibc-go v1.1.5/go.mod h1:wkGkkX8Ou6yXgE8lO2xP9NOwo+Tl5x1dJaTTE6jBDpg= 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= @@ -314,8 +350,10 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng 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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -338,12 +376,17 @@ github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRk github.com/denisenkom/go-mssqldb v0.0.0-20181014144952-4e0d7dc8888f/go.mod h1:xN/JuLBIz4bjkxNmByTiV1IbhfnYb6oo99phBn4Eqhc= github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/dfuse-io/logging v0.0.0-20201110202154-26697de88c79/go.mod h1:V+ED4kT/t/lKtH99JQmKIb0v9WL3VaYkJ36CfHlVECI= github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 h1:CuJS05R9jmNlUK8GOxrEELPbfXm0EuGh/30LjkjN5vo= +github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70/go.mod h1:EoK/8RFbMEteaCaz89uessDTnCWjbbcr+DXcBh4el5o= github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgraph-io/badger v1.6.1 h1:w9pSFNSdq/JPM1N12Fz/F/bzo993Is1W+Q7HjPzi7yg= github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= @@ -362,7 +405,9 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/docker/cli v20.10.8+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= @@ -370,6 +415,7 @@ github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbT github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/duo-labs/webauthn v0.0.0-20210727191636-9f1b88ef44cc h1:mLNknBMRNrYNf16wFFUyhSAe1tISZN7oAfal4CZ2OxY= +github.com/duo-labs/webauthn v0.0.0-20210727191636-9f1b88ef44cc/go.mod h1:/X2OJiJxjQ7alqWZqX9EtBTmZc+4qQ0LvZ1k5wP67RM= 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= @@ -384,6 +430,7 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= +github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25/go.mod h1:hTr8+TLQmkUkgcuh3mcr5fjrT9c64ZzsBCdCEC6UppY= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -398,9 +445,12 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum-optimism/go-optimistic-ethereum-utils v0.1.0 h1:+Pj8lKxF/2v5Frwrlted7XxcdlK7UtBIyfmrB+CrhD8= +github.com/ethereum-optimism/go-optimistic-ethereum-utils v0.1.0/go.mod h1:V6tsDFR2US/KgDIk0ml2gvnlQU/ss9NA1pV36wC7Njo= +github.com/ethereum/go-ethereum v1.9.10/go.mod h1:lXHkVo/MTvsEXfYsmNzelZ8R1e0DTvdk/wMZJIRpaRw= github.com/ethereum/go-ethereum v1.9.18/go.mod h1:JSSTypSMTkGZtAdAChH2wP5dZEvPGh3nUTuDpH+hNrg= github.com/ethereum/go-ethereum v1.9.24/go.mod h1:JIfVb6esrqALTExdz9hRYvrP0xBDf6wCncIu1hNwHpM= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg= github.com/ethereum/go-ethereum v1.10.11 h1:KKIcwpmur9iTaVbR2dxlHu+peHVhU+/KX//NWvT1n9U= github.com/ethereum/go-ethereum v1.10.11/go.mod h1:W3yfrFyL9C1pHcwY5hmRHVDaorTiQxhYBkKyu5mEDHw= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= @@ -414,6 +464,7 @@ github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= @@ -425,10 +476,13 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6 h1:u/UEqS66A5ckRmS4yNpjmVH56sVtS/RfclBAYocb4as= github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -437,9 +491,14 @@ github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWp github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fxamacker/cbor/v2 v2.2.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/fxamacker/cbor/v2 v2.3.0 h1:aM45YGMctNakddNNAezPxDUpv38j44Abh+hifNuqXik= +github.com/fxamacker/cbor/v2 v2.3.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/gagliardetto/binary v0.5.0 h1:fLVIbMEQp5zbW0SFtg0z/WHy2iUw/SMeuakzfa5ayhI= +github.com/gagliardetto/binary v0.5.0/go.mod h1:peJR9PvwamL4YOh1nHWCPLry2VEfeeD1ADvewka7HnQ= +github.com/gagliardetto/gofuzz v1.2.2/go.mod h1:bkH/3hYLZrMLbfYWA0pWzXmi5TTRZnu4pMGZBkqMKvY= github.com/gagliardetto/solana-go v1.0.2 h1:p/OYBN3rrB//Fe0Dz5lVBoZx0wN2i04ksQNwvcXra+M= +github.com/gagliardetto/solana-go v1.0.2/go.mod h1:PLsSQ2L75eBhmYOHGWGgw6mWha8/iRrKhIove3sV0is= github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= +github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= @@ -469,6 +528,7 @@ github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmC github.com/gin-gonic/gin v1.6.0/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.7.4 h1:QmUZXrvJ9qZ3GfWvQ+2wnW/1ePrTEJqPKMYEU3lD/DM= +github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= @@ -476,18 +536,27 @@ github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclK github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -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-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= @@ -517,6 +586,7 @@ github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= @@ -530,9 +600,11 @@ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= @@ -541,8 +613,9 @@ github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= 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= @@ -590,6 +663,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/certificate-transparency-go v1.0.21 h1:Yf1aXowfZ2nuboBsg7iYGLmwsOARdV86pfH3g95wXmE= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -637,11 +711,13 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= @@ -660,6 +736,7 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= +github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= @@ -674,6 +751,7 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/dataloader v5.0.0+incompatible h1:R+yjsbrNq1Mo3aPG+Z/EKYrXrXXUNJHOgbRt+U6jOug= +github.com/graph-gophers/dataloader v5.0.0+incompatible/go.mod h1:jk4jk0c5ZISbKaMe8WsVopGB5/15GvGHMdMdPtwlRp4= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29 h1:sezaKhEfPFg8W0Enm61B9Gs911H8iesGY5R8NDPtd1M= github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= @@ -714,13 +792,17 @@ github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= @@ -731,8 +813,10 @@ github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1 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= +github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= @@ -752,14 +836,17 @@ github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= 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/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= +github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/improbable-eng/grpc-web v0.14.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs= github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -770,6 +857,7 @@ github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbf github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= @@ -825,14 +913,52 @@ github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/ github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= github.com/jackc/pgconn v1.10.0 h1:4EYhlDVEMsJ30nNj0mmgwIUXoq7e9sMJrVC2ED6QlCU= +github.com/jackc/pgconn v1.10.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgproto3/v2 v2.1.1 h1:7PQ/4gLoqnl87ZxL7xjO0DR5gYuviDCZxQJsUlFW1eI= +github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= github.com/jackc/pgtype v1.8.1 h1:9k0IXtdJXHJbyAWQgbWr1lU+MEhPXZz6RIXxfR5oxXs= +github.com/jackc/pgtype v1.8.1/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= github.com/jackc/pgx/v4 v4.13.0 h1:JCjhT5vmhMAf/YwBHLvrBn4OGdIQBiFG6ym8Zmdx570= +github.com/jackc/pgx/v4 v4.13.0/go.mod h1:9P4X524sErlaxj0XSGZk7s+LD0eOyu1ZDUrrpznYDF0= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= @@ -852,7 +978,6 @@ github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1C github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.8.2/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= github.com/jhump/protoreflect v1.9.0/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= github.com/jinzhu/gorm v1.9.2/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo= github.com/jinzhu/gorm v1.9.11-0.20190912141731-0c98e7d712e2/go.mod h1:bu/pK8szGZ2puuErfU0RwyeNdsf3e6nCX/noXaVxkfw= @@ -867,6 +992,7 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jmoiron/sqlx v1.3.4 h1:wv+0IJZfL5z0uZoUjlpKgHkgaFSYD+r9CfrXjEXsO7w= github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -883,6 +1009,7 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= @@ -890,6 +1017,7 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= @@ -903,6 +1031,7 @@ github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYb github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -913,8 +1042,11 @@ github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0 github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= @@ -934,6 +1066,7 @@ github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -950,12 +1083,16 @@ github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdA github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg= +github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= github.com/libp2p/go-addr-util v0.0.2 h1:7cWK5cdA5x72jX0g8iLrQWm5TRJZ6CzGdPEhWj7plWU= github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= @@ -1071,6 +1208,7 @@ github.com/libp2p/go-libp2p-peerstore v0.2.3/go.mod h1:K8ljLdFn590GMttg/luh4caB/ github.com/libp2p/go-libp2p-peerstore v0.2.4/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= github.com/libp2p/go-libp2p-peerstore v0.2.7 h1:83JoLxyR9OYTnNfB5vvFqvMUv/xDNa6NoPHnENhBsGw= +github.com/libp2p/go-libp2p-peerstore v0.2.7/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= github.com/libp2p/go-libp2p-quic-transport v0.5.0/go.mod h1:IEcuC5MLxvZ5KuHKjRu+dr3LjCT1Be3rcD/4d8JrX8M= @@ -1179,6 +1317,7 @@ github.com/libp2p/go-yamux/v2 v2.0.0/go.mod h1:NVWira5+sVUIU6tu1JWvaRn1dRnG+cawO github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= +github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lucas-clemente/quic-go v0.16.0/go.mod h1:I0+fcNTdb9eS1ZcjQZbDVPGchJ86chcIxPALn9lEJqE= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= @@ -1195,6 +1334,7 @@ github.com/manyminds/api2go v0.0.0-20171030193247-e7b693844a6f h1:tVvGiZQFjOXP+9 github.com/manyminds/api2go v0.0.0-20171030193247-e7b693844a6f/go.mod h1:Z60vy0EZVSu0bOugCHdcN5ZxFMKSpjRgsnh0XKPFqqk= github.com/marten-seemann/qpack v0.1.0/go.mod h1:LFt1NU/Ptjip0C2CPkhimBz5CGE3WGDAUWqna+CNTrI= github.com/marten-seemann/qtls v0.9.1/go.mod h1:T1MmAdDPyISzxlK6kjRr0pcZFBVd1OZbBb/j3cvzHhk= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -1220,7 +1360,6 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -1228,11 +1367,15 @@ github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= @@ -1250,12 +1393,14 @@ github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKju github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.30/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= 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/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= @@ -1269,6 +1414,7 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -1280,13 +1426,16 @@ github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7p github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 h1:mPMvm6X6tf4w8y7j9YIt6V9jfWhL6QlbEc7CCmeQlWk= +github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1/go.mod h1:ye2e/VUEtE2BHE+G/QcKkcLQVAEJoYRFj5VUOQatCRE= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= @@ -1313,6 +1462,7 @@ github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= github.com/multiformats/go-multiaddr v0.3.3 h1:vo2OTSAqnENB2rLk79pLtr+uhj+VAzSe3uef5q0lRSs= +github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.2.0 h1:YWJoIDwLePniH7OU5hBnDZV6SWuvJqJ0YtN6pLeH9zA= @@ -1357,20 +1507,28 @@ github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= 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/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= +github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/okex/exchain-ethereum-compatible v1.0.2 h1:IAYe/t+9Xn+UtQEMTP/8cVKUsNXvUROHqTdBBTY02nE= +github.com/okex/exchain-ethereum-compatible v1.0.2/go.mod h1:b1pR94SblpOPKPcPWvWyop1ytEMnjyf2DC1uN8cMsDU= 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= @@ -1406,12 +1564,14 @@ github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c= +github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -1428,7 +1588,9 @@ github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTm 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/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest/v3 v3.8.0/go.mod h1:9zPATATlWQru+ynXP+DytBQrsXV7Tmlx7K86H6fQaDo= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= github.com/otiai10/copy v1.6.0/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= @@ -1449,11 +1611,15 @@ github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= 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/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= 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= @@ -1470,7 +1636,9 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb 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/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/pressly/goose/v3 v3.1.0/go.mod h1:tYsY0oL0yd48jg15POIZfOZiu66mqWpfDd/nJ28KWyU= github.com/pressly/goose/v3 v3.4.1 h1:1qZcFO+1K9gKnOHoHGDC2wtZu4BmVSnECyy48YzSLx0= +github.com/pressly/goose/v3 v3.4.1/go.mod h1:dlZhFJpEBA/+BF8IYJyxUxA0fQvJKmsJHi0liv52EiQ= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= @@ -1506,6 +1674,7 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1534,11 +1703,15 @@ github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzy github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= +github.com/robertkrimen/otto v0.0.0-20170205013659-6a77b7cbc37d/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -1547,16 +1720,23 @@ github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -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/rs/cors v1.8.0 h1:P2KMzcFwrPoSjkF1WLRPsp3UMLyql8L4v9hQpVeK5so= +github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.23.0 h1:UskrK+saS9P9Y789yNNulYKdARjPZuS35B8gJF2x60g= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= +github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE= +github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= 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/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE= @@ -1568,6 +1748,7 @@ github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/scylladb/go-reflectx v1.0.1 h1:b917wZM7189pZdlND9PbIJ6NQxfDPfBvUaQ7cjj1iZQ= +github.com/scylladb/go-reflectx v1.0.1/go.mod h1:rWnOfDIRWBGN0miMLIcoPt/Dhi2doCMZqwMCJ3KupFc= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= @@ -1578,6 +1759,7 @@ github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.10+incompatible h1:AL2kpVykjkqeN+MFe1WcwSBVUjGjvdU8/ubvCuXAjrU= github.com/shirou/gopsutil v3.21.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= @@ -1612,17 +1794,26 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartcontractkit/chainlink v0.8.10-0.20200825114219-81dd2fc95bac/go.mod h1:j7qIYHGCN4QqMXdO8g8A9dmUT5vKFmkxPSbjAIfrfNU= github.com/smartcontractkit/chainlink v0.9.5-0.20201207211610-6c7fee37d5b7/go.mod h1:kmdLJbVZRCnBLiL6gG+U+1+0ofT3bB48DOF8tjQvcoI= +github.com/smartcontractkit/chainlink v1.0.1-0.20211130190746-c1f78221a5e7/go.mod h1:JSZlVir4yOJd0Fh6QRefWtypddYibyaT/UQet2zI6z0= +github.com/smartcontractkit/chainlink v1.0.1-0.20211207182844-d545260b5c89/go.mod h1:9kt1TqmBk6optJtwBM0wfnRrq7WPM0gwtGlD3vpU8Ms= +github.com/smartcontractkit/chainlink v1.0.1-0.20211209223503-68928efa429a/go.mod h1:PSKo1vbT0/cUSbgH/rKNTDwWJyX8bc6M9/YVRe/nrXU= github.com/smartcontractkit/chainlink v1.0.1-0.20211210170943-531c638ebd9c h1:Tftm2xHtNdrYGpm7+TYeKGIHgSCX7Trxk+tfPNornfg= github.com/smartcontractkit/chainlink v1.0.1-0.20211210170943-531c638ebd9c/go.mod h1:ma9fAtYovm/fSzj27U3c77hRyN8+lIT+33j9Molho4w= +github.com/smartcontractkit/chainlink-solana v0.0.0-20211203133247-1fbcc7f330d5/go.mod h1:NxZZQ0m2AGQ5vR1HptHkAyYCd68XA03SI2dEvkaalbs= +github.com/smartcontractkit/chainlink-solana v0.0.0-20211207185700-a24214ba7afd/go.mod h1:NVHHwrCgC/7J0I872/uVgk0jEpyJIXEGAxZHrbgt190= github.com/smartcontractkit/chainlink-solana v0.0.0-20211210152809-395644d08fbb h1:Ucc+NhAoSBF3ukXOLUdVpk9XjkbLwX4WCgUfRQ7QJVk= +github.com/smartcontractkit/chainlink-solana v0.0.0-20211210152809-395644d08fbb/go.mod h1:8J/4BZgvkOvDiWQKpnLCjZtceUUajJRjm/Cs5tIyZ+o= github.com/smartcontractkit/ed25519consensus v0.0.1 h1:Ta23Y6YJTACLCpKWSWAwgHCtkmWrGGfrUAV8Ns5r4z0= github.com/smartcontractkit/ed25519consensus v0.0.1/go.mod h1:8Wf0F4mu3B5DdEOFKMMLgSoZ8EyaA2Cmf4YMUsNHXzE= github.com/smartcontractkit/libocr v0.0.0-20201203233047-5d9b24f0cbb5/go.mod h1:bfdSuLnBWCkafDvPGsQ1V6nrXhg046gh227MKi4zkpc= +github.com/smartcontractkit/libocr v0.0.0-20211117215336-6c9726817b2d/go.mod h1:nq3crM3wVqnyMlM/4ZydTuJ/WyCapAsOt7P94oRgSPg= +github.com/smartcontractkit/libocr v0.0.0-20211202172717-e8b0536a572e/go.mod h1:nq3crM3wVqnyMlM/4ZydTuJ/WyCapAsOt7P94oRgSPg= github.com/smartcontractkit/libocr v0.0.0-20211210213233-5443fb9db7f7 h1:RkwDW6gxsfhKqPvaxm3Qxfw/6l2QWgC0YrA6zgEXT2k= github.com/smartcontractkit/libocr v0.0.0-20211210213233-5443fb9db7f7/go.mod h1:nq3crM3wVqnyMlM/4ZydTuJ/WyCapAsOt7P94oRgSPg= github.com/smartcontractkit/sqlx v1.3.5-0.20210805004948-4be295aacbeb h1:OMaBUb4X9IFPLbGbCHsMU+kw/BPCrewaVwWGIBc0I4A= github.com/smartcontractkit/sqlx v1.3.5-0.20210805004948-4be295aacbeb/go.mod h1:HNUu4cJekUdsJbwRBCiOybtkPJEfGRELQPe2tkoDEyk= github.com/smartcontractkit/wsrpc v0.3.5 h1:i4SZGK+wKGvb6GQI9tD/mcYoRgfc5xKai3UpePVkcLY= +github.com/smartcontractkit/wsrpc v0.3.5/go.mod h1:9ciG9g+0Hb9FgqUmt7MHz3EhTbLjbEoftcq8McErZN0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= @@ -1635,6 +1826,7 @@ github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7A github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/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= @@ -1649,7 +1841,6 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -1663,7 +1854,6 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM 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/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk= github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= @@ -1674,11 +1864,14 @@ github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8 github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/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/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -1695,6 +1888,7 @@ github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -1706,32 +1900,34 @@ 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.15.1/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= -github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= -github.com/tendermint/tendermint v0.34.11/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= -github.com/tendermint/tendermint v0.34.12/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= github.com/tendermint/tendermint v0.34.13/go.mod h1:6RVVRBqwtKhA+H59APKumO+B7Nye4QXSFc6+TYxAxCI= -github.com/tendermint/tendermint v0.34.14 h1:GCXmlS8Bqd2Ix3TQCpwYLUNHe+Y+QyJsm5YE+S/FkPo= github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= +github.com/tendermint/tendermint v0.34.15 h1:45OEYTBD/TL0YFn8MF7yYJvC5iubyN4AbEjctPi1UqA= +github.com/tendermint/tendermint v0.34.15/go.mod h1:/7EDAw02rD7GT8syC317cX9ZhZTCdaFVvYjU8W+yJSs= github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= -github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= +github.com/tendermint/tm-db v0.6.6 h1:EzhaOfR0bdKyATqcd5PNeyeq8r+V4bRPHBfyFdD9kGM= +github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= +github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB1JpVZouslJpI3GBNoiqW7+wb0Rz7w= -github.com/terra-money/core v0.5.2/go.mod h1:GnMYeY3POY4A8UV/kL3mfmLCe5hptgAJTqmf3FZjy+U= -github.com/terra-money/core v0.5.13 h1:W/QNli/f2sXh7mNzCwSLHlQR5AqHAWJZptecc+33hrU= +github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/terra-money/core v0.5.13/go.mod h1:aVpV4DsT+/RYoar1pVo1uuR/mNT8Wg95VoPHbfff7cg= +github.com/terra-money/core v0.5.14 h1:rXm7APnaqICec56nG/K8BiqoCY+qBtD8zT83d/FysIc= +github.com/terra-money/core v0.5.14/go.mod h1:wO54CXtp2c32FqhLDEJtuK8gihPMyu+T0vpSVB+Ud98= github.com/terra-money/terra.go v1.0.1-0.20211220063124-386f2075291e h1:R9FcYx6dSsT9YsDKLFAqq6zrbWnI6t4hjCelraU+GWY= github.com/terra-money/terra.go v1.0.1-0.20211220063124-386f2075291e/go.mod h1:QSWndJuAQMn7vSxQJQARj5dcCbfx3k9v3BzT4DHY/GE= -github.com/terra-project/terra.go v1.0.1-0.20210907074752-0a5391f2dfe2 h1:fm3qK1B4oAmv4aQ2YZ1rheR7+V44b0EQkVyk24GkWII= -github.com/terra-project/terra.go v1.0.1-0.20210907074752-0a5391f2dfe2/go.mod h1:b1dU/8kD+us5wcIb3Lnby56VldzHjNTFSIL2khq9eEA= +github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/tevino/abool v0.0.0-20170917061928-9b9efcf221b5/go.mod h1:f1SCnEOt6sc3fOJfPQDRDzHOtSXuTtnz0ImG9kPRDV0= github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a h1:YuO+afVc3eqrjiCUizNCxI53bl/BnPiVwXqLzqYTqgU= +github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a/go.mod h1:/sfW47zCZp9FrtGcWyo1VjbgDaodxX9ovZvgLb/MxaA= github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= @@ -1751,6 +1947,7 @@ github.com/tidwall/sjson v1.1.1/go.mod h1:yvVuSnpEQv5cYIrO+AT6kw4QVfd5SDZoGIS7/5 github.com/tidwall/sjson v1.1.2/go.mod h1:SEzaDwxiPzKzNfUEO4HbYF/m4UCSJDsGgNqsS1LvdoY= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= github.com/tjfoc/gmsm v1.0.1/go.mod h1:XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/wc= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= @@ -1760,7 +1957,9 @@ github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2bi github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= 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/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -1828,6 +2027,9 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= go.dedis.ch/fixbuf v1.0.3 h1:hGcV9Cd/znUxlusJ64eAlExS+5cJDIyTyEG+otu5wQs= @@ -1842,12 +2044,14 @@ go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= 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/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1879,10 +2083,12 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= +go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= @@ -1904,6 +2110,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1921,6 +2128,7 @@ golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1930,11 +2138,17 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1945,6 +2159,7 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -1956,6 +2171,12 @@ golang.org/x/exp v0.0.0-20201008143054-e3b2a7f2fdc7/go.mod h1:1phAWC201xIgDyaFpm golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -2049,9 +2270,16 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211005001312-d4b1ae081e3b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211101193420-4a448f8816b3/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM= golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -2120,6 +2348,7 @@ golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7w 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-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2134,6 +2363,7 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2161,11 +2391,14 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2173,6 +2406,8 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305034016-7844c3c200c3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2192,15 +2427,21 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211004093028-2c5d950f24ef/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211102192858-4dd72447c267 h1:7zYaz3tjChtpayGDzu6H0hDAUM5zIGA2XW7kRNgQ0jc= golang.org/x/sys v0.0.0-20211102192858-4dd72447c267/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2217,9 +2458,11 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2235,16 +2478,21 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190912185636-87d9f09c5d89/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2278,6 +2526,7 @@ golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -2285,7 +2534,9 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201124202034-299f270db459/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201202200335-bef1c476418a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -2300,6 +2551,9 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2310,9 +2564,11 @@ gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJ gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/gonum v0.9.3 h1:DnoIG+QAMaF5NvxnGe/oKsgKcAc6PcUyl8q0VetfQ8s= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= @@ -2321,6 +2577,7 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -2351,6 +2608,7 @@ google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -2418,8 +2676,9 @@ google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKr google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 h1:z+ErRPu0+KS02Td3fOAgdX+lnPDh/VyaABEJPD4JRQs= google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -2495,6 +2754,7 @@ gopkg.in/guregu/null.v2 v2.1.2/go.mod h1:XORrx8tyS5ZDcyUboCIxQtta/Aujk/6pfWrn9Xe gopkg.in/guregu/null.v3 v3.5.0/go.mod h1:E4tX2Qe3h7QdL+uZ3a0vqvYwKQsRSQKM5V4YltdgH9Y= gopkg.in/guregu/null.v4 v4.0.0 h1:1Wm3S1WEA2I26Kq+6vcW+w0gcDo44YKYD7YIEJNHDjg= gopkg.in/guregu/null.v4 v4.0.0/go.mod h1:YoQhUrADuG3i9WqesrCmpNRwm1ypAgSHYqoOcTu/JrI= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -2509,9 +2769,11 @@ gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLv gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -2534,6 +2796,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= 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= @@ -2545,6 +2809,94 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= +modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= +modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= +modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= +modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= +modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= +modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= +modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= +modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= +modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= +modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs= +modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8= +modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE= +modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk= +modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w= +modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE= +modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8= +modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc= +modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU= +modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE= +modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk= +modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI= +modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE= +modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg= +modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74= +modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU= +modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU= +modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc= +modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM= +modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POmS4= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= +modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= +modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= +modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= +modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= +modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= +modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= +modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= +modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= +modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= +modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= +modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY= +modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE= +modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg= +modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM= +modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg= +modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo= +modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8= +modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ= +modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA= +modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM= +modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg= +modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE= +modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM= +modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU= +modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw= +modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M= +modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18= +modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8= +modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= +modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.14.1/go.mod h1:04Lqa+3PuAEUhAPAPWeDMljT4UYA31nb2DHTFG47L1g= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= @@ -2552,6 +2904,7 @@ rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/pkg/terra/client.go b/pkg/terra/client.go new file mode 100644 index 00000000..ad90a277 --- /dev/null +++ b/pkg/terra/client.go @@ -0,0 +1,112 @@ +package terra + +import ( + "context" + "net/http" + + "encoding/json" + "fmt" + "io/ioutil" + + cosmosclient "github.com/cosmos/cosmos-sdk/client" + "github.com/pkg/errors" + "github.com/terra-money/core/app" + + "time" + + "github.com/cosmos/cosmos-sdk/codec" + + "github.com/terra-money/terra.go/client" + "github.com/terra-money/terra.go/key" + "github.com/terra-money/terra.go/msg" +) + +type Client struct { + codec *codec.LegacyAmino + + fallbackGasPrice msg.Dec + gasLimitMultiplier msg.Dec + fcdhttpURL string + cosmosRPC string + chainID string + clientCtx cosmosclient.Context + httpTimeout time.Duration + + Log Logger +} + +func NewClient(spec OCR2Spec, lggr Logger) (*Client, error) { + fallbackGasPrice, err := msg.NewDecFromStr(spec.FallbackGasPrice) + if err != nil { + return nil, errors.Wrapf(err, "invalid fallback gas price %v", spec.FallbackGasPrice) + } + gasLimitMultiplier, err := msg.NewDecFromStr(spec.GasLimitMultiplier) + if err != nil { + return nil, errors.Wrapf(err, "invalid gas limit multiplier %v", spec.GasLimitMultiplier) + } + tmClient, err := cosmosclient.NewClientFromNode(spec.TendermintURL) + if err != nil { + return nil, err + } + clientCtx := cosmosclient.Context{}. + WithClient(tmClient). + WithChainID(spec.ChainID). + WithTxConfig(app.MakeEncodingConfig().TxConfig) + + return &Client{ + codec: codec.NewLegacyAmino(), + chainID: spec.ChainID, + clientCtx: clientCtx, + cosmosRPC: spec.CosmosURL, + httpTimeout: spec.HTTPTimeout, + fcdhttpURL: spec.FCDNodeEndpointURL, + fallbackGasPrice: fallbackGasPrice, + gasLimitMultiplier: gasLimitMultiplier, + Log: lggr, + }, nil +} + +func (c *Client) LCD(gasPrice msg.DecCoin, gasAdjustment msg.Dec, signer key.PrivKey, timeout time.Duration) *client.LCDClient { + return client.NewLCDClient(c.cosmosRPC, c.chainID, gasPrice, gasAdjustment, signer, timeout) +} + +func (c *Client) GasPrice() msg.DecCoin { + var fallback = msg.NewDecCoinFromDec("uluna", c.fallbackGasPrice) + url := fmt.Sprintf("%s%s", c.fcdhttpURL, "/v1/txs/gas_prices") + ctx, cancel := context.WithTimeout(context.Background(), c.httpTimeout) + defer cancel() + req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + resp, err := http.DefaultClient.Do(req) + if err != nil { + c.Log.Errorf("error querying %s, err %v", url, err) + return fallback + } + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + c.Log.Errorf("error reading body, err %v", url, err) + return fallback + } + defer resp.Body.Close() + var prices struct { + Uluna string `json:"uluna"` + } + if err := json.Unmarshal(b, &prices); err != nil { + c.Log.Errorf("error unmarshalling, err %v", url, err) + return fallback + } + p, err := msg.NewDecFromStr(prices.Uluna) + if err != nil { + c.Log.Errorf("error parsing, err %v", url, err) + return fallback + } + return msg.NewDecCoinFromDec("uluna", p) +} + +type ABCIQueryParams struct { + ContractAddress string + Msg []byte +} + +func NewAbciQueryParams(contractAddress string, msg []byte) ABCIQueryParams { + return ABCIQueryParams{contractAddress, msg} +} diff --git a/pkg/terra/client_test.go b/pkg/terra/client_test.go new file mode 100644 index 00000000..3ae0c62c --- /dev/null +++ b/pkg/terra/client_test.go @@ -0,0 +1,258 @@ +package terra + +import ( + "context" + "encoding/json" + + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/smartcontractkit/chainlink-terra/pkg/terra/mocks" + "github.com/stretchr/testify/mock" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/terra-money/core/app" + terraSDK "github.com/terra-money/core/x/wasm/types" + + "io/ioutil" + "net/http" + "os" + "os/exec" + "path" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + txtypes "github.com/cosmos/cosmos-sdk/types/tx" + "github.com/pelletier/go-toml" + "github.com/terra-money/terra.go/client" + "github.com/terra-money/terra.go/key" + "github.com/terra-money/terra.go/msg" + "golang.org/x/net/context/ctxhttp" + + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func createKeyFromMnemonic(t *testing.T, mnemonic string) (key.PrivKey, sdk.AccAddress) { + // Derive Raw Private Key + privKeyBz, err := key.DerivePrivKeyBz(mnemonic, key.CreateHDPath(0, 0)) + assert.NoError(t, err) + // Generate StdPrivKey + privKey, err := key.PrivKeyGen(privKeyBz) + assert.NoError(t, err) + addr := msg.AccAddress(privKey.PubKey().Address()) + return privKey, addr +} + +type Account struct { + Name string + PrivateKey key.PrivKey + Address sdk.AccAddress +} + +func setup(t *testing.T) ([]Account, string) { + testdir, err := ioutil.TempDir("", "integration-test") + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, os.RemoveAll(testdir)) + }) + t.Log(testdir) + chainID := "42" + _, err = exec.Command("terrad", "init", "integration-test", "-o", "--chain-id", chainID, "--home", testdir).Output() + require.NoError(t, err) + + // Enable the api server + p := path.Join(testdir, "config", "app.toml") + f, err := os.ReadFile(p) + config, err := toml.Load(string(f)) + require.NoError(t, err) + config.Set("api.enable", "true") + require.NoError(t, os.WriteFile(p, []byte(config.String()), 644)) + // TODO: could also speed up the block mining config + + // Create 2 test accounts + var accounts []Account + for i := 0; i < 2; i++ { + account := fmt.Sprintf("test%d", i) + key, err := exec.Command("terrad", "keys", "add", account, "--output", "json", "--keyring-backend", "test", "--keyring-dir", testdir).Output() + require.NoError(t, err) + t.Log("key", string(key), account) + var k struct { + Address string `json:"address"` + Mnemonic string `json:"mnemonic"` + } + require.NoError(t, json.Unmarshal(key, &k)) + privateKey, address := createKeyFromMnemonic(t, k.Mnemonic) + // Give it 100 luna + _, err = exec.Command("terrad", "add-genesis-account", k.Address, "100000000uluna", "--home", testdir).Output() + require.NoError(t, err) + accounts = append(accounts, Account{ + Name: account, + Address: address, + PrivateKey: privateKey, + }) + } + // Stake 10 luna in first acct + out, err := exec.Command("terrad", "gentx", accounts[0].Name, "10000000uluna", fmt.Sprintf("--chain-id=%s", chainID), "--keyring-backend", "test", "--keyring-dir", testdir, "--home", testdir).CombinedOutput() + require.NoError(t, err, string(out)) + out, err = exec.Command("terrad", "collect-gentxs", "--home", testdir).CombinedOutput() + require.NoError(t, err, string(out)) + cmd := exec.Command("terrad", "start", "--home", testdir) + require.NoError(t, cmd.Start()) + t.Cleanup(func() { + require.NoError(t, cmd.Process.Kill()) + }) + time.Sleep(10 * time.Second) // Wait for api server to boot + out, err = exec.Command("terrad", "tx", "wasm", "store", "testdata/my_first_contract.wasm", + "--from", accounts[0].Name, "--gas", "auto", "--fees", "100000uluna", "--chain-id", "42", "--broadcast-mode", "block", "--home", testdir, "--keyring-backend", "test", "--keyring-dir", testdir, "--yes").CombinedOutput() + out, err = exec.Command("terrad", "tx", "wasm", "instantiate", "1", `{"count":0}`, + "--from", accounts[0].Name, "--gas", "auto", "--fees", "100000uluna", "--output", "json", "--chain-id", "42", "--broadcast-mode", "block", "--home", testdir, "--keyring-backend", "test", "--keyring-dir", testdir, "--yes").Output() + require.NoError(t, err, string(out)) + var deployment struct { + TxHash string `json:"txhash"` + } + require.NoError(t, json.Unmarshal(out, &deployment)) + t.Log("deployment", deployment.TxHash) + return accounts, deployment.TxHash +} + +func getContractAddr(t *testing.T, tc *Client, deploymentHash string) sdk.AccAddress { + deploymentTx, err := tc.clientCtx.Client.Tx(context.Background(), hexutil.MustDecode("0x"+deploymentHash), false) + require.NoError(t, err) + var contractAddr string + for _, etype := range deploymentTx.TxResult.Events { + if etype.Type == "wasm" { + for _, attr := range etype.Attributes { + if string(attr.Key) == "contract_address" { + contractAddr = string(attr.Value) + } + } + } + } + require.NotEqual(t, "", contractAddr) + contract, err := sdk.AccAddressFromBech32(contractAddr) + require.NoError(t, err) + return contract +} + +func TestTerraClient(t *testing.T) { + // Local only for now, could maybe run on CI if we install terrad there? + if os.Getenv("TEST_CLIENT") == "" { + t.Skip() + } + accounts, deploymentHash := setup(t) + cosmosURL := "http://127.0.0.1:1317" + tendermintURL := "http://127.0.0.1:26657" + fcdURL := "https://fcd.terra.dev/" // TODO we can mock this + + // https://lcd.terra.dev/swagger/#/ + // https://fcd.terra.dev/swagger + cl := http.Client{Timeout: 5 * time.Second} + get := func(url, path string) []byte { + r, err := ctxhttp.Get(context.Background(), &cl, url+path) + t.Log(url + path) + require.NoError(t, err) + b, err := ioutil.ReadAll(r.Body) + require.NoError(t, err) + defer r.Body.Close() + return b + } + + lggr := new(mocks.Logger) + lggr.Test(t) + lggr.On("Infof", mock.Anything, mock.Anything, mock.Anything).Maybe() + lggr.On("Errorf", mock.Anything, mock.Anything, mock.Anything).Maybe() + tc, err := NewClient(OCR2Spec{ + FCDNodeEndpointURL: fcdURL, + TendermintURL: tendermintURL, + CosmosURL: cosmosURL, + ChainID: "42", + FallbackGasPrice: "0.01", + GasLimitMultiplier: "1.3", + }, lggr) + require.NoError(t, err) + + time.Sleep(5 * time.Second) + + // Query initial contract state + contract := getContractAddr(t, tc, deploymentHash) + q := NewAbciQueryParams(contract.String(), []byte(`{"get_count":{}}`)) + data, err := tc.codec.MarshalJSON(q) + require.NoError(t, err) + count, err := tc.clientCtx.QueryABCI(abci.RequestQuery{ + Data: data, + Path: "custom/wasm/contractStore", + Height: 0, + Prove: false, + }) + require.NoError(t, err) + assert.Equal(t, `{"count":0}`, string(count.Value)) + + // Change the contract state + rawMsg := terraSDK.NewMsgExecuteContract(accounts[0].Address, contract, []byte(`{"reset":{"count":5}}`), sdk.Coins{}) + lcd := tc.LCD(tc.GasPrice(), tc.gasLimitMultiplier, accounts[0].PrivateKey, 5*time.Second) + tx, err := lcd.CreateAndSignTx(context.Background(), client.CreateTxOptions{Msgs: []msg.Msg{ + rawMsg, + }, + GasLimit: 1000000, + }) + require.NoError(t, err) + b, err := tx.GetTxBytes() + require.NoError(t, err) + _, err = tc.clientCtx.WithBroadcastMode("block").BroadcastTx(b) + require.NoError(t, err) + + // Observe changed contract state + count, err = tc.clientCtx.QueryABCI(abci.RequestQuery{ + Data: data, + Path: "custom/wasm/contractStore", + Height: 0, + Prove: false, + }) + require.NoError(t, err) + assert.Equal(t, `{"count":5}`, string(count.Value)) + + gp := tc.GasPrice() + // Should not use fallback + assert.NotEqual(t, gp.String(), "0.01uluna") + t.Log(gp) + + lcd = tc.LCD(tc.GasPrice(), tc.gasLimitMultiplier, accounts[0].PrivateKey, 5*time.Second) + tx, err = lcd.CreateAndSignTx(context.Background(), client.CreateTxOptions{ + Msgs: []msg.Msg{ + msg.NewMsgSend(accounts[0].Address, accounts[1].Address, msg.NewCoins(msg.NewInt64Coin("uluna", 1))), // 1uusd + }, + GasLimit: 200000, + }) + require.NoError(t, err) + b, err = tx.GetTxBytes() + require.NoError(t, err) + resp, err := tc.clientCtx.WithBroadcastMode("block").BroadcastTx(b) + require.NoError(t, err) + + // Note even the blocking command doesn't let you query for the tx right away + time.Sleep(1 * time.Second) + + // Ensure cosmos endpoints work + b = get(cosmosURL, "/cosmos/tx/v1beta1/txs/"+resp.TxHash) + var tx2 txtypes.GetTxResponse + require.NoError(t, app.MakeEncodingConfig().Marshaler.UnmarshalJSON(b, &tx2)) + t.Log(tx.GetTx().GetFee().String()) + + b = get(cosmosURL, "/cosmos/bank/v1beta1/balances/"+accounts[0].Address.String()) + var balances banktypes.QueryAllBalancesResponse + require.NoError(t, app.MakeEncodingConfig().Marshaler.UnmarshalJSON(b, &balances)) + t.Log(balances.GetBalances().AmountOf("uluna").String()) + + // Ensure we can read back the tx with Query + tr, err := tc.clientCtx.Client.TxSearch(context.Background(), fmt.Sprintf("tx.height=%v", tx2.TxResponse.Height), false, nil, nil, "desc") + require.NoError(t, err) + assert.Equal(t, 1, tr.TotalCount) + assert.Equal(t, tx2.TxResponse.TxHash, tr.Txs[0].Hash.String()) + + // Check getting the height works + latestBlock, err := tc.clientCtx.Client.Block(context.Background(), nil) + require.NoError(t, err) + assert.True(t, latestBlock.Block.Height > 1) +} diff --git a/pkg/terra/contract_config_tracker.go b/pkg/terra/contract_config_tracker.go index 36be8804..18a739ed 100644 --- a/pkg/terra/contract_config_tracker.go +++ b/pkg/terra/contract_config_tracker.go @@ -6,6 +6,8 @@ import ( "fmt" "strconv" + abci "github.com/tendermint/tendermint/abci/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/pkg/errors" "github.com/smartcontractkit/libocr/offchainreporting2/types" @@ -13,15 +15,11 @@ import ( // Contract handles the OCR2 subscription needs but does not track state (state is tracked in actual OCR2 implementation) type Contract struct { - ChainID string - JobID string - ContractID sdk.AccAddress - terra *Client - Transmitter TransmissionSigner - stop chan struct{} - data chan Events - newConfig chan struct{} - log Logger + JobID string + ContractAddress sdk.AccAddress + terra *Client + Transmitter TransmissionSigner + log Logger } func NewContractTracker(spec OCR2Spec, jobID string, client *Client, lggr Logger) (*Contract, error) { @@ -31,71 +29,41 @@ func NewContractTracker(spec OCR2Spec, jobID string, client *Client, lggr Logger } contract := Contract{ - ChainID: spec.ChainID, - JobID: jobID, - ContractID: addr, - terra: client, - Transmitter: spec.TransmissionSigner, - data: make(chan Events), - stop: make(chan struct{}), - log: lggr, - } - - // begin websocket subscription using terra.Subscribe - return &contract, contract.terra.Subscribe(context.TODO(), jobID, contract.ContractID, contract.data) -} - -// Start creates a loop with handler for different event types -func (ct *Contract) Start() { - for { - select { - case data := <-ct.data: - // process received data - for _, event := range data.Events { - if event == "wasm-set_config" { - ct.newConfig <- struct{}{} - } - } - case <-ct.stop: - return - } + JobID: jobID, + ContractAddress: addr, + terra: client, + Transmitter: spec.TransmissionSigner, + log: lggr, } -} -// Close stops the event channel listener loop and unsubscribes the job from the websocket -func (ct *Contract) Close() error { - // stop listening loops - defer close(ct.stop) - // unsubscribe websocket - return ct.terra.Unsubscribe(context.TODO(), ct.JobID) + return &contract, nil } -// ContractConfigTracker interface implemented below - -// Notify is a channel for notifying if a new config event has been emitted +// Unused, libocr will use polling func (ct *Contract) Notify() <-chan struct{} { - return ct.newConfig + return nil } // LatestConfigDetails returns data by reading the contract state and is called when Notify is triggered or the config poll timer is triggered func (ct *Contract) LatestConfigDetails(ctx context.Context) (changedInBlock uint64, configDigest types.ConfigDigest, err error) { - // query state - queryParams := NewAbciQueryParams(ct.ContractID.String(), []byte(`"latest_config_details"`)) - - raw, err := ct.terra.Query( - ABCI, - []interface{}{"custom/wasm/contractStore", queryParams}, - ) + queryParams := NewAbciQueryParams(ct.ContractAddress.String(), []byte(`"latest_config_details"`)) + data, err := ct.terra.codec.MarshalJSON(queryParams) + if err != nil { + return + } + resp, err := ct.terra.clientCtx.QueryABCI(abci.RequestQuery{ + Data: data, + Path: "custom/wasm/contractStore", + Height: 0, + Prove: false, + }) if err != nil { return } - - // unmarshal var config ConfigDetails - if err = json.Unmarshal(raw, &config); err != nil { + if err = json.Unmarshal(resp.Value, &config); err != nil { return } - changedInBlock = config.BlockNumber configDigest = config.ConfigDigest return @@ -103,23 +71,14 @@ func (ct *Contract) LatestConfigDetails(ctx context.Context) (changedInBlock uin // LatestConfig returns data by searching emitted events and is called in the same scenario as LatestConfigDetails func (ct *Contract) LatestConfig(ctx context.Context, changedInBlock uint64) (types.ContractConfig, error) { - queryStr := fmt.Sprintf("tx.height=%d AND wasm-set_config.contract_address='%s'", changedInBlock, ct.ContractID) - raw, err := ct.terra.Query( - TX, - []interface{}{queryStr}, - ) + queryStr := fmt.Sprintf("tx.height=%d AND wasm-set_config.contract_address='%s'", changedInBlock, ct.ContractAddress) + res, err := ct.terra.clientCtx.Client.TxSearch(ctx, queryStr, false, nil, nil, "desc") if err != nil { return types.ContractConfig{}, err } - - // unmarshal - var res TxResponse - if err := json.Unmarshal(raw, &res); err != nil { - return types.ContractConfig{}, err - } else if len(res.Txs) == 0 { + if len(res.Txs) == 0 { return types.ContractConfig{}, fmt.Errorf("No transactions found for block %d", changedInBlock) } - // fetch event and process (use first tx and \first log set) if len(res.Txs[0].TxResult.Events) == 0 { return types.ContractConfig{}, fmt.Errorf("No events found for tx %s", res.Txs[0].Hash) @@ -186,8 +145,9 @@ func (ct *Contract) LatestConfig(ctx context.Context, changedInBlock uint64) (ty // LatestBlockHeight returns the height of the most recent block in the chain. func (ct *Contract) LatestBlockHeight(ctx context.Context) (blockHeight uint64, err error) { - if ct.terra.Height == 0 { - ct.log.Warnf("Invalid block height: %d - this is a problem if it occurs long after startup", ct.terra.Height) + b, err := ct.terra.clientCtx.Client.Block(ctx, nil) + if err != nil { + return 0, err } - return ct.terra.Height, nil + return uint64(b.Block.Height), nil } diff --git a/pkg/terra/contract_transmitter.go b/pkg/terra/contract_transmitter.go index 8043a6ad..cb96557d 100644 --- a/pkg/terra/contract_transmitter.go +++ b/pkg/terra/contract_transmitter.go @@ -3,16 +3,17 @@ package terra import ( "context" "encoding/json" - "time" + txtypes "github.com/cosmos/cosmos-sdk/types/tx" "github.com/pkg/errors" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/terra-money/terra.go/client" "github.com/terra-money/terra.go/msg" cosmosSDK "github.com/cosmos/cosmos-sdk/types" "github.com/smartcontractkit/libocr/offchainreporting2/chains/evmutil" "github.com/smartcontractkit/libocr/offchainreporting2/types" terraSDK "github.com/terra-money/core/x/wasm/types" - "github.com/terra-money/terra.go/client" ) // Transmit signs and sends the report @@ -22,7 +23,7 @@ func (ct *Contract) Transmit( report types.Report, sigs []types.AttributedOnchainSignature, ) error { - ct.terra.Log.Infof("[%s] Sending TX to %s", ct.JobID, ct.ContractID) + ct.terra.Log.Infof("[%s] Sending TX to %s", ct.JobID, ct.ContractAddress) msgStruct := TransmitMsg{} reportContext := evmutil.RawReportContext(reportCtx) for _, r := range reportContext { @@ -44,32 +45,28 @@ func (ct *Contract) Transmit( } // create execute msg - rawMsg := terraSDK.NewMsgExecuteContract(sender, ct.ContractID, msgBytes, cosmosSDK.Coins{}) + rawMsg := terraSDK.NewMsgExecuteContract(sender, ct.ContractAddress, msgBytes, cosmosSDK.Coins{}) options := client.CreateTxOptions{ Msgs: []msg.Msg{rawMsg}, Memo: "", } // need LCD for fetching sequence, account number, + setting gas prices, etc - gasPrice := msg.NewDecCoinFromDec("uluna", msg.NewDecFromIntWithPrec(msg.NewInt(16), 3)) - defaultGasAdjustment := msg.NewDecFromIntWithPrec(msg.NewInt(15), 1) // default gas adjustmnet - lcd := ct.terra.LCD(gasPrice, defaultGasAdjustment, WrappedPrivKey{ct.Transmitter}, 5*time.Second) + lcd := ct.terra.LCD(ct.terra.GasPrice(), ct.terra.gasLimitMultiplier, WrappedPrivKey{ct.Transmitter}, ct.terra.httpTimeout) txBuilder, err := lcd.CreateAndSignTx(context.TODO(), options) if err != nil { return errors.Wrap(err, "error in Transmit.NewTxBuilder") } - txBytes, err := txBuilder.GetTxBytes() if err != nil { return errors.Wrap(err, "error in Transmit.GetTxBytes") } - // Transmit TX - txResponse, err := ct.terra.Send(ctx, txBytes, BroadcastSync) + txResponse, err := ct.terra.clientCtx.WithBroadcastMode(string(txtypes.BroadcastMode_BROADCAST_MODE_SYNC)).BroadcastTx(txBytes) if err != nil { return errors.Wrap(err, "error in Transmit.Send") } - ct.terra.Log.Infof("[%s] TX Hash: %s", ct.JobID, txResponse.Hash) + ct.terra.Log.Infof("[%s] TX Hash: %s", ct.JobID, txResponse.TxHash) return nil } @@ -79,20 +76,23 @@ func (ct *Contract) LatestConfigDigestAndEpoch(ctx context.Context) ( epoch uint32, err error, ) { - // fetch - queryParams := NewAbciQueryParams(ct.ContractID.String(), []byte(`"latest_config_digest_and_epoch"`)) - - raw, err := ct.terra.Query( - ABCI, - []interface{}{"custom/wasm/contractStore", queryParams}, - ) + queryParams := NewAbciQueryParams(ct.ContractAddress.String(), []byte(`"latest_config_digest_and_epoch"`)) + data, err := ct.terra.codec.MarshalJSON(queryParams) + if err != nil { + return + } + resp, err := ct.terra.clientCtx.QueryABCI(abci.RequestQuery{ + Data: data, + Path: "custom/wasm/contractStore", + Height: 0, + Prove: false, + }) if err != nil { return types.ConfigDigest{}, 0, err } - // unmarshal var digest LatestConfigDigestAndEpoch - if err := json.Unmarshal(raw, &digest); err != nil { + if err := json.Unmarshal(resp.Value, &digest); err != nil { return types.ConfigDigest{}, 0, err } diff --git a/pkg/terra/median_contract.go b/pkg/terra/median_contract.go index 2f065702..21f9ccfa 100644 --- a/pkg/terra/median_contract.go +++ b/pkg/terra/median_contract.go @@ -5,6 +5,8 @@ import ( "encoding/json" "fmt" + abci "github.com/tendermint/tendermint/abci/types" + "math/big" "strconv" "strings" @@ -30,13 +32,17 @@ func (ct *Contract) LatestTransmissionDetails( latestTimestamp time.Time, err error, ) { - // fetch - queryParams := NewAbciQueryParams(ct.ContractID.String(), []byte(`"latest_transmission_details"`)) - - raw, err := ct.terra.Query( - ABCI, - []interface{}{"custom/wasm/contractStore", queryParams}, - ) + queryParams := NewAbciQueryParams(ct.ContractAddress.String(), []byte(`"latest_transmission_details"`)) + data, err := ct.terra.codec.MarshalJSON(queryParams) + if err != nil { + return + } + resp, err := ct.terra.clientCtx.QueryABCI(abci.RequestQuery{ + Data: data, + Path: "custom/wasm/contractStore", + Height: 0, + Prove: false, + }) if err != nil { // TODO: Verify if this is still necessary // https://github.com/smartcontractkit/chainlink-terra/issues/23 @@ -59,7 +65,7 @@ func (ct *Contract) LatestTransmissionDetails( // unmarshal var details LatestTransmissionDetails - if err := json.Unmarshal(raw, &details); err != nil { + if err := json.Unmarshal(resp.Value, &details); err != nil { return types.ConfigDigest{}, 0, 0, big.NewInt(0), time.Now(), err } @@ -80,23 +86,18 @@ func (ct *Contract) LatestRoundRequested(ctx context.Context, lookback time.Dura err error, ) { // calculate start block - blockNum := ct.terra.Height - uint64(lookback.Seconds())/BlockRate - - queryStr := fmt.Sprintf("tx.height > %d AND wasm-new_round.contract_address='%s'", blockNum, ct.ContractID) - raw, err := ct.terra.Query( - TX, - []interface{}{queryStr}, - ) - if err != nil { + latestBlock, blkErr := ct.terra.clientCtx.Client.Block(ctx, nil) + if blkErr != nil { + err = blkErr return } - // unmarshal - var res TxResponse - if err = json.Unmarshal(raw, &res); err != nil { + blockNum := uint64(latestBlock.Block.Height) - uint64(lookback.Seconds())/BlockRate + queryStr := fmt.Sprintf("tx.height > %d AND wasm-new_round.contract_address='%s'", blockNum, ct.ContractAddress) + res, err := ct.terra.clientCtx.Client.TxSearch(ctx, queryStr, false, nil, nil, "desc") + if err != nil { return } - // if no txs exist, return empty - if len(res.Txs) == 0 || res.Count == 0 { + if len(res.Txs) == 0 || res.TotalCount == 0 { return } diff --git a/pkg/terra/mocks/Logger.go b/pkg/terra/mocks/Logger.go new file mode 100644 index 00000000..bb51e815 --- /dev/null +++ b/pkg/terra/mocks/Logger.go @@ -0,0 +1,74 @@ +// Code generated by mockery (devel). DO NOT EDIT. + +package mocks + +import mock "github.com/stretchr/testify/mock" + +// Logger is an autogenerated mock type for the Logger type +type Logger struct { + mock.Mock +} + +// Criticalf provides a mock function with given fields: format, values +func (_m *Logger) Criticalf(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} + +// Debugf provides a mock function with given fields: format, values +func (_m *Logger) Debugf(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} + +// Errorf provides a mock function with given fields: format, values +func (_m *Logger) Errorf(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} + +// Fatalf provides a mock function with given fields: format, values +func (_m *Logger) Fatalf(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} + +// Infof provides a mock function with given fields: format, values +func (_m *Logger) Infof(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} + +// Panicf provides a mock function with given fields: format, values +func (_m *Logger) Panicf(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} + +// Tracef provides a mock function with given fields: format, values +func (_m *Logger) Tracef(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} + +// Warnf provides a mock function with given fields: format, values +func (_m *Logger) Warnf(format string, values ...interface{}) { + var _ca []interface{} + _ca = append(_ca, format) + _ca = append(_ca, values...) + _m.Called(_ca...) +} diff --git a/pkg/terra/relay.go b/pkg/terra/relay.go index 655bbd9b..7bd3c6a1 100644 --- a/pkg/terra/relay.go +++ b/pkg/terra/relay.go @@ -2,6 +2,7 @@ package terra import ( "errors" + "time" uuid "github.com/satori/go.uuid" @@ -11,6 +12,7 @@ import ( "github.com/smartcontractkit/libocr/offchainreporting2/types" ) +//go:generate mockery --name Logger --output ./mocks/ type Logger interface { Tracef(format string, values ...interface{}) Debugf(format string, values ...interface{}) @@ -32,9 +34,14 @@ type OCR2Spec struct { IsBootstrap bool // network data - NodeEndpointHTTP string - NodeEndpointWS string - ChainID string + TendermintURL string // URL exposing tendermint RPC (default port is 26657) + CosmosURL string // URL exposing cosmos endpoints (port is 1317, needs to be enabled in terra node config) + FCDNodeEndpointURL string // FCD nodes have /v1/txs/gas_prices + ChainID string + HTTPTimeout time.Duration + + FallbackGasPrice string + GasLimitMultiplier string // on-chain data ContractID string @@ -84,7 +91,7 @@ func (r *Relayer) NewOCR2Provider(externalJobID uuid.UUID, s interface{}) (relay if err != nil { return nil, err } - tracker, err := NewContractTracker(spec, externalJobID.String(), &client, r.lggr) + tracker, err := NewContractTracker(spec, externalJobID.String(), client, r.lggr) if err != nil { return nil, err } @@ -105,6 +112,7 @@ func (r *Relayer) NewOCR2Provider(externalJobID uuid.UUID, s interface{}) (relay reportCodec := ReportCodec{} return ocr2Provider{ + client: client, offchainConfigDigester: digester, reportCodec: reportCodec, tracker: tracker, @@ -114,6 +122,7 @@ func (r *Relayer) NewOCR2Provider(externalJobID uuid.UUID, s interface{}) (relay } type ocr2Provider struct { + client *Client offchainConfigDigester types.OffchainConfigDigester reportCodec median.ReportCodec tracker types.ContractConfigTracker diff --git a/pkg/terra/terra.go b/pkg/terra/terra.go deleted file mode 100644 index df9a1bbf..00000000 --- a/pkg/terra/terra.go +++ /dev/null @@ -1,500 +0,0 @@ -package terra - -import ( - "context" - "encoding/hex" - "encoding/json" - "fmt" - "strings" - "sync" - "time" - - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/types" - "github.com/gorilla/websocket" - "github.com/terra-money/terra.go/client" - "github.com/terra-money/terra.go/key" - "github.com/terra-money/terra.go/msg" - - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tidwall/gjson" -) - -type WsConn struct { - mu *sync.Mutex - conn *websocket.Conn -} - -type RpcRequest struct { - Jsonrpc string - Method string - Params []interface{} - ID string -} - -type RpcMessage struct { - Error string - Data []byte -} - -type Client struct { - close chan struct{} - codec *codec.LegacyAmino - httpURL string - chainID string - wsURL string - ws WsConn - wsStarted bool - subs map[string]subscription - subUnsub map[string]chan<- Events - queryCh chan RpcMessage - txCh chan RpcMessage - Height uint64 - Log Logger -} - -func NewClient(spec OCR2Spec, lggr Logger) (Client, error) { - return Client{ - close: make(chan struct{}), - codec: codec.NewLegacyAmino(), - chainID: spec.ChainID, - httpURL: spec.NodeEndpointHTTP, - wsURL: spec.NodeEndpointWS, - subs: make(map[string]subscription), - subUnsub: make(map[string]chan<- Events), - queryCh: make(chan RpcMessage), - txCh: make(chan RpcMessage), - Log: lggr, - }, nil -} - -func (c Client) LCD(gasPrice msg.DecCoin, gasAdjustment msg.Dec, signer key.PrivKey, timeout time.Duration) *client.LCDClient { - return client.NewLCDClient(c.httpURL, c.chainID, gasPrice, gasAdjustment, signer, timeout) -} - -type BroadcastTxMethod string - -const ( - // Returns with response from CheckTx, does not wait for DeliverTx - BroadcastSync BroadcastTxMethod = "broadcast_tx_sync" - // Returns right away with no response - BroadcastAsync BroadcastTxMethod = "broadcast_tx_async" - // Returns with response from CheckTx and DeliverTx - BroadcastBlock BroadcastTxMethod = "broadcast_tx_commit" -) - -// Send Terra transaction to blockchain -func (c Client) Send(ctx context.Context, txBytes []byte, method BroadcastTxMethod) (*BroadcastTxResponse, error) { - err := c.ensureWsConnection() - if err != nil { - return nil, err - } - - c.Log.Infof("[broadcast transaction] %s,", string(method)) - - payload := RpcRequest{ - Jsonrpc: "2.0", - Method: string(method), - Params: []interface{}{txBytes}, - ID: string(method), - } - - if err := c.ws.conn.WriteJSON(payload); err != nil { - return nil, err - } - - message := <-c.txCh - if message.Error != "" { - return nil, fmt.Errorf("Broadcast error: %s", message.Error) - } - - var tx BroadcastTxResponse - if err = json.Unmarshal(message.Data, &tx); err != nil { - return nil, fmt.Errorf("Broadcast error: %s", err) - } - - return &tx, nil -} - -type QueryType string - -type ABCIQueryParams struct { - ContractID string - Msg []byte -} - -func NewAbciQueryParams(contractID string, msg []byte) ABCIQueryParams { - return ABCIQueryParams{contractID, msg} -} - -const ( - TX QueryType = "tx_search" - ABCI QueryType = "abci_query" -) - -var defaultAbciQueryParameters = []interface{}{"0", false} -var defaultTxQueryParameters = []interface{}{false, "1", "30", "desc"} - -func (c Client) parseParameters(method QueryType, params []interface{}) ([]interface{}, error) { - paramsLen := len(params) - // check min params and append default parameters - if method == ABCI { - // 2 is minimum parameters that should be passed for abci queries - if paramsLen < 2 { - return nil, fmt.Errorf("Query error: not enough query parameters were passed") - } - // 4 is the length of required parameters for an abci query - if paramsLen < 4 { - // calculate how many default parameters to append, in case if more than required are passed - params = append(params, defaultAbciQueryParameters[paramsLen-2:]...) - } - - // use amino codec to encode abci parameters - bz, err := c.codec.MarshalJSON(params[1]) - if err != nil { - return nil, fmt.Errorf("Query error: %s", err) - } - params[1] = hex.EncodeToString(bz) - } - - // check min params and append default parameters - if method == TX { - // 1 is minimum parameters should be passed for tx queries - if paramsLen < 1 { - return nil, fmt.Errorf("Query error: not enough query parameters were passed") - } - // 5 is the length of required parameters for a tx query - if paramsLen < 5 { - params = append(params, defaultTxQueryParameters[paramsLen-1:]...) - } - - } - - return params, nil -} - -func (c Client) Query(method QueryType, params []interface{}) ([]byte, error) { - err := c.ensureWsConnection() - if err != nil { - return nil, err - } - // Should find a way to remove it - // but for now solves: panic: concurrent write to websocket connection - c.ws.mu.Lock() - defer c.ws.mu.Unlock() - c.Log.Infof("[query] %s, %s", string(method), params) - - params, err = c.parseParameters(method, params) - if err != nil { - return nil, err - } - payload := RpcRequest{ - Jsonrpc: "2.0", - Method: string(method), - Params: params, - ID: string(method), - } - - if err := c.ws.conn.WriteJSON(payload); err != nil { - return nil, err - } - - // wait for a query response - message := <-c.queryCh - - if message.Error != "" { - return nil, fmt.Errorf("Query error: %s", message.Error) - } - - return message.Data, nil -} - -type subscription struct { - Channel chan<- Events - Payload request -} - -type request struct { - Jsonrpc string - Method string - Params []string - ID string -} - -func (c *Client) HeadTracker() error { - fq := []string{"tm.event='NewBlock'"} - - // create new block subscription - channel := make(chan Events) - if err := c.subscribe(context.TODO(), "head-tracker", fq, channel); err != nil { - return err - } - - go func() { - for { - select { - case height := <-channel: - // update block number in the client - c.Log.Infof("[head-tracker] Block height %d", height.Block) - c.Height = height.Block - case <-c.close: - return - } - } - }() - - c.Log.Infof("[head-tracker] Subscription started") - return nil -} - -// Subscribe to Terra events (address specifics) -func (c *Client) Subscribe(ctx context.Context, jobID string, address types.AccAddress, channel chan Events) error { - fq := []string{fmt.Sprintf("tm.event='Tx' AND execute_contract.contract_address='%s'", address)} - - if err := c.subscribe(ctx, jobID, fq, channel); err != nil { - return err - } - c.Log.Infof("[%s] Subscription created for %s", jobID, address) - return nil -} - -type Events struct { - SubErr string // error string if encountered during sub + unsub - Block uint64 // handle block number event - Events []string // handle tx events -} - -// create websocket connection and read if not created yet -func (c *Client) ensureWsConnection() error { - if !c.wsStarted { - ws, _, err := websocket.DefaultDialer.Dial(c.wsURL, nil) - if err != nil { - return err - } - - c.ws = WsConn{ - conn: ws, - mu: &sync.Mutex{}, - } - // TODO: does the websocket connection need a close handler to resubscribe? - // https://github.com/smartcontractkit/chainlink-terra/issues/24 - - // start listening - go c.listen() - c.Log.Infof("Websocket connection opened to %s", c.wsURL) - c.wsStarted = true - } - return nil -} - -// base level subscribe function -func (c *Client) subscribe(ctx context.Context, jobID string, filterQuery []string, channel chan Events) error { - // check if job id already exists (return error if it does) - if _, exists := c.subs[jobID]; exists { - return fmt.Errorf("[%s] Subscription already exists", jobID) - } - - err := c.ensureWsConnection() - if err != nil { - return err - } - - // send subscribe payload - payload := request{ - Jsonrpc: "2.0", - Method: "subscribe", - Params: filterQuery, - ID: jobID, - } - // save response channel to subscription - c.subs[jobID] = subscription{Channel: channel, Payload: payload} - - // set up chanel to catch first response - subUnsub := make(chan Events) - c.subUnsub[jobID] = subUnsub - - // send payload - if err := c.ws.conn.WriteJSON(payload); err != nil { - return err - } - - // wait for successful subscription message - msg := <-subUnsub - if msg.SubErr != "" { - return fmt.Errorf("[%s] WS error: %s", jobID, msg.SubErr) - } - return nil -} - -// listen is the message -func (c *Client) listen() { - // TODO: Need a way to prevent "use of closed network connection" error when closing connection - // https://github.com/smartcontractkit/chainlink-terra/issues/25 - for { - _, messageBytes, err := c.ws.conn.ReadMessage() - if err != nil { - c.Log.Errorf("[client/listen/read]: %s", err) - return - } - message := string(messageBytes) - // parse job id - jobID := gjson.Get(message, "id") - - // if in a sub or unsub state, return error string - if c.subUnsub[jobID.Str] != nil { - error := gjson.Get(message, "error") - c.subUnsub[jobID.Str] <- Events{SubErr: error.Raw} - - // remove sub/unsub state - close(c.subUnsub[jobID.Str]) - c.subUnsub[jobID.Str] = nil - continue - } - - // process head tracker event - if jobID.Str == "head-tracker" { - height := gjson.Get(message, "result.data.value.block.header.height") - c.subs[jobID.Str].Channel <- Events{Block: height.Uint()} - continue - } - - if jobID.Str == string(ABCI) { - var res abci.ResponseQuery - // code == 0 when no error is encountered - result := gjson.Get(message, "result.response").Raw - err := json.Unmarshal([]byte(result), &res) - if err != nil { - err := fmt.Sprintf("Couldn't decode result string: %s", err) - c.queryCh <- RpcMessage{Error: err} - continue - } - if res.Code != 0 { - // if there's an error it's the `log` field - c.queryCh <- RpcMessage{Error: res.Log} - continue - } - c.queryCh <- RpcMessage{Data: res.Value} - continue - } - - if jobID.Str == string(TX) { - errorMessage := gjson.Get(message, "error") - if errorMessage.Raw != "" { - c.queryCh <- RpcMessage{Error: errorMessage.Raw} - continue - } - - response := gjson.Get(message, "result") - - c.queryCh <- RpcMessage{Data: []byte(response.Raw)} - continue - } - - if strings.Contains(jobID.Str, "broadcast_tx") { - errorMessage := gjson.Get(message, "error") - if errorMessage.Raw != "" { - c.txCh <- RpcMessage{Error: errorMessage.Raw} - continue - } - - // for BrodcastBlock need to check the result of deliver_tx - if jobID.Str == string(BroadcastBlock) { - responseCode := gjson.Get(message, "result.deliver_tx.code").Int() - if responseCode != 0 { - responseLog := gjson.Get(message, "result.log") - c.queryCh <- RpcMessage{Error: responseLog.Raw} - } - } - - responseCode := gjson.Get(message, "result.code").Int() - if responseCode != 0 { - responseLog := gjson.Get(message, "result.log") - c.queryCh <- RpcMessage{Error: responseLog.Raw} - } - - response := gjson.Get(message, "result") - - c.txCh <- RpcMessage{Data: []byte(response.Raw)} - continue - } - - // parse events but skip if nothing is found (happens for sub/unsub responses) - eventsRaw := gjson.Get(message, "result.data.value.TxResult.result.events") - if !eventsRaw.Exists() { - continue - } - - // parse events as tendermint events - var events []types.Event - if err := json.Unmarshal([]byte(eventsRaw.Raw), &events); err != nil { - c.Log.Errorf("[client/listen/unmarshal]: %s %s", err, eventsRaw) - } - - // parse data into a standard format based on events - parsedEvents := parseEvents(events) - - // send data to job specific channel - c.subs[jobID.Str].Channel <- Events{Events: parsedEvents} - } -} - -func parseEvents(events []types.Event) (output []string) { - // PLACEHOLDER - just returns an array of event names (no data) - // example: https://github.com/smartcontractkit/external-initiator/blob/84cec9a579530db29ae3ca2489819c3e54d4960c/blockchain/terra/terra.go#L131 - // TODO: implement OCR specific event filtering - for _, event := range events { - if strings.HasPrefix(event.Type, "wasm-") { - output = append(output, event.Type) - } - } - return -} - -func (c *Client) Unsubscribe(ctx context.Context, jobID string) error { - // check if jobID exists - if _, ok := c.subs[jobID]; !ok { - return fmt.Errorf("[%s] Cannot unsubscribe. Job does not exist", jobID) - } - - // create unsubscribe message from the stored subscribe message - payload := c.subs[jobID].Payload - payload.Method = "unsubscribe" - - // set up chanel to catch unsub response - subUnsub := make(chan Events) - c.subUnsub[jobID] = subUnsub - - // send unsub payload - if err := c.ws.conn.WriteJSON(payload); err != nil { - return err - } - - // wait for successful unsubscription message - msg := <-subUnsub - if msg.SubErr != "" { - return fmt.Errorf("[%s] WS error: %s", jobID, msg.SubErr) - } - - // remove saved job - delete(c.subs, jobID) - c.Log.Infof("[%s] Unsubscribe successful", jobID) - return nil -} - -// Close websocket connection -func (c Client) Close() error { - if err := c.Unsubscribe(context.TODO(), "head-tracker"); err != nil { - c.Log.Errorf("[head-tracker] %s", err) - } - - // trigger close channel to trigger stop related services - close(c.close) - - // return if ws client has not been initialized - if !c.wsStarted { - return nil - } - - c.Log.Infof("Closing websocket connection to %s", c.wsURL) - return c.ws.conn.Close() -} diff --git a/pkg/terra/testdata/my_first_contract.wasm b/pkg/terra/testdata/my_first_contract.wasm new file mode 100644 index 0000000000000000000000000000000000000000..60742583752819c23b7e7645d4ec83a56fef74f8 GIT binary patch literal 129231 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 LwidkgBZvNfH*|U9 literal 0 HcmV?d00001 diff --git a/pkg/terra/types.go b/pkg/terra/types.go index b08a14dd..cdd8278f 100644 --- a/pkg/terra/types.go +++ b/pkg/terra/types.go @@ -6,9 +6,6 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/smartcontractkit/libocr/offchainreporting2/types" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/libs/bytes" - tmtypes "github.com/tendermint/tendermint/types" ) const ( @@ -68,30 +65,6 @@ type LatestConfigDigestAndEpoch struct { Epoch uint32 `json:"epoch"` } -// this is needed because by default Height is int64, but terra returns a string -type ResultTx struct { - Hash bytes.HexBytes `json:"hash"` - Height int64 `json:"height,string"` - Index uint32 `json:"index"` - TxResult abci.ResponseDeliverTx `json:"tx_result"` - Tx tmtypes.Tx `json:"tx"` - Proof tmtypes.TxProof `json:"proof,omitempty"` -} - -type TxResponse struct { - Txs []ResultTx `json:"txs"` - Count int `json:"total_count,string"` -} - -type BroadcastTxResponse struct { - Hash bytes.HexBytes `json:"hash"` - Height int64 `json:"height,string"` - CheckTx abci.ResponseCheckTx `json:"check_tx,omitempty"` - DeliverTx abci.ResponseDeliverTx `json:"deliver_tx,omitempty"` - Code uint32 `json:"code,omitempty"` - Data []byte `json:"data,omitempty"` -} - // WrappedPrivKey wraps the signer provided from the core keystore to the expected interface type WrappedPrivKey struct { key TransmissionSigner