diff --git a/.gitignore b/.gitignore index 1af13e52e..e0cd0a609 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ _test/keys/ .vscode/ dist/ .release-env +.fleet # Don't commit the vendor directory if anyone runs 'go mod vendor'. /vendor diff --git a/cmd/config.go b/cmd/config.go index 2b8bde934..2c7e34d7b 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -30,13 +30,15 @@ import ( "strings" "time" + "github.com/spf13/cobra" + "go.uber.org/zap" + "gopkg.in/yaml.v3" + "github.com/cosmos/relayer/v2/relayer" + "github.com/cosmos/relayer/v2/relayer/chains/avalanche" "github.com/cosmos/relayer/v2/relayer/chains/cosmos" "github.com/cosmos/relayer/v2/relayer/chains/penumbra" "github.com/cosmos/relayer/v2/relayer/provider" - "github.com/spf13/cobra" - "go.uber.org/zap" - "gopkg.in/yaml.v3" ) func configCmd(a *appState) *cobra.Command { @@ -375,8 +377,9 @@ type ProviderConfigYAMLWrapper struct { // NOTE: Add new ProviderConfig types in the map here with the key set equal to the type of ChainProvider (e.g. cosmos, substrate, etc.) func (pcw *ProviderConfigWrapper) UnmarshalJSON(data []byte) error { customTypes := map[string]reflect.Type{ - "cosmos": reflect.TypeOf(cosmos.CosmosProviderConfig{}), - "penumbra": reflect.TypeOf(penumbra.PenumbraProviderConfig{}), + "cosmos": reflect.TypeOf(cosmos.CosmosProviderConfig{}), + "penumbra": reflect.TypeOf(penumbra.PenumbraProviderConfig{}), + "avalanche": reflect.TypeOf(avalanche.AvalancheProviderConfig{}), } val, err := UnmarshalJSONProviderConfig(data, customTypes) if err != nil { @@ -435,6 +438,8 @@ func (iw *ProviderConfigYAMLWrapper) UnmarshalYAML(n *yaml.Node) error { iw.Value = new(cosmos.CosmosProviderConfig) case "penumbra": iw.Value = new(penumbra.PenumbraProviderConfig) + case "avalanche": + iw.Value = new(avalanche.AvalancheProviderConfig) default: return fmt.Errorf("%s is an invalid chain type, check your config file", iw.Type) } diff --git a/cmd/flags.go b/cmd/flags.go index dd284cd48..b3bf62b8a 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -229,7 +229,7 @@ func pathFilterFlags(v *viper.Viper, cmd *cobra.Command) *cobra.Command { } func timeoutFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { - cmd.Flags().StringP(flagTimeout, "t", "10s", "timeout between relayer runs") + cmd.Flags().StringP(flagTimeout, "t", "10m", "timeout between relayer runs") if err := v.BindPFlag(flagTimeout, cmd.Flags().Lookup(flagTimeout)); err != nil { panic(err) } diff --git a/examples/demo/configs/chains/99999.json b/examples/demo/configs/chains/99999.json new file mode 100644 index 000000000..40b8339a9 --- /dev/null +++ b/examples/demo/configs/chains/99999.json @@ -0,0 +1,11 @@ +{ + "type": "avalanche", + "value": { + "key": "testkey", + "chain-id": "99999", + "rpc-addr": "http://127.0.0.1:9650/ext/bc/yWk9paR5DkEWMpY1q4HittnSRQT1pZhcmsjwwXGKucHxUz6je/rpc", + "contract-address": "0x0300000000000000000000000000000000000002", + "timeout": "10s", + "keyring-backend": "test" + } +} diff --git a/examples/demo/configs/chains/ibc-0.json b/examples/demo/configs/chains/ibc-0.json deleted file mode 100644 index 9acc0c04e..000000000 --- a/examples/demo/configs/chains/ibc-0.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "cosmos", - "value": { - "key": "testkey", - "chain-id": "ibc-0", - "rpc-addr": "http://localhost:26657", - "grpc-addr": "", - "account-prefix": "cosmos", - "keyring-backend": "test", - "gas-adjustment": 1.5, - "gas-prices": "0.025stake", - "debug": true, - "timeout": "10s", - "output-format": "json", - "sign-mode": "direct" - } -} - diff --git a/examples/demo/configs/chains/ibc-1.json b/examples/demo/configs/chains/ibc-1.json index 56ad3c370..c7b7dbfed 100644 --- a/examples/demo/configs/chains/ibc-1.json +++ b/examples/demo/configs/chains/ibc-1.json @@ -3,12 +3,12 @@ "value": { "key": "testkey", "chain-id": "ibc-1", - "rpc-addr": "http://localhost:26557", + "rpc-addr": "http://localhost:26657", "grpc-addr": "", "account-prefix": "cosmos", "keyring-backend": "test", "gas-adjustment": 1.5, - "gas-prices": "0.025rice", + "gas-prices": "0.025stake", "debug": true, "timeout": "10s", "output-format": "json", diff --git a/examples/demo/configs/paths/demo.json b/examples/demo/configs/paths/demo.json index 14175cedb..77eeac66f 100644 --- a/examples/demo/configs/paths/demo.json +++ b/examples/demo/configs/paths/demo.json @@ -1,6 +1,6 @@ { "src": { - "chain-id": "ibc-0" + "chain-id": "99999" }, "dst": { "chain-id": "ibc-1" diff --git a/examples/demo/configs/paths/demo2.json b/examples/demo/configs/paths/demo2.json new file mode 100644 index 000000000..e378b9f17 --- /dev/null +++ b/examples/demo/configs/paths/demo2.json @@ -0,0 +1,12 @@ +{ + "src": { + "chain-id": "ibc-1" + }, + "dst": { + "chain-id": "99999" + }, + "src-channel-filter": { + "rule": null, + "channel-list": [] + } +} diff --git a/examples/demo/dev-env b/examples/demo/dev-env index a9d0a2894..de42b49aa 100755 --- a/examples/demo/dev-env +++ b/examples/demo/dev-env @@ -18,6 +18,7 @@ pwd # spin up two ibc enabled chains and add relevant config info for relaying bash scripts/two-chainz "skip" +exit echo "waiting for blocks..." sleep 3 diff --git a/examples/demo/scripts/one-chain b/examples/demo/scripts/one-chain index ebb291361..6c08ec475 100755 --- a/examples/demo/scripts/one-chain +++ b/examples/demo/scripts/one-chain @@ -8,7 +8,7 @@ display_usage() { } KEYRING=--keyring-backend="test" -SILENT=1 +SILENT=0 redirect() { if [ "$SILENT" -eq 1 ]; then @@ -74,13 +74,13 @@ $BINARY --home $CHAINDIR/$CHAINID keys add validator $KEYRING --output json > $C sleep 1 $BINARY --home $CHAINDIR/$CHAINID keys add user $KEYRING --output json > $CHAINDIR/$CHAINID/key_seed.json 2>&1 sleep 1 -redirect $BINARY --home $CHAINDIR/$CHAINID add-genesis-account $($BINARY --home $CHAINDIR/$CHAINID keys $KEYRING show user -a) $coins +redirect $BINARY --home $CHAINDIR/$CHAINID genesis add-genesis-account $($BINARY --home $CHAINDIR/$CHAINID keys $KEYRING show user -a) $coins sleep 1 -redirect $BINARY --home $CHAINDIR/$CHAINID add-genesis-account $($BINARY --home $CHAINDIR/$CHAINID keys $KEYRING show validator -a) $coins +redirect $BINARY --home $CHAINDIR/$CHAINID genesis add-genesis-account $($BINARY --home $CHAINDIR/$CHAINID keys $KEYRING show validator -a) $coins sleep 1 -redirect $BINARY --home $CHAINDIR/$CHAINID gentx validator $delegate $KEYRING --chain-id $CHAINID +redirect $BINARY --home $CHAINDIR/$CHAINID genesis gentx validator $delegate $KEYRING --chain-id $CHAINID sleep 1 -redirect $BINARY --home $CHAINDIR/$CHAINID collect-gentxs +redirect $BINARY --home $CHAINDIR/$CHAINID genesis collect-gentxs sleep 1 # Check platform diff --git a/examples/demo/scripts/two-chainz b/examples/demo/scripts/two-chainz index d2d770999..0ed889936 100755 --- a/examples/demo/scripts/two-chainz +++ b/examples/demo/scripts/two-chainz @@ -48,7 +48,7 @@ chainid1=ibc-1 echo "Generating gaia configurations..." mkdir -p $GAIA_DATA && cd $GAIA_DATA && cd ../ ./scripts/one-chain gaiad $chainid0 ./data 26657 26656 6060 9090 stake samoleans -./scripts/one-chain gaiad $chainid1 ./data 26557 26556 6061 9091 rice beans +./scripts/one-chain gaiad $chainid1 ./data 26557 26555 6061 9091 rice beans [ -f $GAIA_DATA/$chainid0.log ] && echo "$chainid0 initialized. Watch file $GAIA_DATA/$chainid0.log to see its execution." [ -f $GAIA_DATA/$chainid1.log ] && echo "$chainid1 initialized. Watch file $GAIA_DATA/$chainid1.log to see its execution." @@ -62,6 +62,7 @@ pwd echo "Generating rly configurations..." rly config init +exit rly chains add-dir configs/chains SEED0=$(jq -r '.mnemonic' $GAIA_DATA/ibc-0/key_seed.json) diff --git a/go.mod b/go.mod index e84b53cda..b760c96a4 100644 --- a/go.mod +++ b/go.mod @@ -1,42 +1,47 @@ module github.com/cosmos/relayer/v2 -go 1.21 +go 1.21.10 + +toolchain go1.22.4 require ( - cosmossdk.io/api v0.7.3 + cosmossdk.io/api v0.7.5 cosmossdk.io/errors v1.0.1 cosmossdk.io/math v1.3.0 - cosmossdk.io/store v1.0.2 + cosmossdk.io/store v1.1.0 cosmossdk.io/x/feegrant v0.1.0 - cosmossdk.io/x/tx v0.13.1 - cosmossdk.io/x/upgrade v0.1.1 + cosmossdk.io/x/tx v0.13.3 + cosmossdk.io/x/upgrade v0.1.0 + github.com/ava-labs/avalanchego v1.10.18 + github.com/ava-labs/subnet-evm v0.6.1 github.com/avast/retry-go/v4 v4.5.1 github.com/btcsuite/btcd v0.24.0 github.com/btcsuite/btcd/btcutil v1.1.5 - github.com/cometbft/cometbft v0.38.6 - github.com/cosmos/cosmos-proto v1.0.0-beta.4 - github.com/cosmos/cosmos-sdk v0.50.5 + github.com/cometbft/cometbft v0.38.7 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.50.6 github.com/cosmos/go-bip39 v1.0.0 - github.com/cosmos/gogoproto v1.4.11 + github.com/cosmos/gogoproto v1.4.12 github.com/cosmos/ibc-go/modules/capability v1.0.0 - github.com/cosmos/ibc-go/v8 v8.2.0 + github.com/cosmos/ibc-go/v8 v8.3.1 github.com/cosmos/ics23/go v0.10.0 - github.com/ethereum/go-ethereum v1.13.15 + github.com/ethereum/go-ethereum v1.12.0 github.com/gofrs/flock v0.8.1 github.com/google/go-github/v43 v43.0.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/jsternberg/zap-logfmt v1.3.0 - github.com/prometheus/client_golang v1.18.0 + github.com/prometheus/client_golang v1.19.1 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.2 github.com/strangelove-ventures/cometbft-client v0.1.0 github.com/stretchr/testify v1.9.0 github.com/tyler-smith/go-bip39 v1.1.0 - go.uber.org/multierr v1.10.0 - go.uber.org/zap v1.26.0 - golang.org/x/sync v0.6.0 + go.uber.org/multierr v1.11.0 + go.uber.org/zap v1.27.0 + golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 + golang.org/x/sync v0.7.0 golang.org/x/text v0.14.0 - google.golang.org/grpc v1.62.1 + google.golang.org/grpc v1.63.2 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -56,33 +61,33 @@ require ( github.com/99designs/keyring v1.2.1 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect - github.com/aws/aws-sdk-go v1.44.312 // indirect + github.com/NYTimes/gziphandler v1.1.1 // indirect + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/ava-labs/coreth v0.12.10-rc.5 // indirect + github.com/aws/aws-sdk-go v1.45.25 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft-db v0.9.1 // indirect - github.com/consensys/bavard v0.1.13 // indirect - github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.0.1 // indirect + github.com/cosmos/iavl v1.1.2 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect - github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect @@ -91,7 +96,6 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect github.com/emicklei/dot v1.6.1 // indirect - github.com/ethereum/c-kzg-4844 v0.4.0 // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -101,6 +105,8 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-stack/stack v1.8.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -113,20 +119,23 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/renameio/v2 v2.0.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/gorilla/handlers v1.5.2 // indirect - github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/handlers v1.5.1 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/gorilla/rpc v1.2.0 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.7.4 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-metrics v0.5.2 // indirect + github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -141,38 +150,48 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.17.7 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.12 // indirect + github.com/linxGnu/grocksdb v1.8.14 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.13 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect + github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/onsi/gomega v1.33.1 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect - github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect + github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect + github.com/pires/go-proxyproto v0.6.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_model v0.6.0 // indirect - github.com/prometheus/common v0.47.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.52.2 // indirect github.com/prometheus/procfs v0.13.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rivo/uniseg v0.2.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.32.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect @@ -182,33 +201,58 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect - go.opentelemetry.io/otel v1.22.0 // indirect - go.opentelemetry.io/otel/metric v1.22.0 // indirect - go.opentelemetry.io/otel/trace v1.22.0 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f // indirect - golang.org/x/net v0.23.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/sdk v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect + go.opentelemetry.io/proto/otlp v1.1.0 // indirect + go.uber.org/mock v0.4.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/term v0.19.0 // indirect golang.org/x/time v0.5.0 // indirect + gonum.org/v1/gonum v0.12.0 // indirect google.golang.org/api v0.162.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c // indirect + google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/protobuf v1.33.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gotest.tools/v3 v3.5.1 // indirect nhooyr.io/websocket v1.8.6 // indirect pgregory.net/rapid v1.1.0 // indirect - rsc.io/tmplfunc v0.0.3 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) + +replace ( + github.com/ava-labs/subnet-evm => github.com/ConsiderItDone/subnet-evm-private v0.0.0-20240809135514-63db363b20f7 + github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 + github.com/cosmos/ibc-go/v8 => github.com/ConsiderItDone/ibc-go-strangelove-private/v8 v8.3.1-0.20240806092051-0a5c4205b2c7 + github.com/ethereum/go-ethereum => github.com/ethereum/go-ethereum v1.12.0 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc => go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp => go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 // indirect + go.opentelemetry.io/otel => go.opentelemetry.io/otel v1.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace => go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.16.0 // indirect + go.opentelemetry.io/otel/metric => go.opentelemetry.io/otel/metric v1.16.0 // indirect + go.opentelemetry.io/otel/sdk => go.opentelemetry.io/otel/sdk v1.16.0 // indirect + go.opentelemetry.io/otel/trace => go.opentelemetry.io/otel/trace v1.16.0 // indirect + google.golang.org/api => google.golang.org/api v0.153.0 +) diff --git a/go.sum b/go.sum index 545f4fb3c..8f40f3d50 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -11,43 +11,176 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.9/go.mod h1:rpxevX/0Lqvlbc88b7Sc1SPNdyK1riNBTUU6JXhYNpM= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= +cloud.google.com/go/accessapproval v1.7.2/go.mod h1:/gShiq9/kK/h8T/eEn1BTzalDvk0mZxJlhfw0p+Xuc0= +cloud.google.com/go/accessapproval v1.7.3/go.mod h1:4l8+pwIxGTNqSf4T3ds8nLO94NQf0W/KnMNuQ9PbnP8= +cloud.google.com/go/accessapproval v1.7.4/go.mod h1:/aTEh45LzplQgFYdQdwPMR9YdX0UlhBmvB84uAmQKUc= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= +cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= +cloud.google.com/go/accesscontextmanager v1.8.2/go.mod h1:E6/SCRM30elQJ2PKtFMs2YhfJpZSNcJyejhuzoId4Zk= +cloud.google.com/go/accesscontextmanager v1.8.3/go.mod h1:4i/JkF2JiFbhLnnpnfoTX5vRXfhf9ukhU1ANOTALTOQ= +cloud.google.com/go/accesscontextmanager v1.8.4/go.mod h1:ParU+WbMpD34s5JFEnGAnPBYAgUHozaTmDJU7aCU9+M= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.50.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.0/go.mod h1:IRc2b8XAMTa9ZmfJV1BCCQbieWWvDnP1A8znyz5N7y4= +cloud.google.com/go/aiplatform v1.51.1/go.mod h1:kY3nIMAVQOK2XDqDPHaOuD9e+FdMA6OOpfBjsvaFSOo= +cloud.google.com/go/aiplatform v1.51.2/go.mod h1:hCqVYB3mY45w99TmetEoe8eCQEwZEp9WHxeZdcv9phw= +cloud.google.com/go/aiplatform v1.52.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.4/go.mod h1:zZgNCxLCy8b2rKKVfC1YkC2vTrpfZmeRCySM3aUbskA= +cloud.google.com/go/analytics v0.21.5/go.mod h1:BQtOBHWTlJ96axpPPnw5CvGJ6i3Ve/qX2fTxR8qWyr8= +cloud.google.com/go/analytics v0.21.6/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= +cloud.google.com/go/apigateway v1.6.2/go.mod h1:CwMC90nnZElorCW63P2pAYm25AtQrHfuOkbRSHj0bT8= +cloud.google.com/go/apigateway v1.6.3/go.mod h1:k68PXWpEs6BVDTtnLQAyG606Q3mz8pshItwPXjgv44Y= +cloud.google.com/go/apigateway v1.6.4/go.mod h1:0EpJlVGH5HwAN4VF4Iec8TAzGN1aQgbxAWGJsnPCGGY= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= +cloud.google.com/go/apigeeconnect v1.6.2/go.mod h1:s6O0CgXT9RgAxlq3DLXvG8riw8PYYbU/v25jqP3Dy18= +cloud.google.com/go/apigeeconnect v1.6.3/go.mod h1:peG0HFQ0si2bN15M6QSjEW/W7Gy3NYkWGz7pFz13cbo= +cloud.google.com/go/apigeeconnect v1.6.4/go.mod h1:CapQCWZ8TCjnU0d7PobxhpOdVz/OVJ2Hr/Zcuu1xFx0= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= +cloud.google.com/go/apigeeregistry v0.7.2/go.mod h1:9CA2B2+TGsPKtfi3F7/1ncCCsL62NXBRfM6iPoGSM+8= +cloud.google.com/go/apigeeregistry v0.8.1/go.mod h1:MW4ig1N4JZQsXmBSwH4rwpgDonocz7FPBSw6XPGHmYw= +cloud.google.com/go/apigeeregistry v0.8.2/go.mod h1:h4v11TDGdeXJDJvImtgK2AFVvMIgGWjSb0HRnBSjcX8= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= +cloud.google.com/go/appengine v1.8.2/go.mod h1:WMeJV9oZ51pvclqFN2PqHoGnys7rK0rz6s3Mp6yMvDo= +cloud.google.com/go/appengine v1.8.3/go.mod h1:2oUPZ1LVZ5EXi+AF1ihNAF+S8JrzQ3till5m9VQkrsk= +cloud.google.com/go/appengine v1.8.4/go.mod h1:TZ24v+wXBujtkK77CXCpjZbnuTvsFNT41MUaZ28D6vg= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= +cloud.google.com/go/area120 v0.8.2/go.mod h1:a5qfo+x77SRLXnCynFWPUZhnZGeSgvQ+Y0v1kSItkh4= +cloud.google.com/go/area120 v0.8.3/go.mod h1:5zj6pMzVTH+SVHljdSKC35sriR/CVvQZzG/Icdyriw0= +cloud.google.com/go/area120 v0.8.4/go.mod h1:jfawXjxf29wyBXr48+W+GyX/f8fflxp642D/bb9v68M= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= +cloud.google.com/go/artifactregistry v1.14.2/go.mod h1:Xk+QbsKEb0ElmyeMfdHAey41B+qBq3q5R5f5xD4XT3U= +cloud.google.com/go/artifactregistry v1.14.3/go.mod h1:A2/E9GXnsyXl7GUvQ/2CjHA+mVRoWAXC0brg2os+kNI= +cloud.google.com/go/artifactregistry v1.14.4/go.mod h1:SJJcZTMv6ce0LDMUnihCN7WSrI+kBSFV0KIKo8S8aYU= +cloud.google.com/go/artifactregistry v1.14.6/go.mod h1:np9LSFotNWHcjnOgh8UVK0RFPCTUGbO0ve3384xyHfE= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= +cloud.google.com/go/asset v1.15.0/go.mod h1:tpKafV6mEut3+vN9ScGvCHXHj7FALFVta+okxFECHcg= +cloud.google.com/go/asset v1.15.1/go.mod h1:yX/amTvFWRpp5rcFq6XbCxzKT8RJUam1UoboE179jU4= +cloud.google.com/go/asset v1.15.2/go.mod h1:B6H5tclkXvXz7PD22qCA2TDxSVQfasa3iDlM89O2NXs= +cloud.google.com/go/asset v1.15.3/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= +cloud.google.com/go/assuredworkloads v1.11.2/go.mod h1:O1dfr+oZJMlE6mw0Bp0P1KZSlj5SghMBvTpZqIcUAW4= +cloud.google.com/go/assuredworkloads v1.11.3/go.mod h1:vEjfTKYyRUaIeA0bsGJceFV2JKpVRgyG2op3jfa59Zs= +cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= +cloud.google.com/go/automl v1.13.2/go.mod h1:gNY/fUmDEN40sP8amAX3MaXkxcqPIn7F1UIIPZpy4Mg= +cloud.google.com/go/automl v1.13.3/go.mod h1:Y8KwvyAZFOsMAPqUCfNu1AyclbC6ivCUF/MTwORymyY= +cloud.google.com/go/automl v1.13.4/go.mod h1:ULqwX/OLZ4hBVfKQaMtxMSTlPx0GqGbWN8uA/1EqCP8= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA= +cloud.google.com/go/baremetalsolution v1.2.0/go.mod h1:68wi9AwPYkEWIUT4SvSGS9UJwKzNpshjHsH4lzk8iOw= +cloud.google.com/go/baremetalsolution v1.2.1/go.mod h1:3qKpKIw12RPXStwQXcbhfxVj1dqQGEvcmA+SX/mUR88= +cloud.google.com/go/baremetalsolution v1.2.2/go.mod h1:O5V6Uu1vzVelYahKfwEWRMaS3AbCkeYHy3145s1FkhM= +cloud.google.com/go/baremetalsolution v1.2.3/go.mod h1:/UAQ5xG3faDdy180rCUv47e0jvpp3BFxT+Cl0PFjw5g= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A= +cloud.google.com/go/batch v1.4.1/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.0/go.mod h1:KdBmDD61K0ovcxoRHGrN6GmOBWeAOyCgKD0Mugx4Fkk= +cloud.google.com/go/batch v1.5.1/go.mod h1:RpBuIYLkQu8+CWDk3dFD/t/jOCGuUpkpX+Y0n1Xccs8= +cloud.google.com/go/batch v1.6.1/go.mod h1:urdpD13zPe6YOK+6iZs/8/x2VBRofvblLpx0t57vM98= +cloud.google.com/go/batch v1.6.3/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.1/go.mod h1:zl/rWWAFVeV+kx+X2Javly7o1EIQThU4WlkynffL/lk= +cloud.google.com/go/beyondcorp v1.0.2/go.mod h1:m8cpG7caD+5su+1eZr+TSvF6r21NdLJk4f9u4SP2Ntc= +cloud.google.com/go/beyondcorp v1.0.3/go.mod h1:HcBvnEd7eYr+HGDd5ZbuVmBYX019C6CEXBonXbCVwJo= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -55,139 +188,946 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.55.0/go.mod h1:9Y5I3PN9kQWuid6183JFhOGOW3GcirA5LpsKCUn+2ec= +cloud.google.com/go/bigquery v1.56.0/go.mod h1:KDcsploXTEY7XT3fDQzMUZlpQLHzE4itubHrnmhUrZA= +cloud.google.com/go/bigquery v1.57.1/go.mod h1:iYzC0tGVWt1jqSzBHqCr3lrRn0u13E8e+AqowBsDgug= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= +cloud.google.com/go/billing v1.17.0/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.1/go.mod h1:Z9+vZXEq+HwH7bhJkyI4OQcR6TSbeMrjlpEjO2vzY64= +cloud.google.com/go/billing v1.17.2/go.mod h1:u/AdV/3wr3xoRBk5xvUzYMS1IawOAPwQMuHgHMdljDg= +cloud.google.com/go/billing v1.17.3/go.mod h1:z83AkoZ7mZwBGT3yTnt6rSGI1OOsHSIi6a5M3mJ8NaU= +cloud.google.com/go/billing v1.17.4/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= +cloud.google.com/go/binaryauthorization v1.7.0/go.mod h1:Zn+S6QqTMn6odcMU1zDZCJxPjU2tZPV1oDl45lWY154= +cloud.google.com/go/binaryauthorization v1.7.1/go.mod h1:GTAyfRWYgcbsP3NJogpV3yeunbUIjx2T9xVeYovtURE= +cloud.google.com/go/binaryauthorization v1.7.2/go.mod h1:kFK5fQtxEp97m92ziy+hbu+uKocka1qRRL8MVJIgjv0= +cloud.google.com/go/binaryauthorization v1.7.3/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= +cloud.google.com/go/certificatemanager v1.7.2/go.mod h1:15SYTDQMd00kdoW0+XY5d9e+JbOPjp24AvF48D8BbcQ= +cloud.google.com/go/certificatemanager v1.7.3/go.mod h1:T/sZYuC30PTag0TLo28VedIRIj1KPGcOQzjWAptHa00= +cloud.google.com/go/certificatemanager v1.7.4/go.mod h1:FHAylPe/6IIKuaRmHbjbdLhGhVQ+CWHSD5Jq0k4+cCE= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= +cloud.google.com/go/channel v1.17.0/go.mod h1:RpbhJsGi/lXWAUM1eF4IbQGbsfVlg2o8Iiy2/YLfVT0= +cloud.google.com/go/channel v1.17.1/go.mod h1:xqfzcOZAcP4b/hUDH0GkGg1Sd5to6di1HOJn/pi5uBQ= +cloud.google.com/go/channel v1.17.2/go.mod h1:aT2LhnftnyfQceFql5I/mP8mIbiiJS4lWqgXA815zMk= +cloud.google.com/go/channel v1.17.3/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.14.1/go.mod h1:K7wGc/3zfvmYWOWwYTgF/d/UVJhS4pu+HAy7PL7mCsU= +cloud.google.com/go/cloudbuild v1.14.2/go.mod h1:Bn6RO0mBYk8Vlrt+8NLrru7WXlQ9/RDWz2uo5KG1/sg= +cloud.google.com/go/cloudbuild v1.14.3/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= +cloud.google.com/go/clouddms v1.7.0/go.mod h1:MW1dC6SOtI/tPNCciTsXtsGNEM0i0OccykPvv3hiYeM= +cloud.google.com/go/clouddms v1.7.1/go.mod h1:o4SR8U95+P7gZ/TX+YbJxehOCsM+fe6/brlrFquiszk= +cloud.google.com/go/clouddms v1.7.2/go.mod h1:Rk32TmWmHo64XqDvW7jgkFQet1tUKNVzs7oajtJT3jU= +cloud.google.com/go/clouddms v1.7.3/go.mod h1:fkN2HQQNUYInAU3NQ3vRLkV2iWs8lIdmBKOx4nrL6Hc= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.2/go.mod h1:A7nYkjNlW2gUoROg1kvJrQGhJP/38UaWwsnuBDOBVUk= +cloud.google.com/go/cloudtasks v1.12.3/go.mod h1:GPVXhIOSGEaR+3xT4Fp72ScI+HjHffSS4B8+BaBB5Ys= +cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWKBPGnsb7udGY0= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.21.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.11.0/go.mod h1:hutBdImE4XNZ1NV4vbPJKSFOnQruhC5Lj9bZqWMTKiU= +cloud.google.com/go/contactcenterinsights v1.11.1/go.mod h1:FeNP3Kg8iteKM80lMwSk3zZZKVxr+PGnAId6soKuXwE= +cloud.google.com/go/contactcenterinsights v1.11.2/go.mod h1:A9PIR5ov5cRcd28KlDbmmXE8Aay+Gccer2h4wzkYFso= +cloud.google.com/go/contactcenterinsights v1.11.3/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.26.0/go.mod h1:YJCmRet6+6jnYYRS000T6k0D0xUXQgBSaJ7VwI8FBj4= +cloud.google.com/go/container v1.26.1/go.mod h1:5smONjPRUxeEpDG7bMKWfDL4sauswqEtnBK1/KKpR04= +cloud.google.com/go/container v1.26.2/go.mod h1:YlO84xCt5xupVbLaMY4s3XNE79MUJ+49VmkInr6HvF4= +cloud.google.com/go/container v1.27.1/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= +cloud.google.com/go/containeranalysis v0.11.0/go.mod h1:4n2e99ZwpGxpNcz+YsFT1dfOHPQFGcAC8FN2M2/ne/U= +cloud.google.com/go/containeranalysis v0.11.1/go.mod h1:rYlUOM7nem1OJMKwE1SadufX0JP3wnXj844EtZAwWLY= +cloud.google.com/go/containeranalysis v0.11.2/go.mod h1:xibioGBC1MD2j4reTyV1xY1/MvKaz+fyM9ENWhmIeP8= +cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= +cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.17.1/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.0/go.mod h1:nCSYFHgtxh2MiEktWIz71s/X+7ds/UT9kp0PC7waCzE= +cloud.google.com/go/datacatalog v1.18.1/go.mod h1:TzAWaz+ON1tkNr4MOcak8EBHX7wIRX/gZKM+yTVsv+A= +cloud.google.com/go/datacatalog v1.18.2/go.mod h1:SPVgWW2WEMuWHA+fHodYjmxPiMqcOiWfhc9OD5msigk= +cloud.google.com/go/datacatalog v1.18.3/go.mod h1:5FR6ZIF8RZrtml0VUao22FxhdjkoG+a0866rEnObryM= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= +cloud.google.com/go/dataflow v0.9.2/go.mod h1:vBfdBZ/ejlTaYIGB3zB4T08UshH70vbtZeMD+urnUSo= +cloud.google.com/go/dataflow v0.9.3/go.mod h1:HI4kMVjcHGTs3jTHW/kv3501YW+eloiJSLxkJa/vqFE= +cloud.google.com/go/dataflow v0.9.4/go.mod h1:4G8vAkHYCSzU8b/kmsoR2lWyHJD85oMJPHMtan40K8w= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= +cloud.google.com/go/dataform v0.8.2/go.mod h1:X9RIqDs6NbGPLR80tnYoPNiO1w0wenKTb8PxxlhTMKM= +cloud.google.com/go/dataform v0.8.3/go.mod h1:8nI/tvv5Fso0drO3pEjtowz58lodx8MVkdV2q0aPlqg= +cloud.google.com/go/dataform v0.9.1/go.mod h1:pWTg+zGQ7i16pyn0bS1ruqIE91SdL2FDMvEYu/8oQxs= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= +cloud.google.com/go/datafusion v1.7.2/go.mod h1:62K2NEC6DRlpNmI43WHMWf9Vg/YvN6QVi8EVwifElI0= +cloud.google.com/go/datafusion v1.7.3/go.mod h1:eoLt1uFXKGBq48jy9LZ+Is8EAVLnmn50lNncLzwYokE= +cloud.google.com/go/datafusion v1.7.4/go.mod h1:BBs78WTOLYkT4GVZIXQCZT3GFpkpDN4aBY4NDX/jVlM= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= +cloud.google.com/go/datalabeling v0.8.2/go.mod h1:cyDvGHuJWu9U/cLDA7d8sb9a0tWLEletStu2sTmg3BE= +cloud.google.com/go/datalabeling v0.8.3/go.mod h1:tvPhpGyS/V7lqjmb3V0TaDdGvhzgR1JoW7G2bpi2UTI= +cloud.google.com/go/datalabeling v0.8.4/go.mod h1:Z1z3E6LHtffBGrNUkKwbwbDxTiXEApLzIgmymj8A3S8= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.10.1/go.mod h1:1MzmBv8FvjYfc7vDdxhnLFNskikkB+3vl475/XdCDhs= +cloud.google.com/go/dataplex v1.10.2/go.mod h1:xdC8URdTrCrZMW6keY779ZT1cTOfV8KEPNsw+LTRT1Y= +cloud.google.com/go/dataplex v1.11.1/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4= +cloud.google.com/go/dataproc/v2 v2.2.0/go.mod h1:lZR7AQtwZPvmINx5J87DSOOpTfof9LVZju6/Qo4lmcY= +cloud.google.com/go/dataproc/v2 v2.2.1/go.mod h1:QdAJLaBjh+l4PVlVZcmrmhGccosY/omC1qwfQ61Zv/o= +cloud.google.com/go/dataproc/v2 v2.2.2/go.mod h1:aocQywVmQVF4i8CL740rNI/ZRpsaaC1Wh2++BJ7HEJ4= +cloud.google.com/go/dataproc/v2 v2.2.3/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= +cloud.google.com/go/dataqna v0.8.2/go.mod h1:KNEqgx8TTmUipnQsScOoDpq/VlXVptUqVMZnt30WAPs= +cloud.google.com/go/dataqna v0.8.3/go.mod h1:wXNBW2uvc9e7Gl5k8adyAMnLush1KVV6lZUhB+rqNu4= +cloud.google.com/go/dataqna v0.8.4/go.mod h1:mySRKjKg5Lz784P6sCov3p1QD+RZQONRMRjzGNcFd0c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.14.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.1/go.mod h1:7ngSYwnw95YFyTd5tOGBxHlOZiL+OtpjheqU7t2/s/c= +cloud.google.com/go/datastream v1.10.2/go.mod h1:W42TFgKAs/om6x/CdXX5E4oiAsKlH+e8MTGy81zdYt0= +cloud.google.com/go/datastream v1.10.3/go.mod h1:YR0USzgjhqA/Id0Ycu1VvZe8hEWwrkjuXrGbzeDOSEA= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.1/go.mod h1:8jeadyLkH9qu9xgO3hVWw8jVr29N1mnW42gRJT8GY6g= +cloud.google.com/go/deploy v1.14.1/go.mod h1:N8S0b+aIHSEeSr5ORVoC0+/mOPUysVt8ae4QkZYolAw= +cloud.google.com/go/deploy v1.14.2/go.mod h1:e5XOUI5D+YGldyLNZ21wbp9S8otJbBE4i88PtO9x/2g= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.43.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.0/go.mod h1:pDUJdi4elL0MFmt1REMvFkdsUTYSHq+rTCS8wg0S3+M= +cloud.google.com/go/dialogflow v1.44.1/go.mod h1:n/h+/N2ouKOO+rbe/ZnI186xImpqvCVj2DdsWS/0EAk= +cloud.google.com/go/dialogflow v1.44.2/go.mod h1:QzFYndeJhpVPElnFkUXxdlptx0wPnBWLCBT9BvtC3/c= +cloud.google.com/go/dialogflow v1.44.3/go.mod h1:mHly4vU7cPXVweuB5R0zsYKPMzy240aQdAu06SqBbAQ= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= +cloud.google.com/go/dlp v1.10.2/go.mod h1:ZbdKIhcnyhILgccwVDzkwqybthh7+MplGC3kZVZsIOQ= +cloud.google.com/go/dlp v1.10.3/go.mod h1:iUaTc/ln8I+QT6Ai5vmuwfw8fqTk2kaz0FvCwhLCom0= +cloud.google.com/go/dlp v1.11.1/go.mod h1:/PA2EnioBeXTL/0hInwgj0rfsQb3lpE3R8XUJxqUNKI= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.1/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.0/go.mod h1:LKs22aDHbJv7ufXuPypzRO7rG3ALLJxzdCXDPutw4Qc= +cloud.google.com/go/documentai v1.23.2/go.mod h1:Q/wcRT+qnuXOpjAkvOV4A+IeQl04q2/ReT7SSbytLSo= +cloud.google.com/go/documentai v1.23.4/go.mod h1:4MYAaEMnADPN1LPN5xboDR5QVB6AgsaxgFdJhitlE2Y= +cloud.google.com/go/documentai v1.23.5/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= +cloud.google.com/go/domains v0.9.2/go.mod h1:3YvXGYzZG1Temjbk7EyGCuGGiXHJwVNmwIf+E/cUp5I= +cloud.google.com/go/domains v0.9.3/go.mod h1:29k66YNDLDY9LCFKpGFeh6Nj9r62ZKm5EsUJxAl84KU= +cloud.google.com/go/domains v0.9.4/go.mod h1:27jmJGShuXYdUNjyDG0SodTfT5RwLi7xmH334Gvi3fY= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= +cloud.google.com/go/edgecontainer v1.1.2/go.mod h1:wQRjIzqxEs9e9wrtle4hQPSR1Y51kqN75dgF7UllZZ4= +cloud.google.com/go/edgecontainer v1.1.3/go.mod h1:Ll2DtIABzEfaxaVSbwj3QHFaOOovlDFiWVDu349jSsA= +cloud.google.com/go/edgecontainer v1.1.4/go.mod h1:AvFdVuZuVGdgaE5YvlL1faAoa1ndRR/5XhXZvPBHbsE= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= +cloud.google.com/go/essentialcontacts v1.6.3/go.mod h1:yiPCD7f2TkP82oJEFXFTou8Jl8L6LBRPeBEkTaO0Ggo= +cloud.google.com/go/essentialcontacts v1.6.4/go.mod h1:iju5Vy3d9tJUg0PYMd1nHhjV7xoCXaOAVabrwLaPBEM= +cloud.google.com/go/essentialcontacts v1.6.5/go.mod h1:jjYbPzw0x+yglXC890l6ECJWdYeZ5dlYACTFL0U/VuM= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.1/go.mod h1:EqBxmGHFrruIara4FUQ3RHlgfCn7yo1HYsu2Hpt/C3Y= +cloud.google.com/go/eventarc v1.13.2/go.mod h1:X9A80ShVu19fb4e5sc/OLV7mpFUKZMwfJFeeWhcIObM= +cloud.google.com/go/eventarc v1.13.3/go.mod h1:RWH10IAZIRcj1s/vClXkBgMHwh59ts7hSWcqD3kaclg= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= +cloud.google.com/go/filestore v1.7.2/go.mod h1:TYOlyJs25f/omgj+vY7/tIG/E7BX369triSPzE4LdgE= +cloud.google.com/go/filestore v1.7.3/go.mod h1:Qp8WaEERR3cSkxToxFPHh/b8AACkSut+4qlCjAmKTV0= +cloud.google.com/go/filestore v1.7.4/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= +cloud.google.com/go/functions v1.15.2/go.mod h1:CHAjtcR6OU4XF2HuiVeriEdELNcnvRZSk1Q8RMqy4lE= +cloud.google.com/go/functions v1.15.3/go.mod h1:r/AMHwBheapkkySEhiZYLDBwVJCdlRwsm4ieJu35/Ug= +cloud.google.com/go/functions v1.15.4/go.mod h1:CAsTc3VlRMVvx+XqXxKqVevguqJpnVip4DdonFsX28I= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.1/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkebackup v1.3.2/go.mod h1:OMZbXzEJloyXMC7gqdSB+EOEQ1AKcpGYvO3s1ec5ixk= +cloud.google.com/go/gkebackup v1.3.3/go.mod h1:eMk7/wVV5P22KBakhQnJxWSVftL1p4VBFLpv0kIft7I= +cloud.google.com/go/gkebackup v1.3.4/go.mod h1:gLVlbM8h/nHIs09ns1qx3q3eaXcGSELgNu1DWXYz1HI= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= +cloud.google.com/go/gkeconnect v0.8.2/go.mod h1:6nAVhwchBJYgQCXD2pHBFQNiJNyAd/wyxljpaa6ZPrY= +cloud.google.com/go/gkeconnect v0.8.3/go.mod h1:i9GDTrfzBSUZGCe98qSu1B8YB8qfapT57PenIb820Jo= +cloud.google.com/go/gkeconnect v0.8.4/go.mod h1:84hZz4UMlDCKl8ifVW8layK4WHlMAFeq8vbzjU0yJkw= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= +cloud.google.com/go/gkehub v0.14.2/go.mod h1:iyjYH23XzAxSdhrbmfoQdePnlMj2EWcvnR+tHdBQsCY= +cloud.google.com/go/gkehub v0.14.3/go.mod h1:jAl6WafkHHW18qgq7kqcrXYzN08hXeK/Va3utN8VKg8= +cloud.google.com/go/gkehub v0.14.4/go.mod h1:Xispfu2MqnnFt8rV/2/3o73SK1snL8s9dYJ9G2oQMfc= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.1/go.mod h1:AcrGoin6VLKT/fwZEYuqvVominLriQBCKmbjtnbMjG8= +cloud.google.com/go/gkemulticloud v1.0.2/go.mod h1:+ee5VXxKb3H1l4LZAcgWB/rvI16VTNTrInWxDjAGsGo= +cloud.google.com/go/gkemulticloud v1.0.3/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= +cloud.google.com/go/gsuiteaddons v1.6.2/go.mod h1:K65m9XSgs8hTF3X9nNTPi8IQueljSdYo9F+Mi+s4MyU= +cloud.google.com/go/gsuiteaddons v1.6.3/go.mod h1:sCFJkZoMrLZT3JTb8uJqgKPNshH2tfXeCwTFRebTq48= +cloud.google.com/go/gsuiteaddons v1.6.4/go.mod h1:rxtstw7Fx22uLOXBpsvb9DUbC+fiXs7rF4U29KHM/pE= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= +cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= +cloud.google.com/go/iap v1.9.0/go.mod h1:01OFxd1R+NFrg78S+hoPV5PxEzv22HXaNqUUlmNHFuY= +cloud.google.com/go/iap v1.9.1/go.mod h1:SIAkY7cGMLohLSdBR25BuIxO+I4fXJiL06IBL7cy/5Q= +cloud.google.com/go/iap v1.9.2/go.mod h1:GwDTOs047PPSnwRD0Us5FKf4WDRcVvHg1q9WVkKBhdI= +cloud.google.com/go/iap v1.9.3/go.mod h1:DTdutSZBqkkOm2HEOTBzhZxh2mwwxshfD/h3yofAiCw= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= +cloud.google.com/go/ids v1.4.2/go.mod h1:3vw8DX6YddRu9BncxuzMyWn0g8+ooUjI2gslJ7FH3vk= +cloud.google.com/go/ids v1.4.3/go.mod h1:9CXPqI3GedjmkjbMWCUhMZ2P2N7TUMzAkVXYEH2orYU= +cloud.google.com/go/ids v1.4.4/go.mod h1:z+WUc2eEl6S/1aZWzwtVNWoSZslgzPxAboS0lZX0HjI= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= +cloud.google.com/go/iot v1.7.2/go.mod h1:q+0P5zr1wRFpw7/MOgDXrG/HVA+l+cSwdObffkrpnSg= +cloud.google.com/go/iot v1.7.3/go.mod h1:t8itFchkol4VgNbHnIq9lXoOOtHNR3uAACQMYbN9N4I= +cloud.google.com/go/iot v1.7.4/go.mod h1:3TWqDVvsddYBG++nHSZmluoCAVGr1hAcabbWZNKEZLk= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.2/go.mod h1:3hopT4+7ooWRCjc2DxgnpESFxhIraaI2IpAVUEhbT/w= +cloud.google.com/go/kms v1.15.3/go.mod h1:AJdXqHxS2GlPyduM99s9iGqi2nwbviBbhV/hdmt4iOQ= +cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= +cloud.google.com/go/language v1.11.0/go.mod h1:uDx+pFDdAKTY8ehpWbiXyQdz8tDSYLJbQcXsCkjYyvQ= +cloud.google.com/go/language v1.11.1/go.mod h1:Xyid9MG9WOX3utvDbpX7j3tXDmmDooMyMDqgUVpH17U= +cloud.google.com/go/language v1.12.1/go.mod h1:zQhalE2QlQIxbKIZt54IASBzmZpN/aDASea5zl1l+J4= +cloud.google.com/go/language v1.12.2/go.mod h1:9idWapzr/JKXBBQ4lWqVX/hcadxB194ry20m/bTrhWc= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= +cloud.google.com/go/lifesciences v0.9.2/go.mod h1:QHEOO4tDzcSAzeJg7s2qwnLM2ji8IRpQl4p6m5Z9yTA= +cloud.google.com/go/lifesciences v0.9.3/go.mod h1:gNGBOJV80IWZdkd+xz4GQj4mbqaz737SCLHn2aRhQKM= +cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqNj+Nia7hF0Z7JA= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= +cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y= +cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= +cloud.google.com/go/managedidentities v1.6.2/go.mod h1:5c2VG66eCa0WIq6IylRk3TBW83l161zkFvCj28X7jn8= +cloud.google.com/go/managedidentities v1.6.3/go.mod h1:tewiat9WLyFN0Fi7q1fDD5+0N4VUoL0SCX0OTCthZq4= +cloud.google.com/go/managedidentities v1.6.4/go.mod h1:WgyaECfHmF00t/1Uk8Oun3CQ2PGUtjc3e9Alh79wyiM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.1/go.mod h1:BxSa0BnW1g2U2gNdbq5zikLlHUuHW0GFWh7sgML2kIY= +cloud.google.com/go/maps v1.5.1/go.mod h1:NPMZw1LJwQZYCfz4y+EIw+SI+24A4bpdFJqdKVr0lt4= +cloud.google.com/go/maps v1.6.1/go.mod h1:4+buOHhYXFBp58Zj/K+Lc1rCmJssxxF4pJ5CJnhdz18= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= +cloud.google.com/go/mediatranslation v0.8.2/go.mod h1:c9pUaDRLkgHRx3irYE5ZC8tfXGrMYwNZdmDqKMSfFp8= +cloud.google.com/go/mediatranslation v0.8.3/go.mod h1:F9OnXTy336rteOEywtY7FOqCk+J43o2RF638hkOQl4Y= +cloud.google.com/go/mediatranslation v0.8.4/go.mod h1:9WstgtNVAdN53m6TQa5GjIjLqKQPXe74hwSCxUP6nj4= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= +cloud.google.com/go/memcache v1.10.2/go.mod h1:f9ZzJHLBrmd4BkguIAa/l/Vle6uTHzHokdnzSWOdQ6A= +cloud.google.com/go/memcache v1.10.3/go.mod h1:6z89A41MT2DVAW0P4iIRdu5cmRTsbsFn4cyiIx8gbwo= +cloud.google.com/go/memcache v1.10.4/go.mod h1:v/d8PuC8d1gD6Yn5+I3INzLR01IDn0N4Ym56RgikSI0= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.13.0/go.mod h1:URDhpG6XLeh5K+Glq0NOt74OfrPKTwS62gEPZzb5SOk= +cloud.google.com/go/metastore v1.13.1/go.mod h1:IbF62JLxuZmhItCppcIfzBBfUFq0DIB9HPDoLgWrVOU= +cloud.google.com/go/metastore v1.13.2/go.mod h1:KS59dD+unBji/kFebVp8XU/quNSyo8b6N6tPGspKszA= +cloud.google.com/go/metastore v1.13.3/go.mod h1:K+wdjXdtkdk7AQg4+sXS8bRrQa9gcOr+foOMF2tqINE= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= +cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67mLHQfyqbw+poY= +cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4= +cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc= +cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= +cloud.google.com/go/networkconnectivity v1.13.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.0/go.mod h1:SAnGPes88pl7QRLUen2HmcBSE9AowVAcdug8c0RSBFk= +cloud.google.com/go/networkconnectivity v1.14.1/go.mod h1:LyGPXR742uQcDxZ/wv4EI0Vu5N6NKJ77ZYVnDe69Zug= +cloud.google.com/go/networkconnectivity v1.14.2/go.mod h1:5UFlwIisZylSkGG1AdwK/WZUaoz12PKu6wODwIbFzJo= +cloud.google.com/go/networkconnectivity v1.14.3/go.mod h1:4aoeFdrJpYEXNvrnfyD5kIzs8YtHg945Og4koAjHQek= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= +cloud.google.com/go/networkmanagement v1.9.0/go.mod h1:UTUaEU9YwbCAhhz3jEOHr+2/K/MrBk2XxOLS89LQzFw= +cloud.google.com/go/networkmanagement v1.9.1/go.mod h1:CCSYgrQQvW73EJawO2QamemYcOb57LvrDdDU51F0mcI= +cloud.google.com/go/networkmanagement v1.9.2/go.mod h1:iDGvGzAoYRghhp4j2Cji7sF899GnfGQcQRQwgVOWnDw= +cloud.google.com/go/networkmanagement v1.9.3/go.mod h1:y7WMO1bRLaP5h3Obm4tey+NquUvB93Co1oh4wpL+XcU= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= +cloud.google.com/go/networksecurity v0.9.2/go.mod h1:jG0SeAttWzPMUILEHDUvFYdQTl8L/E/KC8iZDj85lEI= +cloud.google.com/go/networksecurity v0.9.3/go.mod h1:l+C0ynM6P+KV9YjOnx+kk5IZqMSLccdBqW6GUoF4p/0= +cloud.google.com/go/networksecurity v0.9.4/go.mod h1:E9CeMZ2zDsNBkr8axKSYm8XyTqNhiCHf1JO/Vb8mD1w= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= +cloud.google.com/go/notebooks v1.10.0/go.mod h1:SOPYMZnttHxqot0SGSFSkRrwE29eqnKPBJFqgWmiK2k= +cloud.google.com/go/notebooks v1.10.1/go.mod h1:5PdJc2SgAybE76kFQCWrTfJolCOUQXF97e+gteUUA6A= +cloud.google.com/go/notebooks v1.11.1/go.mod h1:V2Zkv8wX9kDCGRJqYoI+bQAaoVeE5kSiz4yYHd2yJwQ= +cloud.google.com/go/notebooks v1.11.2/go.mod h1:z0tlHI/lREXC8BS2mIsUeR3agM1AkgLiS+Isov3SS70= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= +cloud.google.com/go/optimization v1.5.0/go.mod h1:evo1OvTxeBRBu6ydPlrIRizKY/LJKo/drDMMRKqGEUU= +cloud.google.com/go/optimization v1.5.1/go.mod h1:NC0gnUD5MWVAF7XLdoYVPmYYVth93Q6BUzqAq3ZwtV8= +cloud.google.com/go/optimization v1.6.1/go.mod h1:hH2RYPTTM9e9zOiTaYPTiGPcGdNZVnBSBxjIAJzUkqo= +cloud.google.com/go/optimization v1.6.2/go.mod h1:mWNZ7B9/EyMCcwNl1frUGEuY6CPijSkz88Fz2vwKPOY= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= +cloud.google.com/go/orchestration v1.8.2/go.mod h1:T1cP+6WyTmh6LSZzeUhvGf0uZVmJyTx7t8z7Vg87+A0= +cloud.google.com/go/orchestration v1.8.3/go.mod h1:xhgWAYqlbYjlz2ftbFghdyqENYW+JXuhBx9KsjMoGHs= +cloud.google.com/go/orchestration v1.8.4/go.mod h1:d0lywZSVYtIoSZXb0iFjv9SaL13PGyVOKDxqGxEf/qI= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= +cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= +cloud.google.com/go/orgpolicy v1.11.2/go.mod h1:biRDpNwfyytYnmCRWZWxrKF22Nkz9eNVj9zyaBdpm1o= +cloud.google.com/go/orgpolicy v1.11.3/go.mod h1:oKAtJ/gkMjum5icv2aujkP4CxROxPXsBbYGCDbPO8MM= +cloud.google.com/go/orgpolicy v1.11.4/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= +cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= +cloud.google.com/go/osconfig v1.12.2/go.mod h1:eh9GPaMZpI6mEJEuhEjUJmaxvQ3gav+fFEJon1Y8Iw0= +cloud.google.com/go/osconfig v1.12.3/go.mod h1:L/fPS8LL6bEYUi1au832WtMnPeQNT94Zo3FwwV1/xGM= +cloud.google.com/go/osconfig v1.12.4/go.mod h1:B1qEwJ/jzqSRslvdOCI8Kdnp0gSng0xW4LOnIebQomA= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= +cloud.google.com/go/oslogin v1.11.0/go.mod h1:8GMTJs4X2nOAUVJiPGqIWVcDaF0eniEto3xlOxaboXE= +cloud.google.com/go/oslogin v1.11.1/go.mod h1:OhD2icArCVNUxKqtK0mcSmKL7lgr0LVlQz+v9s1ujTg= +cloud.google.com/go/oslogin v1.12.1/go.mod h1:VfwTeFJGbnakxAY236eN8fsnglLiVXndlbcNomY4iZU= +cloud.google.com/go/oslogin v1.12.2/go.mod h1:CQ3V8Jvw4Qo4WRhNPF0o+HAM4DiLuE27Ul9CX9g2QdY= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= +cloud.google.com/go/phishingprotection v0.8.2/go.mod h1:LhJ91uyVHEYKSKcMGhOa14zMMWfbEdxG032oT6ECbC8= +cloud.google.com/go/phishingprotection v0.8.3/go.mod h1:3B01yO7T2Ra/TMojifn8EoGd4G9jts/6cIO0DgDY9J8= +cloud.google.com/go/phishingprotection v0.8.4/go.mod h1:6b3kNPAc2AQ6jZfFHioZKg9MQNybDg4ixFd4RPZZ2nE= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= +cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU= +cloud.google.com/go/policytroubleshooter v1.9.0/go.mod h1:+E2Lga7TycpeSTj2FsH4oXxTnrbHJGRlKhVZBLGgU64= +cloud.google.com/go/policytroubleshooter v1.9.1/go.mod h1:MYI8i0bCrL8cW+VHN1PoiBTyNZTstCg2WUw2eVC4c4U= +cloud.google.com/go/policytroubleshooter v1.10.1/go.mod h1:5C0rhT3TDZVxAu8813bwmTvd57Phbl8mr9F4ipOsxEs= +cloud.google.com/go/policytroubleshooter v1.10.2/go.mod h1:m4uF3f6LseVEnMV6nknlN2vYGRb+75ylQwJdnOXfnv0= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= +cloud.google.com/go/privatecatalog v0.9.2/go.mod h1:RMA4ATa8IXfzvjrhhK8J6H4wwcztab+oZph3c6WmtFc= +cloud.google.com/go/privatecatalog v0.9.3/go.mod h1:K5pn2GrVmOPjXz3T26mzwXLcKivfIJ9R5N79AFCF9UE= +cloud.google.com/go/privatecatalog v0.9.4/go.mod h1:SOjm93f+5hp/U3PqMZAHTtBtluqLygrDrVO8X8tYtG0= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.0/go.mod h1:QuE8EdU9dEnesG8/kG3XuJyNsjEqMlMzg3v3scCJ46c= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.1/go.mod h1:JZYZJOeZjgSSTGP4uz7NlQ4/d1w5hGmksVgM0lbEij0= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.2/go.mod h1:kpaDBOpkwD4G0GVMzG1W6Doy1tFFC97XAV3xy+Rd/pw= +cloud.google.com/go/recaptchaenterprise/v2 v2.8.3/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= +cloud.google.com/go/recommendationengine v0.8.2/go.mod h1:QIybYHPK58qir9CV2ix/re/M//Ty10OxjnnhWdaKS1Y= +cloud.google.com/go/recommendationengine v0.8.3/go.mod h1:m3b0RZV02BnODE9FeSvGv1qibFo8g0OnmB/RMwYy4V8= +cloud.google.com/go/recommendationengine v0.8.4/go.mod h1:GEteCf1PATl5v5ZsQ60sTClUE0phbWmo3rQ1Js8louU= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= +cloud.google.com/go/recommender v1.11.0/go.mod h1:kPiRQhPyTJ9kyXPCG6u/dlPLbYfFlkwHNRwdzPVAoII= +cloud.google.com/go/recommender v1.11.1/go.mod h1:sGwFFAyI57v2Hc5LbIj+lTwXipGu9NW015rkaEM5B18= +cloud.google.com/go/recommender v1.11.2/go.mod h1:AeoJuzOvFR/emIcXdVFkspVXVTYpliRCmKNYDnyBv6Y= +cloud.google.com/go/recommender v1.11.3/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= +cloud.google.com/go/redis v1.13.2/go.mod h1:0Hg7pCMXS9uz02q+LoEVl5dNHUkIQv+C/3L76fandSA= +cloud.google.com/go/redis v1.13.3/go.mod h1:vbUpCKUAZSYzFcWKmICnYgRAhTFg9r+djWqFxDYXi4U= +cloud.google.com/go/redis v1.14.1/go.mod h1:MbmBxN8bEnQI4doZPC1BzADU4HGocHBk2de3SbgOkqs= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= +cloud.google.com/go/resourcemanager v1.9.2/go.mod h1:OujkBg1UZg5lX2yIyMo5Vz9O5hf7XQOSV7WxqxxMtQE= +cloud.google.com/go/resourcemanager v1.9.3/go.mod h1:IqrY+g0ZgLsihcfcmqSe+RKp1hzjXwG904B92AwBz6U= +cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= +cloud.google.com/go/resourcesettings v1.6.2/go.mod h1:mJIEDd9MobzunWMeniaMp6tzg4I2GvD3TTmPkc8vBXk= +cloud.google.com/go/resourcesettings v1.6.3/go.mod h1:pno5D+7oDYkMWZ5BpPsb4SO0ewg3IXcmmrUZaMJrFic= +cloud.google.com/go/resourcesettings v1.6.4/go.mod h1:pYTTkWdv2lmQcjsthbZLNBP4QW140cs7wqA3DuqErVI= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= +cloud.google.com/go/retail v1.14.2/go.mod h1:W7rrNRChAEChX336QF7bnMxbsjugcOCPU44i5kbLiL8= +cloud.google.com/go/retail v1.14.3/go.mod h1:Omz2akDHeSlfCq8ArPKiBxlnRpKEBjUH386JYFLUvXo= +cloud.google.com/go/retail v1.14.4/go.mod h1:l/N7cMtY78yRnJqp5JW8emy7MB1nz8E4t2yfOmklYfg= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo= +cloud.google.com/go/run v1.3.0/go.mod h1:S/osX/4jIPZGg+ssuqh6GNgg7syixKe3YnprwehzHKU= +cloud.google.com/go/run v1.3.1/go.mod h1:cymddtZOzdwLIAsmS6s+Asl4JoXIDm/K1cpZTxV4Q5s= +cloud.google.com/go/run v1.3.2/go.mod h1:SIhmqArbjdU/D9M6JoHaAqnAMKLFtXaVdNeq04NjnVE= +cloud.google.com/go/run v1.3.3/go.mod h1:WSM5pGyJ7cfYyYbONVQBN4buz42zFqwG67Q3ch07iK4= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= +cloud.google.com/go/scheduler v1.10.2/go.mod h1:O3jX6HRH5eKCA3FutMw375XHZJudNIKVonSCHv7ropY= +cloud.google.com/go/scheduler v1.10.3/go.mod h1:8ANskEM33+sIbpJ+R4xRfw/jzOG+ZFE8WVLy7/yGvbc= +cloud.google.com/go/scheduler v1.10.4/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= +cloud.google.com/go/secretmanager v1.11.2/go.mod h1:MQm4t3deoSub7+WNwiC4/tRYgDBHJgJPvswqQVB1Vss= +cloud.google.com/go/secretmanager v1.11.3/go.mod h1:0bA2o6FabmShrEy328i67aV+65XoUFFSmVeLBn/51jI= +cloud.google.com/go/secretmanager v1.11.4/go.mod h1:wreJlbS9Zdq21lMzWmJ0XhWW2ZxgPeahsqeV/vZoJ3w= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= +cloud.google.com/go/security v1.15.2/go.mod h1:2GVE/v1oixIRHDaClVbHuPcZwAqFM28mXuAKCfMgYIg= +cloud.google.com/go/security v1.15.3/go.mod h1:gQ/7Q2JYUZZgOzqKtw9McShH+MjNvtDpL40J1cT+vBs= +cloud.google.com/go/security v1.15.4/go.mod h1:oN7C2uIZKhxCLiAAijKUCuHLZbIt/ghYEo8MqwD/Ty4= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= +cloud.google.com/go/securitycenter v1.23.1/go.mod h1:w2HV3Mv/yKhbXKwOCu2i8bCuLtNP1IMHuiYQn4HJq5s= +cloud.google.com/go/securitycenter v1.24.1/go.mod h1:3h9IdjjHhVMXdQnmqzVnM7b0wMn/1O/U20eWVpMpZjI= +cloud.google.com/go/securitycenter v1.24.2/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.1/go.mod h1:tJywXimEWzNzw9FvtNjsQxxJ3/41jseeILgwU/QLrGI= +cloud.google.com/go/servicedirectory v1.11.2/go.mod h1:KD9hCLhncWRV5jJphwIpugKwM5bn1x0GyVVD4NO8mGg= +cloud.google.com/go/servicedirectory v1.11.3/go.mod h1:LV+cHkomRLr67YoQy3Xq2tUXBGOs5z5bPofdq7qtiAw= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= +cloud.google.com/go/shell v1.7.2/go.mod h1:KqRPKwBV0UyLickMn0+BY1qIyE98kKyI216sH/TuHmc= +cloud.google.com/go/shell v1.7.3/go.mod h1:cTTEz/JdaBsQAeTQ3B6HHldZudFoYBOqjteev07FbIc= +cloud.google.com/go/shell v1.7.4/go.mod h1:yLeXB8eKLxw0dpEmXQ/FjriYrBijNsONpwnWsdPqlKM= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= +cloud.google.com/go/spanner v1.49.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.50.0/go.mod h1:eGj9mQGK8+hkgSVbHNQ06pQ4oS+cyc4tXXd6Dif1KoM= +cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.1/go.mod h1:WcuaWz/3hOlzPFOVo9DUsblMIHwxP589y6ZMtaG+iAA= +cloud.google.com/go/speech v1.19.2/go.mod h1:2OYFfj+Ch5LWjsaSINuCZsre/789zlcCI3SY4oAi2oI= +cloud.google.com/go/speech v1.20.1/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= 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= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= +cloud.google.com/go/storagetransfer v1.10.1/go.mod h1:rS7Sy0BtPviWYTTJVWCSV4QrbBitgPeuK4/FKa4IdLs= +cloud.google.com/go/storagetransfer v1.10.2/go.mod h1:meIhYQup5rg9juQJdyppnA/WLQCOguxtk1pr3/vBWzA= +cloud.google.com/go/storagetransfer v1.10.3/go.mod h1:Up8LY2p6X68SZ+WToswpQbQHnJpOty/ACcMafuey8gc= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= +cloud.google.com/go/talent v1.6.3/go.mod h1:xoDO97Qd4AK43rGjJvyBHMskiEf3KulgYzcH6YWOVoo= +cloud.google.com/go/talent v1.6.4/go.mod h1:QsWvi5eKeh6gG2DlBkpMaFYZYrYUnIpo34f6/V5QykY= +cloud.google.com/go/talent v1.6.5/go.mod h1:Mf5cma696HmE+P2BWJ/ZwYqeJXEeU0UqjHFXVLadEDI= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= +cloud.google.com/go/texttospeech v1.7.2/go.mod h1:VYPT6aTOEl3herQjFHYErTlSZJ4vB00Q2ZTmuVgluD4= +cloud.google.com/go/texttospeech v1.7.3/go.mod h1:Av/zpkcgWfXlDLRYob17lqMstGZ3GqlvJXqKMp2u8so= +cloud.google.com/go/texttospeech v1.7.4/go.mod h1:vgv0002WvR4liGuSd5BJbWy4nDn5Ozco0uJymY5+U74= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= +cloud.google.com/go/tpu v1.6.2/go.mod h1:NXh3NDwt71TsPZdtGWgAG5ThDfGd32X1mJ2cMaRlVgU= +cloud.google.com/go/tpu v1.6.3/go.mod h1:lxiueqfVMlSToZY1151IaZqp89ELPSrk+3HIQ5HRkbY= +cloud.google.com/go/tpu v1.6.4/go.mod h1:NAm9q3Rq2wIlGnOhpYICNI7+bpBebMJbh0yyp3aNw1Y= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= +cloud.google.com/go/trace v1.10.2/go.mod h1:NPXemMi6MToRFcSxRl2uDnu/qAlAQ3oULUphcHGh1vA= +cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY= +cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.0/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.9.1/go.mod h1:TWIgDZknq2+JD4iRcojgeDtqGEp154HN/uL6hMvylS8= +cloud.google.com/go/translate v1.9.2/go.mod h1:E3Tc6rUTsQkVrXW6avbUhKJSr7ZE3j7zNmqzXKHqRrY= +cloud.google.com/go/translate v1.9.3/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.20.0/go.mod h1:U3G3FTnsvAGqglq9LxgqzOiBc/Nt8zis8S+850N2DUM= +cloud.google.com/go/video v1.20.1/go.mod h1:3gJS+iDprnj8SY6pe0SwLeC5BUW80NjhwX7INWEuWGU= +cloud.google.com/go/video v1.20.2/go.mod h1:lrixr5JeKNThsgfM9gqtwb6Okuqzfo4VrY2xynaViTA= +cloud.google.com/go/video v1.20.3/go.mod h1:TnH/mNZKVHeNtpamsSPygSR0iHtvrR/cW1/GDjN5+GU= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= +cloud.google.com/go/videointelligence v1.11.2/go.mod h1:ocfIGYtIVmIcWk1DsSGOoDiXca4vaZQII1C85qtoplc= +cloud.google.com/go/videointelligence v1.11.3/go.mod h1:tf0NUaGTjU1iS2KEkGWvO5hRHeCkFK3nPo0/cOZhZAo= +cloud.google.com/go/videointelligence v1.11.4/go.mod h1:kPBMAYsTPFiQxMLmmjpcZUMklJp3nC9+ipJJtprccD8= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= +cloud.google.com/go/vision/v2 v2.7.3/go.mod h1:V0IcLCY7W+hpMKXK1JYE0LV5llEqVmj+UJChjvA1WsM= +cloud.google.com/go/vision/v2 v2.7.4/go.mod h1:ynDKnsDN/0RtqkKxQZ2iatv3Dm9O+HfRb5djl7l4Vvw= +cloud.google.com/go/vision/v2 v2.7.5/go.mod h1:GcviprJLFfK9OLf0z8Gm6lQb6ZFUulvpZws+mm6yPLM= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= +cloud.google.com/go/vmmigration v1.7.2/go.mod h1:iA2hVj22sm2LLYXGPT1pB63mXHhrH1m/ruux9TwWLd8= +cloud.google.com/go/vmmigration v1.7.3/go.mod h1:ZCQC7cENwmSWlwyTrZcWivchn78YnFniEQYRWQ65tBo= +cloud.google.com/go/vmmigration v1.7.4/go.mod h1:yBXCmiLaB99hEl/G9ZooNx2GyzgsjKnw5fWcINRgD70= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.1/go.mod h1:aT3Xsm5sNx0QShk1Jc1B8OddrxAScYLwzVoaiXfdzzk= +cloud.google.com/go/vmwareengine v1.0.2/go.mod h1:xMSNjIk8/itYrz1JA8nV3Ajg4L4n3N+ugP8JKzk3OaA= +cloud.google.com/go/vmwareengine v1.0.3/go.mod h1:QSpdZ1stlbfKtyt6Iu19M6XRxjmXO+vb5a/R6Fvy2y4= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= +cloud.google.com/go/vpcaccess v1.7.2/go.mod h1:mmg/MnRHv+3e8FJUjeSibVFvQF1cCy2MsFaFqxeY1HU= +cloud.google.com/go/vpcaccess v1.7.3/go.mod h1:YX4skyfW3NC8vI3Fk+EegJnlYFatA+dXK4o236EUCUc= +cloud.google.com/go/vpcaccess v1.7.4/go.mod h1:lA0KTvhtEOb/VOdnH/gwPuOzGgM+CWsmGu6bb4IoMKk= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= +cloud.google.com/go/webrisk v1.9.2/go.mod h1:pY9kfDgAqxUpDBOrG4w8deLfhvJmejKB0qd/5uQIPBc= +cloud.google.com/go/webrisk v1.9.3/go.mod h1:RUYXe9X/wBDXhVilss7EDLW9ZNa06aowPuinUOPCXH8= +cloud.google.com/go/webrisk v1.9.4/go.mod h1:w7m4Ib4C+OseSr2GL66m0zMBywdrVNTDKsdEsfMl7X0= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= +cloud.google.com/go/websecurityscanner v1.6.2/go.mod h1:7YgjuU5tun7Eg2kpKgGnDuEOXWIrh8x8lWrJT4zfmas= +cloud.google.com/go/websecurityscanner v1.6.3/go.mod h1:x9XANObUFR+83Cya3g/B9M/yoHVqzxPnFtgF8yYGAXw= +cloud.google.com/go/websecurityscanner v1.6.4/go.mod h1:mUiyMQ+dGpPPRkHgknIZeCzSHJ45+fY4F52nZFDHm2o= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/api v0.7.3 h1:V815i8YOwOAQa1rLCsSMjVG5Gnzs02JLq+l7ks8s1jk= -cosmossdk.io/api v0.7.3/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.1 h1:XkHh1lhrLYIT9zKl7cIOXUXg2hdhtjTPBUfqERNA1/Q= -cosmossdk.io/client/v2 v2.0.0-beta.1/go.mod h1:JEUSu9moNZQ4kU3ir1DKD5eU4bllmAexrGWjmb9k8qU= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= +cloud.google.com/go/workflows v1.12.0/go.mod h1:PYhSk2b6DhZ508tj8HXKaBh+OFe+xdl0dHF/tJdzPQM= +cloud.google.com/go/workflows v1.12.1/go.mod h1:5A95OhD/edtOhQd/O741NSfIMezNTbCwLM1P1tBRGHM= +cloud.google.com/go/workflows v1.12.2/go.mod h1:+OmBIgNqYJPVggnMo9nqmizW0qEXHhmnAzK/CnBqsHc= +cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= +cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= +cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508 h1:tt5OMwdouv7dkwkWJYxb8I9h322bOxnC9RmK2qGvWMs= +cosmossdk.io/client/v2 v2.0.0-20230818115413-c402c51a1508/go.mod h1:iHeSk2AT6O8RNGlfcEQq6Yty6Z/6gydQsXXBh5I715Q= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= @@ -200,21 +1140,23 @@ cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= -cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= -cosmossdk.io/store v1.0.2/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= -cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= -cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= -cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= -cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= +cosmossdk.io/store v1.1.0 h1:LnKwgYMc9BInn9PhpTFEQVbL9UK475G2H911CGGnWHk= +cosmossdk.io/store v1.1.0/go.mod h1:oZfW/4Fc/zYqu3JmQcQdUJ3fqu5vnYTn3LZFFy8P8ng= +cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508 h1:9HRBpMbGgk+W4BIp4ezYH2EjbpuVl2fBlwyJ2GZgrS0= +cosmossdk.io/x/circuit v0.0.0-20230818115413-c402c51a1508/go.mod h1:BhFX0kD6lkctNQO3ZGYY3p6h0/wPLVbFhrOt3uQxEIM= +cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508 h1:R9H1lDpcPSkrLOnt6IDE38o0Wp8xE/+BAxocb0oyX4I= +cosmossdk.io/x/evidence v0.0.0-20230818115413-c402c51a1508/go.mod h1:yjIo3J0QKDo9CJawK1QoTA1hBx0llafVJdPqI0+ry74= cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/tx v0.13.1 h1:Mg+EMp67Pz+NukbJqYxuo8uRp7N/a9uR+oVS9pONtj8= -cosmossdk.io/x/tx v0.13.1/go.mod h1:CBCU6fsRVz23QGFIQBb1DNX2DztJCf3jWyEkHY2nJQ0= -cosmossdk.io/x/upgrade v0.1.1 h1:aoPe2gNvH+Gwt/Pgq3dOxxQVU3j5P6Xf+DaUJTDZATc= -cosmossdk.io/x/upgrade v0.1.1/go.mod h1:MNLptLPcIFK9CWt7Ra//8WUZAxweyRDNcbs5nkOcQy0= +cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= +cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= +cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE= +cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= @@ -222,22 +1164,29 @@ github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwR github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ConsiderItDone/ibc-go-strangelove-private/v8 v8.3.1-0.20240806092051-0a5c4205b2c7 h1:P+r7mFNK9O3LWJD8hCwK4gk+zJu9iXPofXNHgnV9xIU= +github.com/ConsiderItDone/ibc-go-strangelove-private/v8 v8.3.1-0.20240806092051-0a5c4205b2c7/go.mod h1:Z4BmDREfLqv6nFWjT4Hj1IG0jtBpYDRIem9tNXig4YE= +github.com/ConsiderItDone/subnet-evm-private v0.0.0-20240809135514-63db363b20f7 h1:vyZrBBCb6RJcmSYldwO147jaH3ey1UjRhPJ8CkmEDsM= +github.com/ConsiderItDone/subnet-evm-private v0.0.0-20240809135514-63db363b20f7/go.mod h1:5NXqpMGoTfMY+I+XZQ8NCUL5oKf6TMzpSjxfbDJpZWM= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -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.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= @@ -246,26 +1195,41 @@ github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= 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/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= 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= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ava-labs/avalanchego v1.10.18 h1:ErJ+SJBtN9tVqk3OPRXffpf+MWeQnNZJlBNWQIgAg8A= +github.com/ava-labs/avalanchego v1.10.18/go.mod h1:wqmokVcLXE+9Nfa8wHdGJtjEW35acVf8rkraSZPVBA4= +github.com/ava-labs/coreth v0.12.10-rc.5 h1:FMVvXHssvMQ3Eade7i85Wsx9tuD3kUOFMG8ktHeDTp8= +github.com/ava-labs/coreth v0.12.10-rc.5/go.mod h1:a58HbIBc9jscGc3aL8e7JuG8RfhBBOm63waq1q0YM+U= github.com/avast/retry-go/v4 v4.5.1 h1:AxIx0HGi4VZ3I02jr78j5lZ3M6x1E0Ivxa6b0pUUh7o= github.com/avast/retry-go/v4 v4.5.1/go.mod h1:/sipNsvNB3RRuT5iNcb6h73nw3IBmXJ/H3XrCQYSOpc= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.312 h1:llrElfzeqG/YOLFFKjg1xNpZCFJ2xraIi3PqSuP+95k= -github.com/aws/aws-sdk-go v1.44.312/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.45.25 h1:c4fLlh5sLdK2DCRTY1z0hyuJZU4ygxX8m1FswL6/nF4= +github.com/aws/aws-sdk-go v1.45.25/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -279,6 +1243,8 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2 github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= @@ -311,14 +1277,19 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n 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/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/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.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= @@ -337,37 +1308,35 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX 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= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= 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-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= -github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= +github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.6 h1:QSgpCzrGWJ2KUq1qpw+FCfASRpE27T6LQbfEHscdyOk= -github.com/cometbft/cometbft v0.38.6/go.mod h1:8rSPxzUJYquCN8uuBgbUHOMg2KAwvr7CyUw+6ukO4nw= +github.com/cometbft/cometbft v0.38.7 h1:ULhIOJ9+LgSy6nLekhq9ae3juX3NnQUMMPyVdhZV6Hk= +github.com/cometbft/cometbft v0.38.7/go.mod h1:HIyf811dFMI73IE0F7RrnY/Fr+d1+HuJAgtkEpQjCMY= github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= -github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= -github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= -github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -380,34 +1349,30 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= -github.com/cosmos/cosmos-proto v1.0.0-beta.4 h1:aEL7tU/rLOmxZQ9z4i7mzxcLbSCY48OdY7lIWTLG7oU= -github.com/cosmos/cosmos-proto v1.0.0-beta.4/go.mod h1:oeB+FyVzG3XrQJbJng0EnV8Vljfk9XvTIpGILNU/9Co= -github.com/cosmos/cosmos-sdk v0.50.5 h1:MOEi+DKYgW67YaPgB+Pf+nHbD3V9S/ayitRKJYLfGIA= -github.com/cosmos/cosmos-sdk v0.50.5/go.mod h1:oV/k6GJgXV9QPoM2fsYDPPsyPBgQbdotv532O6Mz1OQ= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/cosmos-sdk v0.50.6 h1:efR3MsvMHX5sxS3be+hOobGk87IzlZbSpsI2x/Vw3hk= +github.com/cosmos/cosmos-sdk v0.50.6/go.mod h1:lVkRY6cdMJ0fG3gp8y4hFrsKZqF4z7y0M2UXFb9Yt40= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= -github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= -github.com/cosmos/iavl v1.0.1 h1:D+mYbcRO2wptYzOM1Hxl9cpmmHU1ZEt9T2Wv5nZTeUw= -github.com/cosmos/iavl v1.0.1/go.mod h1:8xIUkgVvwvVrBu81scdPty+/Dx9GqwHnAvXz4cwF7RY= +github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= +github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= +github.com/cosmos/iavl v1.1.2 h1:zL9FK7C4L/P4IF1Dm5fIwz0WXCnn7Bp1M2FxH0ayM7Y= +github.com/cosmos/iavl v1.1.2/go.mod h1:jLeUvm6bGT1YutCaL2fIar/8vGUE8cPZvh/gXEWDaDM= github.com/cosmos/ibc-go/modules/capability v1.0.0 h1:r/l++byFtn7jHYa09zlAdSeevo8ci1mVZNO9+V0xsLE= github.com/cosmos/ibc-go/modules/capability v1.0.0/go.mod h1:D81ZxzjZAe0ZO5ambnvn1qedsFQ8lOwtqicG6liLBco= -github.com/cosmos/ibc-go/v8 v8.2.0 h1:7oCzyy1sZCcgpeQLnHxC56brsSz3KWwQGKXalXwXFzE= -github.com/cosmos/ibc-go/v8 v8.2.0/go.mod h1:wj3qx75iC/XNnsMqbPDCIGs0G6Y3E/lo3bdqCyoCy+8= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= -github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= -github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= 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/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= @@ -417,6 +1382,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= @@ -439,6 +1406,7 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -461,19 +1429,30 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= -github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo= -github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/ethereum/go-ethereum v1.12.0 h1:bdnhLPtqETd4m3mS8BGMNvBTf36bO5bx/hxE2zljOa0= +github.com/ethereum/go-ethereum v1.12.0/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +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/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -485,8 +1464,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -497,6 +1476,11 @@ github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +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/liberation v0.2.0/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= @@ -508,6 +1492,8 @@ github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEai github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= 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/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -518,8 +1504,11 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -532,6 +1521,8 @@ github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJ github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +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/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= @@ -539,8 +1530,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -556,7 +1547,11 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -566,7 +1561,6 @@ github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4er 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/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= @@ -593,6 +1587,7 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -604,6 +1599,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v2.0.8+incompatible/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= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -623,6 +1619,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github/v43 v43.0.0 h1:y+GL7LIsAIF2NZlJ46ZoC/D1W1ivZasT0lnWHMYPZ+U= github.com/google/go-github/v43 v43.0.0/go.mod h1:ZkTvvmCXBvsfPpTHXnH/d2hP9Y0cTbvN9kr5xqyXOIc= +github.com/google/go-pkcs11 v0.2.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= @@ -638,55 +1636,62 @@ github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdf github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -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/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= +github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= +github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/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.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= -github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +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/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -700,11 +1705,17 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +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 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -716,8 +1727,8 @@ github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVH 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-metrics v0.5.2 h1:ErEYO2f//CjKsUDw4SmLzelsK6L3ZmOAR/4P9iS7ruY= -github.com/hashicorp/go-metrics v0.5.2/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= +github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= +github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= 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-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= @@ -760,6 +1771,7 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -798,21 +1810,30 @@ github.com/jsternberg/zap-logfmt v1.3.0/go.mod h1:N3DENp9WNmCZxvkBD/eReWwz1149BK github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/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/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -832,8 +1853,12 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= 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/linxGnu/grocksdb v1.8.12 h1:1/pCztQUOa3BX/1gR3jSZDoaKFpeHFvQ1XrqZpSvZVo= -github.com/linxGnu/grocksdb v1.8.12/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= +github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= +github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -850,15 +1875,21 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= 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.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= 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/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -874,9 +1905,8 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= 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= @@ -884,6 +1914,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN 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/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -897,6 +1929,8 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= @@ -924,8 +1958,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= -github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -953,18 +1987,26 @@ github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc h1:8bQZVK1X6BJR/6nYUPxQEP+ReTsceJTKizeuwjWOPUA= -github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= +github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +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/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pires/go-proxyproto v0.6.2 h1:KAZ7UteSOt6urjme6ZldyFm4wDe/z0ZUP0Yv0Dos0d8= +github.com/pires/go-proxyproto v0.6.2/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -975,24 +2017,26 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= -github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.47.0 h1:p5Cz0FNHo7SnWOmWmoRozVcjEp0bIVU8cV7OShpjL1k= -github.com/prometheus/common v0.47.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= +github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -1004,11 +2048,14 @@ github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43Z github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= @@ -1018,20 +2065,26 @@ github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +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/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanity-io/litter v1.5.1 h1:dwnrSypP6q56o3lFxTU+t2fwQ9A+U5qrXVO4Qg9KwVU= +github.com/sanity-io/litter v1.5.1/go.mod h1:5Z71SvaYy5kcGtyglXOC9rrUi3c1E8CamFWjQsazTh0= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -1049,6 +2102,9 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -1066,6 +2122,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/strangelove-ventures/cometbft-client v0.1.0 h1:fcA652QaaR0LDnyJOZVjZKtuyAawnVXaq/p1MWJSYD4= github.com/strangelove-ventures/cometbft-client v0.1.0/go.mod h1:QzThgjzvsGgUNVNpGPitmxOWMIhp6a0oqf80nCRNt/0= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -1077,6 +2135,7 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1087,6 +2146,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -1099,6 +2160,8 @@ github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDd github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= 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/thepudds/fzgen v0.4.2 h1:HlEHl5hk2/cqEomf2uK5SA/FeJc12s/vIHmOG+FbACw= +github.com/thepudds/fzgen v0.4.2/go.mod h1:kHCWdsv5tdnt32NIHYDdgq083m6bMtaY0M+ipiO9xWE= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= @@ -1119,15 +2182,25 @@ github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0o github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.24.1 h1:/QYYr7g0EhwXEML8jO+8OYt5trPnLHS0p3mrgExJ5NU= +github.com/urfave/cli/v2 v2.24.1/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 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.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= @@ -1136,9 +2209,7 @@ go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1147,37 +2218,47 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= -go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= -go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= -go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= -go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= -go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= +go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 h1:t4ZwRPU+emrcvM2e9DHd0Fsf0JTPVcbfa/BhTDF03d0= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0/go.mod h1:vLarbg68dH2Wa77g71zmKQqlQ8+8Rq3GRG31uc0WcWI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 h1:cbsD4cUcviQGXdw8+bo5x2wazq10SKz8hEbtCRPcU78= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0/go.mod h1:JgXSGah17croqhJfhByOLVY719k1emAXC8MVhCIJlRs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0 h1:TVQp/bboR4mhZSav+MdgXB8FaRho1RC8UwVn3T0vjVc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0/go.mod h1:I33vtIe0sR96wfrUcilIzLoA3mLHhRmz9S9Te0S3gDo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.16.0 h1:iqjq9LAB8aK++sKVcELezzn655JnBNdsDhghU4G/So8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.16.0/go.mod h1:hGXzO5bhhSHZnKvrDaXB82Y9DRFour0Nz/KrBh7reWw= +go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= +go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= +go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE= +go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4= +go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= +go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= +go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= -go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= 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.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1186,16 +2267,32 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= 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= @@ -1203,13 +2300,24 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f h1:3CW0unweImhOzd5FmYuRsD4Y4oQFKZIjAnKbjV4WIrw= -golang.org/x/exp v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= +golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +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/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= 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= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -1230,9 +2338,16 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1247,7 +2362,6 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1268,59 +2382,68 @@ golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= 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-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1332,13 +2455,18 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1354,13 +2482,13 @@ golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/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= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1386,67 +2514,77 @@ golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/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-20210908233432-aa78b53d3365/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-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -1455,32 +2593,44 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -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-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +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= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/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-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-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-20190911174233-4f2ddba30aff/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-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= @@ -1509,25 +2659,24 @@ golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/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-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -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-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= -golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= 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= @@ -1537,61 +2686,21 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -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.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= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= -google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= +gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +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= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= +google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= +google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 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.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -1600,10 +2709,7 @@ google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAs google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= @@ -1628,59 +2734,25 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -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/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= @@ -1703,13 +2775,93 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= -google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014 h1:x9PwdEgd11LgK+orcck69WVRo7DezSO4VUMPI4xpc8A= -google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014/go.mod h1:rbHMSEDyoYX62nRVLOCc4Qt1HbsdytAYoVwgjiOhF3I= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c h1:NUsgEN92SQQqzfA+YtqYNqYmB3DMMYLlIwUZAQFVFbo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240221002015-b0ce06bbee7c/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto v0.0.0-20230821184602-ccc8af3d0e93/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= +google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= +google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= +google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231120223509-83a465c0220f/go.mod h1:iIgEblxoG4klcXsG0d9cpoxJ4xndv6+1FkDROCHhPRI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920183334-c177e329c48b/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1725,9 +2877,7 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= @@ -1736,12 +2886,9 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= @@ -1751,8 +2898,20 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1769,6 +2928,9 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1785,6 +2947,8 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -1807,21 +2971,71 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= 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= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= +modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= +modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +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= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/go.work b/go.work index d083f10ab..2975a227b 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,8 @@ -go 1.21 +go 1.21.10 + +toolchain go1.22.4 use ( . ./interchaintest -) \ No newline at end of file +) diff --git a/relayer/chains/avalanche/avalanche_chain_processor.go b/relayer/chains/avalanche/avalanche_chain_processor.go new file mode 100644 index 000000000..93bcc48df --- /dev/null +++ b/relayer/chains/avalanche/avalanche_chain_processor.go @@ -0,0 +1,459 @@ +package avalanche + +import ( + "context" + "errors" + "fmt" + "math/big" + "time" + + "github.com/ava-labs/subnet-evm/core/types" + "github.com/avast/retry-go/v4" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" + + "github.com/cosmos/relayer/v2/relayer/processor" + "github.com/cosmos/relayer/v2/relayer/provider" +) + +const ( + queryTimeout = 5 * time.Second + latestHeightQueryRetryDelay = 1 * time.Second + latestHeightQueryRetries = 5 + blockResultsQueryTimeout = 2 * time.Minute + + defaultMinQueryLoopDuration = 1 * time.Second + inSyncNumBlocksThreshold = 2 + blockMaxRetries = 5 +) + +// latestClientState is a map of clientID to the latest clientInfo for that client. +type latestClientState map[string]provider.ClientState + +func (l latestClientState) update(ctx context.Context, clientInfo clientInfo, acp *AvalancheChainProcessor) { + existingClientInfo, ok := l[clientInfo.clientID] + if ok && clientInfo.consensusHeight.LT(existingClientInfo.ConsensusHeight) { + // height is less than latest, so no-op + return + } + + // TODO: don't hardcode + tp := time.Hour * 2 + clientState := clientInfo.ClientState(tp) + + // update latest if no existing state or provided consensus height is newer + l[clientInfo.clientID] = clientState +} + +type AvalancheChainProcessor struct { + log *zap.Logger + + chainProvider *AvalancheProvider + + pathProcessors processor.PathProcessors + + // indicates whether queries are in sync with latest height of the chain + inSync bool + + // highest block + latestBlock provider.LatestBlock + + // holds highest consensus height and header for all clients + latestClientState + + // holds open state for known connections + connectionStateCache processor.ConnectionStateCache + + // holds open state for known channels + channelStateCache processor.ChannelStateCache + + // map of connection ID to client ID + connectionClients map[string]string + + // map of channel ID to connection ID + channelConnections map[string]string +} + +func NewAvalancheChainProcessor(log *zap.Logger, provider *AvalancheProvider) *AvalancheChainProcessor { + return &AvalancheChainProcessor{ + log: log.With(zap.String("chain_name", provider.ChainName()), zap.String("chain_id", provider.ChainId())), + chainProvider: provider, + latestClientState: make(latestClientState), + connectionStateCache: make(processor.ConnectionStateCache), + channelStateCache: make(processor.ChannelStateCache), + connectionClients: make(map[string]string), + channelConnections: make(map[string]string), + } +} + +// queryCyclePersistence hold the variables that should be retained across queryCycles. +type queryCyclePersistence struct { + latestHeight int64 + latestQueriedBlock int64 + retriesAtLatestQueriedBlock int + minQueryLoopDuration time.Duration + lastBalanceUpdate time.Time + balanceUpdateWaitDuration time.Duration +} + +// Run starts the query loop for the chain which will gather applicable ibc messages and push events out to the relevant PathProcessors. +// The initialBlockHistory parameter determines how many historical blocks should be fetched and processed before continuing with current blocks. +// ChainProcessors should obey the context and return upon context cancellation. +func (acp *AvalancheChainProcessor) Run(ctx context.Context, initialBlockHistory uint64, stuckPacket *processor.StuckPacket) error { + minQueryLoopDuration := acp.chainProvider.PCfg.MinLoopDuration + if minQueryLoopDuration == 0 { + minQueryLoopDuration = defaultMinQueryLoopDuration + } + + // this will be used for persistence across query cycle loop executions + persistence := queryCyclePersistence{ + minQueryLoopDuration: minQueryLoopDuration, + } + + // Infinite retry to get initial latest height + for { + latestHeight, err := acp.latestHeightWithRetry(ctx) + if err != nil { + acp.log.Error( + "Failed to query latest height after max attempts", + zap.Uint("attempts", latestHeightQueryRetries), + zap.Error(err), + ) + if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { + return nil + } + continue + } + persistence.latestHeight = latestHeight + break + } + + // this will make initial QueryLoop iteration look back initialBlockHistory blocks in history + latestQueriedBlock := persistence.latestHeight - int64(initialBlockHistory) + + if latestQueriedBlock < 0 { + latestQueriedBlock = 0 + } + + persistence.latestQueriedBlock = latestQueriedBlock + + var eg errgroup.Group + eg.Go(func() error { + return acp.initializeConnectionState(ctx) + }) + eg.Go(func() error { + return acp.initializeChannelState(ctx) + }) + if err := eg.Wait(); err != nil { + return err + } + + acp.log.Debug("Entering main query loop") + + ticker := time.NewTicker(persistence.minQueryLoopDuration) + + for { + if err := acp.queryCycle(ctx, &persistence); err != nil { + return err + } + select { + case <-ctx.Done(): + return nil + case <-ticker.C: + ticker.Reset(persistence.minQueryLoopDuration) + } + } +} + +// Provider returns the ChainProvider, which provides the methods for querying, assembling IBC messages, and sending transactions. +func (acp *AvalancheChainProcessor) Provider() provider.ChainProvider { + return acp.chainProvider +} + +// SetPathProcessors sets path processor for ChainProcessor should publish relevant IBC events to. +// ChainProcessors need reference to their PathProcessors and vice-versa, handled by EventProcessorBuilder.Build(). +func (acp *AvalancheChainProcessor) SetPathProcessors(pathProcessors processor.PathProcessors) { + acp.pathProcessors = pathProcessors +} + +// latestHeightWithRetry will query for the latest height, retrying in case of failure. +// It will delay by latestHeightQueryRetryDelay between attempts, up to latestHeightQueryRetries. +func (acp *AvalancheChainProcessor) latestHeightWithRetry(ctx context.Context) (latestHeight int64, err error) { + return latestHeight, retry.Do(func() error { + latestHeightQueryCtx, cancelLatestHeightQueryCtx := context.WithTimeout(ctx, queryTimeout) + defer cancelLatestHeightQueryCtx() + var err error + latestHeight, err = acp.chainProvider.QueryLatestHeight(latestHeightQueryCtx) + return err + }, retry.Context(ctx), retry.Attempts(latestHeightQueryRetries), retry.Delay(latestHeightQueryRetryDelay), retry.LastErrorOnly(true), retry.OnRetry(func(n uint, err error) { + acp.log.Info( + "Failed to query latest height", + zap.Uint("attempt", n+1), + zap.Uint("max_attempts", latestHeightQueryRetries), + zap.Error(err), + ) + })) +} + +// initializeConnectionState will bootstrap the connectionStateCache with the open connection state. +func (acp *AvalancheChainProcessor) initializeConnectionState(ctx context.Context) error { + ctx, cancel := context.WithTimeout(ctx, queryTimeout) + defer cancel() + connections, err := acp.chainProvider.QueryConnections(ctx) + if err != nil { + return fmt.Errorf("error querying connections: %w", err) + } + for _, c := range connections { + acp.connectionClients[c.Id] = c.ClientId + acp.connectionStateCache[processor.ConnectionKey{ + ConnectionID: c.Id, + ClientID: c.ClientId, + CounterpartyConnID: c.Counterparty.ConnectionId, + CounterpartyClientID: c.Counterparty.ClientId, + }] = c.State == conntypes.OPEN + } + return nil +} + +// initializeChannelState will bootstrap the channelStateCache with the open channel state. +func (acp *AvalancheChainProcessor) initializeChannelState(ctx context.Context) error { + ctx, cancel := context.WithTimeout(ctx, queryTimeout) + defer cancel() + channels, err := acp.chainProvider.QueryChannels(ctx) + if err != nil { + return fmt.Errorf("error querying channels: %w", err) + } + for _, ch := range channels { + if len(ch.ConnectionHops) != 1 { + acp.log.Error("Found channel using multiple connection hops. Not currently supported, ignoring.", + zap.String("channel_id", ch.ChannelId), + zap.String("port_id", ch.PortId), + zap.Any("connection_hops", ch.ConnectionHops), + ) + continue + } + acp.channelConnections[ch.ChannelId] = ch.ConnectionHops[0] + k := processor.ChannelKey{ + ChannelID: ch.ChannelId, + PortID: ch.PortId, + CounterpartyChannelID: ch.Counterparty.ChannelId, + CounterpartyPortID: ch.Counterparty.PortId, + } + acp.channelStateCache.SetOpen(k, ch.State == chantypes.OPEN, ch.Ordering) + } + return nil +} + +func (acp *AvalancheChainProcessor) queryCycle(ctx context.Context, persistence *queryCyclePersistence) error { + var err error + latestHeight, err := acp.latestHeightWithRetry(ctx) + if err != nil { + acp.log.Error( + "Failed to query latest height after max attempts", + zap.Uint("attempts", latestHeightQueryRetries), + zap.Error(err), + ) + return nil + } + + persistence.latestHeight = latestHeight + + acp.log.Debug("Queried latest height", + zap.Int64("latest_queried_block", persistence.latestQueriedBlock), + zap.Int64("latest_height", persistence.latestHeight), + ) + + // used at the end of the cycle to send signal to path processors to start processing if both chains are in sync and no new messages came in this cycle + firstTimeInSync := false + + if !acp.inSync { + if (persistence.latestHeight - persistence.latestQueriedBlock) < inSyncNumBlocksThreshold { + acp.inSync = true + firstTimeInSync = true + acp.log.Info("Chain is in sync") + } else { + acp.log.Info("Chain is not yet in sync", + zap.Int64("latest_queried_block", persistence.latestQueriedBlock), + zap.Int64("latest_height", persistence.latestHeight), + ) + } + } + + ibcMessagesCache := processor.NewIBCMessagesCache() + + ibcHeaderCache := make(processor.IBCHeaderCache) + + ppChanged := false + + var latestHeader AvalancheIBCHeader + + newLatestQueriedBlock := persistence.latestQueriedBlock + + chainID := acp.chainProvider.ChainId() + + for i := persistence.latestQueriedBlock + 1; i <= persistence.latestHeight; i++ { + var eg errgroup.Group + var blockRes *types.Block + var receipts []*types.Receipt + var ibcHeader provider.IBCHeader + i := i + eg.Go(func() (err error) { + queryCtx, cancelQueryCtx := context.WithTimeout(ctx, blockResultsQueryTimeout) + defer cancelQueryCtx() + blockRes, err = acp.chainProvider.ethClient.BlockByNumber(queryCtx, big.NewInt(i)) + if err != nil { + return err + } + for _, tx := range blockRes.Transactions() { + receipt, err := acp.chainProvider.ethClient.TransactionReceipt(queryCtx, tx.Hash()) + if err != nil { + acp.log.Error("Error fetching tx receipt", + zap.String("tx_hash", tx.Hash().String()), + zap.Error(err), + ) + return err + } + receipts = append(receipts, receipt) + } + return nil + }) + eg.Go(func() (err error) { + queryCtx, cancelQueryCtx := context.WithTimeout(ctx, queryTimeout) + defer cancelQueryCtx() + ibcHeader, err = acp.chainProvider.QueryIBCHeader(queryCtx, i) + return err + }) + + if err := eg.Wait(); err != nil { + acp.log.Warn("Error querying block data", + zap.Int64("height", i), + zap.Error(err), + ) + + persistence.retriesAtLatestQueriedBlock++ + if persistence.retriesAtLatestQueriedBlock >= blockMaxRetries { + acp.log.Warn("Reached max retries querying for block, skipping", zap.Int64("height", i)) + // skip this block. now depends on flush to pickup anything missed in the block. + persistence.latestQueriedBlock = i + persistence.retriesAtLatestQueriedBlock = 0 + continue + } + break + } + + acp.log.Debug( + "Queried block", + zap.Int64("height", i), + zap.Int64("latest", persistence.latestHeight), + zap.Int64("delta", persistence.latestHeight-i), + ) + + persistence.retriesAtLatestQueriedBlock = 0 + + var ok bool + latestHeader, ok = ibcHeader.(AvalancheIBCHeader) + if !ok { + return fmt.Errorf("bad header: %#v", ibcHeader) + } + + heightUint64 := uint64(i) + + acp.latestBlock = provider.LatestBlock{ + Height: heightUint64, + Time: time.Unix(int64(blockRes.Time()), 0), + } + + ibcHeaderCache[heightUint64] = latestHeader + ppChanged = true + + //blockMsgs := acp.ibcMessagesFromBlockEvents(blockRes.Transactions()) + //for _, m := range blockMsgs { + // acp.handleMessage(m, ibcMessagesCache) + //} + + for _, receipt := range receipts { + if receipt.Status != types.ReceiptStatusSuccessful { + // tx was not successful + continue + } + events, err := parseEventsFromTxReceipt(acp.chainProvider.abi, receipt) + if err != nil { + acp.log.Warn("Error parsing events", + zap.Int64("height", i), + zap.String("tx_hash", receipt.TxHash.String()), + zap.Error(err), + ) + + continue + } + messages := ibcMessagesFromEvents(acp.log, events, heightUint64) + + for _, m := range messages { + acp.handleMessage(ctx, m, ibcMessagesCache) + } + } + newLatestQueriedBlock = i + } + + if newLatestQueriedBlock == persistence.latestQueriedBlock /*&& !firstTimeInSync */ { + return nil + } + + if !ppChanged { + if firstTimeInSync { + for _, pp := range acp.pathProcessors { + pp.ProcessBacklogIfReady() + } + } + + return nil + } + + for _, pp := range acp.pathProcessors { + clientID := pp.RelevantClientID(chainID) + clientState, err := acp.clientState(ctx, clientID) + if err != nil { + acp.log.Error("Error fetching client state", + zap.String("client_id", clientID), + zap.Error(err), + ) + continue + } + + pp.HandleNewData(chainID, processor.ChainProcessorCacheData{ + LatestBlock: acp.latestBlock, + LatestHeader: latestHeader, + IBCMessagesCache: ibcMessagesCache.Clone(), + InSync: acp.inSync, + ClientState: clientState, + ConnectionStateCache: acp.connectionStateCache.FilterForClient(clientID), + ChannelStateCache: acp.channelStateCache.FilterForClient(clientID, acp.channelConnections, acp.connectionClients), + IBCHeaderCache: ibcHeaderCache.Clone(), + }) + } + + persistence.latestQueriedBlock = newLatestQueriedBlock + + return nil +} + +// clientState will return the most recent client state if client messages +// have already been observed for the clientID, otherwise it will query for it. +func (acp *AvalancheChainProcessor) clientState(ctx context.Context, clientID string) (provider.ClientState, error) { + if state, ok := acp.latestClientState[clientID]; ok { + return state, nil + } + cs, err := acp.chainProvider.QueryClientState(ctx, int64(acp.latestBlock.Height), clientID) + if err != nil { + return provider.ClientState{}, err + } + clientState := provider.ClientState{ + ClientID: clientID, + ConsensusHeight: cs.GetLatestHeight().(clienttypes.Height), + } + acp.latestClientState[clientID] = clientState + return clientState, nil +} diff --git a/relayer/chains/avalanche/codec.go b/relayer/chains/avalanche/codec.go new file mode 100644 index 000000000..a49dd3a20 --- /dev/null +++ b/relayer/chains/avalanche/codec.go @@ -0,0 +1,98 @@ +package avalanche + +import ( + feegrant "cosmossdk.io/x/feegrant/module" + "cosmossdk.io/x/upgrade" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/std" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/cosmos/cosmos-sdk/x/auth" + "github.com/cosmos/cosmos-sdk/x/auth/tx" + authz "github.com/cosmos/cosmos-sdk/x/authz/module" + "github.com/cosmos/cosmos-sdk/x/bank" + "github.com/cosmos/cosmos-sdk/x/crisis" + "github.com/cosmos/cosmos-sdk/x/distribution" + "github.com/cosmos/cosmos-sdk/x/gov" + govclient "github.com/cosmos/cosmos-sdk/x/gov/client" + "github.com/cosmos/cosmos-sdk/x/mint" + "github.com/cosmos/cosmos-sdk/x/params" + paramsclient "github.com/cosmos/cosmos-sdk/x/params/client" + "github.com/cosmos/cosmos-sdk/x/slashing" + "github.com/cosmos/cosmos-sdk/x/staking" + "github.com/cosmos/ibc-go/modules/capability" + "github.com/cosmos/ibc-go/v8/modules/apps/transfer" + ibc "github.com/cosmos/ibc-go/v8/modules/core" + + cosmosmodule "github.com/cosmos/relayer/v2/relayer/chains/cosmos/module" + "github.com/cosmos/relayer/v2/relayer/chains/cosmos/stride" + ethermintcodecs "github.com/cosmos/relayer/v2/relayer/codecs/ethermint" + injectivecodecs "github.com/cosmos/relayer/v2/relayer/codecs/injective" +) + +var moduleBasics = []module.AppModuleBasic{ + auth.AppModuleBasic{}, + authz.AppModuleBasic{}, + bank.AppModuleBasic{}, + capability.AppModuleBasic{}, + gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + upgrade.AppModuleBasic{}, + crisis.AppModuleBasic{}, + distribution.AppModuleBasic{}, + feegrant.AppModuleBasic{}, + mint.AppModuleBasic{}, + params.AppModuleBasic{}, + slashing.AppModuleBasic{}, + staking.AppModuleBasic{}, + upgrade.AppModuleBasic{}, + transfer.AppModuleBasic{}, + ibc.AppModuleBasic{}, + cosmosmodule.AppModuleBasic{}, + stride.AppModuleBasic{}, +} + +type Codec struct { + InterfaceRegistry types.InterfaceRegistry + Marshaler codec.Codec + TxConfig client.TxConfig + Amino *codec.LegacyAmino +} + +func makeCodec(moduleBasics []module.AppModuleBasic, extraCodecs []string) Codec { + modBasic := module.NewBasicManager(moduleBasics...) + encodingConfig := makeCodecConfig() + std.RegisterLegacyAminoCodec(encodingConfig.Amino) + std.RegisterInterfaces(encodingConfig.InterfaceRegistry) + modBasic.RegisterLegacyAminoCodec(encodingConfig.Amino) + modBasic.RegisterInterfaces(encodingConfig.InterfaceRegistry) + for _, c := range extraCodecs { + switch c { + case "ethermint": + ethermintcodecs.RegisterInterfaces(encodingConfig.InterfaceRegistry) + encodingConfig.Amino.RegisterConcrete(ðermintcodecs.PubKey{}, ethermintcodecs.PubKeyName, nil) + encodingConfig.Amino.RegisterConcrete(ðermintcodecs.PrivKey{}, ethermintcodecs.PrivKeyName, nil) + case "injective": + injectivecodecs.RegisterInterfaces(encodingConfig.InterfaceRegistry) + encodingConfig.Amino.RegisterConcrete(&injectivecodecs.PubKey{}, injectivecodecs.PubKeyName, nil) + encodingConfig.Amino.RegisterConcrete(&injectivecodecs.PrivKey{}, injectivecodecs.PrivKeyName, nil) + } + } + + return encodingConfig +} + +func makeCodecConfig() Codec { + interfaceRegistry := types.NewInterfaceRegistry() + marshaler := codec.NewProtoCodec(interfaceRegistry) + return Codec{ + InterfaceRegistry: interfaceRegistry, + Marshaler: marshaler, + TxConfig: tx.NewTxConfig(marshaler, tx.DefaultSignModes), + Amino: codec.NewLegacyAmino(), + } +} diff --git a/relayer/chains/avalanche/config.go b/relayer/chains/avalanche/config.go new file mode 100644 index 000000000..bd53426c5 --- /dev/null +++ b/relayer/chains/avalanche/config.go @@ -0,0 +1,81 @@ +package avalanche + +import ( + "fmt" + "net/url" + "os" + "path" + "time" + + "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/cosmos/cosmos-sdk/types/module" + "go.uber.org/zap" + + "github.com/cosmos/relayer/v2/relayer/codecs/ethermint" + "github.com/cosmos/relayer/v2/relayer/provider" +) + +var _ provider.ProviderConfig = &AvalancheProviderConfig{} + +type AvalancheProviderConfig struct { + RPCAddr string `json:"rpc-addr" yaml:"rpc-addr"` + BaseRPCAddr string `json:"base-rpc-addr" yaml:"base-rpc-addr"` + SubnetID string `json:"subnet-id" yaml:"subnet-id"` + BlockchainID string `json:"blockchain-id" yaml:"blockchain-id"` + ChainID string `json:"chain-id" yaml:"chain-id"` + NetworkID uint32 `json:"network-id" yaml:"network-id"` + ChainName string `json:"-" yaml:"-"` + Timeout string `json:"timeout" yaml:"timeout"` + ContractAddress string `json:"contract-address" yaml:"contract-address"` + TransferrerAddress string `json:"transferrer-address" yaml:"transferrer-address"` + KeyDirectory string `json:"key-directory" yaml:"key-directory"` + Key string `json:"key" yaml:"key"` + KeyringBackend string `json:"keyring-backend" yaml:"keyring-backend"` + ExtraCodecs []string `json:"extra-codecs" yaml:"extra-codecs"` + Modules []module.AppModuleBasic `json:"-" yaml:"-"` + MinLoopDuration time.Duration `json:"min-loop-duration" yaml:"min-loop-duration"` +} + +func (ac AvalancheProviderConfig) NewProvider(log *zap.Logger, homepath string, debug bool, chainName string) (provider.ChainProvider, error) { + if err := ac.Validate(); err != nil { + return nil, err + } + + ac.KeyDirectory = keysDir(homepath, fmt.Sprintf("avalanche-%s", ac.ChainID)) + ac.ChainName = chainName + + ac.Modules = append([]module.AppModuleBasic{}, moduleBasics...) + + return &AvalancheProvider{ + log: log, + PCfg: ac, + KeyringOptions: []keyring.Option{ethermint.EthSecp256k1Option()}, + Input: os.Stdin, + Output: os.Stdout, + + Codec: makeCodec(ac.Modules, ac.ExtraCodecs), + }, nil +} + +func (ac AvalancheProviderConfig) Validate() error { + _, err := url.Parse(ac.RPCAddr) + if err != nil { + return err + } + + _, err = url.Parse(ac.BaseRPCAddr) + if err != nil { + return err + } + + return nil +} + +func (ac AvalancheProviderConfig) BroadcastMode() provider.BroadcastMode { + return provider.BroadcastModeSingle +} + +// keysDir returns a string representing the path on the local filesystem where the keystore will be initialized. +func keysDir(home, chainID string) string { + return path.Join(home, "keys", chainID) +} diff --git a/relayer/chains/avalanche/event.go b/relayer/chains/avalanche/event.go new file mode 100644 index 000000000..b99f46b93 --- /dev/null +++ b/relayer/chains/avalanche/event.go @@ -0,0 +1,674 @@ +package avalanche + +import ( + "errors" + "fmt" + + "strconv" + "strings" + "time" + + "github.com/ava-labs/subnet-evm/accounts/abi" + evmtypes "github.com/ava-labs/subnet-evm/core/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectointypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/ethereum/go-ethereum/common" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + + "github.com/cosmos/relayer/v2/relayer/provider" +) + +const ( + eventClientCreated = "ClientCreated" + eventClientUpdated = "ClientUpdated" + eventClientUpgraded = "ClientUpgraded" + eventConnectionOpenInit = "ConnectionOpenInit" + eventConnectionOpenTry = "ConnectionOpenTry" + eventConnectionOpenAck = "ConnectionOpenAck" + eventConnectionOpenConfirm = "ConnectionOpenConfirm" + eventChannelOpenInit = "ChannelOpenInit" + eventChannelOpenTry = "ChannelOpenTry" + eventChannelOpenAck = "ChannelOpenAck" + eventChannelOpenConfirm = "ChannelOpenConfirm" + eventChannelCloseInit = "ChannelCloseInit" + eventChannelCloseConfirm = "ChannelCloseConfirm" + + eventPacketSendPacket = "PacketSent" + eventPacketRecvPacket = "PacketRecv" + eventPacketWriteAck = "WriteAck" + eventPacketAcknowledgePacket = "AckPacket" + eventPacketTimeoutPacket = "TimeoutPacket" + //eventPacketTimeoutPacketOnClose = "TimeoutPacketOnClose" +) + +var ( + errNoEventSignature = errors.New("no event signature") + + eventNames = []string{ + eventClientCreated, + eventClientUpdated, + eventClientUpgraded, + eventConnectionOpenInit, + eventConnectionOpenTry, + eventConnectionOpenAck, + eventConnectionOpenConfirm, + eventChannelOpenInit, + eventChannelOpenTry, + eventChannelOpenAck, + eventChannelOpenConfirm, + eventChannelCloseInit, + eventChannelCloseConfirm, + eventPacketSendPacket, + eventPacketRecvPacket, + eventPacketWriteAck, + eventPacketAcknowledgePacket, + eventPacketTimeoutPacket, + //eventPacketTimeoutPacketOnClose, + } + + connEventsTransform = map[string]string{ + eventConnectionOpenInit: connectointypes.EventTypeConnectionOpenInit, + eventConnectionOpenTry: connectointypes.EventTypeConnectionOpenTry, + eventConnectionOpenAck: connectointypes.EventTypeConnectionOpenAck, + eventConnectionOpenConfirm: connectointypes.EventTypeConnectionOpenConfirm, + } + + chanEventsTransform = map[string]string{ + eventChannelOpenInit: channeltypes.EventTypeChannelOpenInit, + eventChannelOpenTry: channeltypes.EventTypeChannelOpenTry, + eventChannelOpenAck: channeltypes.EventTypeChannelOpenAck, + eventChannelOpenConfirm: channeltypes.EventTypeChannelOpenConfirm, + eventChannelCloseInit: channeltypes.EventTypeChannelCloseInit, + eventChannelCloseConfirm: channeltypes.EventTypeChannelCloseConfirm, + } + + packetEventsTransform = map[string]string{ + eventPacketSendPacket: channeltypes.EventTypeSendPacket, + eventPacketRecvPacket: channeltypes.EventTypeRecvPacket, + eventPacketWriteAck: channeltypes.EventTypeWriteAck, + eventPacketAcknowledgePacket: channeltypes.EventTypeAcknowledgePacket, + eventPacketTimeoutPacket: channeltypes.EventTypeTimeoutPacket, + //eventPacketTimeoutPacketOnClose: channeltypes.EventTypeTimeoutPacketOnClose, + } +) + +// ibcMessage is the type used for parsing all possible properties of IBC messages +type ibcMessage struct { + eventType string + info ibcMessageInfo +} + +type ibcMessageInfo interface { + parseAttrs(log *zap.Logger, attrs map[string]string) + MarshalLogObject(enc zapcore.ObjectEncoder) error +} + +// clientInfo contains the consensus height of the counterparty chain for a client. +type clientInfo struct { + clientID string + consensusHeight clienttypes.Height + Height uint64 + header []byte +} + +func (ci *clientInfo) ClientState(trustingPeriod time.Duration) provider.ClientState { + return provider.ClientState{ + ClientID: ci.clientID, + ConsensusHeight: ci.consensusHeight, + TrustingPeriod: trustingPeriod, + Header: ci.header, + } +} + +func (ci *clientInfo) MarshalLogObject(enc zapcore.ObjectEncoder) error { + enc.AddString("client_id", ci.clientID) + enc.AddUint64("consensus_height", ci.consensusHeight.RevisionHeight) + enc.AddUint64("consensus_height_revision", ci.consensusHeight.RevisionNumber) + return nil +} + +func (ci *clientInfo) parseAttrs(log *zap.Logger, attributes map[string]string) { + for key, value := range attributes { + switch key { + case "clientId": + ci.clientID = value + case "consensusHeight": + revisionSplit := strings.Split(value, "-") + if len(revisionSplit) != 2 { + log.Error("Error parsing client consensus height", + zap.String("client_id", ci.clientID), + zap.String("value", value), + ) + } else { + revisionNumberString := revisionSplit[0] + revisionNumber, err := strconv.ParseUint(revisionNumberString, 10, 64) + if err != nil { + log.Error("Error parsing client consensus height revision number", + zap.Error(err), + ) + } + revisionHeightString := revisionSplit[1] + revisionHeight, err := strconv.ParseUint(revisionHeightString, 10, 64) + if err != nil { + log.Error("Error parsing client consensus height revision height", + zap.Error(err), + ) + return + } + ci.consensusHeight = clienttypes.Height{ + RevisionNumber: revisionNumber, + RevisionHeight: revisionHeight, + } + ci.Height = revisionHeight + } + case "clientMessage": + ci.header = []byte(value) + } + } +} + +type connectionInfo provider.ConnectionInfo + +func (res *connectionInfo) MarshalLogObject(enc zapcore.ObjectEncoder) error { + enc.AddString("connection_id", res.ConnID) + enc.AddString("client_id", res.ClientID) + enc.AddString("counterparty_connection_id", res.CounterpartyConnID) + enc.AddString("counterparty_client_id", res.CounterpartyClientID) + return nil +} + +func (res *connectionInfo) parseAttrs(log *zap.Logger, attributes map[string]string) { + for name, value := range attributes { + res.parseConnectionAttribute(name, value) + } +} + +func (res *connectionInfo) parseConnectionAttribute(name, value string) { + switch name { + case "clientId": + res.ClientID = value + case "connectionId": + res.ConnID = value + case "counterpartyClientID": + res.CounterpartyClientID = value + case "counterpartyConnectionId": + res.CounterpartyConnID = value + } +} + +type channelInfo provider.ChannelInfo + +func (res *channelInfo) MarshalLogObject(enc zapcore.ObjectEncoder) error { + enc.AddString("channel_id", res.ChannelID) + enc.AddString("port_id", res.PortID) + enc.AddString("counterparty_channel_id", res.CounterpartyChannelID) + enc.AddString("counterparty_port_id", res.CounterpartyPortID) + return nil +} + +func (res *channelInfo) parseAttrs(log *zap.Logger, attributes map[string]string) { + for name, value := range attributes { + res.parseChannelAttribute(name, value) + } +} + +// parseChannelAttribute parses channel attributes from an event. +// If the attribute has already been parsed into the channelInfo, +// it will not overwrite, and return true to inform the caller that +// the attribute already exists. +func (res *channelInfo) parseChannelAttribute(name, value string) { + switch name { + case "connectionId": + res.ConnID = value + case "channelId": + res.ChannelID = value + case "portId": + res.PortID = value + case "counterpartyChannelId": + res.CounterpartyChannelID = value + case "counterpartyPortID": + res.CounterpartyPortID = value + case "version": + res.Version = value + } +} + +type packetInfo provider.PacketInfo + +func (res *packetInfo) MarshalLogObject(enc zapcore.ObjectEncoder) error { + enc.AddUint64("sequence", res.Sequence) + enc.AddString("src_channel", res.SourceChannel) + enc.AddString("src_port", res.SourcePort) + enc.AddString("dst_channel", res.DestChannel) + enc.AddString("dst_port", res.DestPort) + return nil +} + +// parsePacketInfo is treated differently from the others since it can be constructed from the accumulation of multiple events +func (res *packetInfo) parseAttrs(log *zap.Logger, attributes map[string]string) { + for name, value := range attributes { + res.parseChannelAttribute(log, name, value) + } +} + +func (res *packetInfo) parseChannelAttribute(log *zap.Logger, name, value string) { + var err error + switch name { + case "data": + res.Data = common.FromHex(value) + case "timeoutHeight": + timeoutSplit := strings.Split(value, "-") + if len(timeoutSplit) != 2 { + log.Error("Error parsing packet height timeout", + zap.Uint64("sequence", res.Sequence), + zap.String("value", value), + ) + return + } + revisionNumber, err := strconv.ParseUint(timeoutSplit[0], 10, 64) + if err != nil { + log.Error("Error parsing packet timeout height revision number", + zap.Uint64("sequence", res.Sequence), + zap.String("value", timeoutSplit[0]), + zap.Error(err), + ) + return + } + revisionHeight, err := strconv.ParseUint(timeoutSplit[1], 10, 64) + if err != nil { + log.Error("Error parsing packet timeout height revision height", + zap.Uint64("sequence", res.Sequence), + zap.String("value", timeoutSplit[1]), + zap.Error(err), + ) + return + } + res.TimeoutHeight = clienttypes.Height{ + RevisionNumber: revisionNumber, + RevisionHeight: revisionHeight, + } + case "timeoutTimestamp": + res.TimeoutTimestamp, err = strconv.ParseUint(value, 10, 64) + case "sequence": + res.Sequence, err = strconv.ParseUint(value, 10, 64) + case "sourcePort": + res.SourcePort = value + case "sourceChannel": + res.SourceChannel = value + case "destPort": + res.DestPort = value + case "destChannel": + res.DestChannel = value + case "ack": + res.Ack = common.Hex2Bytes(value) + case "channelOrdering": + switch value { + case "0": + res.ChannelOrder = "ORDER_NONE_UNSPECIFIED" + case "1": + res.ChannelOrder = "ORDER_UNORDERED" + case "2": + res.ChannelOrder = "ORDER_ORDERED" + } + case "connection", "connectionID": + default: + err = errors.New("unknown event property") + } + if err != nil { + log.Error("Error parsing packet info", + zap.String("name", name), + zap.String("value", value), + zap.Error(err), + ) + } +} + +func transformEvents(origEvents []provider.RelayerEvent) []provider.RelayerEvent { + var events []provider.RelayerEvent + + for _, event := range origEvents { + switch event.EventType { + case eventClientCreated: + attributes := make(map[string]string) + attributes[clienttypes.AttributeKeyClientID] = event.Attributes["clientId"] + + events = append(events, provider.RelayerEvent{ + EventType: clienttypes.EventTypeCreateClient, + Attributes: attributes, + }) + case eventClientUpdated: + attributes := make(map[string]string) + attributes[clienttypes.AttributeKeyClientID] = event.Attributes["clientId"] + attributes[clienttypes.AttributeKeyConsensusHeight] = event.Attributes["consensusHeight"] + events = append(events, provider.RelayerEvent{ + EventType: clienttypes.EventTypeUpdateClient, + Attributes: attributes, + }) + case eventClientUpgraded: + attributes := make(map[string]string) + attributes[clienttypes.AttributeKeyClientID] = event.Attributes["clientId"] + attributes[clienttypes.AttributeKeyConsensusHeight] = event.Attributes["consensusHeight"] + attributes[clienttypes.AttributeKeyHeader] = event.Attributes["clientMessage"] + events = append(events, provider.RelayerEvent{ + EventType: clienttypes.EventTypeUpgradeClient, + Attributes: attributes, + }) + case eventConnectionOpenInit: + attributes := make(map[string]string) + attributes[connectointypes.AttributeKeyClientID] = event.Attributes["clientId"] + attributes[connectointypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[connectointypes.AttributeKeyCounterpartyClientID] = event.Attributes["counterpartyClientID"] + events = append(events, provider.RelayerEvent{ + EventType: connectointypes.EventTypeConnectionOpenInit, + Attributes: attributes, + }) + case eventConnectionOpenTry: + attributes := make(map[string]string) + attributes[connectointypes.AttributeKeyClientID] = event.Attributes["clientId"] + attributes[connectointypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[connectointypes.AttributeKeyCounterpartyClientID] = event.Attributes["counterpartyClientID"] + attributes[connectointypes.AttributeKeyCounterpartyConnectionID] = event.Attributes["counterpartyConnectionId"] + events = append(events, provider.RelayerEvent{ + EventType: connectointypes.EventTypeConnectionOpenTry, + Attributes: attributes, + }) + case eventConnectionOpenAck: + attributes := make(map[string]string) + attributes[connectointypes.AttributeKeyClientID] = event.Attributes["clientId"] + attributes[connectointypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[connectointypes.AttributeKeyCounterpartyClientID] = event.Attributes["counterpartyClientID"] + attributes[connectointypes.AttributeKeyCounterpartyConnectionID] = event.Attributes["counterpartyConnectionId"] + events = append(events, provider.RelayerEvent{ + EventType: connectointypes.EventTypeConnectionOpenAck, + Attributes: attributes, + }) + case eventConnectionOpenConfirm: + attributes := make(map[string]string) + attributes[connectointypes.AttributeKeyClientID] = event.Attributes["clientId"] + attributes[connectointypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[connectointypes.AttributeKeyCounterpartyClientID] = event.Attributes["counterpartyClientID"] + attributes[connectointypes.AttributeKeyCounterpartyConnectionID] = event.Attributes["counterpartyConnectionId"] + events = append(events, provider.RelayerEvent{ + EventType: connectointypes.EventTypeConnectionOpenConfirm, + Attributes: attributes, + }) + case eventChannelOpenInit: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[channeltypes.AttributeKeyChannelID] = event.Attributes["channelId"] + attributes[channeltypes.AttributeKeyPortID] = event.Attributes["portId"] + attributes[channeltypes.AttributeCounterpartyPortID] = event.Attributes["counterpartyPortID"] + attributes[channeltypes.AttributeVersion] = event.Attributes["version"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeChannelOpenInit, + Attributes: attributes, + }) + case eventChannelOpenTry: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[channeltypes.AttributeKeyChannelID] = event.Attributes["channelId"] + attributes[channeltypes.AttributeKeyPortID] = event.Attributes["portId"] + attributes[channeltypes.AttributeCounterpartyChannelID] = event.Attributes["counterpartyChannelId"] + attributes[channeltypes.AttributeCounterpartyPortID] = event.Attributes["counterpartyPortID"] + attributes[channeltypes.AttributeVersion] = event.Attributes["version"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeChannelOpenTry, + Attributes: attributes, + }) + case eventChannelOpenAck: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[channeltypes.AttributeKeyChannelID] = event.Attributes["channelId"] + attributes[channeltypes.AttributeKeyPortID] = event.Attributes["portId"] + attributes[channeltypes.AttributeCounterpartyChannelID] = event.Attributes["counterpartyChannelId"] + attributes[channeltypes.AttributeCounterpartyPortID] = event.Attributes["counterpartyPortID"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeChannelOpenAck, + Attributes: attributes, + }) + case eventChannelOpenConfirm: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[channeltypes.AttributeKeyChannelID] = event.Attributes["channelId"] + attributes[channeltypes.AttributeKeyPortID] = event.Attributes["portId"] + attributes[channeltypes.AttributeCounterpartyChannelID] = event.Attributes["counterpartyChannelId"] + attributes[channeltypes.AttributeCounterpartyPortID] = event.Attributes["counterpartyPortID"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeChannelOpenConfirm, + Attributes: attributes, + }) + case eventChannelCloseInit: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[channeltypes.AttributeKeyChannelID] = event.Attributes["channelId"] + attributes[channeltypes.AttributeKeyPortID] = event.Attributes["portId"] + attributes[channeltypes.AttributeCounterpartyChannelID] = event.Attributes["counterpartyChannelId"] + attributes[channeltypes.AttributeCounterpartyPortID] = event.Attributes["counterpartyPortID"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeChannelCloseInit, + Attributes: attributes, + }) + case eventChannelCloseConfirm: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionId"] + attributes[channeltypes.AttributeKeyChannelID] = event.Attributes["channelId"] + attributes[channeltypes.AttributeKeyPortID] = event.Attributes["portId"] + attributes[channeltypes.AttributeCounterpartyChannelID] = event.Attributes["counterpartyChannelId"] + attributes[channeltypes.AttributeCounterpartyPortID] = event.Attributes["counterpartyPortID"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeChannelCloseConfirm, + Attributes: attributes, + }) + case eventPacketSendPacket: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyData] = event.Attributes["data"] + attributes[channeltypes.AttributeKeyTimeoutHeight] = event.Attributes["timeoutHeight"] + attributes[channeltypes.AttributeKeyTimeoutTimestamp] = event.Attributes["timeoutTimestamp"] + attributes[channeltypes.AttributeKeySequence] = event.Attributes["sequence"] + attributes[channeltypes.AttributeKeySrcPort] = event.Attributes["sourcePort"] + attributes[channeltypes.AttributeKeySrcChannel] = event.Attributes["sourceChannel"] + attributes[channeltypes.AttributeKeyDstPort] = event.Attributes["destPort"] + attributes[channeltypes.AttributeKeyDstChannel] = event.Attributes["destChannel"] + attributes[channeltypes.AttributeKeyChannelOrdering] = event.Attributes["channelOrdering"] + attributes[channeltypes.AttributeKeyConnection] = event.Attributes["connection"] + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionID"] + attributes[channeltypes.AttributeKeyAck] = event.Attributes["ack"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeSendPacket, + Attributes: attributes, + }) + case eventPacketRecvPacket: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyData] = event.Attributes["data"] + attributes[channeltypes.AttributeKeyTimeoutHeight] = event.Attributes["timeoutHeight"] + attributes[channeltypes.AttributeKeyTimeoutTimestamp] = event.Attributes["timeoutTimestamp"] + attributes[channeltypes.AttributeKeySequence] = event.Attributes["sequence"] + attributes[channeltypes.AttributeKeySrcPort] = event.Attributes["sourcePort"] + attributes[channeltypes.AttributeKeySrcChannel] = event.Attributes["sourceChannel"] + attributes[channeltypes.AttributeKeyDstPort] = event.Attributes["destPort"] + attributes[channeltypes.AttributeKeyDstChannel] = event.Attributes["destChannel"] + attributes[channeltypes.AttributeKeyChannelOrdering] = event.Attributes["channelOrdering"] + attributes[channeltypes.AttributeKeyConnection] = event.Attributes["connection"] + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionID"] + attributes[channeltypes.AttributeKeyAck] = event.Attributes["ack"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeRecvPacket, + Attributes: attributes, + }) + case eventPacketWriteAck: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyData] = event.Attributes["data"] + attributes[channeltypes.AttributeKeyTimeoutHeight] = event.Attributes["timeoutHeight"] + attributes[channeltypes.AttributeKeyTimeoutTimestamp] = event.Attributes["timeoutTimestamp"] + attributes[channeltypes.AttributeKeySequence] = event.Attributes["sequence"] + attributes[channeltypes.AttributeKeySrcPort] = event.Attributes["sourcePort"] + attributes[channeltypes.AttributeKeySrcChannel] = event.Attributes["sourceChannel"] + attributes[channeltypes.AttributeKeyDstPort] = event.Attributes["destPort"] + attributes[channeltypes.AttributeKeyDstChannel] = event.Attributes["destChannel"] + attributes[channeltypes.AttributeKeyChannelOrdering] = event.Attributes["channelOrdering"] + attributes[channeltypes.AttributeKeyConnection] = event.Attributes["connection"] + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionID"] + attributes[channeltypes.AttributeKeyAck] = event.Attributes["ack"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeWriteAck, + Attributes: attributes, + }) + case eventPacketAcknowledgePacket: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyData] = event.Attributes["data"] + attributes[channeltypes.AttributeKeyTimeoutHeight] = event.Attributes["timeoutHeight"] + attributes[channeltypes.AttributeKeyTimeoutTimestamp] = event.Attributes["timeoutTimestamp"] + attributes[channeltypes.AttributeKeySequence] = event.Attributes["sequence"] + attributes[channeltypes.AttributeKeySrcPort] = event.Attributes["sourcePort"] + attributes[channeltypes.AttributeKeySrcChannel] = event.Attributes["sourceChannel"] + attributes[channeltypes.AttributeKeyDstPort] = event.Attributes["destPort"] + attributes[channeltypes.AttributeKeyDstChannel] = event.Attributes["destChannel"] + attributes[channeltypes.AttributeKeyChannelOrdering] = event.Attributes["channelOrdering"] + attributes[channeltypes.AttributeKeyConnection] = event.Attributes["connection"] + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionID"] + attributes[channeltypes.AttributeKeyAck] = event.Attributes["ack"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeAcknowledgePacket, + Attributes: attributes, + }) + case eventPacketTimeoutPacket: + attributes := make(map[string]string) + attributes[channeltypes.AttributeKeyData] = event.Attributes["data"] + attributes[channeltypes.AttributeKeyTimeoutHeight] = event.Attributes["timeoutHeight"] + attributes[channeltypes.AttributeKeyTimeoutTimestamp] = event.Attributes["timeoutTimestamp"] + attributes[channeltypes.AttributeKeySequence] = event.Attributes["sequence"] + attributes[channeltypes.AttributeKeySrcPort] = event.Attributes["sourcePort"] + attributes[channeltypes.AttributeKeySrcChannel] = event.Attributes["sourceChannel"] + attributes[channeltypes.AttributeKeyDstPort] = event.Attributes["destPort"] + attributes[channeltypes.AttributeKeyDstChannel] = event.Attributes["destChannel"] + attributes[channeltypes.AttributeKeyChannelOrdering] = event.Attributes["channelOrdering"] + attributes[channeltypes.AttributeKeyConnection] = event.Attributes["connection"] + attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connectionID"] + attributes[channeltypes.AttributeKeyAck] = event.Attributes["ack"] + events = append(events, provider.RelayerEvent{ + EventType: channeltypes.EventTypeTimeoutPacket, + Attributes: attributes, + }) + //case eventPacketTimeoutPacketOnClose: + // attributes := make(map[string]string) + // attributes[channeltypes.AttributeKeyData] = event.Attributes["data"] + // attributes[channeltypes.AttributeKeyTimeoutHeight] = event.Attributes["timeoutHeight"] + // attributes[channeltypes.AttributeKeyTimeoutTimestamp] = event.Attributes["timeoutTimestamp"] + // attributes[channeltypes.AttributeKeySequence] = event.Attributes["sequence"] + // attributes[channeltypes.AttributeKeySrcPort] = event.Attributes["sourcePort"] + // attributes[channeltypes.AttributeKeySrcChannel] = event.Attributes["sourceChannel"] + // attributes[channeltypes.AttributeKeyDstPort] = event.Attributes["destPort"] + // attributes[channeltypes.AttributeKeyDstChannel] = event.Attributes["destChannel"] + // attributes[channeltypes.AttributeKeyChannelOrdering] = event.Attributes["channelOrdering"] + // attributes[channeltypes.AttributeKeyConnection] = event.Attributes["connection"] + // attributes[channeltypes.AttributeKeyConnectionID] = event.Attributes["connection"] + // events = append(events, provider.RelayerEvent{ + // EventType: channeltypes.EventTypeChannelCloseConfirm, + // Attributes: attributes, + // }) + } + } + + return events +} + +func parseEventsFromTxReceipt(contractABI abi.ABI, receipt *evmtypes.Receipt) ([]provider.RelayerEvent, error) { + var events []provider.RelayerEvent + + for _, log := range receipt.Logs { + if len(log.Topics) == 0 { + return events, errNoEventSignature + } + for _, eventName := range eventNames { + abiEvent, ok := contractABI.Events[eventName] + if !ok { + return nil, fmt.Errorf("event %s doesn't exist in ABI", eventName) + } + if log.Topics[0] != abiEvent.ID { + continue + } + // we found our event in logs + + // parse non-indexed data + eventMap := map[string]interface{}{} + if len(log.Data) > 0 { + if err := contractABI.UnpackIntoMap(eventMap, eventName, log.Data); err != nil { + return nil, err + } + } + + // parse indexed data + var indexed abi.Arguments + for _, arg := range abiEvent.Inputs { + if arg.Indexed { + indexed = append(indexed, arg) + } + } + + if err := abi.ParseTopicsIntoMap(eventMap, indexed, log.Topics[1:]); err != nil { + return nil, err + } + + // convert from map into Relayer event structure + attributes := make(map[string]string) + for key, value := range eventMap { + switch v := value.(type) { + case []byte: + attributes[key] = fmt.Sprintf("%#x", v) + default: + attributes[key] = fmt.Sprintf("%v", v) + } + } + + events = append(events, provider.RelayerEvent{ + EventType: eventName, + Attributes: attributes, + }) + } + } + + return events, nil +} + +func ibcMessagesFromEvents(log *zap.Logger, events []provider.RelayerEvent, height uint64) []ibcMessage { + var messages []ibcMessage + for _, event := range events { + m := parseIBCMessageFromEvent(log, event, height) + if m == nil || m.info == nil { + continue + } + messages = append(messages, *m) + } + + return messages +} + +func parseIBCMessageFromEvent(log *zap.Logger, event provider.RelayerEvent, height uint64) *ibcMessage { + var ci ibcMessageInfo + var eventType string = event.EventType + switch event.EventType { + case eventClientCreated, eventClientUpdated, eventClientUpgraded: + ci = &clientInfo{Height: height} + ci.parseAttrs(log, event.Attributes) + case eventConnectionOpenInit, eventConnectionOpenTry, eventConnectionOpenAck, eventConnectionOpenConfirm: + ci = &connectionInfo{Height: height} + ci.parseAttrs(log, event.Attributes) + eventType = connEventsTransform[eventType] + case eventChannelOpenInit, eventChannelOpenTry, eventChannelOpenAck, eventChannelOpenConfirm, eventChannelCloseInit, eventChannelCloseConfirm: + ci = &channelInfo{Height: height} + ci.parseAttrs(log, event.Attributes) + eventType = chanEventsTransform[eventType] + case eventPacketSendPacket, eventPacketRecvPacket, eventPacketWriteAck, eventPacketAcknowledgePacket, eventPacketTimeoutPacket: //eventPacketTimeoutPacketOnClose: + ci = &packetInfo{Height: height} + ci.parseAttrs(log, event.Attributes) + eventType = packetEventsTransform[eventType] + } + + log.Debug("Parse IBC message", zap.String("event", eventType), zap.Object("ci", ci)) + return &ibcMessage{ + eventType: eventType, + info: ci, + } +} diff --git a/relayer/chains/avalanche/ibc/contract.abi b/relayer/chains/avalanche/ibc/contract.abi new file mode 100644 index 000000000..90c7d212c --- /dev/null +++ b/relayer/chains/avalanche/ibc/contract.abi @@ -0,0 +1,2349 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "timeoutHeight", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destPort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "int32", + "name": "channelOrdering", + "type": "int32" + }, + { + "indexed": false, + "internalType": "string", + "name": "connectionID", + "type": "string" + } + ], + "name": "AckPacket", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "timeoutHeight", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destPort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "error", + "type": "string" + } + ], + "name": "AcknowledgementError", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "channelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "portId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyChannelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyPortID", + "type": "string" + } + ], + "name": "ChannelCloseConfirm", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "channelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "portId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyChannelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyPortID", + "type": "string" + } + ], + "name": "ChannelCloseInit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "channelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "portId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyChannelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyPortID", + "type": "string" + } + ], + "name": "ChannelOpenAck", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "channelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "portId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyChannelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyPortID", + "type": "string" + } + ], + "name": "ChannelOpenConfirm", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "channelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "portId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyPortID", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "version", + "type": "string" + } + ], + "name": "ChannelOpenInit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "channelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "portId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyChannelId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyPortID", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "version", + "type": "string" + } + ], + "name": "ChannelOpenTry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "consensusHeight", + "type": "string" + } + ], + "name": "ClientCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "consensusHeight", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "clientMessage", + "type": "bytes" + } + ], + "name": "ClientUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "consensusHeight", + "type": "string" + } + ], + "name": "ClientUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyClientID", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyConnectionId", + "type": "string" + } + ], + "name": "ConnectionOpenAck", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyClientID", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyConnectionId", + "type": "string" + } + ], + "name": "ConnectionOpenConfirm", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyClientID", + "type": "string" + } + ], + "name": "ConnectionOpenInit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "connectionId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyClientID", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "counterpartyConnectionId", + "type": "string" + } + ], + "name": "ConnectionOpenTry", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "timeoutHeight", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destPort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "int32", + "name": "channelOrdering", + "type": "int32" + }, + { + "indexed": false, + "internalType": "string", + "name": "connection", + "type": "string" + } + ], + "name": "PacketRecv", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "timeoutHeight", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destPort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "int32", + "name": "channelOrdering", + "type": "int32" + }, + { + "indexed": false, + "internalType": "string", + "name": "connection", + "type": "string" + } + ], + "name": "PacketSent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "timeoutHeight", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destPort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "int32", + "name": "channelOrdering", + "type": "int32" + }, + { + "indexed": false, + "internalType": "string", + "name": "connectionID", + "type": "string" + } + ], + "name": "TimeoutPacket", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destPort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "ConnectionID", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "ChannelOrdering", + "type": "string" + } + ], + "name": "TypeChannelClosed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "clientID", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "clientType", + "type": "string" + } + ], + "name": "TypeSubmitMisbehaviour", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "messageID", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "WarpIBCMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "timeoutHeight", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destPort", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "destChannel", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "ack", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "string", + "name": "connectionID", + "type": "string" + } + ], + "name": "WriteAck", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "ack", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "OnAcknowledgementPacket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "Relayer", + "type": "bytes" + } + ], + "name": "OnRecvPacket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "Relayer", + "type": "bytes" + } + ], + "name": "OnTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "Relayer", + "type": "bytes" + } + ], + "name": "OnTimeoutOnClose", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "acknowledgement", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofAcked", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "proofHeight", + "type": "tuple" + }, + { + "internalType": "string", + "name": "signer", + "type": "string" + } + ], + "name": "acknowledgement", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + } + ], + "name": "bindPort", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "channel", + "type": "bytes" + } + ], + "name": "chanOpenInit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "channel", + "type": "bytes" + }, + { + "internalType": "string", + "name": "counterpartyVersion", + "type": "string" + }, + { + "internalType": "bytes", + "name": "proofInit", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofHeight", + "type": "bytes" + } + ], + "name": "chanOpenTry", + "outputs": [ + { + "internalType": "string", + "name": "channelID", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "proofInit", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofHeight", + "type": "bytes" + } + ], + "name": "channelCloseConfirm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + } + ], + "name": "channelCloseInit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + }, + { + "internalType": "string", + "name": "counterpartyChannelID", + "type": "string" + }, + { + "internalType": "string", + "name": "counterpartyVersion", + "type": "string" + }, + { + "internalType": "bytes", + "name": "proofTry", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofHeight", + "type": "bytes" + } + ], + "name": "channelOpenAck", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "proofAck", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofHeight", + "type": "bytes" + } + ], + "name": "channelOpenConfirm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "connectionID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "clientState", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "version", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "counterpartyConnectionID", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofTry", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofClient", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofConsensus", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofHeight", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "consensusHeight", + "type": "bytes" + } + ], + "name": "connOpenAck", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "connectionID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "proofAck", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofHeight", + "type": "bytes" + } + ], + "name": "connOpenConfirm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "clientID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "counterparty", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "version", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "delayPeriod", + "type": "uint32" + } + ], + "name": "connOpenInit", + "outputs": [ + { + "internalType": "string", + "name": "connectionID", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "counterparty", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "delayPeriod", + "type": "uint32" + }, + { + "internalType": "string", + "name": "clientID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "clientState", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "counterpartyVersions", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofInit", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofClient", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofConsensus", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofHeight", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "consensusHeight", + "type": "bytes" + } + ], + "name": "connOpenTry", + "outputs": [ + { + "internalType": "string", + "name": "connectionID", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "clientType", + "type": "string" + }, + { + "internalType": "bytes", + "name": "clientState", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "consensusState", + "type": "bytes" + } + ], + "name": "createClient", + "outputs": [ + { + "internalType": "string", + "name": "clientID", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + } + ], + "name": "queryChannel", + "outputs": [ + { + "internalType": "bytes", + "name": "channel", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "queryChannelAll", + "outputs": [ + { + "internalType": "bytes", + "name": "channelAll", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "clientId", + "type": "string" + } + ], + "name": "queryClientState", + "outputs": [ + { + "internalType": "bytes", + "name": "clientState", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "queryClientStateAll", + "outputs": [ + { + "internalType": "bytes", + "name": "clientStateAll", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "connectionID", + "type": "string" + } + ], + "name": "queryConnection", + "outputs": [ + { + "internalType": "bytes", + "name": "connection", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "queryConnectionAll", + "outputs": [ + { + "internalType": "bytes", + "name": "connectionAll", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "clientId", + "type": "string" + } + ], + "name": "queryConsensusState", + "outputs": [ + { + "internalType": "bytes", + "name": "consensusState", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "queryConsensusStateAll", + "outputs": [ + { + "internalType": "bytes", + "name": "consensusStateAll", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + }, + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + } + ], + "name": "queryPacketAcknowledgement", + "outputs": [ + { + "internalType": "bytes", + "name": "packetAcknowledgement", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + } + ], + "name": "queryPacketAcknowledgements", + "outputs": [ + { + "internalType": "bytes", + "name": "packetAcknowledgements", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + }, + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + } + ], + "name": "queryPacketCommitment", + "outputs": [ + { + "internalType": "bytes", + "name": "packetCommitment", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + } + ], + "name": "queryPacketCommitments", + "outputs": [ + { + "internalType": "bytes", + "name": "packetCommitments", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "portID", + "type": "string" + }, + { + "internalType": "string", + "name": "channelID", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "sequences", + "type": "uint256[]" + } + ], + "name": "queryUnreceivedPackets", + "outputs": [ + { + "internalType": "uint256[]", + "name": "seqs", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "height", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "proofCommitment", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "proofHeight", + "type": "tuple" + }, + { + "internalType": "string", + "name": "signer", + "type": "string" + } + ], + "internalType": "struct IIBC.MsgRecvPacket", + "name": "message", + "type": "tuple" + } + ], + "name": "recvPacket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "channelCapability", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "sendPacket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "proofUnreceived", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "proofHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "nextSequenceRecv", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signer", + "type": "string" + } + ], + "name": "timeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "proofUnreceived", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofClose", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "proofHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "nextSequenceRecv", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signer", + "type": "string" + } + ], + "name": "timeoutOnClose", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "clientID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "clientMessage", + "type": "bytes" + } + ], + "name": "updateClient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "clientID", + "type": "string" + }, + { + "internalType": "bytes", + "name": "upgradedClien", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "upgradedConsState", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofUpgradeClient", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proofUpgradeConsState", + "type": "bytes" + } + ], + "name": "upgradeClient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/relayer/chains/avalanche/ibc/contract.go b/relayer/chains/avalanche/ibc/contract.go new file mode 100644 index 000000000..7f5478523 --- /dev/null +++ b/relayer/chains/avalanche/ibc/contract.go @@ -0,0 +1,4172 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ibc + +import ( + "errors" + "math/big" + "strings" + + "github.com/ava-labs/subnet-evm/accounts/abi" + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/subnet-evm/core/types" + "github.com/ava-labs/subnet-evm/interfaces" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = interfaces.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Height is an auto generated low-level Go binding around an user-defined struct. +type Height struct { + RevisionNumber *big.Int + RevisionHeight *big.Int +} + +// IIBCMsgRecvPacket is an auto generated low-level Go binding around an user-defined struct. +type IIBCMsgRecvPacket struct { + Packet Packet + ProofCommitment []byte + ProofHeight Height + Signer string +} + +// Packet is an auto generated low-level Go binding around an user-defined struct. +type Packet struct { + Sequence *big.Int + SourcePort string + SourceChannel string + DestinationPort string + DestinationChannel string + Data []byte + TimeoutHeight Height + TimeoutTimestamp *big.Int +} + +// IBCMetaData contains all meta data concerning the IBC contract. +var IBCMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"timeoutHeight\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destPort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int32\",\"name\":\"channelOrdering\",\"type\":\"int32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"}],\"name\":\"AckPacket\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"timeoutHeight\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destPort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"AcknowledgementError\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"channelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"portId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyChannelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyPortID\",\"type\":\"string\"}],\"name\":\"ChannelCloseConfirm\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"channelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"portId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyChannelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyPortID\",\"type\":\"string\"}],\"name\":\"ChannelCloseInit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"channelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"portId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyChannelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyPortID\",\"type\":\"string\"}],\"name\":\"ChannelOpenAck\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"channelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"portId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyChannelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyPortID\",\"type\":\"string\"}],\"name\":\"ChannelOpenConfirm\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"channelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"portId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyPortID\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"ChannelOpenInit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"channelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"portId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyChannelId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyPortID\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"ChannelOpenTry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"consensusHeight\",\"type\":\"string\"}],\"name\":\"ClientCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"consensusHeight\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"clientMessage\",\"type\":\"bytes\"}],\"name\":\"ClientUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"consensusHeight\",\"type\":\"string\"}],\"name\":\"ClientUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyClientID\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyConnectionId\",\"type\":\"string\"}],\"name\":\"ConnectionOpenAck\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyClientID\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyConnectionId\",\"type\":\"string\"}],\"name\":\"ConnectionOpenConfirm\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyClientID\",\"type\":\"string\"}],\"name\":\"ConnectionOpenInit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyClientID\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"counterpartyConnectionId\",\"type\":\"string\"}],\"name\":\"ConnectionOpenTry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"timeoutHeight\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destPort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int32\",\"name\":\"channelOrdering\",\"type\":\"int32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connection\",\"type\":\"string\"}],\"name\":\"PacketRecv\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"timeoutHeight\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destPort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int32\",\"name\":\"channelOrdering\",\"type\":\"int32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connection\",\"type\":\"string\"}],\"name\":\"PacketSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"timeoutHeight\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destPort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int32\",\"name\":\"channelOrdering\",\"type\":\"int32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"}],\"name\":\"TimeoutPacket\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destPort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ConnectionID\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ChannelOrdering\",\"type\":\"string\"}],\"name\":\"TypeChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientID\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"clientType\",\"type\":\"string\"}],\"name\":\"TypeSubmitMisbehaviour\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"WarpIBCMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"timeoutHeight\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destPort\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destChannel\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"ack\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"}],\"name\":\"WriteAck\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"ack\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"OnAcknowledgementPacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"Relayer\",\"type\":\"bytes\"}],\"name\":\"OnRecvPacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"Relayer\",\"type\":\"bytes\"}],\"name\":\"OnTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"Relayer\",\"type\":\"bytes\"}],\"name\":\"OnTimeoutOnClose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"acknowledgement\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofAcked\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"proofHeight\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"signer\",\"type\":\"string\"}],\"name\":\"acknowledgement\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"}],\"name\":\"bindPort\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"channel\",\"type\":\"bytes\"}],\"name\":\"chanOpenInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"channel\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"counterpartyVersion\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"proofInit\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofHeight\",\"type\":\"bytes\"}],\"name\":\"chanOpenTry\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"proofInit\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofHeight\",\"type\":\"bytes\"}],\"name\":\"channelCloseConfirm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"}],\"name\":\"channelCloseInit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"counterpartyChannelID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"counterpartyVersion\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"proofTry\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofHeight\",\"type\":\"bytes\"}],\"name\":\"channelOpenAck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"proofAck\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofHeight\",\"type\":\"bytes\"}],\"name\":\"channelOpenConfirm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"clientState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"version\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"counterpartyConnectionID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofTry\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofClient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofConsensus\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofHeight\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"consensusHeight\",\"type\":\"bytes\"}],\"name\":\"connOpenAck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"proofAck\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofHeight\",\"type\":\"bytes\"}],\"name\":\"connOpenConfirm\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"clientID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"counterparty\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"version\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"delayPeriod\",\"type\":\"uint32\"}],\"name\":\"connOpenInit\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"counterparty\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"delayPeriod\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"clientID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"clientState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"counterpartyVersions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofInit\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofClient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofConsensus\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofHeight\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"consensusHeight\",\"type\":\"bytes\"}],\"name\":\"connOpenTry\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"clientType\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"clientState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"consensusState\",\"type\":\"bytes\"}],\"name\":\"createClient\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"clientID\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"}],\"name\":\"queryChannel\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"channel\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryChannelAll\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"channelAll\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"}],\"name\":\"queryClientState\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"clientState\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryClientStateAll\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"clientStateAll\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"connectionID\",\"type\":\"string\"}],\"name\":\"queryConnection\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"connection\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryConnectionAll\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"connectionAll\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"clientId\",\"type\":\"string\"}],\"name\":\"queryConsensusState\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"consensusState\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryConsensusStateAll\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"consensusStateAll\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"}],\"name\":\"queryPacketAcknowledgement\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetAcknowledgement\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"}],\"name\":\"queryPacketAcknowledgements\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetAcknowledgements\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"}],\"name\":\"queryPacketCommitment\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetCommitment\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"}],\"name\":\"queryPacketCommitments\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetCommitments\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"portID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"channelID\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"sequences\",\"type\":\"uint256[]\"}],\"name\":\"queryUnreceivedPackets\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"seqs\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"height\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proofCommitment\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"proofHeight\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"signer\",\"type\":\"string\"}],\"internalType\":\"structIIBC.MsgRecvPacket\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"recvPacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"channelCapability\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendPacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proofUnreceived\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"proofHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"nextSequenceRecv\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signer\",\"type\":\"string\"}],\"name\":\"timeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"proofUnreceived\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofClose\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"proofHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"nextSequenceRecv\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signer\",\"type\":\"string\"}],\"name\":\"timeoutOnClose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"clientID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"clientMessage\",\"type\":\"bytes\"}],\"name\":\"updateClient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"clientID\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"upgradedClien\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"upgradedConsState\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofUpgradeClient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofUpgradeConsState\",\"type\":\"bytes\"}],\"name\":\"upgradeClient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// IBCABI is the input ABI used to generate the binding from. +// Deprecated: Use IBCMetaData.ABI instead. +var IBCABI = IBCMetaData.ABI + +// IBC is an auto generated Go binding around an Ethereum contract. +type IBC struct { + IBCCaller // Read-only binding to the contract + IBCTransactor // Write-only binding to the contract + IBCFilterer // Log filterer for contract events +} + +// IBCCaller is an auto generated read-only Go binding around an Ethereum contract. +type IBCCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBCTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IBCTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBCFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IBCFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IBCSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IBCSession struct { + Contract *IBC // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBCCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IBCCallerSession struct { + Contract *IBCCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IBCTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IBCTransactorSession struct { + Contract *IBCTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IBCRaw is an auto generated low-level Go binding around an Ethereum contract. +type IBCRaw struct { + Contract *IBC // Generic contract binding to access the raw methods on +} + +// IBCCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IBCCallerRaw struct { + Contract *IBCCaller // Generic read-only contract binding to access the raw methods on +} + +// IBCTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IBCTransactorRaw struct { + Contract *IBCTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIBC creates a new instance of IBC, bound to a specific deployed contract. +func NewIBC(address common.Address, backend bind.ContractBackend) (*IBC, error) { + contract, err := bindIBC(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IBC{IBCCaller: IBCCaller{contract: contract}, IBCTransactor: IBCTransactor{contract: contract}, IBCFilterer: IBCFilterer{contract: contract}}, nil +} + +// NewIBCCaller creates a new read-only instance of IBC, bound to a specific deployed contract. +func NewIBCCaller(address common.Address, caller bind.ContractCaller) (*IBCCaller, error) { + contract, err := bindIBC(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IBCCaller{contract: contract}, nil +} + +// NewIBCTransactor creates a new write-only instance of IBC, bound to a specific deployed contract. +func NewIBCTransactor(address common.Address, transactor bind.ContractTransactor) (*IBCTransactor, error) { + contract, err := bindIBC(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IBCTransactor{contract: contract}, nil +} + +// NewIBCFilterer creates a new log filterer instance of IBC, bound to a specific deployed contract. +func NewIBCFilterer(address common.Address, filterer bind.ContractFilterer) (*IBCFilterer, error) { + contract, err := bindIBC(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IBCFilterer{contract: contract}, nil +} + +// bindIBC binds a generic wrapper to an already deployed contract. +func bindIBC(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IBCMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBC *IBCRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBC.Contract.IBCCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBC *IBCRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBC.Contract.IBCTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBC *IBCRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBC.Contract.IBCTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IBC *IBCCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IBC.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IBC *IBCTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IBC.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IBC *IBCTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IBC.Contract.contract.Transact(opts, method, params...) +} + +// QueryChannel is a free data retrieval call binding the contract method 0x421a47dd. +// +// Solidity: function queryChannel(string portID, string channelID) view returns(bytes channel) +func (_IBC *IBCCaller) QueryChannel(opts *bind.CallOpts, portID string, channelID string) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryChannel", portID, channelID) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryChannel is a free data retrieval call binding the contract method 0x421a47dd. +// +// Solidity: function queryChannel(string portID, string channelID) view returns(bytes channel) +func (_IBC *IBCSession) QueryChannel(portID string, channelID string) ([]byte, error) { + return _IBC.Contract.QueryChannel(&_IBC.CallOpts, portID, channelID) +} + +// QueryChannel is a free data retrieval call binding the contract method 0x421a47dd. +// +// Solidity: function queryChannel(string portID, string channelID) view returns(bytes channel) +func (_IBC *IBCCallerSession) QueryChannel(portID string, channelID string) ([]byte, error) { + return _IBC.Contract.QueryChannel(&_IBC.CallOpts, portID, channelID) +} + +// QueryChannelAll is a free data retrieval call binding the contract method 0x6c86a60d. +// +// Solidity: function queryChannelAll() view returns(bytes channelAll) +func (_IBC *IBCCaller) QueryChannelAll(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryChannelAll") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryChannelAll is a free data retrieval call binding the contract method 0x6c86a60d. +// +// Solidity: function queryChannelAll() view returns(bytes channelAll) +func (_IBC *IBCSession) QueryChannelAll() ([]byte, error) { + return _IBC.Contract.QueryChannelAll(&_IBC.CallOpts) +} + +// QueryChannelAll is a free data retrieval call binding the contract method 0x6c86a60d. +// +// Solidity: function queryChannelAll() view returns(bytes channelAll) +func (_IBC *IBCCallerSession) QueryChannelAll() ([]byte, error) { + return _IBC.Contract.QueryChannelAll(&_IBC.CallOpts) +} + +// QueryClientState is a free data retrieval call binding the contract method 0x6b8d8117. +// +// Solidity: function queryClientState(string clientId) view returns(bytes clientState) +func (_IBC *IBCCaller) QueryClientState(opts *bind.CallOpts, clientId string) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryClientState", clientId) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryClientState is a free data retrieval call binding the contract method 0x6b8d8117. +// +// Solidity: function queryClientState(string clientId) view returns(bytes clientState) +func (_IBC *IBCSession) QueryClientState(clientId string) ([]byte, error) { + return _IBC.Contract.QueryClientState(&_IBC.CallOpts, clientId) +} + +// QueryClientState is a free data retrieval call binding the contract method 0x6b8d8117. +// +// Solidity: function queryClientState(string clientId) view returns(bytes clientState) +func (_IBC *IBCCallerSession) QueryClientState(clientId string) ([]byte, error) { + return _IBC.Contract.QueryClientState(&_IBC.CallOpts, clientId) +} + +// QueryClientStateAll is a free data retrieval call binding the contract method 0xc2783f51. +// +// Solidity: function queryClientStateAll() view returns(bytes clientStateAll) +func (_IBC *IBCCaller) QueryClientStateAll(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryClientStateAll") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryClientStateAll is a free data retrieval call binding the contract method 0xc2783f51. +// +// Solidity: function queryClientStateAll() view returns(bytes clientStateAll) +func (_IBC *IBCSession) QueryClientStateAll() ([]byte, error) { + return _IBC.Contract.QueryClientStateAll(&_IBC.CallOpts) +} + +// QueryClientStateAll is a free data retrieval call binding the contract method 0xc2783f51. +// +// Solidity: function queryClientStateAll() view returns(bytes clientStateAll) +func (_IBC *IBCCallerSession) QueryClientStateAll() ([]byte, error) { + return _IBC.Contract.QueryClientStateAll(&_IBC.CallOpts) +} + +// QueryConnection is a free data retrieval call binding the contract method 0x25456993. +// +// Solidity: function queryConnection(string connectionID) view returns(bytes connection) +func (_IBC *IBCCaller) QueryConnection(opts *bind.CallOpts, connectionID string) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryConnection", connectionID) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryConnection is a free data retrieval call binding the contract method 0x25456993. +// +// Solidity: function queryConnection(string connectionID) view returns(bytes connection) +func (_IBC *IBCSession) QueryConnection(connectionID string) ([]byte, error) { + return _IBC.Contract.QueryConnection(&_IBC.CallOpts, connectionID) +} + +// QueryConnection is a free data retrieval call binding the contract method 0x25456993. +// +// Solidity: function queryConnection(string connectionID) view returns(bytes connection) +func (_IBC *IBCCallerSession) QueryConnection(connectionID string) ([]byte, error) { + return _IBC.Contract.QueryConnection(&_IBC.CallOpts, connectionID) +} + +// QueryConnectionAll is a free data retrieval call binding the contract method 0x391f521d. +// +// Solidity: function queryConnectionAll() view returns(bytes connectionAll) +func (_IBC *IBCCaller) QueryConnectionAll(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryConnectionAll") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryConnectionAll is a free data retrieval call binding the contract method 0x391f521d. +// +// Solidity: function queryConnectionAll() view returns(bytes connectionAll) +func (_IBC *IBCSession) QueryConnectionAll() ([]byte, error) { + return _IBC.Contract.QueryConnectionAll(&_IBC.CallOpts) +} + +// QueryConnectionAll is a free data retrieval call binding the contract method 0x391f521d. +// +// Solidity: function queryConnectionAll() view returns(bytes connectionAll) +func (_IBC *IBCCallerSession) QueryConnectionAll() ([]byte, error) { + return _IBC.Contract.QueryConnectionAll(&_IBC.CallOpts) +} + +// QueryConsensusState is a free data retrieval call binding the contract method 0x936ee71f. +// +// Solidity: function queryConsensusState(string clientId) view returns(bytes consensusState) +func (_IBC *IBCCaller) QueryConsensusState(opts *bind.CallOpts, clientId string) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryConsensusState", clientId) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryConsensusState is a free data retrieval call binding the contract method 0x936ee71f. +// +// Solidity: function queryConsensusState(string clientId) view returns(bytes consensusState) +func (_IBC *IBCSession) QueryConsensusState(clientId string) ([]byte, error) { + return _IBC.Contract.QueryConsensusState(&_IBC.CallOpts, clientId) +} + +// QueryConsensusState is a free data retrieval call binding the contract method 0x936ee71f. +// +// Solidity: function queryConsensusState(string clientId) view returns(bytes consensusState) +func (_IBC *IBCCallerSession) QueryConsensusState(clientId string) ([]byte, error) { + return _IBC.Contract.QueryConsensusState(&_IBC.CallOpts, clientId) +} + +// QueryConsensusStateAll is a free data retrieval call binding the contract method 0x72231742. +// +// Solidity: function queryConsensusStateAll() view returns(bytes consensusStateAll) +func (_IBC *IBCCaller) QueryConsensusStateAll(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryConsensusStateAll") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryConsensusStateAll is a free data retrieval call binding the contract method 0x72231742. +// +// Solidity: function queryConsensusStateAll() view returns(bytes consensusStateAll) +func (_IBC *IBCSession) QueryConsensusStateAll() ([]byte, error) { + return _IBC.Contract.QueryConsensusStateAll(&_IBC.CallOpts) +} + +// QueryConsensusStateAll is a free data retrieval call binding the contract method 0x72231742. +// +// Solidity: function queryConsensusStateAll() view returns(bytes consensusStateAll) +func (_IBC *IBCCallerSession) QueryConsensusStateAll() ([]byte, error) { + return _IBC.Contract.QueryConsensusStateAll(&_IBC.CallOpts) +} + +// QueryPacketAcknowledgement is a free data retrieval call binding the contract method 0x37d69da6. +// +// Solidity: function queryPacketAcknowledgement(string portID, string channelID, uint256 sequence) view returns(bytes packetAcknowledgement) +func (_IBC *IBCCaller) QueryPacketAcknowledgement(opts *bind.CallOpts, portID string, channelID string, sequence *big.Int) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryPacketAcknowledgement", portID, channelID, sequence) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryPacketAcknowledgement is a free data retrieval call binding the contract method 0x37d69da6. +// +// Solidity: function queryPacketAcknowledgement(string portID, string channelID, uint256 sequence) view returns(bytes packetAcknowledgement) +func (_IBC *IBCSession) QueryPacketAcknowledgement(portID string, channelID string, sequence *big.Int) ([]byte, error) { + return _IBC.Contract.QueryPacketAcknowledgement(&_IBC.CallOpts, portID, channelID, sequence) +} + +// QueryPacketAcknowledgement is a free data retrieval call binding the contract method 0x37d69da6. +// +// Solidity: function queryPacketAcknowledgement(string portID, string channelID, uint256 sequence) view returns(bytes packetAcknowledgement) +func (_IBC *IBCCallerSession) QueryPacketAcknowledgement(portID string, channelID string, sequence *big.Int) ([]byte, error) { + return _IBC.Contract.QueryPacketAcknowledgement(&_IBC.CallOpts, portID, channelID, sequence) +} + +// QueryPacketAcknowledgements is a free data retrieval call binding the contract method 0xe287bfb3. +// +// Solidity: function queryPacketAcknowledgements(string portID, string channelID) view returns(bytes packetAcknowledgements) +func (_IBC *IBCCaller) QueryPacketAcknowledgements(opts *bind.CallOpts, portID string, channelID string) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryPacketAcknowledgements", portID, channelID) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryPacketAcknowledgements is a free data retrieval call binding the contract method 0xe287bfb3. +// +// Solidity: function queryPacketAcknowledgements(string portID, string channelID) view returns(bytes packetAcknowledgements) +func (_IBC *IBCSession) QueryPacketAcknowledgements(portID string, channelID string) ([]byte, error) { + return _IBC.Contract.QueryPacketAcknowledgements(&_IBC.CallOpts, portID, channelID) +} + +// QueryPacketAcknowledgements is a free data retrieval call binding the contract method 0xe287bfb3. +// +// Solidity: function queryPacketAcknowledgements(string portID, string channelID) view returns(bytes packetAcknowledgements) +func (_IBC *IBCCallerSession) QueryPacketAcknowledgements(portID string, channelID string) ([]byte, error) { + return _IBC.Contract.QueryPacketAcknowledgements(&_IBC.CallOpts, portID, channelID) +} + +// QueryPacketCommitment is a free data retrieval call binding the contract method 0xc9b08535. +// +// Solidity: function queryPacketCommitment(string portID, string channelID, uint256 sequence) view returns(bytes packetCommitment) +func (_IBC *IBCCaller) QueryPacketCommitment(opts *bind.CallOpts, portID string, channelID string, sequence *big.Int) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryPacketCommitment", portID, channelID, sequence) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryPacketCommitment is a free data retrieval call binding the contract method 0xc9b08535. +// +// Solidity: function queryPacketCommitment(string portID, string channelID, uint256 sequence) view returns(bytes packetCommitment) +func (_IBC *IBCSession) QueryPacketCommitment(portID string, channelID string, sequence *big.Int) ([]byte, error) { + return _IBC.Contract.QueryPacketCommitment(&_IBC.CallOpts, portID, channelID, sequence) +} + +// QueryPacketCommitment is a free data retrieval call binding the contract method 0xc9b08535. +// +// Solidity: function queryPacketCommitment(string portID, string channelID, uint256 sequence) view returns(bytes packetCommitment) +func (_IBC *IBCCallerSession) QueryPacketCommitment(portID string, channelID string, sequence *big.Int) ([]byte, error) { + return _IBC.Contract.QueryPacketCommitment(&_IBC.CallOpts, portID, channelID, sequence) +} + +// QueryPacketCommitments is a free data retrieval call binding the contract method 0x4146b599. +// +// Solidity: function queryPacketCommitments(string portID, string channelID) view returns(bytes packetCommitments) +func (_IBC *IBCCaller) QueryPacketCommitments(opts *bind.CallOpts, portID string, channelID string) ([]byte, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryPacketCommitments", portID, channelID) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// QueryPacketCommitments is a free data retrieval call binding the contract method 0x4146b599. +// +// Solidity: function queryPacketCommitments(string portID, string channelID) view returns(bytes packetCommitments) +func (_IBC *IBCSession) QueryPacketCommitments(portID string, channelID string) ([]byte, error) { + return _IBC.Contract.QueryPacketCommitments(&_IBC.CallOpts, portID, channelID) +} + +// QueryPacketCommitments is a free data retrieval call binding the contract method 0x4146b599. +// +// Solidity: function queryPacketCommitments(string portID, string channelID) view returns(bytes packetCommitments) +func (_IBC *IBCCallerSession) QueryPacketCommitments(portID string, channelID string) ([]byte, error) { + return _IBC.Contract.QueryPacketCommitments(&_IBC.CallOpts, portID, channelID) +} + +// QueryUnreceivedPackets is a free data retrieval call binding the contract method 0xd7ade985. +// +// Solidity: function queryUnreceivedPackets(string portID, string channelID, uint256[] sequences) view returns(uint256[] seqs, (uint256,uint256) height) +func (_IBC *IBCCaller) QueryUnreceivedPackets(opts *bind.CallOpts, portID string, channelID string, sequences []*big.Int) (struct { + Seqs []*big.Int + Height Height +}, error) { + var out []interface{} + err := _IBC.contract.Call(opts, &out, "queryUnreceivedPackets", portID, channelID, sequences) + + outstruct := new(struct { + Seqs []*big.Int + Height Height + }) + if err != nil { + return *outstruct, err + } + + outstruct.Seqs = *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) + outstruct.Height = *abi.ConvertType(out[1], new(Height)).(*Height) + + return *outstruct, err + +} + +// QueryUnreceivedPackets is a free data retrieval call binding the contract method 0xd7ade985. +// +// Solidity: function queryUnreceivedPackets(string portID, string channelID, uint256[] sequences) view returns(uint256[] seqs, (uint256,uint256) height) +func (_IBC *IBCSession) QueryUnreceivedPackets(portID string, channelID string, sequences []*big.Int) (struct { + Seqs []*big.Int + Height Height +}, error) { + return _IBC.Contract.QueryUnreceivedPackets(&_IBC.CallOpts, portID, channelID, sequences) +} + +// QueryUnreceivedPackets is a free data retrieval call binding the contract method 0xd7ade985. +// +// Solidity: function queryUnreceivedPackets(string portID, string channelID, uint256[] sequences) view returns(uint256[] seqs, (uint256,uint256) height) +func (_IBC *IBCCallerSession) QueryUnreceivedPackets(portID string, channelID string, sequences []*big.Int) (struct { + Seqs []*big.Int + Height Height +}, error) { + return _IBC.Contract.QueryUnreceivedPackets(&_IBC.CallOpts, portID, channelID, sequences) +} + +// OnAcknowledgementPacket is a paid mutator transaction binding the contract method 0x2c49a978. +// +// Solidity: function OnAcknowledgementPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ack, bytes ) returns() +func (_IBC *IBCTransactor) OnAcknowledgementPacket(opts *bind.TransactOpts, packet Packet, ack []byte, arg2 []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "OnAcknowledgementPacket", packet, ack, arg2) +} + +// OnAcknowledgementPacket is a paid mutator transaction binding the contract method 0x2c49a978. +// +// Solidity: function OnAcknowledgementPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ack, bytes ) returns() +func (_IBC *IBCSession) OnAcknowledgementPacket(packet Packet, ack []byte, arg2 []byte) (*types.Transaction, error) { + return _IBC.Contract.OnAcknowledgementPacket(&_IBC.TransactOpts, packet, ack, arg2) +} + +// OnAcknowledgementPacket is a paid mutator transaction binding the contract method 0x2c49a978. +// +// Solidity: function OnAcknowledgementPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ack, bytes ) returns() +func (_IBC *IBCTransactorSession) OnAcknowledgementPacket(packet Packet, ack []byte, arg2 []byte) (*types.Transaction, error) { + return _IBC.Contract.OnAcknowledgementPacket(&_IBC.TransactOpts, packet, ack, arg2) +} + +// OnRecvPacket is a paid mutator transaction binding the contract method 0x85f7175c. +// +// Solidity: function OnRecvPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCTransactor) OnRecvPacket(opts *bind.TransactOpts, packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "OnRecvPacket", packet, Relayer) +} + +// OnRecvPacket is a paid mutator transaction binding the contract method 0x85f7175c. +// +// Solidity: function OnRecvPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCSession) OnRecvPacket(packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.Contract.OnRecvPacket(&_IBC.TransactOpts, packet, Relayer) +} + +// OnRecvPacket is a paid mutator transaction binding the contract method 0x85f7175c. +// +// Solidity: function OnRecvPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCTransactorSession) OnRecvPacket(packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.Contract.OnRecvPacket(&_IBC.TransactOpts, packet, Relayer) +} + +// OnTimeout is a paid mutator transaction binding the contract method 0x36b8b913. +// +// Solidity: function OnTimeout((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCTransactor) OnTimeout(opts *bind.TransactOpts, packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "OnTimeout", packet, Relayer) +} + +// OnTimeout is a paid mutator transaction binding the contract method 0x36b8b913. +// +// Solidity: function OnTimeout((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCSession) OnTimeout(packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.Contract.OnTimeout(&_IBC.TransactOpts, packet, Relayer) +} + +// OnTimeout is a paid mutator transaction binding the contract method 0x36b8b913. +// +// Solidity: function OnTimeout((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCTransactorSession) OnTimeout(packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.Contract.OnTimeout(&_IBC.TransactOpts, packet, Relayer) +} + +// OnTimeoutOnClose is a paid mutator transaction binding the contract method 0x128ff066. +// +// Solidity: function OnTimeoutOnClose((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCTransactor) OnTimeoutOnClose(opts *bind.TransactOpts, packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "OnTimeoutOnClose", packet, Relayer) +} + +// OnTimeoutOnClose is a paid mutator transaction binding the contract method 0x128ff066. +// +// Solidity: function OnTimeoutOnClose((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCSession) OnTimeoutOnClose(packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.Contract.OnTimeoutOnClose(&_IBC.TransactOpts, packet, Relayer) +} + +// OnTimeoutOnClose is a paid mutator transaction binding the contract method 0x128ff066. +// +// Solidity: function OnTimeoutOnClose((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes Relayer) returns() +func (_IBC *IBCTransactorSession) OnTimeoutOnClose(packet Packet, Relayer []byte) (*types.Transaction, error) { + return _IBC.Contract.OnTimeoutOnClose(&_IBC.TransactOpts, packet, Relayer) +} + +// Acknowledgement is a paid mutator transaction binding the contract method 0xf8831420. +// +// Solidity: function acknowledgement((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes acknowledgement, bytes proofAcked, (uint256,uint256) proofHeight, string signer) returns() +func (_IBC *IBCTransactor) Acknowledgement(opts *bind.TransactOpts, packet Packet, acknowledgement []byte, proofAcked []byte, proofHeight Height, signer string) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "acknowledgement", packet, acknowledgement, proofAcked, proofHeight, signer) +} + +// Acknowledgement is a paid mutator transaction binding the contract method 0xf8831420. +// +// Solidity: function acknowledgement((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes acknowledgement, bytes proofAcked, (uint256,uint256) proofHeight, string signer) returns() +func (_IBC *IBCSession) Acknowledgement(packet Packet, acknowledgement []byte, proofAcked []byte, proofHeight Height, signer string) (*types.Transaction, error) { + return _IBC.Contract.Acknowledgement(&_IBC.TransactOpts, packet, acknowledgement, proofAcked, proofHeight, signer) +} + +// Acknowledgement is a paid mutator transaction binding the contract method 0xf8831420. +// +// Solidity: function acknowledgement((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes acknowledgement, bytes proofAcked, (uint256,uint256) proofHeight, string signer) returns() +func (_IBC *IBCTransactorSession) Acknowledgement(packet Packet, acknowledgement []byte, proofAcked []byte, proofHeight Height, signer string) (*types.Transaction, error) { + return _IBC.Contract.Acknowledgement(&_IBC.TransactOpts, packet, acknowledgement, proofAcked, proofHeight, signer) +} + +// BindPort is a paid mutator transaction binding the contract method 0xc13b184f. +// +// Solidity: function bindPort(string portID) returns() +func (_IBC *IBCTransactor) BindPort(opts *bind.TransactOpts, portID string) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "bindPort", portID) +} + +// BindPort is a paid mutator transaction binding the contract method 0xc13b184f. +// +// Solidity: function bindPort(string portID) returns() +func (_IBC *IBCSession) BindPort(portID string) (*types.Transaction, error) { + return _IBC.Contract.BindPort(&_IBC.TransactOpts, portID) +} + +// BindPort is a paid mutator transaction binding the contract method 0xc13b184f. +// +// Solidity: function bindPort(string portID) returns() +func (_IBC *IBCTransactorSession) BindPort(portID string) (*types.Transaction, error) { + return _IBC.Contract.BindPort(&_IBC.TransactOpts, portID) +} + +// ChanOpenInit is a paid mutator transaction binding the contract method 0xa718c941. +// +// Solidity: function chanOpenInit(string portID, bytes channel) returns() +func (_IBC *IBCTransactor) ChanOpenInit(opts *bind.TransactOpts, portID string, channel []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "chanOpenInit", portID, channel) +} + +// ChanOpenInit is a paid mutator transaction binding the contract method 0xa718c941. +// +// Solidity: function chanOpenInit(string portID, bytes channel) returns() +func (_IBC *IBCSession) ChanOpenInit(portID string, channel []byte) (*types.Transaction, error) { + return _IBC.Contract.ChanOpenInit(&_IBC.TransactOpts, portID, channel) +} + +// ChanOpenInit is a paid mutator transaction binding the contract method 0xa718c941. +// +// Solidity: function chanOpenInit(string portID, bytes channel) returns() +func (_IBC *IBCTransactorSession) ChanOpenInit(portID string, channel []byte) (*types.Transaction, error) { + return _IBC.Contract.ChanOpenInit(&_IBC.TransactOpts, portID, channel) +} + +// ChanOpenTry is a paid mutator transaction binding the contract method 0x0ce2b1f6. +// +// Solidity: function chanOpenTry(string portID, bytes channel, string counterpartyVersion, bytes proofInit, bytes proofHeight) returns(string channelID) +func (_IBC *IBCTransactor) ChanOpenTry(opts *bind.TransactOpts, portID string, channel []byte, counterpartyVersion string, proofInit []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "chanOpenTry", portID, channel, counterpartyVersion, proofInit, proofHeight) +} + +// ChanOpenTry is a paid mutator transaction binding the contract method 0x0ce2b1f6. +// +// Solidity: function chanOpenTry(string portID, bytes channel, string counterpartyVersion, bytes proofInit, bytes proofHeight) returns(string channelID) +func (_IBC *IBCSession) ChanOpenTry(portID string, channel []byte, counterpartyVersion string, proofInit []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChanOpenTry(&_IBC.TransactOpts, portID, channel, counterpartyVersion, proofInit, proofHeight) +} + +// ChanOpenTry is a paid mutator transaction binding the contract method 0x0ce2b1f6. +// +// Solidity: function chanOpenTry(string portID, bytes channel, string counterpartyVersion, bytes proofInit, bytes proofHeight) returns(string channelID) +func (_IBC *IBCTransactorSession) ChanOpenTry(portID string, channel []byte, counterpartyVersion string, proofInit []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChanOpenTry(&_IBC.TransactOpts, portID, channel, counterpartyVersion, proofInit, proofHeight) +} + +// ChannelCloseConfirm is a paid mutator transaction binding the contract method 0x460d68fa. +// +// Solidity: function channelCloseConfirm(string portID, string channelID, bytes proofInit, bytes proofHeight) returns() +func (_IBC *IBCTransactor) ChannelCloseConfirm(opts *bind.TransactOpts, portID string, channelID string, proofInit []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "channelCloseConfirm", portID, channelID, proofInit, proofHeight) +} + +// ChannelCloseConfirm is a paid mutator transaction binding the contract method 0x460d68fa. +// +// Solidity: function channelCloseConfirm(string portID, string channelID, bytes proofInit, bytes proofHeight) returns() +func (_IBC *IBCSession) ChannelCloseConfirm(portID string, channelID string, proofInit []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChannelCloseConfirm(&_IBC.TransactOpts, portID, channelID, proofInit, proofHeight) +} + +// ChannelCloseConfirm is a paid mutator transaction binding the contract method 0x460d68fa. +// +// Solidity: function channelCloseConfirm(string portID, string channelID, bytes proofInit, bytes proofHeight) returns() +func (_IBC *IBCTransactorSession) ChannelCloseConfirm(portID string, channelID string, proofInit []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChannelCloseConfirm(&_IBC.TransactOpts, portID, channelID, proofInit, proofHeight) +} + +// ChannelCloseInit is a paid mutator transaction binding the contract method 0x7eb320da. +// +// Solidity: function channelCloseInit(string portID, string channelID) returns() +func (_IBC *IBCTransactor) ChannelCloseInit(opts *bind.TransactOpts, portID string, channelID string) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "channelCloseInit", portID, channelID) +} + +// ChannelCloseInit is a paid mutator transaction binding the contract method 0x7eb320da. +// +// Solidity: function channelCloseInit(string portID, string channelID) returns() +func (_IBC *IBCSession) ChannelCloseInit(portID string, channelID string) (*types.Transaction, error) { + return _IBC.Contract.ChannelCloseInit(&_IBC.TransactOpts, portID, channelID) +} + +// ChannelCloseInit is a paid mutator transaction binding the contract method 0x7eb320da. +// +// Solidity: function channelCloseInit(string portID, string channelID) returns() +func (_IBC *IBCTransactorSession) ChannelCloseInit(portID string, channelID string) (*types.Transaction, error) { + return _IBC.Contract.ChannelCloseInit(&_IBC.TransactOpts, portID, channelID) +} + +// ChannelOpenAck is a paid mutator transaction binding the contract method 0xbd6f4bde. +// +// Solidity: function channelOpenAck(string portID, string channelID, string counterpartyChannelID, string counterpartyVersion, bytes proofTry, bytes proofHeight) returns() +func (_IBC *IBCTransactor) ChannelOpenAck(opts *bind.TransactOpts, portID string, channelID string, counterpartyChannelID string, counterpartyVersion string, proofTry []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "channelOpenAck", portID, channelID, counterpartyChannelID, counterpartyVersion, proofTry, proofHeight) +} + +// ChannelOpenAck is a paid mutator transaction binding the contract method 0xbd6f4bde. +// +// Solidity: function channelOpenAck(string portID, string channelID, string counterpartyChannelID, string counterpartyVersion, bytes proofTry, bytes proofHeight) returns() +func (_IBC *IBCSession) ChannelOpenAck(portID string, channelID string, counterpartyChannelID string, counterpartyVersion string, proofTry []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChannelOpenAck(&_IBC.TransactOpts, portID, channelID, counterpartyChannelID, counterpartyVersion, proofTry, proofHeight) +} + +// ChannelOpenAck is a paid mutator transaction binding the contract method 0xbd6f4bde. +// +// Solidity: function channelOpenAck(string portID, string channelID, string counterpartyChannelID, string counterpartyVersion, bytes proofTry, bytes proofHeight) returns() +func (_IBC *IBCTransactorSession) ChannelOpenAck(portID string, channelID string, counterpartyChannelID string, counterpartyVersion string, proofTry []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChannelOpenAck(&_IBC.TransactOpts, portID, channelID, counterpartyChannelID, counterpartyVersion, proofTry, proofHeight) +} + +// ChannelOpenConfirm is a paid mutator transaction binding the contract method 0x9c110621. +// +// Solidity: function channelOpenConfirm(string portID, string channelID, bytes proofAck, bytes proofHeight) returns() +func (_IBC *IBCTransactor) ChannelOpenConfirm(opts *bind.TransactOpts, portID string, channelID string, proofAck []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "channelOpenConfirm", portID, channelID, proofAck, proofHeight) +} + +// ChannelOpenConfirm is a paid mutator transaction binding the contract method 0x9c110621. +// +// Solidity: function channelOpenConfirm(string portID, string channelID, bytes proofAck, bytes proofHeight) returns() +func (_IBC *IBCSession) ChannelOpenConfirm(portID string, channelID string, proofAck []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChannelOpenConfirm(&_IBC.TransactOpts, portID, channelID, proofAck, proofHeight) +} + +// ChannelOpenConfirm is a paid mutator transaction binding the contract method 0x9c110621. +// +// Solidity: function channelOpenConfirm(string portID, string channelID, bytes proofAck, bytes proofHeight) returns() +func (_IBC *IBCTransactorSession) ChannelOpenConfirm(portID string, channelID string, proofAck []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ChannelOpenConfirm(&_IBC.TransactOpts, portID, channelID, proofAck, proofHeight) +} + +// ConnOpenAck is a paid mutator transaction binding the contract method 0x528d5cd3. +// +// Solidity: function connOpenAck(string connectionID, bytes clientState, bytes version, bytes counterpartyConnectionID, bytes proofTry, bytes proofClient, bytes proofConsensus, bytes proofHeight, bytes consensusHeight) returns() +func (_IBC *IBCTransactor) ConnOpenAck(opts *bind.TransactOpts, connectionID string, clientState []byte, version []byte, counterpartyConnectionID []byte, proofTry []byte, proofClient []byte, proofConsensus []byte, proofHeight []byte, consensusHeight []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "connOpenAck", connectionID, clientState, version, counterpartyConnectionID, proofTry, proofClient, proofConsensus, proofHeight, consensusHeight) +} + +// ConnOpenAck is a paid mutator transaction binding the contract method 0x528d5cd3. +// +// Solidity: function connOpenAck(string connectionID, bytes clientState, bytes version, bytes counterpartyConnectionID, bytes proofTry, bytes proofClient, bytes proofConsensus, bytes proofHeight, bytes consensusHeight) returns() +func (_IBC *IBCSession) ConnOpenAck(connectionID string, clientState []byte, version []byte, counterpartyConnectionID []byte, proofTry []byte, proofClient []byte, proofConsensus []byte, proofHeight []byte, consensusHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenAck(&_IBC.TransactOpts, connectionID, clientState, version, counterpartyConnectionID, proofTry, proofClient, proofConsensus, proofHeight, consensusHeight) +} + +// ConnOpenAck is a paid mutator transaction binding the contract method 0x528d5cd3. +// +// Solidity: function connOpenAck(string connectionID, bytes clientState, bytes version, bytes counterpartyConnectionID, bytes proofTry, bytes proofClient, bytes proofConsensus, bytes proofHeight, bytes consensusHeight) returns() +func (_IBC *IBCTransactorSession) ConnOpenAck(connectionID string, clientState []byte, version []byte, counterpartyConnectionID []byte, proofTry []byte, proofClient []byte, proofConsensus []byte, proofHeight []byte, consensusHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenAck(&_IBC.TransactOpts, connectionID, clientState, version, counterpartyConnectionID, proofTry, proofClient, proofConsensus, proofHeight, consensusHeight) +} + +// ConnOpenConfirm is a paid mutator transaction binding the contract method 0x45870d5e. +// +// Solidity: function connOpenConfirm(string connectionID, bytes proofAck, bytes proofHeight) returns() +func (_IBC *IBCTransactor) ConnOpenConfirm(opts *bind.TransactOpts, connectionID string, proofAck []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "connOpenConfirm", connectionID, proofAck, proofHeight) +} + +// ConnOpenConfirm is a paid mutator transaction binding the contract method 0x45870d5e. +// +// Solidity: function connOpenConfirm(string connectionID, bytes proofAck, bytes proofHeight) returns() +func (_IBC *IBCSession) ConnOpenConfirm(connectionID string, proofAck []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenConfirm(&_IBC.TransactOpts, connectionID, proofAck, proofHeight) +} + +// ConnOpenConfirm is a paid mutator transaction binding the contract method 0x45870d5e. +// +// Solidity: function connOpenConfirm(string connectionID, bytes proofAck, bytes proofHeight) returns() +func (_IBC *IBCTransactorSession) ConnOpenConfirm(connectionID string, proofAck []byte, proofHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenConfirm(&_IBC.TransactOpts, connectionID, proofAck, proofHeight) +} + +// ConnOpenInit is a paid mutator transaction binding the contract method 0xd198062b. +// +// Solidity: function connOpenInit(string clientID, bytes counterparty, bytes version, uint32 delayPeriod) returns(string connectionID) +func (_IBC *IBCTransactor) ConnOpenInit(opts *bind.TransactOpts, clientID string, counterparty []byte, version []byte, delayPeriod uint32) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "connOpenInit", clientID, counterparty, version, delayPeriod) +} + +// ConnOpenInit is a paid mutator transaction binding the contract method 0xd198062b. +// +// Solidity: function connOpenInit(string clientID, bytes counterparty, bytes version, uint32 delayPeriod) returns(string connectionID) +func (_IBC *IBCSession) ConnOpenInit(clientID string, counterparty []byte, version []byte, delayPeriod uint32) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenInit(&_IBC.TransactOpts, clientID, counterparty, version, delayPeriod) +} + +// ConnOpenInit is a paid mutator transaction binding the contract method 0xd198062b. +// +// Solidity: function connOpenInit(string clientID, bytes counterparty, bytes version, uint32 delayPeriod) returns(string connectionID) +func (_IBC *IBCTransactorSession) ConnOpenInit(clientID string, counterparty []byte, version []byte, delayPeriod uint32) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenInit(&_IBC.TransactOpts, clientID, counterparty, version, delayPeriod) +} + +// ConnOpenTry is a paid mutator transaction binding the contract method 0x6954535e. +// +// Solidity: function connOpenTry(bytes counterparty, uint32 delayPeriod, string clientID, bytes clientState, bytes counterpartyVersions, bytes proofInit, bytes proofClient, bytes proofConsensus, bytes proofHeight, bytes consensusHeight) returns(string connectionID) +func (_IBC *IBCTransactor) ConnOpenTry(opts *bind.TransactOpts, counterparty []byte, delayPeriod uint32, clientID string, clientState []byte, counterpartyVersions []byte, proofInit []byte, proofClient []byte, proofConsensus []byte, proofHeight []byte, consensusHeight []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "connOpenTry", counterparty, delayPeriod, clientID, clientState, counterpartyVersions, proofInit, proofClient, proofConsensus, proofHeight, consensusHeight) +} + +// ConnOpenTry is a paid mutator transaction binding the contract method 0x6954535e. +// +// Solidity: function connOpenTry(bytes counterparty, uint32 delayPeriod, string clientID, bytes clientState, bytes counterpartyVersions, bytes proofInit, bytes proofClient, bytes proofConsensus, bytes proofHeight, bytes consensusHeight) returns(string connectionID) +func (_IBC *IBCSession) ConnOpenTry(counterparty []byte, delayPeriod uint32, clientID string, clientState []byte, counterpartyVersions []byte, proofInit []byte, proofClient []byte, proofConsensus []byte, proofHeight []byte, consensusHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenTry(&_IBC.TransactOpts, counterparty, delayPeriod, clientID, clientState, counterpartyVersions, proofInit, proofClient, proofConsensus, proofHeight, consensusHeight) +} + +// ConnOpenTry is a paid mutator transaction binding the contract method 0x6954535e. +// +// Solidity: function connOpenTry(bytes counterparty, uint32 delayPeriod, string clientID, bytes clientState, bytes counterpartyVersions, bytes proofInit, bytes proofClient, bytes proofConsensus, bytes proofHeight, bytes consensusHeight) returns(string connectionID) +func (_IBC *IBCTransactorSession) ConnOpenTry(counterparty []byte, delayPeriod uint32, clientID string, clientState []byte, counterpartyVersions []byte, proofInit []byte, proofClient []byte, proofConsensus []byte, proofHeight []byte, consensusHeight []byte) (*types.Transaction, error) { + return _IBC.Contract.ConnOpenTry(&_IBC.TransactOpts, counterparty, delayPeriod, clientID, clientState, counterpartyVersions, proofInit, proofClient, proofConsensus, proofHeight, consensusHeight) +} + +// CreateClient is a paid mutator transaction binding the contract method 0x2629636b. +// +// Solidity: function createClient(string clientType, bytes clientState, bytes consensusState) returns(string clientID) +func (_IBC *IBCTransactor) CreateClient(opts *bind.TransactOpts, clientType string, clientState []byte, consensusState []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "createClient", clientType, clientState, consensusState) +} + +// CreateClient is a paid mutator transaction binding the contract method 0x2629636b. +// +// Solidity: function createClient(string clientType, bytes clientState, bytes consensusState) returns(string clientID) +func (_IBC *IBCSession) CreateClient(clientType string, clientState []byte, consensusState []byte) (*types.Transaction, error) { + return _IBC.Contract.CreateClient(&_IBC.TransactOpts, clientType, clientState, consensusState) +} + +// CreateClient is a paid mutator transaction binding the contract method 0x2629636b. +// +// Solidity: function createClient(string clientType, bytes clientState, bytes consensusState) returns(string clientID) +func (_IBC *IBCTransactorSession) CreateClient(clientType string, clientState []byte, consensusState []byte) (*types.Transaction, error) { + return _IBC.Contract.CreateClient(&_IBC.TransactOpts, clientType, clientState, consensusState) +} + +// RecvPacket is a paid mutator transaction binding the contract method 0x15d1edac. +// +// Solidity: function recvPacket(((uint256,string,string,string,string,bytes,(uint256,uint256),uint256),bytes,(uint256,uint256),string) message) returns() +func (_IBC *IBCTransactor) RecvPacket(opts *bind.TransactOpts, message IIBCMsgRecvPacket) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "recvPacket", message) +} + +// RecvPacket is a paid mutator transaction binding the contract method 0x15d1edac. +// +// Solidity: function recvPacket(((uint256,string,string,string,string,bytes,(uint256,uint256),uint256),bytes,(uint256,uint256),string) message) returns() +func (_IBC *IBCSession) RecvPacket(message IIBCMsgRecvPacket) (*types.Transaction, error) { + return _IBC.Contract.RecvPacket(&_IBC.TransactOpts, message) +} + +// RecvPacket is a paid mutator transaction binding the contract method 0x15d1edac. +// +// Solidity: function recvPacket(((uint256,string,string,string,string,bytes,(uint256,uint256),uint256),bytes,(uint256,uint256),string) message) returns() +func (_IBC *IBCTransactorSession) RecvPacket(message IIBCMsgRecvPacket) (*types.Transaction, error) { + return _IBC.Contract.RecvPacket(&_IBC.TransactOpts, message) +} + +// SendPacket is a paid mutator transaction binding the contract method 0x6052bf6f. +// +// Solidity: function sendPacket(uint256 channelCapability, string sourcePort, string sourceChannel, (uint256,uint256) timeoutHeight, uint256 timeoutTimestamp, bytes data) returns() +func (_IBC *IBCTransactor) SendPacket(opts *bind.TransactOpts, channelCapability *big.Int, sourcePort string, sourceChannel string, timeoutHeight Height, timeoutTimestamp *big.Int, data []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "sendPacket", channelCapability, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// SendPacket is a paid mutator transaction binding the contract method 0x6052bf6f. +// +// Solidity: function sendPacket(uint256 channelCapability, string sourcePort, string sourceChannel, (uint256,uint256) timeoutHeight, uint256 timeoutTimestamp, bytes data) returns() +func (_IBC *IBCSession) SendPacket(channelCapability *big.Int, sourcePort string, sourceChannel string, timeoutHeight Height, timeoutTimestamp *big.Int, data []byte) (*types.Transaction, error) { + return _IBC.Contract.SendPacket(&_IBC.TransactOpts, channelCapability, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// SendPacket is a paid mutator transaction binding the contract method 0x6052bf6f. +// +// Solidity: function sendPacket(uint256 channelCapability, string sourcePort, string sourceChannel, (uint256,uint256) timeoutHeight, uint256 timeoutTimestamp, bytes data) returns() +func (_IBC *IBCTransactorSession) SendPacket(channelCapability *big.Int, sourcePort string, sourceChannel string, timeoutHeight Height, timeoutTimestamp *big.Int, data []byte) (*types.Transaction, error) { + return _IBC.Contract.SendPacket(&_IBC.TransactOpts, channelCapability, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// Timeout is a paid mutator transaction binding the contract method 0x8883ff39. +// +// Solidity: function timeout((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes proofUnreceived, (uint256,uint256) proofHeight, uint256 nextSequenceRecv, string signer) returns() +func (_IBC *IBCTransactor) Timeout(opts *bind.TransactOpts, packet Packet, proofUnreceived []byte, proofHeight Height, nextSequenceRecv *big.Int, signer string) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "timeout", packet, proofUnreceived, proofHeight, nextSequenceRecv, signer) +} + +// Timeout is a paid mutator transaction binding the contract method 0x8883ff39. +// +// Solidity: function timeout((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes proofUnreceived, (uint256,uint256) proofHeight, uint256 nextSequenceRecv, string signer) returns() +func (_IBC *IBCSession) Timeout(packet Packet, proofUnreceived []byte, proofHeight Height, nextSequenceRecv *big.Int, signer string) (*types.Transaction, error) { + return _IBC.Contract.Timeout(&_IBC.TransactOpts, packet, proofUnreceived, proofHeight, nextSequenceRecv, signer) +} + +// Timeout is a paid mutator transaction binding the contract method 0x8883ff39. +// +// Solidity: function timeout((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes proofUnreceived, (uint256,uint256) proofHeight, uint256 nextSequenceRecv, string signer) returns() +func (_IBC *IBCTransactorSession) Timeout(packet Packet, proofUnreceived []byte, proofHeight Height, nextSequenceRecv *big.Int, signer string) (*types.Transaction, error) { + return _IBC.Contract.Timeout(&_IBC.TransactOpts, packet, proofUnreceived, proofHeight, nextSequenceRecv, signer) +} + +// TimeoutOnClose is a paid mutator transaction binding the contract method 0xc519baa9. +// +// Solidity: function timeoutOnClose((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes proofUnreceived, bytes proofClose, (uint256,uint256) proofHeight, uint256 nextSequenceRecv, string signer) returns() +func (_IBC *IBCTransactor) TimeoutOnClose(opts *bind.TransactOpts, packet Packet, proofUnreceived []byte, proofClose []byte, proofHeight Height, nextSequenceRecv *big.Int, signer string) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "timeoutOnClose", packet, proofUnreceived, proofClose, proofHeight, nextSequenceRecv, signer) +} + +// TimeoutOnClose is a paid mutator transaction binding the contract method 0xc519baa9. +// +// Solidity: function timeoutOnClose((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes proofUnreceived, bytes proofClose, (uint256,uint256) proofHeight, uint256 nextSequenceRecv, string signer) returns() +func (_IBC *IBCSession) TimeoutOnClose(packet Packet, proofUnreceived []byte, proofClose []byte, proofHeight Height, nextSequenceRecv *big.Int, signer string) (*types.Transaction, error) { + return _IBC.Contract.TimeoutOnClose(&_IBC.TransactOpts, packet, proofUnreceived, proofClose, proofHeight, nextSequenceRecv, signer) +} + +// TimeoutOnClose is a paid mutator transaction binding the contract method 0xc519baa9. +// +// Solidity: function timeoutOnClose((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes proofUnreceived, bytes proofClose, (uint256,uint256) proofHeight, uint256 nextSequenceRecv, string signer) returns() +func (_IBC *IBCTransactorSession) TimeoutOnClose(packet Packet, proofUnreceived []byte, proofClose []byte, proofHeight Height, nextSequenceRecv *big.Int, signer string) (*types.Transaction, error) { + return _IBC.Contract.TimeoutOnClose(&_IBC.TransactOpts, packet, proofUnreceived, proofClose, proofHeight, nextSequenceRecv, signer) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x6fbf8079. +// +// Solidity: function updateClient(string clientID, bytes clientMessage) returns() +func (_IBC *IBCTransactor) UpdateClient(opts *bind.TransactOpts, clientID string, clientMessage []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "updateClient", clientID, clientMessage) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x6fbf8079. +// +// Solidity: function updateClient(string clientID, bytes clientMessage) returns() +func (_IBC *IBCSession) UpdateClient(clientID string, clientMessage []byte) (*types.Transaction, error) { + return _IBC.Contract.UpdateClient(&_IBC.TransactOpts, clientID, clientMessage) +} + +// UpdateClient is a paid mutator transaction binding the contract method 0x6fbf8079. +// +// Solidity: function updateClient(string clientID, bytes clientMessage) returns() +func (_IBC *IBCTransactorSession) UpdateClient(clientID string, clientMessage []byte) (*types.Transaction, error) { + return _IBC.Contract.UpdateClient(&_IBC.TransactOpts, clientID, clientMessage) +} + +// UpgradeClient is a paid mutator transaction binding the contract method 0xed063c16. +// +// Solidity: function upgradeClient(string clientID, bytes upgradedClien, bytes upgradedConsState, bytes proofUpgradeClient, bytes proofUpgradeConsState) returns() +func (_IBC *IBCTransactor) UpgradeClient(opts *bind.TransactOpts, clientID string, upgradedClien []byte, upgradedConsState []byte, proofUpgradeClient []byte, proofUpgradeConsState []byte) (*types.Transaction, error) { + return _IBC.contract.Transact(opts, "upgradeClient", clientID, upgradedClien, upgradedConsState, proofUpgradeClient, proofUpgradeConsState) +} + +// UpgradeClient is a paid mutator transaction binding the contract method 0xed063c16. +// +// Solidity: function upgradeClient(string clientID, bytes upgradedClien, bytes upgradedConsState, bytes proofUpgradeClient, bytes proofUpgradeConsState) returns() +func (_IBC *IBCSession) UpgradeClient(clientID string, upgradedClien []byte, upgradedConsState []byte, proofUpgradeClient []byte, proofUpgradeConsState []byte) (*types.Transaction, error) { + return _IBC.Contract.UpgradeClient(&_IBC.TransactOpts, clientID, upgradedClien, upgradedConsState, proofUpgradeClient, proofUpgradeConsState) +} + +// UpgradeClient is a paid mutator transaction binding the contract method 0xed063c16. +// +// Solidity: function upgradeClient(string clientID, bytes upgradedClien, bytes upgradedConsState, bytes proofUpgradeClient, bytes proofUpgradeConsState) returns() +func (_IBC *IBCTransactorSession) UpgradeClient(clientID string, upgradedClien []byte, upgradedConsState []byte, proofUpgradeClient []byte, proofUpgradeConsState []byte) (*types.Transaction, error) { + return _IBC.Contract.UpgradeClient(&_IBC.TransactOpts, clientID, upgradedClien, upgradedConsState, proofUpgradeClient, proofUpgradeConsState) +} + +// IBCAckPacketIterator is returned from FilterAckPacket and is used to iterate over the raw logs and unpacked data for AckPacket events raised by the IBC contract. +type IBCAckPacketIterator struct { + Event *IBCAckPacket // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCAckPacketIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCAckPacket) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCAckPacket) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCAckPacketIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCAckPacketIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCAckPacket represents a AckPacket event raised by the IBC contract. +type IBCAckPacket struct { + TimeoutHeight string + TimeoutTimestamp *big.Int + Sequence *big.Int + SourcePort string + SourceChannel string + DestPort string + DestChannel string + ChannelOrdering int32 + ConnectionID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAckPacket is a free log retrieval operation binding the contract event 0x12c19a09144e24c66aaad5927966d7d605e4d79fae215cd7ab1880c9b1a440b9. +// +// Solidity: event AckPacket(string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connectionID) +func (_IBC *IBCFilterer) FilterAckPacket(opts *bind.FilterOpts) (*IBCAckPacketIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "AckPacket") + if err != nil { + return nil, err + } + return &IBCAckPacketIterator{contract: _IBC.contract, event: "AckPacket", logs: logs, sub: sub}, nil +} + +// WatchAckPacket is a free log subscription operation binding the contract event 0x12c19a09144e24c66aaad5927966d7d605e4d79fae215cd7ab1880c9b1a440b9. +// +// Solidity: event AckPacket(string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connectionID) +func (_IBC *IBCFilterer) WatchAckPacket(opts *bind.WatchOpts, sink chan<- *IBCAckPacket) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "AckPacket") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCAckPacket) + if err := _IBC.contract.UnpackLog(event, "AckPacket", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAckPacket is a log parse operation binding the contract event 0x12c19a09144e24c66aaad5927966d7d605e4d79fae215cd7ab1880c9b1a440b9. +// +// Solidity: event AckPacket(string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connectionID) +func (_IBC *IBCFilterer) ParseAckPacket(log types.Log) (*IBCAckPacket, error) { + event := new(IBCAckPacket) + if err := _IBC.contract.UnpackLog(event, "AckPacket", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCAcknowledgementErrorIterator is returned from FilterAcknowledgementError and is used to iterate over the raw logs and unpacked data for AcknowledgementError events raised by the IBC contract. +type IBCAcknowledgementErrorIterator struct { + Event *IBCAcknowledgementError // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCAcknowledgementErrorIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCAcknowledgementError) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCAcknowledgementError) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCAcknowledgementErrorIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCAcknowledgementErrorIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCAcknowledgementError represents a AcknowledgementError event raised by the IBC contract. +type IBCAcknowledgementError struct { + Data []byte + TimeoutHeight string + TimeoutTimestamp *big.Int + Sequence *big.Int + SourcePort string + SourceChannel string + DestPort string + DestChannel string + Error string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAcknowledgementError is a free log retrieval operation binding the contract event 0x59fac6d3fb2b5eb86e41d879f3d57a504ce59231004dfa51063069b12ec58715. +// +// Solidity: event AcknowledgementError(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, string error) +func (_IBC *IBCFilterer) FilterAcknowledgementError(opts *bind.FilterOpts) (*IBCAcknowledgementErrorIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "AcknowledgementError") + if err != nil { + return nil, err + } + return &IBCAcknowledgementErrorIterator{contract: _IBC.contract, event: "AcknowledgementError", logs: logs, sub: sub}, nil +} + +// WatchAcknowledgementError is a free log subscription operation binding the contract event 0x59fac6d3fb2b5eb86e41d879f3d57a504ce59231004dfa51063069b12ec58715. +// +// Solidity: event AcknowledgementError(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, string error) +func (_IBC *IBCFilterer) WatchAcknowledgementError(opts *bind.WatchOpts, sink chan<- *IBCAcknowledgementError) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "AcknowledgementError") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCAcknowledgementError) + if err := _IBC.contract.UnpackLog(event, "AcknowledgementError", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAcknowledgementError is a log parse operation binding the contract event 0x59fac6d3fb2b5eb86e41d879f3d57a504ce59231004dfa51063069b12ec58715. +// +// Solidity: event AcknowledgementError(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, string error) +func (_IBC *IBCFilterer) ParseAcknowledgementError(log types.Log) (*IBCAcknowledgementError, error) { + event := new(IBCAcknowledgementError) + if err := _IBC.contract.UnpackLog(event, "AcknowledgementError", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCChannelCloseConfirmIterator is returned from FilterChannelCloseConfirm and is used to iterate over the raw logs and unpacked data for ChannelCloseConfirm events raised by the IBC contract. +type IBCChannelCloseConfirmIterator struct { + Event *IBCChannelCloseConfirm // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCChannelCloseConfirmIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCChannelCloseConfirm) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCChannelCloseConfirm) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCChannelCloseConfirmIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCChannelCloseConfirmIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCChannelCloseConfirm represents a ChannelCloseConfirm event raised by the IBC contract. +type IBCChannelCloseConfirm struct { + ConnectionId string + ChannelId string + PortId string + CounterpartyChannelId string + CounterpartyPortID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChannelCloseConfirm is a free log retrieval operation binding the contract event 0x1d27827947f32db531c2d0a11a83e392e9391cf32071f1716bc53c3df605b637. +// +// Solidity: event ChannelCloseConfirm(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) FilterChannelCloseConfirm(opts *bind.FilterOpts) (*IBCChannelCloseConfirmIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ChannelCloseConfirm") + if err != nil { + return nil, err + } + return &IBCChannelCloseConfirmIterator{contract: _IBC.contract, event: "ChannelCloseConfirm", logs: logs, sub: sub}, nil +} + +// WatchChannelCloseConfirm is a free log subscription operation binding the contract event 0x1d27827947f32db531c2d0a11a83e392e9391cf32071f1716bc53c3df605b637. +// +// Solidity: event ChannelCloseConfirm(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) WatchChannelCloseConfirm(opts *bind.WatchOpts, sink chan<- *IBCChannelCloseConfirm) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ChannelCloseConfirm") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCChannelCloseConfirm) + if err := _IBC.contract.UnpackLog(event, "ChannelCloseConfirm", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChannelCloseConfirm is a log parse operation binding the contract event 0x1d27827947f32db531c2d0a11a83e392e9391cf32071f1716bc53c3df605b637. +// +// Solidity: event ChannelCloseConfirm(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) ParseChannelCloseConfirm(log types.Log) (*IBCChannelCloseConfirm, error) { + event := new(IBCChannelCloseConfirm) + if err := _IBC.contract.UnpackLog(event, "ChannelCloseConfirm", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCChannelCloseInitIterator is returned from FilterChannelCloseInit and is used to iterate over the raw logs and unpacked data for ChannelCloseInit events raised by the IBC contract. +type IBCChannelCloseInitIterator struct { + Event *IBCChannelCloseInit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCChannelCloseInitIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCChannelCloseInit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCChannelCloseInit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCChannelCloseInitIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCChannelCloseInitIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCChannelCloseInit represents a ChannelCloseInit event raised by the IBC contract. +type IBCChannelCloseInit struct { + ConnectionId string + ChannelId string + PortId string + CounterpartyChannelId string + CounterpartyPortID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChannelCloseInit is a free log retrieval operation binding the contract event 0x645976448b76cf17132a7f0f96d505a70aa349bc7753973035352feb57901375. +// +// Solidity: event ChannelCloseInit(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) FilterChannelCloseInit(opts *bind.FilterOpts) (*IBCChannelCloseInitIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ChannelCloseInit") + if err != nil { + return nil, err + } + return &IBCChannelCloseInitIterator{contract: _IBC.contract, event: "ChannelCloseInit", logs: logs, sub: sub}, nil +} + +// WatchChannelCloseInit is a free log subscription operation binding the contract event 0x645976448b76cf17132a7f0f96d505a70aa349bc7753973035352feb57901375. +// +// Solidity: event ChannelCloseInit(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) WatchChannelCloseInit(opts *bind.WatchOpts, sink chan<- *IBCChannelCloseInit) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ChannelCloseInit") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCChannelCloseInit) + if err := _IBC.contract.UnpackLog(event, "ChannelCloseInit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChannelCloseInit is a log parse operation binding the contract event 0x645976448b76cf17132a7f0f96d505a70aa349bc7753973035352feb57901375. +// +// Solidity: event ChannelCloseInit(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) ParseChannelCloseInit(log types.Log) (*IBCChannelCloseInit, error) { + event := new(IBCChannelCloseInit) + if err := _IBC.contract.UnpackLog(event, "ChannelCloseInit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCChannelOpenAckIterator is returned from FilterChannelOpenAck and is used to iterate over the raw logs and unpacked data for ChannelOpenAck events raised by the IBC contract. +type IBCChannelOpenAckIterator struct { + Event *IBCChannelOpenAck // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCChannelOpenAckIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenAck) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenAck) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCChannelOpenAckIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCChannelOpenAckIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCChannelOpenAck represents a ChannelOpenAck event raised by the IBC contract. +type IBCChannelOpenAck struct { + ConnectionId string + ChannelId string + PortId string + CounterpartyChannelId string + CounterpartyPortID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChannelOpenAck is a free log retrieval operation binding the contract event 0xe9342577bf02f748ba783edd9094f8e93b2ef7face9bc7478d7b30358ddeef6f. +// +// Solidity: event ChannelOpenAck(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) FilterChannelOpenAck(opts *bind.FilterOpts) (*IBCChannelOpenAckIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ChannelOpenAck") + if err != nil { + return nil, err + } + return &IBCChannelOpenAckIterator{contract: _IBC.contract, event: "ChannelOpenAck", logs: logs, sub: sub}, nil +} + +// WatchChannelOpenAck is a free log subscription operation binding the contract event 0xe9342577bf02f748ba783edd9094f8e93b2ef7face9bc7478d7b30358ddeef6f. +// +// Solidity: event ChannelOpenAck(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) WatchChannelOpenAck(opts *bind.WatchOpts, sink chan<- *IBCChannelOpenAck) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ChannelOpenAck") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCChannelOpenAck) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenAck", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChannelOpenAck is a log parse operation binding the contract event 0xe9342577bf02f748ba783edd9094f8e93b2ef7face9bc7478d7b30358ddeef6f. +// +// Solidity: event ChannelOpenAck(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) ParseChannelOpenAck(log types.Log) (*IBCChannelOpenAck, error) { + event := new(IBCChannelOpenAck) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenAck", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCChannelOpenConfirmIterator is returned from FilterChannelOpenConfirm and is used to iterate over the raw logs and unpacked data for ChannelOpenConfirm events raised by the IBC contract. +type IBCChannelOpenConfirmIterator struct { + Event *IBCChannelOpenConfirm // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCChannelOpenConfirmIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenConfirm) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenConfirm) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCChannelOpenConfirmIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCChannelOpenConfirmIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCChannelOpenConfirm represents a ChannelOpenConfirm event raised by the IBC contract. +type IBCChannelOpenConfirm struct { + ConnectionId string + ChannelId string + PortId string + CounterpartyChannelId string + CounterpartyPortID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChannelOpenConfirm is a free log retrieval operation binding the contract event 0xcccb79544f2a910ecd04c3bd96f870be6f5c74e0d00c18443c25ecf7b9800918. +// +// Solidity: event ChannelOpenConfirm(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) FilterChannelOpenConfirm(opts *bind.FilterOpts) (*IBCChannelOpenConfirmIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ChannelOpenConfirm") + if err != nil { + return nil, err + } + return &IBCChannelOpenConfirmIterator{contract: _IBC.contract, event: "ChannelOpenConfirm", logs: logs, sub: sub}, nil +} + +// WatchChannelOpenConfirm is a free log subscription operation binding the contract event 0xcccb79544f2a910ecd04c3bd96f870be6f5c74e0d00c18443c25ecf7b9800918. +// +// Solidity: event ChannelOpenConfirm(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) WatchChannelOpenConfirm(opts *bind.WatchOpts, sink chan<- *IBCChannelOpenConfirm) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ChannelOpenConfirm") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCChannelOpenConfirm) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenConfirm", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChannelOpenConfirm is a log parse operation binding the contract event 0xcccb79544f2a910ecd04c3bd96f870be6f5c74e0d00c18443c25ecf7b9800918. +// +// Solidity: event ChannelOpenConfirm(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID) +func (_IBC *IBCFilterer) ParseChannelOpenConfirm(log types.Log) (*IBCChannelOpenConfirm, error) { + event := new(IBCChannelOpenConfirm) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenConfirm", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCChannelOpenInitIterator is returned from FilterChannelOpenInit and is used to iterate over the raw logs and unpacked data for ChannelOpenInit events raised by the IBC contract. +type IBCChannelOpenInitIterator struct { + Event *IBCChannelOpenInit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCChannelOpenInitIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenInit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenInit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCChannelOpenInitIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCChannelOpenInitIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCChannelOpenInit represents a ChannelOpenInit event raised by the IBC contract. +type IBCChannelOpenInit struct { + ConnectionId string + ChannelId string + PortId string + CounterpartyPortID string + Version string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChannelOpenInit is a free log retrieval operation binding the contract event 0x96be605fd502b1513c6e6e38963c9f28dc030f5e18c7a48ee2d4775b387b6fe0. +// +// Solidity: event ChannelOpenInit(string connectionId, string channelId, string portId, string counterpartyPortID, string version) +func (_IBC *IBCFilterer) FilterChannelOpenInit(opts *bind.FilterOpts) (*IBCChannelOpenInitIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ChannelOpenInit") + if err != nil { + return nil, err + } + return &IBCChannelOpenInitIterator{contract: _IBC.contract, event: "ChannelOpenInit", logs: logs, sub: sub}, nil +} + +// WatchChannelOpenInit is a free log subscription operation binding the contract event 0x96be605fd502b1513c6e6e38963c9f28dc030f5e18c7a48ee2d4775b387b6fe0. +// +// Solidity: event ChannelOpenInit(string connectionId, string channelId, string portId, string counterpartyPortID, string version) +func (_IBC *IBCFilterer) WatchChannelOpenInit(opts *bind.WatchOpts, sink chan<- *IBCChannelOpenInit) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ChannelOpenInit") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCChannelOpenInit) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenInit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChannelOpenInit is a log parse operation binding the contract event 0x96be605fd502b1513c6e6e38963c9f28dc030f5e18c7a48ee2d4775b387b6fe0. +// +// Solidity: event ChannelOpenInit(string connectionId, string channelId, string portId, string counterpartyPortID, string version) +func (_IBC *IBCFilterer) ParseChannelOpenInit(log types.Log) (*IBCChannelOpenInit, error) { + event := new(IBCChannelOpenInit) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenInit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCChannelOpenTryIterator is returned from FilterChannelOpenTry and is used to iterate over the raw logs and unpacked data for ChannelOpenTry events raised by the IBC contract. +type IBCChannelOpenTryIterator struct { + Event *IBCChannelOpenTry // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCChannelOpenTryIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenTry) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCChannelOpenTry) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCChannelOpenTryIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCChannelOpenTryIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCChannelOpenTry represents a ChannelOpenTry event raised by the IBC contract. +type IBCChannelOpenTry struct { + ConnectionId string + ChannelId string + PortId string + CounterpartyChannelId string + CounterpartyPortID string + Version string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChannelOpenTry is a free log retrieval operation binding the contract event 0x9c5a76e8bddb2e5c238e35b7ce7a850ad22a776479bfc8b4af5e88e073fa9c70. +// +// Solidity: event ChannelOpenTry(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID, string version) +func (_IBC *IBCFilterer) FilterChannelOpenTry(opts *bind.FilterOpts) (*IBCChannelOpenTryIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ChannelOpenTry") + if err != nil { + return nil, err + } + return &IBCChannelOpenTryIterator{contract: _IBC.contract, event: "ChannelOpenTry", logs: logs, sub: sub}, nil +} + +// WatchChannelOpenTry is a free log subscription operation binding the contract event 0x9c5a76e8bddb2e5c238e35b7ce7a850ad22a776479bfc8b4af5e88e073fa9c70. +// +// Solidity: event ChannelOpenTry(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID, string version) +func (_IBC *IBCFilterer) WatchChannelOpenTry(opts *bind.WatchOpts, sink chan<- *IBCChannelOpenTry) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ChannelOpenTry") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCChannelOpenTry) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenTry", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChannelOpenTry is a log parse operation binding the contract event 0x9c5a76e8bddb2e5c238e35b7ce7a850ad22a776479bfc8b4af5e88e073fa9c70. +// +// Solidity: event ChannelOpenTry(string connectionId, string channelId, string portId, string counterpartyChannelId, string counterpartyPortID, string version) +func (_IBC *IBCFilterer) ParseChannelOpenTry(log types.Log) (*IBCChannelOpenTry, error) { + event := new(IBCChannelOpenTry) + if err := _IBC.contract.UnpackLog(event, "ChannelOpenTry", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCClientCreatedIterator is returned from FilterClientCreated and is used to iterate over the raw logs and unpacked data for ClientCreated events raised by the IBC contract. +type IBCClientCreatedIterator struct { + Event *IBCClientCreated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCClientCreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCClientCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCClientCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCClientCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCClientCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCClientCreated represents a ClientCreated event raised by the IBC contract. +type IBCClientCreated struct { + ClientId string + ConsensusHeight string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterClientCreated is a free log retrieval operation binding the contract event 0xe8ff12a906de082573ebed03b1fcc6155a0313ddeb5adaa039ef09b1f6f27d85. +// +// Solidity: event ClientCreated(string clientId, string consensusHeight) +func (_IBC *IBCFilterer) FilterClientCreated(opts *bind.FilterOpts) (*IBCClientCreatedIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ClientCreated") + if err != nil { + return nil, err + } + return &IBCClientCreatedIterator{contract: _IBC.contract, event: "ClientCreated", logs: logs, sub: sub}, nil +} + +// WatchClientCreated is a free log subscription operation binding the contract event 0xe8ff12a906de082573ebed03b1fcc6155a0313ddeb5adaa039ef09b1f6f27d85. +// +// Solidity: event ClientCreated(string clientId, string consensusHeight) +func (_IBC *IBCFilterer) WatchClientCreated(opts *bind.WatchOpts, sink chan<- *IBCClientCreated) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ClientCreated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCClientCreated) + if err := _IBC.contract.UnpackLog(event, "ClientCreated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseClientCreated is a log parse operation binding the contract event 0xe8ff12a906de082573ebed03b1fcc6155a0313ddeb5adaa039ef09b1f6f27d85. +// +// Solidity: event ClientCreated(string clientId, string consensusHeight) +func (_IBC *IBCFilterer) ParseClientCreated(log types.Log) (*IBCClientCreated, error) { + event := new(IBCClientCreated) + if err := _IBC.contract.UnpackLog(event, "ClientCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCClientUpdatedIterator is returned from FilterClientUpdated and is used to iterate over the raw logs and unpacked data for ClientUpdated events raised by the IBC contract. +type IBCClientUpdatedIterator struct { + Event *IBCClientUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCClientUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCClientUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCClientUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCClientUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCClientUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCClientUpdated represents a ClientUpdated event raised by the IBC contract. +type IBCClientUpdated struct { + ClientId string + ConsensusHeight string + ClientMessage []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterClientUpdated is a free log retrieval operation binding the contract event 0xb91f626ae6ca83625067361537862584dece7797f6fcb31844ca9b358801c38e. +// +// Solidity: event ClientUpdated(string clientId, string consensusHeight, bytes clientMessage) +func (_IBC *IBCFilterer) FilterClientUpdated(opts *bind.FilterOpts) (*IBCClientUpdatedIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ClientUpdated") + if err != nil { + return nil, err + } + return &IBCClientUpdatedIterator{contract: _IBC.contract, event: "ClientUpdated", logs: logs, sub: sub}, nil +} + +// WatchClientUpdated is a free log subscription operation binding the contract event 0xb91f626ae6ca83625067361537862584dece7797f6fcb31844ca9b358801c38e. +// +// Solidity: event ClientUpdated(string clientId, string consensusHeight, bytes clientMessage) +func (_IBC *IBCFilterer) WatchClientUpdated(opts *bind.WatchOpts, sink chan<- *IBCClientUpdated) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ClientUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCClientUpdated) + if err := _IBC.contract.UnpackLog(event, "ClientUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseClientUpdated is a log parse operation binding the contract event 0xb91f626ae6ca83625067361537862584dece7797f6fcb31844ca9b358801c38e. +// +// Solidity: event ClientUpdated(string clientId, string consensusHeight, bytes clientMessage) +func (_IBC *IBCFilterer) ParseClientUpdated(log types.Log) (*IBCClientUpdated, error) { + event := new(IBCClientUpdated) + if err := _IBC.contract.UnpackLog(event, "ClientUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCClientUpgradedIterator is returned from FilterClientUpgraded and is used to iterate over the raw logs and unpacked data for ClientUpgraded events raised by the IBC contract. +type IBCClientUpgradedIterator struct { + Event *IBCClientUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCClientUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCClientUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCClientUpgraded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCClientUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCClientUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCClientUpgraded represents a ClientUpgraded event raised by the IBC contract. +type IBCClientUpgraded struct { + ClientId string + ConsensusHeight string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterClientUpgraded is a free log retrieval operation binding the contract event 0xd46c86e19730acb2564dcf28f4cb9520768766aecaf0a999d38dac12173a962f. +// +// Solidity: event ClientUpgraded(string clientId, string consensusHeight) +func (_IBC *IBCFilterer) FilterClientUpgraded(opts *bind.FilterOpts) (*IBCClientUpgradedIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ClientUpgraded") + if err != nil { + return nil, err + } + return &IBCClientUpgradedIterator{contract: _IBC.contract, event: "ClientUpgraded", logs: logs, sub: sub}, nil +} + +// WatchClientUpgraded is a free log subscription operation binding the contract event 0xd46c86e19730acb2564dcf28f4cb9520768766aecaf0a999d38dac12173a962f. +// +// Solidity: event ClientUpgraded(string clientId, string consensusHeight) +func (_IBC *IBCFilterer) WatchClientUpgraded(opts *bind.WatchOpts, sink chan<- *IBCClientUpgraded) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ClientUpgraded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCClientUpgraded) + if err := _IBC.contract.UnpackLog(event, "ClientUpgraded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseClientUpgraded is a log parse operation binding the contract event 0xd46c86e19730acb2564dcf28f4cb9520768766aecaf0a999d38dac12173a962f. +// +// Solidity: event ClientUpgraded(string clientId, string consensusHeight) +func (_IBC *IBCFilterer) ParseClientUpgraded(log types.Log) (*IBCClientUpgraded, error) { + event := new(IBCClientUpgraded) + if err := _IBC.contract.UnpackLog(event, "ClientUpgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCConnectionOpenAckIterator is returned from FilterConnectionOpenAck and is used to iterate over the raw logs and unpacked data for ConnectionOpenAck events raised by the IBC contract. +type IBCConnectionOpenAckIterator struct { + Event *IBCConnectionOpenAck // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCConnectionOpenAckIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenAck) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenAck) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCConnectionOpenAckIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCConnectionOpenAckIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCConnectionOpenAck represents a ConnectionOpenAck event raised by the IBC contract. +type IBCConnectionOpenAck struct { + ClientId string + ConnectionId string + CounterpartyClientID string + CounterpartyConnectionId string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConnectionOpenAck is a free log retrieval operation binding the contract event 0xe7615b4ebffcb930061f901cc07ee67b4d32c8f9052141eb8bce2dec3f577fe1. +// +// Solidity: event ConnectionOpenAck(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) FilterConnectionOpenAck(opts *bind.FilterOpts) (*IBCConnectionOpenAckIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ConnectionOpenAck") + if err != nil { + return nil, err + } + return &IBCConnectionOpenAckIterator{contract: _IBC.contract, event: "ConnectionOpenAck", logs: logs, sub: sub}, nil +} + +// WatchConnectionOpenAck is a free log subscription operation binding the contract event 0xe7615b4ebffcb930061f901cc07ee67b4d32c8f9052141eb8bce2dec3f577fe1. +// +// Solidity: event ConnectionOpenAck(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) WatchConnectionOpenAck(opts *bind.WatchOpts, sink chan<- *IBCConnectionOpenAck) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ConnectionOpenAck") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCConnectionOpenAck) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenAck", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseConnectionOpenAck is a log parse operation binding the contract event 0xe7615b4ebffcb930061f901cc07ee67b4d32c8f9052141eb8bce2dec3f577fe1. +// +// Solidity: event ConnectionOpenAck(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) ParseConnectionOpenAck(log types.Log) (*IBCConnectionOpenAck, error) { + event := new(IBCConnectionOpenAck) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenAck", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCConnectionOpenConfirmIterator is returned from FilterConnectionOpenConfirm and is used to iterate over the raw logs and unpacked data for ConnectionOpenConfirm events raised by the IBC contract. +type IBCConnectionOpenConfirmIterator struct { + Event *IBCConnectionOpenConfirm // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCConnectionOpenConfirmIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenConfirm) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenConfirm) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCConnectionOpenConfirmIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCConnectionOpenConfirmIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCConnectionOpenConfirm represents a ConnectionOpenConfirm event raised by the IBC contract. +type IBCConnectionOpenConfirm struct { + ClientId string + ConnectionId string + CounterpartyClientID string + CounterpartyConnectionId string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConnectionOpenConfirm is a free log retrieval operation binding the contract event 0x063c0e9664347d8013d3575d502050fd936d3b51035f056696a639523feaed6d. +// +// Solidity: event ConnectionOpenConfirm(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) FilterConnectionOpenConfirm(opts *bind.FilterOpts) (*IBCConnectionOpenConfirmIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ConnectionOpenConfirm") + if err != nil { + return nil, err + } + return &IBCConnectionOpenConfirmIterator{contract: _IBC.contract, event: "ConnectionOpenConfirm", logs: logs, sub: sub}, nil +} + +// WatchConnectionOpenConfirm is a free log subscription operation binding the contract event 0x063c0e9664347d8013d3575d502050fd936d3b51035f056696a639523feaed6d. +// +// Solidity: event ConnectionOpenConfirm(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) WatchConnectionOpenConfirm(opts *bind.WatchOpts, sink chan<- *IBCConnectionOpenConfirm) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ConnectionOpenConfirm") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCConnectionOpenConfirm) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenConfirm", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseConnectionOpenConfirm is a log parse operation binding the contract event 0x063c0e9664347d8013d3575d502050fd936d3b51035f056696a639523feaed6d. +// +// Solidity: event ConnectionOpenConfirm(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) ParseConnectionOpenConfirm(log types.Log) (*IBCConnectionOpenConfirm, error) { + event := new(IBCConnectionOpenConfirm) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenConfirm", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCConnectionOpenInitIterator is returned from FilterConnectionOpenInit and is used to iterate over the raw logs and unpacked data for ConnectionOpenInit events raised by the IBC contract. +type IBCConnectionOpenInitIterator struct { + Event *IBCConnectionOpenInit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCConnectionOpenInitIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenInit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenInit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCConnectionOpenInitIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCConnectionOpenInitIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCConnectionOpenInit represents a ConnectionOpenInit event raised by the IBC contract. +type IBCConnectionOpenInit struct { + ClientId string + ConnectionId string + CounterpartyClientID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConnectionOpenInit is a free log retrieval operation binding the contract event 0x9f1f1ea41ae20b9e071603ac41a1783f3d7fcbaf413365fe97cfd6b1c155247c. +// +// Solidity: event ConnectionOpenInit(string clientId, string connectionId, string counterpartyClientID) +func (_IBC *IBCFilterer) FilterConnectionOpenInit(opts *bind.FilterOpts) (*IBCConnectionOpenInitIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ConnectionOpenInit") + if err != nil { + return nil, err + } + return &IBCConnectionOpenInitIterator{contract: _IBC.contract, event: "ConnectionOpenInit", logs: logs, sub: sub}, nil +} + +// WatchConnectionOpenInit is a free log subscription operation binding the contract event 0x9f1f1ea41ae20b9e071603ac41a1783f3d7fcbaf413365fe97cfd6b1c155247c. +// +// Solidity: event ConnectionOpenInit(string clientId, string connectionId, string counterpartyClientID) +func (_IBC *IBCFilterer) WatchConnectionOpenInit(opts *bind.WatchOpts, sink chan<- *IBCConnectionOpenInit) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ConnectionOpenInit") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCConnectionOpenInit) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenInit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseConnectionOpenInit is a log parse operation binding the contract event 0x9f1f1ea41ae20b9e071603ac41a1783f3d7fcbaf413365fe97cfd6b1c155247c. +// +// Solidity: event ConnectionOpenInit(string clientId, string connectionId, string counterpartyClientID) +func (_IBC *IBCFilterer) ParseConnectionOpenInit(log types.Log) (*IBCConnectionOpenInit, error) { + event := new(IBCConnectionOpenInit) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenInit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCConnectionOpenTryIterator is returned from FilterConnectionOpenTry and is used to iterate over the raw logs and unpacked data for ConnectionOpenTry events raised by the IBC contract. +type IBCConnectionOpenTryIterator struct { + Event *IBCConnectionOpenTry // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCConnectionOpenTryIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenTry) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCConnectionOpenTry) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCConnectionOpenTryIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCConnectionOpenTryIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCConnectionOpenTry represents a ConnectionOpenTry event raised by the IBC contract. +type IBCConnectionOpenTry struct { + ClientId string + ConnectionId string + CounterpartyClientID string + CounterpartyConnectionId string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConnectionOpenTry is a free log retrieval operation binding the contract event 0xa616a9aa2c65e935abbd15b07a9b5ff6c9c48b06b460a39b0b8cfda2a985869f. +// +// Solidity: event ConnectionOpenTry(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) FilterConnectionOpenTry(opts *bind.FilterOpts) (*IBCConnectionOpenTryIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "ConnectionOpenTry") + if err != nil { + return nil, err + } + return &IBCConnectionOpenTryIterator{contract: _IBC.contract, event: "ConnectionOpenTry", logs: logs, sub: sub}, nil +} + +// WatchConnectionOpenTry is a free log subscription operation binding the contract event 0xa616a9aa2c65e935abbd15b07a9b5ff6c9c48b06b460a39b0b8cfda2a985869f. +// +// Solidity: event ConnectionOpenTry(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) WatchConnectionOpenTry(opts *bind.WatchOpts, sink chan<- *IBCConnectionOpenTry) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "ConnectionOpenTry") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCConnectionOpenTry) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenTry", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseConnectionOpenTry is a log parse operation binding the contract event 0xa616a9aa2c65e935abbd15b07a9b5ff6c9c48b06b460a39b0b8cfda2a985869f. +// +// Solidity: event ConnectionOpenTry(string clientId, string connectionId, string counterpartyClientID, string counterpartyConnectionId) +func (_IBC *IBCFilterer) ParseConnectionOpenTry(log types.Log) (*IBCConnectionOpenTry, error) { + event := new(IBCConnectionOpenTry) + if err := _IBC.contract.UnpackLog(event, "ConnectionOpenTry", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCPacketRecvIterator is returned from FilterPacketRecv and is used to iterate over the raw logs and unpacked data for PacketRecv events raised by the IBC contract. +type IBCPacketRecvIterator struct { + Event *IBCPacketRecv // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCPacketRecvIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCPacketRecv) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCPacketRecv) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCPacketRecvIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCPacketRecvIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCPacketRecv represents a PacketRecv event raised by the IBC contract. +type IBCPacketRecv struct { + Data []byte + TimeoutHeight string + TimeoutTimestamp *big.Int + Sequence *big.Int + SourcePort string + SourceChannel string + DestPort string + DestChannel string + ChannelOrdering int32 + Connection string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPacketRecv is a free log retrieval operation binding the contract event 0x0573ccb55881bfc7de97538f9e8b9079570f05c34e38d6b21f5434777dc1bae7. +// +// Solidity: event PacketRecv(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connection) +func (_IBC *IBCFilterer) FilterPacketRecv(opts *bind.FilterOpts) (*IBCPacketRecvIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "PacketRecv") + if err != nil { + return nil, err + } + return &IBCPacketRecvIterator{contract: _IBC.contract, event: "PacketRecv", logs: logs, sub: sub}, nil +} + +// WatchPacketRecv is a free log subscription operation binding the contract event 0x0573ccb55881bfc7de97538f9e8b9079570f05c34e38d6b21f5434777dc1bae7. +// +// Solidity: event PacketRecv(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connection) +func (_IBC *IBCFilterer) WatchPacketRecv(opts *bind.WatchOpts, sink chan<- *IBCPacketRecv) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "PacketRecv") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCPacketRecv) + if err := _IBC.contract.UnpackLog(event, "PacketRecv", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePacketRecv is a log parse operation binding the contract event 0x0573ccb55881bfc7de97538f9e8b9079570f05c34e38d6b21f5434777dc1bae7. +// +// Solidity: event PacketRecv(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connection) +func (_IBC *IBCFilterer) ParsePacketRecv(log types.Log) (*IBCPacketRecv, error) { + event := new(IBCPacketRecv) + if err := _IBC.contract.UnpackLog(event, "PacketRecv", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCPacketSentIterator is returned from FilterPacketSent and is used to iterate over the raw logs and unpacked data for PacketSent events raised by the IBC contract. +type IBCPacketSentIterator struct { + Event *IBCPacketSent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCPacketSentIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCPacketSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCPacketSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCPacketSentIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCPacketSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCPacketSent represents a PacketSent event raised by the IBC contract. +type IBCPacketSent struct { + Data []byte + TimeoutHeight string + TimeoutTimestamp *big.Int + Sequence *big.Int + SourcePort string + SourceChannel string + DestPort string + DestChannel string + ChannelOrdering int32 + Connection string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPacketSent is a free log retrieval operation binding the contract event 0x374a665e4553b182bc8023165f699e510a7ead44fbf297239d100bfefcdb32bf. +// +// Solidity: event PacketSent(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connection) +func (_IBC *IBCFilterer) FilterPacketSent(opts *bind.FilterOpts) (*IBCPacketSentIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "PacketSent") + if err != nil { + return nil, err + } + return &IBCPacketSentIterator{contract: _IBC.contract, event: "PacketSent", logs: logs, sub: sub}, nil +} + +// WatchPacketSent is a free log subscription operation binding the contract event 0x374a665e4553b182bc8023165f699e510a7ead44fbf297239d100bfefcdb32bf. +// +// Solidity: event PacketSent(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connection) +func (_IBC *IBCFilterer) WatchPacketSent(opts *bind.WatchOpts, sink chan<- *IBCPacketSent) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "PacketSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCPacketSent) + if err := _IBC.contract.UnpackLog(event, "PacketSent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePacketSent is a log parse operation binding the contract event 0x374a665e4553b182bc8023165f699e510a7ead44fbf297239d100bfefcdb32bf. +// +// Solidity: event PacketSent(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connection) +func (_IBC *IBCFilterer) ParsePacketSent(log types.Log) (*IBCPacketSent, error) { + event := new(IBCPacketSent) + if err := _IBC.contract.UnpackLog(event, "PacketSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCTimeoutPacketIterator is returned from FilterTimeoutPacket and is used to iterate over the raw logs and unpacked data for TimeoutPacket events raised by the IBC contract. +type IBCTimeoutPacketIterator struct { + Event *IBCTimeoutPacket // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCTimeoutPacketIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCTimeoutPacket) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCTimeoutPacket) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCTimeoutPacketIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCTimeoutPacketIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCTimeoutPacket represents a TimeoutPacket event raised by the IBC contract. +type IBCTimeoutPacket struct { + TimeoutHeight string + TimeoutTimestamp *big.Int + Sequence *big.Int + SourcePort string + SourceChannel string + DestPort string + DestChannel string + ChannelOrdering int32 + ConnectionID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTimeoutPacket is a free log retrieval operation binding the contract event 0x280b5c88e7ecdaacc40ca0de13e47206493bdee68e9656ef49e359cb36aa4c12. +// +// Solidity: event TimeoutPacket(string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connectionID) +func (_IBC *IBCFilterer) FilterTimeoutPacket(opts *bind.FilterOpts) (*IBCTimeoutPacketIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "TimeoutPacket") + if err != nil { + return nil, err + } + return &IBCTimeoutPacketIterator{contract: _IBC.contract, event: "TimeoutPacket", logs: logs, sub: sub}, nil +} + +// WatchTimeoutPacket is a free log subscription operation binding the contract event 0x280b5c88e7ecdaacc40ca0de13e47206493bdee68e9656ef49e359cb36aa4c12. +// +// Solidity: event TimeoutPacket(string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connectionID) +func (_IBC *IBCFilterer) WatchTimeoutPacket(opts *bind.WatchOpts, sink chan<- *IBCTimeoutPacket) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "TimeoutPacket") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCTimeoutPacket) + if err := _IBC.contract.UnpackLog(event, "TimeoutPacket", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTimeoutPacket is a log parse operation binding the contract event 0x280b5c88e7ecdaacc40ca0de13e47206493bdee68e9656ef49e359cb36aa4c12. +// +// Solidity: event TimeoutPacket(string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, int32 channelOrdering, string connectionID) +func (_IBC *IBCFilterer) ParseTimeoutPacket(log types.Log) (*IBCTimeoutPacket, error) { + event := new(IBCTimeoutPacket) + if err := _IBC.contract.UnpackLog(event, "TimeoutPacket", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCTypeChannelClosedIterator is returned from FilterTypeChannelClosed and is used to iterate over the raw logs and unpacked data for TypeChannelClosed events raised by the IBC contract. +type IBCTypeChannelClosedIterator struct { + Event *IBCTypeChannelClosed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCTypeChannelClosedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCTypeChannelClosed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCTypeChannelClosed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCTypeChannelClosedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCTypeChannelClosedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCTypeChannelClosed represents a TypeChannelClosed event raised by the IBC contract. +type IBCTypeChannelClosed struct { + SourcePort string + SourceChannel string + DestPort string + DestChannel string + ConnectionID string + ChannelOrdering string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTypeChannelClosed is a free log retrieval operation binding the contract event 0xf746dad35ccffe1b392a9d8643ff590f9a8faffcfd919afef8d68010d88eba6f. +// +// Solidity: event TypeChannelClosed(string sourcePort, string sourceChannel, string destPort, string destChannel, string ConnectionID, string ChannelOrdering) +func (_IBC *IBCFilterer) FilterTypeChannelClosed(opts *bind.FilterOpts) (*IBCTypeChannelClosedIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "TypeChannelClosed") + if err != nil { + return nil, err + } + return &IBCTypeChannelClosedIterator{contract: _IBC.contract, event: "TypeChannelClosed", logs: logs, sub: sub}, nil +} + +// WatchTypeChannelClosed is a free log subscription operation binding the contract event 0xf746dad35ccffe1b392a9d8643ff590f9a8faffcfd919afef8d68010d88eba6f. +// +// Solidity: event TypeChannelClosed(string sourcePort, string sourceChannel, string destPort, string destChannel, string ConnectionID, string ChannelOrdering) +func (_IBC *IBCFilterer) WatchTypeChannelClosed(opts *bind.WatchOpts, sink chan<- *IBCTypeChannelClosed) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "TypeChannelClosed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCTypeChannelClosed) + if err := _IBC.contract.UnpackLog(event, "TypeChannelClosed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTypeChannelClosed is a log parse operation binding the contract event 0xf746dad35ccffe1b392a9d8643ff590f9a8faffcfd919afef8d68010d88eba6f. +// +// Solidity: event TypeChannelClosed(string sourcePort, string sourceChannel, string destPort, string destChannel, string ConnectionID, string ChannelOrdering) +func (_IBC *IBCFilterer) ParseTypeChannelClosed(log types.Log) (*IBCTypeChannelClosed, error) { + event := new(IBCTypeChannelClosed) + if err := _IBC.contract.UnpackLog(event, "TypeChannelClosed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCTypeSubmitMisbehaviourIterator is returned from FilterTypeSubmitMisbehaviour and is used to iterate over the raw logs and unpacked data for TypeSubmitMisbehaviour events raised by the IBC contract. +type IBCTypeSubmitMisbehaviourIterator struct { + Event *IBCTypeSubmitMisbehaviour // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCTypeSubmitMisbehaviourIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCTypeSubmitMisbehaviour) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCTypeSubmitMisbehaviour) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCTypeSubmitMisbehaviourIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCTypeSubmitMisbehaviourIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCTypeSubmitMisbehaviour represents a TypeSubmitMisbehaviour event raised by the IBC contract. +type IBCTypeSubmitMisbehaviour struct { + ClientID string + ClientType string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTypeSubmitMisbehaviour is a free log retrieval operation binding the contract event 0x0169c10587109b18b08996374f7ca7ea7e818fec9a0557b2c6c79970fba0927f. +// +// Solidity: event TypeSubmitMisbehaviour(string clientID, string clientType) +func (_IBC *IBCFilterer) FilterTypeSubmitMisbehaviour(opts *bind.FilterOpts) (*IBCTypeSubmitMisbehaviourIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "TypeSubmitMisbehaviour") + if err != nil { + return nil, err + } + return &IBCTypeSubmitMisbehaviourIterator{contract: _IBC.contract, event: "TypeSubmitMisbehaviour", logs: logs, sub: sub}, nil +} + +// WatchTypeSubmitMisbehaviour is a free log subscription operation binding the contract event 0x0169c10587109b18b08996374f7ca7ea7e818fec9a0557b2c6c79970fba0927f. +// +// Solidity: event TypeSubmitMisbehaviour(string clientID, string clientType) +func (_IBC *IBCFilterer) WatchTypeSubmitMisbehaviour(opts *bind.WatchOpts, sink chan<- *IBCTypeSubmitMisbehaviour) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "TypeSubmitMisbehaviour") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCTypeSubmitMisbehaviour) + if err := _IBC.contract.UnpackLog(event, "TypeSubmitMisbehaviour", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTypeSubmitMisbehaviour is a log parse operation binding the contract event 0x0169c10587109b18b08996374f7ca7ea7e818fec9a0557b2c6c79970fba0927f. +// +// Solidity: event TypeSubmitMisbehaviour(string clientID, string clientType) +func (_IBC *IBCFilterer) ParseTypeSubmitMisbehaviour(log types.Log) (*IBCTypeSubmitMisbehaviour, error) { + event := new(IBCTypeSubmitMisbehaviour) + if err := _IBC.contract.UnpackLog(event, "TypeSubmitMisbehaviour", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCWarpIBCMessageIterator is returned from FilterWarpIBCMessage and is used to iterate over the raw logs and unpacked data for WarpIBCMessage events raised by the IBC contract. +type IBCWarpIBCMessageIterator struct { + Event *IBCWarpIBCMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCWarpIBCMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCWarpIBCMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCWarpIBCMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCWarpIBCMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCWarpIBCMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCWarpIBCMessage represents a WarpIBCMessage event raised by the IBC contract. +type IBCWarpIBCMessage struct { + Sender common.Address + MessageID [32]byte + Message []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWarpIBCMessage is a free log retrieval operation binding the contract event 0x4545d1449b6bfe63eb4db31f933e745f07e76b3a1f295a66222dc33a4a597ea4. +// +// Solidity: event WarpIBCMessage(address indexed sender, bytes32 indexed messageID, bytes message) +func (_IBC *IBCFilterer) FilterWarpIBCMessage(opts *bind.FilterOpts, sender []common.Address, messageID [][32]byte) (*IBCWarpIBCMessageIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var messageIDRule []interface{} + for _, messageIDItem := range messageID { + messageIDRule = append(messageIDRule, messageIDItem) + } + + logs, sub, err := _IBC.contract.FilterLogs(opts, "WarpIBCMessage", senderRule, messageIDRule) + if err != nil { + return nil, err + } + return &IBCWarpIBCMessageIterator{contract: _IBC.contract, event: "WarpIBCMessage", logs: logs, sub: sub}, nil +} + +// WatchWarpIBCMessage is a free log subscription operation binding the contract event 0x4545d1449b6bfe63eb4db31f933e745f07e76b3a1f295a66222dc33a4a597ea4. +// +// Solidity: event WarpIBCMessage(address indexed sender, bytes32 indexed messageID, bytes message) +func (_IBC *IBCFilterer) WatchWarpIBCMessage(opts *bind.WatchOpts, sink chan<- *IBCWarpIBCMessage, sender []common.Address, messageID [][32]byte) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var messageIDRule []interface{} + for _, messageIDItem := range messageID { + messageIDRule = append(messageIDRule, messageIDItem) + } + + logs, sub, err := _IBC.contract.WatchLogs(opts, "WarpIBCMessage", senderRule, messageIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCWarpIBCMessage) + if err := _IBC.contract.UnpackLog(event, "WarpIBCMessage", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWarpIBCMessage is a log parse operation binding the contract event 0x4545d1449b6bfe63eb4db31f933e745f07e76b3a1f295a66222dc33a4a597ea4. +// +// Solidity: event WarpIBCMessage(address indexed sender, bytes32 indexed messageID, bytes message) +func (_IBC *IBCFilterer) ParseWarpIBCMessage(log types.Log) (*IBCWarpIBCMessage, error) { + event := new(IBCWarpIBCMessage) + if err := _IBC.contract.UnpackLog(event, "WarpIBCMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IBCWriteAckIterator is returned from FilterWriteAck and is used to iterate over the raw logs and unpacked data for WriteAck events raised by the IBC contract. +type IBCWriteAckIterator struct { + Event *IBCWriteAck // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IBCWriteAckIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IBCWriteAck) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IBCWriteAck) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IBCWriteAckIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IBCWriteAckIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IBCWriteAck represents a WriteAck event raised by the IBC contract. +type IBCWriteAck struct { + Data []byte + TimeoutHeight string + TimeoutTimestamp *big.Int + Sequence *big.Int + SourcePort string + SourceChannel string + DestPort string + DestChannel string + Ack []byte + ConnectionID string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWriteAck is a free log retrieval operation binding the contract event 0x10c1bf521269fc605b4eb88afd17258ec9fc67515ed2e874e23d9f63bf931fc2. +// +// Solidity: event WriteAck(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, bytes ack, string connectionID) +func (_IBC *IBCFilterer) FilterWriteAck(opts *bind.FilterOpts) (*IBCWriteAckIterator, error) { + + logs, sub, err := _IBC.contract.FilterLogs(opts, "WriteAck") + if err != nil { + return nil, err + } + return &IBCWriteAckIterator{contract: _IBC.contract, event: "WriteAck", logs: logs, sub: sub}, nil +} + +// WatchWriteAck is a free log subscription operation binding the contract event 0x10c1bf521269fc605b4eb88afd17258ec9fc67515ed2e874e23d9f63bf931fc2. +// +// Solidity: event WriteAck(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, bytes ack, string connectionID) +func (_IBC *IBCFilterer) WatchWriteAck(opts *bind.WatchOpts, sink chan<- *IBCWriteAck) (event.Subscription, error) { + + logs, sub, err := _IBC.contract.WatchLogs(opts, "WriteAck") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IBCWriteAck) + if err := _IBC.contract.UnpackLog(event, "WriteAck", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWriteAck is a log parse operation binding the contract event 0x10c1bf521269fc605b4eb88afd17258ec9fc67515ed2e874e23d9f63bf931fc2. +// +// Solidity: event WriteAck(bytes data, string timeoutHeight, uint256 timeoutTimestamp, uint256 sequence, string sourcePort, string sourceChannel, string destPort, string destChannel, bytes ack, string connectionID) +func (_IBC *IBCFilterer) ParseWriteAck(log types.Log) (*IBCWriteAck, error) { + event := new(IBCWriteAck) + if err := _IBC.contract.UnpackLog(event, "WriteAck", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/relayer/chains/avalanche/ibc_client.go b/relayer/chains/avalanche/ibc_client.go new file mode 100644 index 000000000..5e6a10144 --- /dev/null +++ b/relayer/chains/avalanche/ibc_client.go @@ -0,0 +1,50 @@ +package avalanche + +import ( + "context" + "fmt" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/subnet-evm/rpc" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +var _ IbcClient = (*ibcClient)(nil) + +type IbcClient interface { + GetPChainHeight(ctx context.Context, evmHeight uint64) (uint64, error) + GetMessageAggregateSignature(ctx context.Context, messageID ids.ID, quorumNum uint64, subnetIDStr string) ([]byte, error) +} + +// ibcClient implementation for interacting with EVM [chain] +type ibcClient struct { + client *rpc.Client +} + +func NewIbcClient(uri string) (IbcClient, error) { + client, err := rpc.Dial(uri) + if err != nil { + return nil, fmt.Errorf("failed to dial client. err: %w", err) + } + return &ibcClient{ + client: client, + }, nil +} + +func (c *ibcClient) GetPChainHeight(ctx context.Context, evmHeight uint64) (uint64, error) { + var res uint64 + err := c.client.CallContext(ctx, &res, "ibc_getPChainHeight", evmHeight) + if err != nil { + return 0, err + } + + return res, err +} + +func (c *ibcClient) GetMessageAggregateSignature(ctx context.Context, messageID ids.ID, quorumNum uint64, subnetIDStr string) ([]byte, error) { + var res hexutil.Bytes + if err := c.client.CallContext(ctx, &res, "warp_getMessageAggregateSignature", messageID, quorumNum, subnetIDStr); err != nil { + return nil, fmt.Errorf("call to warp_getMessageAggregateSignature failed. err: %w", err) + } + return res, nil +} diff --git a/relayer/chains/avalanche/keys.go b/relayer/chains/avalanche/keys.go new file mode 100644 index 000000000..cb30bd0cd --- /dev/null +++ b/relayer/chains/avalanche/keys.go @@ -0,0 +1,190 @@ +package avalanche + +import ( + "errors" + "fmt" + "os" + + "github.com/cometbft/cometbft/libs/bytes" + ckeys "github.com/cosmos/cosmos-sdk/client/keys" + "github.com/cosmos/cosmos-sdk/crypto/hd" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/go-bip39" + + "github.com/cosmos/relayer/v2/relayer/codecs/ethermint" + "github.com/cosmos/relayer/v2/relayer/provider" +) + +const ethereumCoinType = uint32(60) + +var ( + // SupportedAlgorithms defines the list of signing algorithms used on Evmos: + // - secp256k1 (Cosmos) + // - eth_secp256k1 (Ethereum) + SupportedAlgorithms = keyring.SigningAlgoList{ethermint.EthSecp256k1} + // SupportedAlgorithmsLedger defines the list of signing algorithms used on Evmos for the Ledger device: + // - secp256k1 (Cosmos) + // - eth_secp256k1 (Ethereum) + SupportedAlgorithmsLedger = keyring.SigningAlgoList{ethermint.EthSecp256k1} +) + +// KeyringAlgoOptions defines a function keys options for the ethereum Secp256k1 curve. +// It supports secp256k1 and eth_secp256k1 keys for accounts. +func KeyringAlgoOptions() keyring.Option { + return func(options *keyring.Options) { + options.SupportedAlgos = SupportedAlgorithms + options.SupportedAlgosLedger = SupportedAlgorithmsLedger + } +} + +// CreateKeystore initializes a new instance of a keyring at the specified path in the local filesystem. +func (a *AvalancheProvider) CreateKeystore(_ string) error { + keybase, err := keyring.New(a.PCfg.ChainID, a.PCfg.KeyringBackend, a.PCfg.KeyDirectory, a.Input, a.Codec.Marshaler, KeyringAlgoOptions()) + if err != nil { + return err + } + a.Keybase = keybase + return nil +} + +// KeystoreCreated returns true if there is an existing keystore instance at the specified path, it returns false otherwise. +func (a *AvalancheProvider) KeystoreCreated(_ string) bool { + if _, err := os.Stat(a.PCfg.KeyDirectory); errors.Is(err, os.ErrNotExist) { + return false + } else if a.Keybase == nil { + return false + } + return true +} + +// AddKey generates a new mnemonic which is then converted to a private key and BIP-39 HD Path and persists it to the keystore. +// It fails if there is an existing key with the same address. +func (a *AvalancheProvider) AddKey(name string, coinType uint32, signingAlgorithm string) (output *provider.KeyOutput, err error) { + ko, err := a.KeyAddOrRestore(name, coinType) + if err != nil { + return nil, err + } + return ko, nil +} + +// RestoreKey converts a mnemonic to a private key and BIP-39 HD Path and persists it to the keystore. +// It fails if there is an existing key with the same address. +func (a *AvalancheProvider) RestoreKey(name, mnemonic string, coinType uint32, signingAlgorithm string) (address string, err error) { + ko, err := a.KeyAddOrRestore(name, coinType, mnemonic) + if err != nil { + return "", err + } + return ko.Address, nil +} + +// KeyAddOrRestore either generates a new mnemonic or uses the specified mnemonic and converts it to a private key +// and BIP-39 HD Path which is then persisted to the keystore. It fails if there is an existing key with the same address. +func (a *AvalancheProvider) KeyAddOrRestore(keyName string, coinType uint32, mnemonic ...string) (*provider.KeyOutput, error) { + var mnemonicStr string + var err error + algo := keyring.SignatureAlgo(hd.Secp256k1) + + if len(mnemonic) > 0 { + mnemonicStr = mnemonic[0] + } else { + mnemonicStr, err = CreateMnemonic() + if err != nil { + return nil, err + } + } + + if coinType == ethereumCoinType { + algo = keyring.SignatureAlgo(ethermint.EthSecp256k1) + } + + info, err := a.Keybase.NewAccount(keyName, mnemonicStr, "", hd.CreateHDPath(coinType, 0, 0).String(), algo) + if err != nil { + return nil, err + } + + acc, err := info.GetAddress() + if err != nil { + return nil, err + } + out := a.EncodeAccAddr(acc) + + return &provider.KeyOutput{Mnemonic: mnemonicStr, Address: out}, nil +} + +// ShowAddress retrieves a key by name from the keystore and returns the bech32 encoded string representation of that key. +func (a *AvalancheProvider) ShowAddress(name string) (address string, err error) { + info, err := a.Keybase.Key(name) + if err != nil { + return "", err + } + acc, err := info.GetAddress() + if err != nil { + return "", nil + } + out := a.EncodeAccAddr(acc) + + return out, nil +} + +// ListAddresses returns a map of bech32 encoded strings representing all keys currently in the keystore. +func (a *AvalancheProvider) ListAddresses() (map[string]string, error) { + out := map[string]string{} + info, err := a.Keybase.List() + if err != nil { + return nil, err + } + for _, k := range info { + acc, err := k.GetAddress() + if err != nil { + return nil, err + } + addr := a.EncodeAccAddr(acc) + + out[k.Name] = addr + } + return out, nil +} + +// DeleteKey removes a key from the keystore for the specified name. +func (a *AvalancheProvider) DeleteKey(name string) error { + if err := a.Keybase.Delete(name); err != nil { + return err + } + return nil +} + +// KeyExists returns true if a key with the specified name exists in the keystore, it returns false otherwise. +func (a *AvalancheProvider) KeyExists(name string) bool { + k, err := a.Keybase.Key(name) + if err != nil { + return false + } + + return k.Name == name +} + +// ExportPrivKeyArmor returns a private key in ASCII armored format. +// It returns an error if the key does not exist or a wrong encryption passphrase is supplied. +func (a *AvalancheProvider) ExportPrivKeyArmor(keyName string) (armor string, err error) { + return a.Keybase.ExportPrivKeyArmor(keyName, ckeys.DefaultKeyPass) +} + +// CreateMnemonic generates a new mnemonic. +func CreateMnemonic() (string, error) { + entropySeed, err := bip39.NewEntropy(256) + if err != nil { + return "", err + } + mnemonic, err := bip39.NewMnemonic(entropySeed) + if err != nil { + return "", err + } + return mnemonic, nil +} + +func (a *AvalancheProvider) EncodeAccAddr(addr sdk.AccAddress) string { + var data bytes.HexBytes = addr.Bytes() + + return fmt.Sprintf("0x%s", data.String()) +} diff --git a/relayer/chains/avalanche/keys_test.go b/relayer/chains/avalanche/keys_test.go new file mode 100644 index 000000000..a629b221a --- /dev/null +++ b/relayer/chains/avalanche/keys_test.go @@ -0,0 +1,48 @@ +package avalanche_test + +import ( + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/zap" + + "github.com/cosmos/relayer/v2/relayer/chains/avalanche" + "github.com/cosmos/relayer/v2/relayer/provider" +) + +func testProviderWithKeystore(t *testing.T, extraCodecs []string) provider.ChainProvider { + homePath := t.TempDir() + cfg := avalanche.AvalancheProviderConfig{ + ChainID: "test", + KeyDirectory: filepath.Join(homePath, "keys"), + KeyringBackend: "test", + Timeout: "10s", + } + p, err := cfg.NewProvider(zap.NewNop(), homePath, true, "test_chain") + if err != nil { + t.Fatalf("Error creating provider: %v", err) + } + err = p.CreateKeystore(homePath) + if err != nil { + t.Fatalf("Error creating keystore: %v", err) + } + return p +} + +// TestKeyRestore restores a test mnemonic +func TestKeyRestore(t *testing.T) { + const ( + keyName = "test_key" + signatureAlgorithm = "secp256k1" + mnemonic = "three elevator silk family street child flip also leaf inmate call frame shock little legal october vivid enable fetch siege sell burger dolphin green" + expectedAddress = "0x6E7BE67F3619731AB38875999873E8FACE935735" + coinType = uint32(60) + ) + + p := testProviderWithKeystore(t, []string{"ethermint"}) + + address, err := p.RestoreKey(keyName, mnemonic, coinType, signatureAlgorithm) + require.NoError(t, err) + require.Equal(t, expectedAddress, address) +} diff --git a/relayer/chains/avalanche/log.go b/relayer/chains/avalanche/log.go new file mode 100644 index 000000000..ccdc05b35 --- /dev/null +++ b/relayer/chains/avalanche/log.go @@ -0,0 +1,24 @@ +package avalanche + +import ( + evmtypes "github.com/ava-labs/subnet-evm/core/types" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +// LogSuccessTx take the transaction and the messages to create it and logs the appropriate data +func (a *AvalancheProvider) LogSuccessTx(receipt *evmtypes.Receipt) { + // Include the chain_id + fields := []zapcore.Field{ + zap.String("chain_id", a.ChainId()), + zap.Uint64("gas_used", receipt.GasUsed), + zap.Int64("height", receipt.BlockNumber.Int64()), + zap.String("tx_hash", receipt.TxHash.Hex()), + } + + // Log the succesful transaction with fields + a.log.Info( + "Successful transaction", + fields..., + ) +} diff --git a/relayer/chains/avalanche/message_handler.go b/relayer/chains/avalanche/message_handler.go new file mode 100644 index 000000000..a88ef93d3 --- /dev/null +++ b/relayer/chains/avalanche/message_handler.go @@ -0,0 +1,192 @@ +package avalanche + +import ( + "context" + + chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "go.uber.org/zap/zapcore" + + conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + "go.uber.org/zap" + + "github.com/cosmos/relayer/v2/relayer/processor" + "github.com/cosmos/relayer/v2/relayer/provider" +) + +func (acp *AvalancheChainProcessor) handleMessage(ctx context.Context, m ibcMessage, c processor.IBCMessagesCache) { + switch t := m.info.(type) { + case *clientInfo: + acp.handleClientMessage(ctx, m.eventType, *t) + case *connectionInfo: + acp.handleConnectionMessage(m.eventType, provider.ConnectionInfo(*t), c) + case *channelInfo: + acp.handleChannelMessage(m.eventType, provider.ChannelInfo(*t), c) + case *packetInfo: + acp.handlePacketMessage(m.eventType, provider.PacketInfo(*t), c) + } +} + +func (acp *AvalancheChainProcessor) handleClientMessage(ctx context.Context, eventType string, ci clientInfo) { + acp.latestClientState.update(ctx, ci, acp) + acp.logObservedIBCMessage(eventType, zap.String("client_id", ci.clientID)) +} + +func (acp *AvalancheChainProcessor) handleConnectionMessage(eventType string, ci provider.ConnectionInfo, ibcMessagesCache processor.IBCMessagesCache) { + acp.connectionClients[ci.ConnID] = ci.ClientID + connectionKey := processor.ConnectionInfoConnectionKey(ci) + if eventType == conntypes.EventTypeConnectionOpenInit { + found := false + for k := range acp.connectionStateCache { + // Don't add a connectionKey to the connectionStateCache without counterparty connection ID + // since we already have the connectionKey in the connectionStateCache which includes the + // counterparty connection ID. + if k.MsgInitKey() == connectionKey { + found = true + break + } + } + if !found { + acp.connectionStateCache[connectionKey] = false + } + } else { + // Clear out MsgInitKeys once we have the counterparty connection ID + delete(acp.connectionStateCache, connectionKey.MsgInitKey()) + open := (eventType == conntypes.EventTypeConnectionOpenAck || eventType == conntypes.EventTypeConnectionOpenConfirm) + acp.connectionStateCache[connectionKey] = open + } + ibcMessagesCache.ConnectionHandshake.Retain(connectionKey, eventType, ci) + + acp.logConnectionMessage(eventType, ci) +} + +func (acp *AvalancheChainProcessor) handleChannelMessage(eventType string, ci provider.ChannelInfo, ibcMessagesCache processor.IBCMessagesCache) { + acp.channelConnections[ci.ChannelID] = ci.ConnID + channelKey := processor.ChannelInfoChannelKey(ci) + + if eventType == chantypes.EventTypeChannelOpenInit { + found := false + for k := range acp.channelStateCache { + // Don't add a channelKey to the channelStateCache without counterparty channel ID + // since we already have the channelKey in the channelStateCache which includes the + // counterparty channel ID. + if k.MsgInitKey() == channelKey { + found = true + break + } + } + if !found { + acp.channelStateCache.SetOpen(channelKey, false, ci.Order) + } + } else { + switch eventType { + case chantypes.EventTypeChannelOpenTry: + acp.channelStateCache.SetOpen(channelKey, false, ci.Order) + case chantypes.EventTypeChannelOpenAck, chantypes.EventTypeChannelOpenConfirm: + acp.channelStateCache.SetOpen(channelKey, true, ci.Order) + acp.logChannelOpenMessage(eventType, ci) + case chantypes.EventTypeChannelCloseConfirm: + for k := range acp.channelStateCache { + if k.PortID == ci.PortID && k.ChannelID == ci.ChannelID { + acp.channelStateCache.SetOpen(channelKey, false, ci.Order) + break + } + } + } + // Clear out MsgInitKeys once we have the counterparty channel ID + delete(acp.channelStateCache, channelKey.MsgInitKey()) + } + + ibcMessagesCache.ChannelHandshake.Retain(channelKey, eventType, ci) + + acp.logChannelMessage(eventType, ci) +} + +func (ccp *AvalancheChainProcessor) logChannelMessage(message string, ci provider.ChannelInfo) { + ccp.logObservedIBCMessage(message, + zap.String("channel_id", ci.ChannelID), + zap.String("port_id", ci.PortID), + zap.String("counterparty_channel_id", ci.CounterpartyChannelID), + zap.String("counterparty_port_id", ci.CounterpartyPortID), + zap.String("connection_id", ci.ConnID), + ) +} + +func (acp *AvalancheChainProcessor) handlePacketMessage(eventType string, pi provider.PacketInfo, c processor.IBCMessagesCache) { + k, err := processor.PacketInfoChannelKey(eventType, pi) + if err != nil { + acp.log.Error("Unexpected error handling packet message", + zap.String("event_type", eventType), + zap.Uint64("sequence", pi.Sequence), + zap.Inline(k), + zap.Error(err), + ) + return + } + + if eventType == chantypes.EventTypeTimeoutPacket && pi.ChannelOrder == chantypes.ORDERED.String() { + acp.channelStateCache.SetOpen(k, false, chantypes.ORDERED) + } + + if !c.PacketFlow.ShouldRetainSequence(acp.pathProcessors, k, acp.chainProvider.ChainId(), eventType, pi.Sequence) { + acp.log.Debug("Not retaining packet message", + zap.String("event_type", eventType), + zap.Uint64("sequence", pi.Sequence), + zap.Inline(k), + ) + return + } + + acp.log.Debug("Retaining packet message", + zap.String("event_type", eventType), + zap.Uint64("sequence", pi.Sequence), + zap.Inline(k), + ) + + c.PacketFlow.Retain(k, eventType, pi) + acp.logPacketMessage(eventType, pi) +} + +func (acp *AvalancheChainProcessor) logPacketMessage(message string, pi provider.PacketInfo) { + if !acp.log.Core().Enabled(zapcore.DebugLevel) { + return + } + fields := []zap.Field{ + zap.Uint64("sequence", pi.Sequence), + zap.String("src_channel", pi.SourceChannel), + zap.String("src_port", pi.SourcePort), + zap.String("dst_channel", pi.DestChannel), + zap.String("dst_port", pi.DestPort), + } + if pi.TimeoutHeight.RevisionHeight > 0 { + fields = append(fields, zap.Uint64("timeout_height", pi.TimeoutHeight.RevisionHeight)) + } + if pi.TimeoutHeight.RevisionNumber > 0 { + fields = append(fields, zap.Uint64("timeout_height_revision", pi.TimeoutHeight.RevisionNumber)) + } + if pi.TimeoutTimestamp > 0 { + fields = append(fields, zap.Uint64("timeout_timestamp", pi.TimeoutTimestamp)) + } + acp.logObservedIBCMessage(message, fields...) +} + +func (acp *AvalancheChainProcessor) logChannelOpenMessage(message string, ci provider.ChannelInfo) { + fields := []zap.Field{ + zap.String("channel_id", ci.ChannelID), + zap.String("connection_id", ci.ConnID), + zap.String("port_id", ci.PortID), + } + acp.log.Info("Successfully created new channel", fields...) +} + +func (acp *AvalancheChainProcessor) logConnectionMessage(message string, ci provider.ConnectionInfo) { + acp.logObservedIBCMessage(message, + zap.String("client_id", ci.ClientID), + zap.String("connection_id", ci.ConnID), + zap.String("counterparty_client_id", ci.CounterpartyClientID), + zap.String("counterparty_connection_id", ci.CounterpartyConnID), + ) +} + +func (acp *AvalancheChainProcessor) logObservedIBCMessage(m string, fields ...zap.Field) { + acp.log.With(zap.String("event_type", m)).Debug("Observed IBC message", fields...) +} diff --git a/relayer/chains/avalanche/msg.go b/relayer/chains/avalanche/msg.go new file mode 100644 index 000000000..749f724a8 --- /dev/null +++ b/relayer/chains/avalanche/msg.go @@ -0,0 +1,23 @@ +package avalanche + +import ( + "github.com/cosmos/relayer/v2/relayer/provider" +) + +type EVMMessage struct { + input []byte +} + +func NewEVMMessage(input []byte) provider.RelayerMessage { + return EVMMessage{ + input: input, + } +} + +func (em EVMMessage) Type() string { + return "" +} + +func (em EVMMessage) MsgBytes() ([]byte, error) { + return em.input, nil +} diff --git a/relayer/chains/avalanche/provider.go b/relayer/chains/avalanche/provider.go new file mode 100644 index 000000000..1e83ad398 --- /dev/null +++ b/relayer/chains/avalanche/provider.go @@ -0,0 +1,261 @@ +package avalanche + +import ( + "context" + _ "embed" + "fmt" + "io" + "math/big" + "strings" + "time" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/utils/crypto/bls" + "github.com/ava-labs/avalanchego/vms/platformvm" + "github.com/ava-labs/subnet-evm/accounts/abi" + "github.com/ava-labs/subnet-evm/core/types" + "github.com/ava-labs/subnet-evm/precompile/contracts/ibc" + "github.com/ava-labs/subnet-evm/rpc" + "github.com/avast/retry-go/v4" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/cosmos/gogoproto/proto" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + avalanche "github.com/cosmos/ibc-go/v8/modules/light-clients/14-avalanche" + "github.com/ethereum/go-ethereum/crypto" + "go.uber.org/zap" + + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/subnet-evm/ethclient" + "github.com/ava-labs/subnet-evm/ethclient/subnetevmclient" + + ibccontract "github.com/cosmos/relayer/v2/relayer/chains/avalanche/ibc" + "github.com/cosmos/relayer/v2/relayer/provider" +) + +var ( + //go:embed ibc/contract.abi + ContractABI string + + _ provider.ChainProvider = &AvalancheProvider{} + _ provider.KeyProvider = &AvalancheProvider{} + + tempKey, _ = crypto.HexToECDSA("56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027") +) + +// Variables used for retries +var ( + rtyAttNum = uint(5) + rtyAtt = retry.Attempts(rtyAttNum) + rtyDel = retry.Delay(time.Second * 1) + rtyErr = retry.LastErrorOnly(true) +) + +type AvalancheIBCHeader struct { + EthHeader *types.Header + SignedStorageRoot [bls.SignatureLen]byte + SignedValidatorSet [bls.SignatureLen]byte + ValidatorSet []byte + Vdrs []*avalanche.Validator + SignersInput []byte + PChainHeight uint64 +} + +func (h AvalancheIBCHeader) Height() uint64 { + return h.EthHeader.Number.Uint64() +} + +func (h AvalancheIBCHeader) ConsensusState() ibcexported.ConsensusState { + return &avalanche.ConsensusState{ + Timestamp: time.Unix(int64(h.EthHeader.Time), 0), + StorageRoot: h.EthHeader.Root.Bytes(), + SignedStorageRoot: h.SignedStorageRoot[:], + //ValidatorSet: h.ValidatorSet, + SignedValidatorSet: h.SignedValidatorSet[:], + Vdrs: h.Vdrs, + SignersInput: h.SignersInput, + } +} + +func (h AvalancheIBCHeader) NextValidatorsHash() []byte { + return nil +} + +type AvalancheProvider struct { + log *zap.Logger + + PCfg AvalancheProviderConfig + Keybase keyring.Keyring + KeyringOptions []keyring.Option + Input io.Reader + Output io.Writer + Codec Codec + + ethClient ethclient.Client + ibcClient IbcClient + subnetClient *subnetevmclient.Client + pClient platformvm.Client + txAuth *bind.TransactOpts + abi abi.ABI + subnetID ids.ID + blockchainID ids.ID + ibcContract *ibccontract.IBC +} + +func (a *AvalancheProvider) Init(ctx context.Context) error { + rpcClient, err := rpc.DialContext(context.Background(), a.PCfg.RPCAddr) + if err != nil { + return err + } + a.ethClient = ethclient.NewClient(rpcClient) + a.subnetClient = subnetevmclient.New(rpcClient) + a.pClient = platformvm.NewClient(a.PCfg.BaseRPCAddr) + ibcClient, err := NewIbcClient(a.PCfg.RPCAddr) + a.ibcClient = ibcClient + + chainId, ok := new(big.Int).SetString(a.PCfg.ChainID, 10) + if !ok { + return fmt.Errorf("invalid chain id %s", a.PCfg.ChainID) + } + + a.txAuth, err = bind.NewKeyedTransactorWithChainID(tempKey, chainId) + a.txAuth.GasLimit = 1000000 + if err != nil { + return err + } + + keybase, err := keyring.New(a.PCfg.ChainID, a.PCfg.KeyringBackend, a.PCfg.KeyDirectory, a.Input, a.Codec.Marshaler, a.KeyringOptions...) + if err != nil { + return err + } + + contractAbi, err := abi.JSON(strings.NewReader(ibccontract.IBCABI)) + if err != nil { + return err + } + + subnetID, err := ids.FromString(a.PCfg.SubnetID) + if err != nil { + return err + } + + blockchainID, err := ids.FromString(a.PCfg.BlockchainID) + if err != nil { + return err + } + + ibcContract, err := ibccontract.NewIBC(ibc.ContractAddress, a.ethClient) + if err != nil { + return err + } + + a.Keybase = keybase + a.abi = contractAbi + a.subnetID = subnetID + a.blockchainID = blockchainID + a.ibcContract = ibcContract + + return nil +} + +func (a AvalancheProvider) SetRpcAddr(rpcAddr string) error { + // TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) UseKey(key string) error { + // TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) ChainName() string { + return a.PCfg.ChainName +} + +func (a AvalancheProvider) ChainId() string { + return a.PCfg.ChainID +} + +func (a AvalancheProvider) Type() string { + return "avalanche" +} + +func (a AvalancheProvider) ProviderConfig() provider.ProviderConfig { + return a.PCfg +} + +func (a AvalancheProvider) Key() string { + return a.PCfg.Key +} + +func (a AvalancheProvider) Address() (string, error) { + info, err := a.Keybase.Key(a.PCfg.Key) + if err != nil { + return "", err + } + + acc, err := info.GetAddress() + if err != nil { + return "", err + } + out := a.EncodeAccAddr(acc) + + return out, nil +} + +func (a AvalancheProvider) Timeout() string { + return a.PCfg.Timeout +} + +func (a AvalancheProvider) TrustingPeriod(ctx context.Context, overrideUnbondingPeriod time.Duration, percentage int64) (time.Duration, error) { + // TODO + return time.Hour * 2, nil +} + +func (a AvalancheProvider) WaitForNBlocks(ctx context.Context, n int64) error { + var initial uint64 + // if avalanche node is not synced then nil is returned + err := a.ethClient.SyncProgress(ctx) + // node is syncing + if err != nil { + return fmt.Errorf("chain catching up") + } + + latestBlockNumber, err := a.ethClient.BlockNumber(ctx) + if err != nil { + return err + } + initial = latestBlockNumber + + for { + latestBlockNumber, err = a.ethClient.BlockNumber(ctx) + if err != nil { + return err + } + if latestBlockNumber > initial+uint64(n) { + return nil + } + select { + case <-time.After(10 * time.Millisecond): + // Nothing to do. + case <-ctx.Done(): + return ctx.Err() + } + } +} + +func (a AvalancheProvider) BlockTime(ctx context.Context, height int64) (time.Time, error) { + block, err := a.ethClient.BlockByNumber(ctx, big.NewInt(height)) + if err != nil { + return time.Time{}, err + } + + return time.Unix(int64(block.Time()), 0), nil +} + +func (a *AvalancheProvider) Sprint(toPrint proto.Message) (string, error) { + out, err := a.Codec.Marshaler.MarshalJSON(toPrint) + if err != nil { + return "", err + } + return string(out), nil +} diff --git a/relayer/chains/avalanche/query.go b/relayer/chains/avalanche/query.go new file mode 100644 index 000000000..5c09af464 --- /dev/null +++ b/relayer/chains/avalanche/query.go @@ -0,0 +1,683 @@ +package avalanche + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "math/big" + "strconv" + "strings" + "time" + + "cosmossdk.io/math" + "github.com/ava-labs/subnet-evm/interfaces" + "github.com/ava-labs/subnet-evm/precompile/contracts/ibc" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/ethereum/go-ethereum/common" + + "github.com/ava-labs/avalanchego/utils" + "github.com/ava-labs/avalanchego/utils/crypto/bls" + "github.com/ava-labs/avalanchego/vms/platformvm/warp" + "github.com/ava-labs/avalanchego/vms/platformvm/warp/payload" + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + tendermint "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + avalanche "github.com/cosmos/ibc-go/v8/modules/light-clients/14-avalanche" + ibccontract "github.com/cosmos/relayer/v2/relayer/chains/avalanche/ibc" + "github.com/cosmos/relayer/v2/relayer/provider" + "golang.org/x/exp/maps" +) + +func (a AvalancheProvider) QueryTx(ctx context.Context, hashHex string) (*provider.RelayerTxResponse, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryTxs(ctx context.Context, page, limit int, events []string) ([]*provider.RelayerTxResponse, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryLatestHeight(ctx context.Context) (int64, error) { + blockNumber, err := a.ethClient.BlockNumber(context.Background()) + + return int64(blockNumber), err +} + +func (a AvalancheProvider) QueryIBCHeader(ctx context.Context, h int64) (provider.IBCHeader, error) { + // query EVM header by number + ethHeader, err := a.ethClient.HeaderByNumber(ctx, big.NewInt(h)) + if err != nil { + return nil, err + } + + validatorSet, vdrs, pChainHeight, err := a.avalancheValidatorSet(ctx, ethHeader.Number.Uint64()) + + signedStorageRoot, _, err := a.avalancheBlsSignature(ctx, ethHeader.Root.Bytes()) + if err != nil { + return nil, err + } + signedValidatorSet, signers, err := a.avalancheBlsSignature(ctx, validatorSet) + if err != nil { + return nil, err + } + + return AvalancheIBCHeader{ + EthHeader: ethHeader, + SignedStorageRoot: signedStorageRoot, + SignedValidatorSet: signedValidatorSet, + ValidatorSet: validatorSet, + Vdrs: vdrs, + SignersInput: signers, + PChainHeight: pChainHeight, + }, nil + +} + +func (a AvalancheProvider) avalancheValidatorSet(ctx context.Context, evmHeight uint64) ([]byte, []*avalanche.Validator, uint64, error) { + // query P-Chain block number by EVM height + pChainHeight, err := a.ibcClient.GetPChainHeight(ctx, evmHeight) + if err != nil { + return nil, nil, 0, err + } + + // query P-Chain validators at specific height + vdrSet, err := a.pClient.GetValidatorsAt(ctx, a.subnetID, pChainHeight) + if err != nil { + return nil, nil, 0, err + } + + vdrs := make(map[string]*Validator, len(vdrSet)) + for _, vdr := range vdrSet { + if vdr.PublicKey == nil { + continue + } + + pkBytes := bls.PublicKeyToBytes(vdr.PublicKey) + uniqueVdr, ok := vdrs[string(pkBytes)] + if !ok { + uniqueVdr = &Validator{ + PublicKey: vdr.PublicKey, + PublicKeyBytes: pkBytes, + } + vdrs[string(pkBytes)] = uniqueVdr + } + + uniqueVdr.Weight += vdr.Weight // Impossible to overflow here + uniqueVdr.NodeIDs = append(uniqueVdr.NodeIDs, vdr.NodeID) + } + // Sort validators by public key + vdrList := maps.Values(vdrs) + utils.Sort(vdrList) + + var avaVldrs []*avalanche.Validator + for _, v := range vdrList { + avaVldrs = append(avaVldrs, &avalanche.Validator{ + PublicKeyByte: v.PublicKeyBytes, + Weight: v.Weight, + NodeIDs: [][]byte{v.NodeIDs[0].Bytes()}, + //EndTime: time.Time{}, + }) + } + + // Avalanche validator set in binary format + var avaVldrsBz []byte + for _, vldr := range avaVldrs { + data, err := vldr.Marshal() + if err != nil { + return nil, nil, 0, err + } + avaVldrsBz = append(avaVldrsBz, data...) + } + + return avaVldrsBz, avaVldrs, pChainHeight, nil +} + +func (a AvalancheProvider) avalancheBlsSignature(ctx context.Context, payloadData []byte) ([bls.SignatureLen]byte, []byte, error) { + addressedPayload, err := payload.NewAddressedCall( + []byte{}, + payloadData, + ) + if err != nil { + return [96]byte{}, nil, err + } + unsignedMessage, err := warp.NewUnsignedMessage(a.PCfg.NetworkID, a.blockchainID, addressedPayload.Bytes()) + if err != nil { + return [96]byte{}, nil, err + } + signedWarpMessageBytes, err := a.ibcClient.GetMessageAggregateSignature(ctx, unsignedMessage.ID(), 3, a.PCfg.SubnetID) + if err != nil { + return [96]byte{}, nil, err + } + + warpMsg, err := warp.ParseMessage(signedWarpMessageBytes) + if err != nil { + return [96]byte{}, nil, err + } + + bitsetSignature, ok := warpMsg.Signature.(*warp.BitSetSignature) + if !ok { + return [96]byte{}, nil, errors.New("unable to cast warp signature to BitSetSignature") + } + return bitsetSignature.Signature, bitsetSignature.Signers, nil +} + +func (a AvalancheProvider) QuerySendPacket(ctx context.Context, srcChanID, srcPortID string, sequence uint64) (provider.PacketInfo, error) { + abi, err := ibccontract.IBCMetaData.GetAbi() + if err != nil { + return provider.PacketInfo{}, err + } + + EventPacketSent, exist := abi.Events["PacketSent"] + if !exist { + return provider.PacketInfo{}, fmt.Errorf("event PacketRecv not found in abi") + } + + logs, err := a.ethClient.FilterLogs(ctx, interfaces.FilterQuery{ + Addresses: []common.Address{ + ibc.ContractAddress, + }, + FromBlock: nil, + ToBlock: nil, + Topics: [][]common.Hash{ + {EventPacketSent.ID}, + }, + }) + + var event *ibccontract.IBCPacketSent = nil + for i := range logs { + e, err := a.ibcContract.ParsePacketSent(logs[i]) + if err == nil && e.Sequence.Uint64() == sequence { + event = e + } + } + + if event == nil { + return provider.PacketInfo{}, fmt.Errorf("event PacketRecv[seq=%d] not found", sequence) + } + + ordering := "" + switch event.ChannelOrdering { + default: + ordering = "ORDER_NONE_UNSPECIFIED" + case 1: + ordering = "ORDER_UNORDERED" + case 2: + ordering = "ORDER_ORDERED" + } + + timeoutSplit := strings.Split(event.TimeoutHeight, "-") + if len(timeoutSplit) != 2 { + return provider.PacketInfo{}, fmt.Errorf("bad TimeoutHeight value: '%s'", event.TimeoutHeight) + } + revisionNumber, err := strconv.ParseUint(timeoutSplit[0], 10, 64) + if err != nil { + return provider.PacketInfo{}, fmt.Errorf("bad TimeoutHeight value: '%s'", event.TimeoutHeight) + } + revisionHeight, err := strconv.ParseUint(timeoutSplit[1], 10, 64) + if err != nil { + return provider.PacketInfo{}, fmt.Errorf("bad TimeoutHeight value: '%s'", event.TimeoutHeight) + } + return provider.PacketInfo{ + Sequence: sequence, + SourcePort: event.SourcePort, + SourceChannel: event.SourceChannel, + DestPort: event.DestPort, + DestChannel: event.DestChannel, + ChannelOrder: ordering, + Data: event.Data, + TimeoutHeight: clienttypes.Height{ + RevisionHeight: revisionHeight, + RevisionNumber: revisionNumber, + }, + TimeoutTimestamp: event.TimeoutTimestamp.Uint64(), + }, nil +} + +func (a AvalancheProvider) QueryRecvPacket(ctx context.Context, dstChanID, dstPortID string, sequence uint64) (provider.PacketInfo, error) { + abi, err := ibccontract.IBCMetaData.GetAbi() + if err != nil { + return provider.PacketInfo{}, err + } + + EventPacketRecv, exist := abi.Events["PacketRecv"] + if !exist { + return provider.PacketInfo{}, fmt.Errorf("event PacketRecv not found in abi") + } + + logs, err := a.ethClient.FilterLogs(ctx, interfaces.FilterQuery{ + Addresses: []common.Address{ + ibc.ContractAddress, + }, + FromBlock: nil, + ToBlock: nil, + Topics: [][]common.Hash{ + {EventPacketRecv.ID}, + }, + }) + + var event *ibccontract.IBCPacketRecv = nil + for i := range logs { + e, err := a.ibcContract.ParsePacketRecv(logs[i]) + if err == nil && e.Sequence.Uint64() == sequence { + event = e + } + } + + if event == nil { + return provider.PacketInfo{}, fmt.Errorf("event PacketRecv[seq=%d] not found", sequence) + } + + ordering := "" + switch event.ChannelOrdering { + default: + ordering = "ORDER_NONE_UNSPECIFIED" + case 1: + ordering = "ORDER_UNORDERED" + case 2: + ordering = "ORDER_ORDERED" + } + + timeoutSplit := strings.Split(event.TimeoutHeight, "-") + if len(timeoutSplit) != 2 { + return provider.PacketInfo{}, fmt.Errorf("bad TimeoutHeight value: '%s'", event.TimeoutHeight) + } + revisionNumber, err := strconv.ParseUint(timeoutSplit[0], 10, 64) + if err != nil { + return provider.PacketInfo{}, fmt.Errorf("bad TimeoutHeight value: '%s'", event.TimeoutHeight) + } + revisionHeight, err := strconv.ParseUint(timeoutSplit[1], 10, 64) + if err != nil { + return provider.PacketInfo{}, fmt.Errorf("bad TimeoutHeight value: '%s'", event.TimeoutHeight) + } + return provider.PacketInfo{ + Sequence: sequence, + SourcePort: event.SourcePort, + SourceChannel: event.SourceChannel, + DestPort: event.DestPort, + DestChannel: event.DestChannel, + ChannelOrder: ordering, + Data: event.Data, + TimeoutHeight: clienttypes.Height{ + RevisionHeight: revisionHeight, + RevisionNumber: revisionNumber, + }, + TimeoutTimestamp: event.TimeoutTimestamp.Uint64(), + }, nil +} + +func (a AvalancheProvider) QueryBalance(ctx context.Context, keyName string) (sdk.Coins, error) { + return sdk.Coins{sdk.NewCoin("avax", math.NewInt(4))}, nil +} + +func (a AvalancheProvider) QueryBalanceWithAddress(ctx context.Context, addr string) (sdk.Coins, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryUnbondingPeriod(ctx context.Context) (time.Duration, error) { + return 0, nil +} + +func (a AvalancheProvider) QueryClientState(ctx context.Context, height int64, clientid string) (ibcexported.ClientState, error) { + clientStateBz, err := a.ibcContract.QueryClientState(&bind.CallOpts{BlockNumber: big.NewInt(height)}, clientid) + if err != nil { + return nil, err + } + + // check if client exists + if len(clientStateBz) == 0 { + return nil, clienttypes.ErrClientNotFound + } + + tmClientState := tendermint.ClientState{} + err = tmClientState.Unmarshal(clientStateBz) + if err != nil { + return nil, err + } + + return &tmClientState, nil +} + +func (a AvalancheProvider) QueryClientStateResponse(ctx context.Context, height int64, srcClientId string) (*clienttypes.QueryClientStateResponse, error) { + clientStateBz, err := a.ibcContract.QueryClientState(&bind.CallOpts{BlockNumber: big.NewInt(height)}, srcClientId) + if err != nil { + return nil, err + } + + // check if client exists + if len(clientStateBz) == 0 { + return nil, clienttypes.ErrClientNotFound + } + + tmClientState := tendermint.ClientState{} + err = tmClientState.Unmarshal(clientStateBz) + if err != nil { + return nil, err + } + + anyClientState, err := clienttypes.PackClientState(&tmClientState) + if err != nil { + return nil, err + } + + return &clienttypes.QueryClientStateResponse{ + ClientState: anyClientState, + Proof: nil, + ProofHeight: clienttypes.Height{}, + }, nil +} + +func (a AvalancheProvider) QueryClientConsensusState(ctx context.Context, chainHeight int64, clientid string, clientHeight ibcexported.Height) (*clienttypes.QueryConsensusStateResponse, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryUpgradedClient(ctx context.Context, height int64) (*clienttypes.QueryClientStateResponse, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryUpgradedConsState(ctx context.Context, height int64) (*clienttypes.QueryConsensusStateResponse, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryConsensusState(ctx context.Context, height int64) (ibcexported.ConsensusState, int64, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryClients(ctx context.Context) (clienttypes.IdentifiedClientStates, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryConnection(ctx context.Context, height int64, connectionid string) (*conntypes.QueryConnectionResponse, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryConnections(ctx context.Context) ([]*conntypes.IdentifiedConnection, error) { + rawConnections, err := a.ibcContract.QueryConnectionAll(nil) + if err != nil { + return nil, err + } + var rawdata [][]byte + if err := json.Unmarshal(rawConnections, &rawdata); err != nil { + return nil, err + } + conns := make([]*conntypes.IdentifiedConnection, len(rawdata)) + for i := range rawdata { + var conn conntypes.ConnectionEnd + if err := conn.Unmarshal(rawdata[i]); err != nil { + return nil, err + } + conns[i] = &conntypes.IdentifiedConnection{ + Id: conn.Counterparty.ConnectionId, + ClientId: conn.ClientId, + Versions: conn.Versions, + State: conn.State, + Counterparty: conn.Counterparty, + DelayPeriod: conn.DelayPeriod, + } + } + + return conns, nil +} + +func (a AvalancheProvider) QueryConnectionsUsingClient(ctx context.Context, height int64, clientid string) (*conntypes.QueryConnectionsResponse, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) GenerateConnHandshakeProof(ctx context.Context, height int64, clientId, connId string) (clientState ibcexported.ClientState, clientStateProof []byte, consensusProof []byte, connectionProof []byte, connectionProofHeight ibcexported.Height, err error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryChannel(ctx context.Context, height int64, channelid, portid string) (chanRes *chantypes.QueryChannelResponse, err error) { + rawdata, err := a.ibcContract.QueryChannel(&bind.CallOpts{BlockNumber: big.NewInt(height)}, portid, channelid) + if err != nil { + return nil, err + } + + var ch chantypes.Channel + if err := ch.Unmarshal(rawdata); err != nil { + return nil, err + } + + proof, err := a.ChannelProof(ctx, provider.ChannelInfo{PortID: portid, ChannelID: channelid}, uint64(height)) + if err != nil { + return nil, err + } + + return &chantypes.QueryChannelResponse{ + Channel: &ch, + Proof: proof.Proof, + ProofHeight: proof.ProofHeight, + }, nil +} + +func (a AvalancheProvider) QueryChannelClient(ctx context.Context, height int64, channelid, portid string) (*clienttypes.IdentifiedClientState, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryConnectionChannels(ctx context.Context, height int64, connectionid string) ([]*chantypes.IdentifiedChannel, error) { + rawdata, err := a.ibcContract.QueryChannelAll(nil) + if err != nil { + if err.Error() == "empty precompile state" { + return []*chantypes.IdentifiedChannel{}, nil + } + return nil, fmt.Errorf("here: %w", err) + } + + var rawlist [][]byte + if err := json.Unmarshal(rawdata, &rawlist); err != nil { + return nil, err + } + + chans := make([]*chantypes.IdentifiedChannel, 0) + for i := range rawlist { + var ch chantypes.Channel + if err := ch.Unmarshal(rawlist[i]); err != nil { + return nil, err + } + if ch.ConnectionHops[0] == connectionid { + chans = append(chans, &chantypes.IdentifiedChannel{ + State: ch.State, + Ordering: ch.Ordering, + Counterparty: ch.Counterparty, + ConnectionHops: ch.ConnectionHops, + Version: ch.Version, + PortId: ch.Counterparty.PortId, + ChannelId: ch.Counterparty.ChannelId, + }) + } + } + + return chans, nil +} + +func (a AvalancheProvider) QueryChannels(ctx context.Context) ([]*chantypes.IdentifiedChannel, error) { + rawdata, err := a.ibcContract.QueryChannelAll(nil) + if err != nil { + if err.Error() == "empty precompile state" { + return []*chantypes.IdentifiedChannel{}, nil + } + return nil, fmt.Errorf("here: %w", err) + } + + var rawlist [][]byte + if err := json.Unmarshal(rawdata, &rawlist); err != nil { + return nil, err + } + + chans := make([]*chantypes.IdentifiedChannel, len(rawlist)) + for i := range rawlist { + var ch chantypes.Channel + if err := ch.Unmarshal(rawlist[i]); err != nil { + return nil, err + } + chans[i] = &chantypes.IdentifiedChannel{ + State: ch.State, + Ordering: ch.Ordering, + Counterparty: ch.Counterparty, + ConnectionHops: ch.ConnectionHops, + Version: ch.Version, + PortId: ch.Counterparty.PortId, + ChannelId: ch.Counterparty.ChannelId, + } + } + + return chans, nil +} + +func (a AvalancheProvider) QueryPacketCommitments(ctx context.Context, height uint64, channelid, portid string) (commitments *chantypes.QueryPacketCommitmentsResponse, err error) { + rawdata, err := a.ibcContract.QueryPacketCommitments(&bind.CallOpts{BlockNumber: big.NewInt(int64(height))}, portid, channelid) + if err != nil { + if err.Error() == "empty precompile state" { + return &chantypes.QueryPacketCommitmentsResponse{ + Pagination: &query.PageResponse{ + Total: 0, + }, + Height: clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: height, + }, + Commitments: make([]*chantypes.PacketState, 0), + }, nil + } + return nil, err + } + + var data []struct { + Commitment []byte + Sequence uint64 + } + if err := json.Unmarshal(rawdata, &data); err != nil { + return nil, err + } + + res := chantypes.QueryPacketCommitmentsResponse{ + Pagination: &query.PageResponse{ + Total: uint64(len(data)), + }, + Height: clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: height, + }, + Commitments: make([]*chantypes.PacketState, len(data)), + } + + for i := range data { + res.Commitments[i] = &chantypes.PacketState{ + PortId: portid, + ChannelId: channelid, + Sequence: data[i].Sequence, + Data: data[i].Commitment, + } + } + + return &res, nil +} + +func (a AvalancheProvider) QueryPacketAcknowledgements(ctx context.Context, height uint64, channelid, portid string) (acknowledgements []*chantypes.PacketState, err error) { + rawdata, err := a.ibcContract.QueryPacketAcknowledgements(&bind.CallOpts{BlockNumber: big.NewInt(int64(height))}, portid, channelid) + if err != nil { + return nil, err + } + + var data []struct { + Acknowledgement []byte + Sequence uint64 + } + if err := json.Unmarshal(rawdata, &data); err != nil { + return nil, err + } + + acks := make([]*chantypes.PacketState, len(data)) + for i := range data { + acks[i] = &chantypes.PacketState{ + PortId: portid, + ChannelId: channelid, + Sequence: data[i].Sequence, + Data: data[i].Acknowledgement, + } + } + + return acks, nil +} + +func (a AvalancheProvider) QueryUnreceivedPackets(ctx context.Context, height uint64, channelid, portid string, seqs []uint64) ([]uint64, error) { + seqsdata := make([]*big.Int, len(seqs)) + for i := range seqs { + seqsdata[i] = new(big.Int).SetUint64(seqs[i]) + } + rawdata, err := a.ibcContract.QueryUnreceivedPackets(&bind.CallOpts{BlockNumber: big.NewInt(int64(height))}, portid, channelid, seqsdata) + if err != nil { + return nil, err + } + resp := make([]uint64, len(rawdata.Seqs)) + for i := range rawdata.Seqs { + resp[i] = rawdata.Seqs[i].Uint64() + } + return resp, nil +} + +func (a AvalancheProvider) QueryUnreceivedAcknowledgements(ctx context.Context, height uint64, channelid, portid string, seqs []uint64) ([]uint64, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryNextSeqRecv(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryNextSeqAck(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryPacketCommitment(ctx context.Context, height int64, channelid, portid string, seq uint64) (comRes *chantypes.QueryPacketCommitmentResponse, err error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryPacketAcknowledgement(ctx context.Context, height int64, channelid, portid string, seq uint64) (ackRes *chantypes.QueryPacketAcknowledgementResponse, err error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryPacketReceipt(ctx context.Context, height int64, channelid, portid string, seq uint64) (recRes *chantypes.QueryPacketReceiptResponse, err error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryDenomHash(ctx context.Context, trace string) (string, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryDenomTrace(ctx context.Context, denom string) (*transfertypes.DenomTrace, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) QueryDenomTraces(ctx context.Context, offset, limit uint64, height int64) ([]transfertypes.DenomTrace, error) { + //TODO implement me + return []transfertypes.DenomTrace{ + transfertypes.DenomTrace{ + "demo2", + "ETH", + }, + }, nil +} diff --git a/relayer/chains/avalanche/transferrer/transferrer.abi b/relayer/chains/avalanche/transferrer/transferrer.abi new file mode 100644 index 000000000..655ddae97 --- /dev/null +++ b/relayer/chains/avalanche/transferrer/transferrer.abi @@ -0,0 +1,52 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "channelCapability", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/relayer/chains/avalanche/transferrer/transferrer.go b/relayer/chains/avalanche/transferrer/transferrer.go new file mode 100644 index 000000000..1abc690fe --- /dev/null +++ b/relayer/chains/avalanche/transferrer/transferrer.go @@ -0,0 +1,208 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package transferrer + +import ( + "errors" + "math/big" + "strings" + + "github.com/ava-labs/subnet-evm/accounts/abi" + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/subnet-evm/core/types" + "github.com/ava-labs/subnet-evm/interfaces" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = interfaces.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Height is an auto generated low-level Go binding around an user-defined struct. +type Height struct { + RevisionNumber *big.Int + RevisionHeight *big.Int +} + +// TransferrerMetaData contains all meta data concerning the Transferrer contract. +var TransferrerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"channelCapability\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// TransferrerABI is the input ABI used to generate the binding from. +// Deprecated: Use TransferrerMetaData.ABI instead. +var TransferrerABI = TransferrerMetaData.ABI + +// Transferrer is an auto generated Go binding around an Ethereum contract. +type Transferrer struct { + TransferrerCaller // Read-only binding to the contract + TransferrerTransactor // Write-only binding to the contract + TransferrerFilterer // Log filterer for contract events +} + +// TransferrerCaller is an auto generated read-only Go binding around an Ethereum contract. +type TransferrerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransferrerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TransferrerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransferrerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TransferrerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TransferrerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TransferrerSession struct { + Contract *Transferrer // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransferrerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TransferrerCallerSession struct { + Contract *TransferrerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TransferrerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TransferrerTransactorSession struct { + Contract *TransferrerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TransferrerRaw is an auto generated low-level Go binding around an Ethereum contract. +type TransferrerRaw struct { + Contract *Transferrer // Generic contract binding to access the raw methods on +} + +// TransferrerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TransferrerCallerRaw struct { + Contract *TransferrerCaller // Generic read-only contract binding to access the raw methods on +} + +// TransferrerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TransferrerTransactorRaw struct { + Contract *TransferrerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTransferrer creates a new instance of Transferrer, bound to a specific deployed contract. +func NewTransferrer(address common.Address, backend bind.ContractBackend) (*Transferrer, error) { + contract, err := bindTransferrer(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Transferrer{TransferrerCaller: TransferrerCaller{contract: contract}, TransferrerTransactor: TransferrerTransactor{contract: contract}, TransferrerFilterer: TransferrerFilterer{contract: contract}}, nil +} + +// NewTransferrerCaller creates a new read-only instance of Transferrer, bound to a specific deployed contract. +func NewTransferrerCaller(address common.Address, caller bind.ContractCaller) (*TransferrerCaller, error) { + contract, err := bindTransferrer(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TransferrerCaller{contract: contract}, nil +} + +// NewTransferrerTransactor creates a new write-only instance of Transferrer, bound to a specific deployed contract. +func NewTransferrerTransactor(address common.Address, transactor bind.ContractTransactor) (*TransferrerTransactor, error) { + contract, err := bindTransferrer(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TransferrerTransactor{contract: contract}, nil +} + +// NewTransferrerFilterer creates a new log filterer instance of Transferrer, bound to a specific deployed contract. +func NewTransferrerFilterer(address common.Address, filterer bind.ContractFilterer) (*TransferrerFilterer, error) { + contract, err := bindTransferrer(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TransferrerFilterer{contract: contract}, nil +} + +// bindTransferrer binds a generic wrapper to an already deployed contract. +func bindTransferrer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TransferrerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Transferrer *TransferrerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Transferrer.Contract.TransferrerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Transferrer *TransferrerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Transferrer.Contract.TransferrerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Transferrer *TransferrerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Transferrer.Contract.TransferrerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Transferrer *TransferrerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Transferrer.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Transferrer *TransferrerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Transferrer.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Transferrer *TransferrerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Transferrer.Contract.contract.Transact(opts, method, params...) +} + +// Transfer is a paid mutator transaction binding the contract method 0x2c4a1bee. +// +// Solidity: function transfer(uint256 channelCapability, string sourcePort, string sourceChannel, (uint256,uint256) timeoutHeight, uint256 timeoutTimestamp, bytes data) returns() +func (_Transferrer *TransferrerTransactor) Transfer(opts *bind.TransactOpts, channelCapability *big.Int, sourcePort string, sourceChannel string, timeoutHeight Height, timeoutTimestamp *big.Int, data []byte) (*types.Transaction, error) { + return _Transferrer.contract.Transact(opts, "transfer", channelCapability, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// Transfer is a paid mutator transaction binding the contract method 0x2c4a1bee. +// +// Solidity: function transfer(uint256 channelCapability, string sourcePort, string sourceChannel, (uint256,uint256) timeoutHeight, uint256 timeoutTimestamp, bytes data) returns() +func (_Transferrer *TransferrerSession) Transfer(channelCapability *big.Int, sourcePort string, sourceChannel string, timeoutHeight Height, timeoutTimestamp *big.Int, data []byte) (*types.Transaction, error) { + return _Transferrer.Contract.Transfer(&_Transferrer.TransactOpts, channelCapability, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} + +// Transfer is a paid mutator transaction binding the contract method 0x2c4a1bee. +// +// Solidity: function transfer(uint256 channelCapability, string sourcePort, string sourceChannel, (uint256,uint256) timeoutHeight, uint256 timeoutTimestamp, bytes data) returns() +func (_Transferrer *TransferrerTransactorSession) Transfer(channelCapability *big.Int, sourcePort string, sourceChannel string, timeoutHeight Height, timeoutTimestamp *big.Int, data []byte) (*types.Transaction, error) { + return _Transferrer.Contract.Transfer(&_Transferrer.TransactOpts, channelCapability, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data) +} diff --git a/relayer/chains/avalanche/tx.go b/relayer/chains/avalanche/tx.go new file mode 100644 index 000000000..02d913a25 --- /dev/null +++ b/relayer/chains/avalanche/tx.go @@ -0,0 +1,1199 @@ +package avalanche + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "math/big" + "sync" + "time" + + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + evmtypes "github.com/ava-labs/subnet-evm/core/types" + "github.com/ava-labs/subnet-evm/interfaces" + "github.com/ava-labs/subnet-evm/precompile/contracts/ibc" + "github.com/avast/retry-go/v4" + sdk "github.com/cosmos/cosmos-sdk/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + tendermint "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + avaclient "github.com/cosmos/ibc-go/v8/modules/light-clients/14-avalanche" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "go.uber.org/zap" + + "github.com/cosmos/relayer/v2/relayer/chains/avalanche/transferrer" + "github.com/cosmos/relayer/v2/relayer/provider" +) + +// Default IBC settings +var ( + defaultChainPrefix = commitmenttypes.NewMerklePrefix([]byte("ibc")) + defaultDelayPeriod = uint32(0) +) + +type FungibleTokenPacketData struct { + // the token denomination to be transferred + Denom string `json:"denom"` + // the token amount to be transferred + Amount string `json:"amount"` + // the sender address + Sender string `json:"sender"` + // the recipient address on the destination chain + Receiver string `json:"receiver"` + // optional memo + Memo string `json:"memo,omitempty"` +} + +func (a AvalancheProvider) SendMessage(ctx context.Context, msg provider.RelayerMessage, memo string) (*provider.RelayerTxResponse, bool, error) { + return a.SendMessages(ctx, []provider.RelayerMessage{msg}, memo) +} + +func (a AvalancheProvider) broadcastTx( + ctx context.Context, // context for tx broadcast + signedTx *evmtypes.Transaction, + asyncCtx context.Context, // context for async wait for block inclusion after successful tx broadcast + asyncCallbacks []func(*provider.RelayerTxResponse, error), // callback for success/fail of the wait for block inclusion +) error { + err := a.ethClient.SendTransaction(ctx, signedTx) + if err != nil { + return err + } + + go a.waitForTx(asyncCtx, signedTx.Hash(), asyncCallbacks) + + return nil +} + +func (a AvalancheProvider) waitForTx( + ctx context.Context, + txHash common.Hash, + callbacks []func(*provider.RelayerTxResponse, error), +) { + var receipt *evmtypes.Receipt + err := retry.Do( + func() error { + rc, err := a.ethClient.TransactionReceipt(ctx, txHash) + if err != nil { + return err + } + receipt = rc + return nil + }, + retry.Delay(1*time.Second), + retry.Attempts(10), + ) + if err != nil { + a.log.Error("Failed to wait for block inclusion", zap.Error(err)) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(nil, err) + } + } + return + } + // trying to parse events. The problem with that we need to know exactly event name to be able to parse it + events, err := parseEventsFromTxReceipt(a.abi, receipt) + if err != nil { + a.log.Error("Failed to parse receipt events", zap.Error(err)) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(nil, err) + } + } + return + } + events = transformEvents(events) + + rlyResp := &provider.RelayerTxResponse{ + Height: receipt.BlockNumber.Int64(), + TxHash: receipt.TxHash.String(), + Codespace: "", + Code: 0, + Data: "", + Events: events, + } + + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(rlyResp, nil) + } + } + + a.LogSuccessTx(receipt) +} + +func (a AvalancheProvider) SendMessages(ctx context.Context, msgs []provider.RelayerMessage, memo string) (*provider.RelayerTxResponse, bool, error) { + var ( + rlyResp *provider.RelayerTxResponse + callbackErr error + wg sync.WaitGroup + ) + + callback := func(rtr *provider.RelayerTxResponse, err error) { + rlyResp = rtr + callbackErr = err + wg.Done() + } + + wg.Add(1) + + if err := retry.Do(func() error { + return a.SendMessagesToMempool(ctx, msgs, memo, ctx, []func(*provider.RelayerTxResponse, error){callback}) + }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr, retry.OnRetry(func(n uint, err error) { + a.log.Info( + "Error building or broadcasting transaction", + zap.String("chain_id", a.PCfg.ChainID), + zap.Uint("attempt", n+1), + zap.Uint("max_attempts", rtyAttNum), + zap.Error(err), + ) + })); err != nil { + return nil, false, err + } + + wg.Wait() + + if callbackErr != nil { + return rlyResp, false, callbackErr + } + + if rlyResp.Code != 0 { + return rlyResp, false, fmt.Errorf("transaction failed with code: %d", rlyResp.Code) + } + + return rlyResp, true, callbackErr +} + +func (a AvalancheProvider) SendMessagesToMempool(ctx context.Context, msgs []provider.RelayerMessage, memo string, asyncCtx context.Context, asyncCallbacks []func(*provider.RelayerTxResponse, error)) error { + if len(msgs) == 0 { + return errors.New("empty messages") + } + + var ( + ln = len(msgs) + last = ln - 1 + waiter = make(chan struct{}, 1) + callbackResponses = make([]*provider.RelayerTxResponse, ln) + callbackErrors = make([]error, ln) + ) + + callback := func(id int) []func(*provider.RelayerTxResponse, error) { + return []func(*provider.RelayerTxResponse, error){ + func(resp *provider.RelayerTxResponse, err error) { + callbackResponses[id] = resp + callbackErrors[id] = err + <-waiter + }, + } + } + + for i := range msgs { + waiter <- struct{}{} + + input, err := msgs[i].MsgBytes() + if err != nil { + return err + } + + signedTx, err := a.signTx(input) + if err != nil { + return err + } + + err = a.broadcastTx(ctx, signedTx, asyncCtx, callback(i)) + if err != nil { + return err + } + } + waiter <- struct{}{} + close(waiter) + + err := errors.Join(callbackErrors...) + res := &provider.RelayerTxResponse{ + Height: callbackResponses[last].Height, + TxHash: callbackResponses[last].TxHash, + Codespace: callbackResponses[last].Codespace, + Code: callbackResponses[last].Code, + Data: callbackResponses[last].Data, + Events: make([]provider.RelayerEvent, 0), + } + + for i := range callbackResponses { + if callbackResponses[i] != nil && len(callbackResponses[i].Events) > 0 { + res.Events = append(res.Events, callbackResponses[i].Events...) + } + } + + if len(asyncCallbacks) > 0 { + for _, cb := range asyncCallbacks { + cb(res, err) + } + } + + return nil +} + +func (a AvalancheProvider) createDynamicTx(opts *bind.TransactOpts, contract *common.Address, input []byte, head *evmtypes.Header) (*evmtypes.Transaction, error) { + // Normalize value + value := opts.Value + if value == nil { + value = new(big.Int) + } + // Estimate TipCap + gasTipCap := opts.GasTipCap + if gasTipCap == nil { + tip, err := a.ethClient.SuggestGasTipCap(ensureContext(opts.Context)) + if err != nil { + return nil, err + } + gasTipCap = tip + } + // Estimate FeeCap + gasFeeCap := opts.GasFeeCap + if gasFeeCap == nil { + gasFeeCap = new(big.Int).Add( + gasTipCap, + new(big.Int).Mul(head.BaseFee, big.NewInt(2)), + ) + } + if gasFeeCap.Cmp(gasTipCap) < 0 { + return nil, fmt.Errorf("maxFeePerGas (%v) < maxPriorityFeePerGas (%v)", gasFeeCap, gasTipCap) + } + // Estimate GasLimit + gasLimit := opts.GasLimit + if opts.GasLimit == 0 { + var err error + gasLimit, err = a.estimateGasLimit(opts, contract, input, nil, gasTipCap, gasFeeCap, value) + if err != nil { + return nil, err + } + } + // create the transaction + nonce, err := a.getNonce(opts) + if err != nil { + return nil, err + } + baseTx := &evmtypes.DynamicFeeTx{ + To: contract, + Nonce: nonce, + GasFeeCap: gasFeeCap, + GasTipCap: gasTipCap, + Gas: gasLimit, + Value: value, + Data: input, + } + return evmtypes.NewTx(baseTx), nil +} + +func (a AvalancheProvider) createLegacyTx(opts *bind.TransactOpts, contract *common.Address, input []byte) (*evmtypes.Transaction, error) { + if opts.GasFeeCap != nil || opts.GasTipCap != nil { + return nil, errors.New("maxFeePerGas or maxPriorityFeePerGas specified but london is not active yet") + } + // Normalize value + value := opts.Value + if value == nil { + value = new(big.Int) + } + // Estimate GasPrice + gasPrice := opts.GasPrice + if gasPrice == nil { + price, err := a.ethClient.SuggestGasPrice(ensureContext(opts.Context)) + if err != nil { + return nil, err + } + gasPrice = price + } + // Estimate GasLimit + gasLimit := opts.GasLimit + if opts.GasLimit == 0 { + var err error + gasLimit, err = a.estimateGasLimit(opts, contract, input, gasPrice, nil, nil, value) + if err != nil { + return nil, err + } + } + // create the transaction + nonce, err := a.getNonce(opts) + if err != nil { + return nil, err + } + baseTx := &evmtypes.LegacyTx{ + To: contract, + Nonce: nonce, + GasPrice: gasPrice, + Gas: gasLimit, + Value: value, + Data: input, + } + return evmtypes.NewTx(baseTx), nil +} + +func (a AvalancheProvider) getNonce(opts *bind.TransactOpts) (uint64, error) { + if opts.Nonce == nil { + return a.ethClient.AcceptedNonceAt(ensureContext(opts.Context), opts.From) + } else { + return opts.Nonce.Uint64(), nil + } +} + +func (a AvalancheProvider) estimateGasLimit(opts *bind.TransactOpts, contract *common.Address, input []byte, gasPrice, gasTipCap, gasFeeCap, value *big.Int) (uint64, error) { + msg := interfaces.CallMsg{ + From: opts.From, + To: contract, + GasPrice: gasPrice, + GasTipCap: gasTipCap, + GasFeeCap: gasFeeCap, + Value: value, + Data: input, + } + return a.ethClient.EstimateGas(ensureContext(opts.Context), msg) +} + +func (a AvalancheProvider) signTx(input []byte) (*evmtypes.Transaction, error) { + // Create the transaction + var ( + rawTx *evmtypes.Transaction + err error + ) + + contractAddress := common.HexToAddress(a.PCfg.ContractAddress) + if bytes.HasPrefix(input, common.Hex2Bytes("2c4a1bee")) { + contractAddress = common.HexToAddress(a.PCfg.TransferrerAddress) + } + + // get last header + if head, errHead := a.ethClient.HeaderByNumber(ensureContext(a.txAuth.Context), nil); errHead != nil { + return nil, errHead + } else if head.BaseFee != nil { + rawTx, err = a.createDynamicTx(a.txAuth, &contractAddress, input, head) + } else { + // Chain is not London ready -> use legacy transaction + rawTx, err = a.createLegacyTx(a.txAuth, &contractAddress, input) + } + if err != nil { + return nil, err + } + // Sign the transaction and schedule it for execution + if a.txAuth.Signer == nil { + return nil, errors.New("no signer to authorize the transaction with") + } + signedTx, err := a.txAuth.Signer(a.txAuth.From, rawTx) + + return signedTx, err +} + +// DefaultUpgradePath is the default IBC upgrade path set for an on-chain light client +var defaultUpgradePath = "upgrade" + +func (a AvalancheProvider) NewClientState( + dstChainID string, + dstIBCHeader provider.IBCHeader, + dstTrustingPeriod, + dstUbdPeriod, + maxClockDrift time.Duration, + allowUpdateAfterExpiry, + allowUpdateAfterMisbehaviour bool, +) (ibcexported.ClientState, error) { + // Old signature of func + // func (a AvalancheProvider) NewClientState( + // dstChainID string, + // dstUpdateHeader provider.IBCHeader, + // dstTrustingPeriod, + // dstUbdPeriod time.Duration, + // allowUpdateAfterExpiry, + // allowUpdateAfterMisbehaviour bool, + // ) (ibcexported.ClientState, error) { + revisionNumber := clienttypes.ParseChainID(dstChainID) + + trustLevel := avaclient.Fraction{ + Numerator: 1, + Denominator: 5, + } + + // Create the ClientState we want on 'c' tracking 'dst' + cs := &avaclient.ClientState{ + ChainId: a.PCfg.BlockchainID, + NetworkId: a.PCfg.NetworkID, + TrustLevel: trustLevel, + TrustingPeriod: dstTrustingPeriod, + MaxClockDrift: time.Minute * 10, + FrozenHeight: clienttypes.ZeroHeight(), + LatestHeight: clienttypes.Height{ + RevisionNumber: revisionNumber, + RevisionHeight: dstIBCHeader.Height(), + }, + UpgradePath: defaultUpgradePath, + } + return cs, nil +} + +func (a AvalancheProvider) MsgCreateClient(clientState ibcexported.ClientState, consensusState ibcexported.ConsensusState) (provider.RelayerMessage, error) { + tmClientState, ok := clientState.(*tendermint.ClientState) + if !ok { + return nil, errors.New("unable to cast to tendermint Client State") + } + + clientStateBz, err := tmClientState.Marshal() + if err != nil { + return nil, err + } + + tmConsensusState, ok := consensusState.(*tendermint.ConsensusState) + if !ok { + return nil, errors.New("unable to cast to tendermint Consensus State") + } + consensusStateBz, err := tmConsensusState.Marshal() + if err != nil { + return nil, err + } + + input := ibc.CreateClientInput{ + ClientType: clientState.ClientType(), + ClientState: clientStateBz, + ConsensusState: consensusStateBz, + } + + msg, err := ibc.PackCreateClient(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgUpgradeClient(srcClientId string, consRes *clienttypes.QueryConsensusStateResponse, clientRes *clienttypes.QueryClientStateResponse) (provider.RelayerMessage, error) { + clientState, ok := any(clientRes.ClientState).(*tendermint.ClientState) + if !ok { + return nil, errors.New("unable to cast to tendermint Client State") + } + + clientBytes, err := clientState.Marshal() + if err != nil { + return nil, err + } + + consensusState, ok := any(consRes.ConsensusState).(*tendermint.ConsensusState) + if !ok { + return nil, errors.New("unable to cast to tendermint Consensus State") + } + consensusStateBytes, err := consensusState.Marshal() + if err != nil { + return nil, err + } + input := ibc.UpgradeClientInput{ + ClientID: srcClientId, + UpgradedClien: clientBytes, + UpgradedConsState: consensusStateBytes, + ProofUpgradeClient: consRes.GetProof(), + ProofUpgradeConsState: consRes.ConsensusState.Value, + } + msg, err := ibc.PackUpgradeClient(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgUpdateClient(clientID string, dstHeader ibcexported.ClientMessage) (provider.RelayerMessage, error) { + clientMsg, err := clienttypes.PackClientMessage(dstHeader) + if err != nil { + return nil, err + } + clientMsgBz, err := clientMsg.Marshal() + if err != nil { + return nil, err + } + + input := ibc.UpdateClientInput{ + ClientID: clientID, + ClientMessage: clientMsgBz, + } + + msg, err := ibc.PackUpdateClient(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { + channel := chantypes.Channel{ + State: chantypes.INIT, + Ordering: info.Order, + Counterparty: chantypes.Counterparty{ + PortId: info.CounterpartyPortID, + ChannelId: "", + }, + ConnectionHops: []string{info.ConnID}, + Version: info.Version, + } + channelBz, err := channel.Marshal() + if err != nil { + return nil, err + } + + input := ibc.ChanOpenInitInput{ + PortID: info.PortID, + Channel: channelBz, + } + + msg, err := ibc.PackChanOpenInit(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgChannelOpenTry(msgOpenInit provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { + channel := chantypes.Channel{ + State: chantypes.TRYOPEN, + Ordering: proof.Ordering, + Counterparty: chantypes.Counterparty{ + PortId: msgOpenInit.PortID, + ChannelId: msgOpenInit.ChannelID, + }, + ConnectionHops: []string{msgOpenInit.CounterpartyConnID}, + Version: proof.Version, + } + channelBz, err := channel.Marshal() + if err != nil { + return nil, err + } + + heightBz, err := proof.ProofHeight.Marshal() + if err != nil { + return nil, err + } + + input := ibc.ChanOpenTryInput{ + PortID: msgOpenInit.CounterpartyPortID, + Channel: channelBz, + CounterpartyVersion: proof.Version, + ProofInit: proof.Proof, + ProofHeight: heightBz, + } + + msg, err := ibc.PackChanOpenTry(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { + heightBz, err := proof.ProofHeight.Marshal() + if err != nil { + return nil, err + } + + input := ibc.ChannelOpenAckInput{ + PortID: msgOpenTry.CounterpartyPortID, + ChannelID: msgOpenTry.CounterpartyChannelID, + CounterpartyChannelID: msgOpenTry.ChannelID, + CounterpartyVersion: proof.Version, + ProofTry: proof.Proof, + ProofHeight: heightBz, + } + + msg, err := ibc.PackChannelOpenAck(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { + heightBz, err := proof.ProofHeight.Marshal() + if err != nil { + return nil, err + } + + input := ibc.ChannelOpenConfirmInput{ + PortID: msgOpenAck.CounterpartyPortID, + ChannelID: msgOpenAck.CounterpartyChannelID, + ProofAck: proof.Proof, + ProofHeight: heightBz, + } + + msg, err := ibc.PackChannelOpenConfirm(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { + input := ibc.ChannelCloseInitInput{ + PortID: info.PortID, + ChannelID: info.ChannelID, + } + + msg, err := ibc.PackChannelCloseInit(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { + heightBz, err := proof.ProofHeight.Marshal() + if err != nil { + return nil, err + } + input := ibc.ChannelCloseConfirmInput{ + PortID: msgCloseInit.CounterpartyPortID, + ChannelID: msgCloseInit.CounterpartyChannelID, + ProofInit: proof.Proof, + ProofHeight: heightBz, + } + + msg, err := ibc.PackChannelCloseConfirm(input) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgConnectionOpenTry(msgOpenInit provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { + counterparty := conntypes.Counterparty{ + ClientId: msgOpenInit.ClientID, + ConnectionId: msgOpenInit.ConnID, + Prefix: defaultChainPrefix, + } + counterpartyBz, err := counterparty.Marshal() + if err != nil { + return nil, err + } + + avaClientState, ok := proof.ClientState.(*avaclient.ClientState) + if !ok { + return nil, fmt.Errorf("unsupported Client State type, expected: Avalanche ClientState, actual: %T", proof.ClientState) + } + csBz, err := json.Marshal(avaClientState) + if err != nil { + return nil, err + } + + consensusHeight := proof.ClientState.GetLatestHeight().(clienttypes.Height) + consensusHeightBz, err := consensusHeight.Marshal() + if err != nil { + return nil, err + } + + proofHeightBz, err := proof.ProofHeight.Marshal() + if err != nil { + return nil, err + } + + input := ibc.ConnOpenTryInput{ + Counterparty: counterpartyBz, + DelayPeriod: defaultDelayPeriod, + ClientID: msgOpenInit.CounterpartyClientID, + ClientState: csBz, + CounterpartyVersions: []byte{0xa, 0x1, 0x31, 0x12, 0xd, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x12, 0xf, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44}, + ProofInit: proof.ConnectionStateProof, + ProofClient: proof.ClientStateProof, + ProofConsensus: proof.ConsensusStateProof, + ProofHeight: proofHeightBz, + ConsensusHeight: consensusHeightBz, + } + + msg, err := ibc.PackConnOpenTry(input) + + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +//func (a AvalancheProvider) BlockTime(ctx context.Context, height int64) (time.Time, error) { +// block, err := a.ethClient.BlockByNumber(ctx, big.NewInt(height)) +// if err != nil { +// return time.Time{}, err +// } +// +// return time.Unix(int64(block.Time()), 0), nil +//} + +func (a AvalancheProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { + avaClientState, ok := proof.ClientState.(*avaclient.ClientState) + if !ok { + return nil, fmt.Errorf("unsupported Client State type, expected: Avalanche ClientState, actual: %T", proof.ClientState) + } + + csBz, err := avaClientState.Marshal() + if err != nil { + return nil, err + } + + consensusHeight := proof.ClientState.GetLatestHeight().(clienttypes.Height) + consensusHeightBz, err := consensusHeight.Marshal() + if err != nil { + return nil, err + } + + proofHeightBz, err := proof.ProofHeight.Marshal() + if err != nil { + return nil, err + } + + versionsBytes := []byte{0xa, 0x1, 0x31, 0x12, 0xd, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x12, 0xf, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44} + + msg, err := ibc.PackConnOpenAck(ibc.ConnOpenAckInput{ + ConnectionID: msgOpenTry.ConnID, + ClientState: csBz, + Version: versionsBytes, + CounterpartyConnectionID: []byte(msgOpenTry.CounterpartyConnID), + ProofTry: proof.ConnectionStateProof, + ProofClient: proof.ClientStateProof, + ProofConsensus: proof.ConsensusStateProof, + ProofHeight: proofHeightBz, + ConsensusHeight: consensusHeightBz, + }) + + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgConnectionOpenConfirm(msgOpenAck provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { + proofHeightBz, err := proof.ProofHeight.Marshal() + if err != nil { + return nil, err + } + + msg, err := ibc.PackConnOpenConfirm(ibc.ConnOpenConfirmInput{ + ConnectionID: msgOpenAck.ConnID, + ProofAck: proof.ConnectionStateProof, + ProofHeight: proofHeightBz, + }) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgSubmitMisbehaviour(clientID string, misbehaviour ibcexported.ClientMessage) (provider.RelayerMessage, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) ValidatePacket(msgTransfer provider.PacketInfo, latestBlock provider.LatestBlock) error { + if msgTransfer.Sequence == 0 { + return errors.New("refusing to relay packet with sequence: 0") + } + + if len(msgTransfer.Data) == 0 { + return errors.New("refusing to relay packet with empty data") + } + + // This should not be possible, as it violates IBC spec + if msgTransfer.TimeoutHeight.IsZero() && msgTransfer.TimeoutTimestamp == 0 { + return errors.New("refusing to relay packet without a timeout (height or timestamp must be set)") + } + + latestClientTypesHeight := clienttypes.NewHeight(0, latestBlock.Height) + if !msgTransfer.TimeoutHeight.IsZero() && latestClientTypesHeight.GTE(msgTransfer.TimeoutHeight) { + return provider.NewTimeoutHeightError(latestBlock.Height, msgTransfer.TimeoutHeight.RevisionHeight) + } + latestTimestamp := uint64(latestBlock.Time.UnixNano()) + if msgTransfer.TimeoutTimestamp > 0 && latestTimestamp > msgTransfer.TimeoutTimestamp { + return provider.NewTimeoutTimestampError(latestTimestamp, msgTransfer.TimeoutTimestamp) + } + return nil +} + +func (a AvalancheProvider) PacketCommitment(ctx context.Context, msgTransfer provider.PacketInfo, height uint64) (provider.PacketProof, error) { + ack, err := a.ibcContract.QueryPacketCommitment(&bind.CallOpts{BlockNumber: new(big.Int).SetUint64(height)}, msgTransfer.DestPort, msgTransfer.DestChannel, new(big.Int).SetUint64(msgTransfer.Sequence)) + return provider.PacketProof{ + Proof: ack, + ProofHeight: clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: height, + }, + }, err +} + +func (a AvalancheProvider) PacketAcknowledgement(ctx context.Context, msgRecvPacket provider.PacketInfo, height uint64) (provider.PacketProof, error) { + ack, err := a.ibcContract.QueryPacketCommitment(&bind.CallOpts{BlockNumber: new(big.Int).SetUint64(height)}, msgRecvPacket.DestPort, msgRecvPacket.DestChannel, new(big.Int).SetUint64(msgRecvPacket.Sequence)) + return provider.PacketProof{ + Proof: ack, + ProofHeight: clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: height, + }, + }, err +} + +func (a AvalancheProvider) PacketReceipt(ctx context.Context, msgTransfer provider.PacketInfo, height uint64) (provider.PacketProof, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) NextSeqRecv(ctx context.Context, msgTransfer provider.PacketInfo, height uint64) (provider.PacketProof, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) MsgTransfer(dstAddr string, amount sdk.Coin, info provider.PacketInfo) (provider.RelayerMessage, error) { + abi, err := transferrer.TransferrerMetaData.GetAbi() + if err != nil { + return nil, err + } + + packetData, _ := json.Marshal(FungibleTokenPacketData{ + Denom: amount.Denom, + Amount: amount.Amount.String(), + Sender: a.txAuth.From.Hex(), + Receiver: dstAddr, + }) + + msg, err := abi.Pack( + "transfer", + big.NewInt(0), + info.SourcePort, + info.SourceChannel, + transferrer.Height{ + RevisionHeight: big.NewInt(int64(info.TimeoutHeight.RevisionHeight)), + RevisionNumber: big.NewInt(int64(info.TimeoutHeight.RevisionNumber)), + }, + big.NewInt(int64(info.TimeoutTimestamp)), + packetData, + ) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgRecvPacket(msgTransfer provider.PacketInfo, proof provider.PacketProof) (provider.RelayerMessage, error) { + msg, err := ibc.PackRecvPacket(ibc.IIBCMsgRecvPacket{ + Packet: ibc.Packet{ + Sequence: new(big.Int).SetUint64(msgTransfer.Sequence), + SourcePort: msgTransfer.SourcePort, + SourceChannel: msgTransfer.SourceChannel, + DestinationPort: msgTransfer.DestPort, + DestinationChannel: msgTransfer.DestChannel, + Data: msgTransfer.Data, + TimeoutHeight: ibc.Height{ + RevisionNumber: new(big.Int).SetUint64(msgTransfer.TimeoutHeight.RevisionNumber), + RevisionHeight: new(big.Int).SetUint64(msgTransfer.TimeoutHeight.RevisionHeight), + }, + TimeoutTimestamp: new(big.Int).SetUint64(msgTransfer.TimeoutTimestamp), + }, + ProofCommitment: proof.Proof, + ProofHeight: ibc.Height{ + RevisionNumber: new(big.Int).SetUint64(proof.ProofHeight.RevisionNumber), + RevisionHeight: new(big.Int).SetUint64(proof.ProofHeight.RevisionHeight), + }, + Signer: a.txAuth.From.Hex(), + }) + if err != nil { + return nil, err + } + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgAcknowledgement(msgRecvPacket provider.PacketInfo, proofAcked provider.PacketProof) (provider.RelayerMessage, error) { + msg, err := ibc.PackAcknowledgement(ibc.IIBCMsgAcknowledgement{ + Packet: ibc.Packet{ + Sequence: new(big.Int).SetUint64(msgRecvPacket.Sequence), + SourcePort: msgRecvPacket.SourcePort, + SourceChannel: msgRecvPacket.SourceChannel, + DestinationPort: msgRecvPacket.DestPort, + DestinationChannel: msgRecvPacket.DestChannel, + Data: msgRecvPacket.Data, + TimeoutHeight: ibc.Height{ + RevisionNumber: new(big.Int).SetUint64(msgRecvPacket.TimeoutHeight.RevisionNumber), + RevisionHeight: new(big.Int).SetUint64(msgRecvPacket.TimeoutHeight.RevisionHeight), + }, + TimeoutTimestamp: new(big.Int).SetUint64(msgRecvPacket.TimeoutTimestamp), + }, + Acknowledgement: msgRecvPacket.Ack, + ProofAcked: proofAcked.Proof, + ProofHeight: ibc.Height{ + RevisionNumber: new(big.Int).SetUint64(proofAcked.ProofHeight.RevisionNumber), + RevisionHeight: new(big.Int).SetUint64(proofAcked.ProofHeight.RevisionHeight), + }, + Signer: a.txAuth.From.Hex(), + }) + if err != nil { + return nil, err + } + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) MsgTimeout(msgTransfer provider.PacketInfo, proofUnreceived provider.PacketProof) (provider.RelayerMessage, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, proofUnreceived provider.PacketProof) (provider.RelayerMessage, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) CommitmentPrefix() commitmenttypes.MerklePrefix { + return commitmenttypes.NewMerklePrefix([]byte("AvalancheIBC")) +} + +func (a AvalancheProvider) ConnectionHandshakeProof(ctx context.Context, msgOpenInit provider.ConnectionInfo, height uint64) (provider.ConnectionProof, error) { + clientState, err := a.QueryClientState(ctx, int64(height), msgOpenInit.ClientID) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to query client state at height %d: %w", height, err) + } + + //header, err := a.QueryIBCHeader(ctx, int64(height)) + //if err != nil { + // return provider.ConnectionProof{}, fmt.Errorf("unable to query header at height %d: %w", height, err) + //} + //avaHeader, ok := header.(AvalancheIBCHeader) + //if !ok { + // return provider.ConnectionProof{}, fmt.Errorf("unsupported IBC header type, expected: AvalancheIBCHeader, actual: %T", header) + //} + + clientStateSlot := ibc.ClientStateSlot(msgOpenInit.ClientID).Hex() + consensusStateSlot := ibc.ConsensusStateSlot(msgOpenInit.ClientID, clientState.GetLatestHeight()).Hex() + connectionSlot := ibc.ConnectionSlot(msgOpenInit.ConnID).Hex() + + proofs, err := a.subnetClient.GetProof(ctx, ibc.ContractAddress, []string{clientStateSlot, consensusStateSlot, connectionSlot}, big.NewInt(int64(height))) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to query avalanche proofs (%s) at height %d: %w", msgOpenInit.ClientID, height, err) + } + + clientStateProof, err := proofToBytes(proofs.StorageProof[0].Proof) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to convert client state proof to bytes: %w", err) + } + + consensusStateProof, err := proofToBytes(proofs.StorageProof[1].Proof) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to convert consensus state proof to bytes: %w", err) + } + + connStateProof, err := proofToBytes(proofs.StorageProof[2].Proof) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to convert connection proof to bytes: %w", err) + } + + return provider.ConnectionProof{ + ClientState: clientState, + ClientStateProof: clientStateProof, + ConsensusStateProof: consensusStateProof, + ConnectionStateProof: connStateProof, + ProofHeight: clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: msgOpenInit.Height, + }, + }, nil +} + +func proofToBytes(proofs []string) ([]byte, error) { + var result []byte + for _, proofStr := range proofs { + proof, err := hexutil.Decode(proofStr) + if err != nil { + return result, fmt.Errorf("unable to convert proof to bytes: %w", err) + } + result = append(result, proof...) + } + + return result, nil +} + +func (a AvalancheProvider) ConnectionProof(ctx context.Context, msgOpenAck provider.ConnectionInfo, height uint64) (provider.ConnectionProof, error) { + clientState, err := a.QueryClientState(ctx, int64(height), msgOpenAck.ClientID) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to query client state at height %d: %w", height, err) + } + + clientStateSlot := ibc.ClientStateSlot(msgOpenAck.ClientID).Hex() + consensusStateSlot := ibc.ConsensusStateSlot(msgOpenAck.ClientID, clientState.GetLatestHeight()).Hex() + connectionSlot := ibc.ConnectionSlot(msgOpenAck.ConnID).Hex() + + proofs, err := a.subnetClient.GetProof(ctx, ibc.ContractAddress, []string{clientStateSlot, consensusStateSlot, connectionSlot}, big.NewInt(int64(height))) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to query avalanche proofs (%s) at height %d: %w", msgOpenAck.ClientID, height, err) + } + + clientStateProof, err := proofToBytes(proofs.StorageProof[0].Proof) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to convert client state proof to bytes: %w", err) + } + + consensusStateProof, err := proofToBytes(proofs.StorageProof[1].Proof) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to convert consensus state proof to bytes: %w", err) + } + + connStateProof, err := proofToBytes(proofs.StorageProof[2].Proof) + if err != nil { + return provider.ConnectionProof{}, fmt.Errorf("unable to convert connection proof to bytes: %w", err) + } + + return provider.ConnectionProof{ + ClientState: clientState, + ClientStateProof: clientStateProof, + ConsensusStateProof: consensusStateProof, + ConnectionStateProof: connStateProof, + ProofHeight: clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: msgOpenAck.Height, + }, + }, nil +} + +func (a AvalancheProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { + counterparty := conntypes.Counterparty{ + ClientId: info.CounterpartyClientID, + Prefix: defaultChainPrefix, + } + + counterpartyBytes, err := counterparty.Marshal() + if err != nil { + return nil, err + } + + versionsBytes := []byte{0xa, 0x1, 0x31, 0x12, 0xd, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x12, 0xf, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44} + + msg, err := ibc.PackConnOpenInit(ibc.ConnOpenInitInput{ + ClientID: info.ClientID, + Counterparty: counterpartyBytes, + Version: versionsBytes, + DelayPeriod: defaultDelayPeriod, + }) + if err != nil { + return nil, err + } + + return NewEVMMessage(msg), nil +} + +func (a AvalancheProvider) ChannelProof(ctx context.Context, msg provider.ChannelInfo, height uint64) (provider.ChannelProof, error) { + rawdata, err := a.ibcContract.QueryChannel(&bind.CallOpts{BlockNumber: new(big.Int).SetUint64(height)}, msg.PortID, msg.ChannelID) + if err != nil { + return provider.ChannelProof{}, err + } + var ch chantypes.Channel + if err := ch.Unmarshal(rawdata); err != nil { + return provider.ChannelProof{}, err + } + + chSlot := ibc.ChannelSlot(msg.PortID, msg.ChannelID).Hex() + proofs, err := a.subnetClient.GetProof(ctx, ibc.ContractAddress, []string{chSlot}, new(big.Int).SetUint64(height)) + if err != nil { + return provider.ChannelProof{}, err + } + + chProof, err := proofToBytes(proofs.StorageProof[0].Proof) + if err != nil { + return provider.ChannelProof{}, err + } + + return provider.ChannelProof{ + Version: ch.Version, + Ordering: ch.Ordering, + Proof: chProof, + ProofHeight: clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: height, + }, + }, nil +} + +func (a AvalancheProvider) MsgUpdateClientHeader(latestHeader provider.IBCHeader, trustedHeight clienttypes.Height, trustedHeader provider.IBCHeader) (ibcexported.ClientMessage, error) { + //trustedAvalancheHeader, ok := trustedHeader.(AvalancheIBCHeader) + //if !ok { + // return nil, fmt.Errorf("unsupported IBC trusted header type, expected: AvalancheIBCHeader, actual: %T", trustedHeader) + //} + + latestAvalancheHeader, ok := latestHeader.(AvalancheIBCHeader) + if !ok { + return nil, fmt.Errorf("unsupported IBC latest header type, expected: AvalancheIBCHeader, actual: %T", trustedHeader) + } + + latestAvalancheHeight := latestAvalancheHeader.Height() + //trustedAvalancheHeight := trustedAvalancheHeader.Height() + + return &avaclient.Header{ + PrevSubnetHeader: &avaclient.SubnetHeader{ + Height: &clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: latestAvalancheHeight - 1, + }, + Timestamp: time.Time{}, + BlockHash: nil, + PchainHeight: nil, + PchainVdrs: nil, + }, + SubnetHeader: &avaclient.SubnetHeader{ + Height: &clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: latestAvalancheHeight, + }, + Timestamp: time.Unix(int64(latestAvalancheHeader.EthHeader.Time), 0), + BlockHash: latestAvalancheHeader.EthHeader.Hash().Bytes(), + PchainHeight: nil, + PchainVdrs: latestAvalancheHeader.Vdrs, + }, + PchainHeader: &avaclient.PchainHeader{ + Height: &clienttypes.Height{ + RevisionNumber: 0, + RevisionHeight: latestAvalancheHeader.PChainHeight, + }, + }, + StorageRoot: latestAvalancheHeader.EthHeader.Root.Bytes(), + SignedStorageRoot: latestAvalancheHeader.SignedStorageRoot[:], + //ValidatorSet: latestAvalancheHeader.ValidatorSet, + SignedValidatorSet: latestAvalancheHeader.SignedValidatorSet[:], + Vdrs: latestAvalancheHeader.Vdrs, + SignersInput: latestAvalancheHeader.SignersInput, + }, nil +} + +func (a AvalancheProvider) QueryICQWithProof(ctx context.Context, msgType string, request []byte, height uint64) (provider.ICQProof, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) MsgSubmitQueryResponse(chainID string, queryID provider.ClientICQQueryID, proof provider.ICQProof) (provider.RelayerMessage, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) RelayPacketFromSequence(ctx context.Context, src provider.ChainProvider, srch, dsth, seq uint64, srcChanID, srcPortID string, order chantypes.Order) (provider.RelayerMessage, provider.RelayerMessage, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) AcknowledgementFromSequence(ctx context.Context, dst provider.ChainProvider, dsth, seq uint64, dstChanID, dstPortID, srcChanID, srcPortID string) (provider.RelayerMessage, error) { + //TODO implement me + panic("implement me") +} + +func (a AvalancheProvider) MsgRegisterCounterpartyPayee(portID, channelID, relayerAddr, counterpartyPayeeAddr string) (provider.RelayerMessage, error) { + //TODO implement me + panic("implement me") +} diff --git a/relayer/chains/avalanche/utils.go b/relayer/chains/avalanche/utils.go new file mode 100644 index 000000000..978aa94d8 --- /dev/null +++ b/relayer/chains/avalanche/utils.go @@ -0,0 +1,14 @@ +package avalanche + +import ( + "context" +) + +// ensureContext is a helper method to ensure a context is not nil, even if the +// user specified it as such. +func ensureContext(ctx context.Context) context.Context { + if ctx == nil { + return context.Background() + } + return ctx +} diff --git a/relayer/chains/avalanche/validator.go b/relayer/chains/avalanche/validator.go new file mode 100644 index 000000000..1db914179 --- /dev/null +++ b/relayer/chains/avalanche/validator.go @@ -0,0 +1,28 @@ +package avalanche + +import ( + "bytes" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/utils" + "github.com/ava-labs/avalanchego/utils/crypto/bls" +) + +var ( + _ utils.Sortable[*Validator] = (*Validator)(nil) +) + +type Validator struct { + PublicKey *bls.PublicKey + PublicKeyBytes []byte + Weight uint64 + NodeIDs []ids.NodeID +} + +func (v *Validator) Less(o *Validator) bool { + return bytes.Compare(v.PublicKeyBytes, o.PublicKeyBytes) < 0 +} + +func (v *Validator) Compare(o *Validator) int { + return bytes.Compare(v.PublicKeyBytes, o.PublicKeyBytes) +} diff --git a/relayer/chains/avalanche/warp/external_handler.go b/relayer/chains/avalanche/warp/external_handler.go new file mode 100644 index 000000000..ed320caa3 --- /dev/null +++ b/relayer/chains/avalanche/warp/external_handler.go @@ -0,0 +1,164 @@ +// Copyright (C) 2023, Ava Labs, Inc. All rights reserved. + +package warp + +import ( + "context" + "sync" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/message" + "github.com/ava-labs/avalanchego/snow/networking/router" + "github.com/ava-labs/avalanchego/utils/constants" + "github.com/ava-labs/avalanchego/utils/logging" + "github.com/ava-labs/avalanchego/utils/timer" + "github.com/ava-labs/avalanchego/version" + "github.com/prometheus/client_golang/prometheus" + "go.uber.org/zap" +) + +var _ router.ExternalHandler = &RelayerExternalHandler{} + +// Note: all of the external handler's methods are called on peer goroutines. It +// is possible for multiple concurrent calls to happen with different NodeIDs. +// However, a given NodeID will only be performing one call at a time. +type RelayerExternalHandler struct { + log logging.Logger + responseChansLock *sync.RWMutex + responseChans chan message.InboundMessage + timeoutManager timer.AdaptiveTimeoutManager +} + +// Create a new RelayerExternalHandler to forward relevant inbound app messages to the respective Teleporter message relayer, as well as handle timeouts. +func NewRelayerExternalHandler( + logger logging.Logger, + registerer prometheus.Registerer, + responseChans chan message.InboundMessage, + responseChansLock *sync.RWMutex, +) (*RelayerExternalHandler, error) { + // TODO: Leaving this static for now, but we may want to have this as a config option + cfg := timer.AdaptiveTimeoutConfig{ + InitialTimeout: constants.DefaultNetworkInitialTimeout, + MinimumTimeout: constants.DefaultNetworkInitialTimeout, + MaximumTimeout: constants.DefaultNetworkMaximumTimeout, + TimeoutCoefficient: constants.DefaultNetworkTimeoutCoefficient, + TimeoutHalflife: constants.DefaultNetworkTimeoutHalflife, + } + + timeoutManager, err := timer.NewAdaptiveTimeoutManager(&cfg, "external_handler", registerer) + if err != nil { + logger.Error( + "Failed to create timeout manager", + zap.Error(err), + ) + return nil, err + } + + go timeoutManager.Dispatch() + + return &RelayerExternalHandler{ + log: logger, + responseChansLock: responseChansLock, + responseChans: responseChans, + timeoutManager: timeoutManager, + }, nil +} + +// HandleInbound handles all inbound app message traffic. For the relayer, we only care about App Responses to +// signature request App Requests, and App Request Fail messages sent by the timeout manager. +// For each inboundMessage, OnFinishedHandling must be called exactly once. However, since we handle relayer messages +// async, we must call OnFinishedHandling manually across all code paths. +// +// This diagram illustrates how HandleInbound forwards relevant AppResponses to the corresponding Teleporter message relayer. +// On startup, one Relayer goroutine is created per source subnet, which listens to the subscriber for cross-chain messages +// When a cross-chain message is picked up by a Relayer, HandleInbound routes AppResponses traffic to the appropriate Relayer +func (h *RelayerExternalHandler) HandleInbound(_ context.Context, inboundMessage message.InboundMessage) { + h.log.Debug( + "receiving message", + zap.Stringer("op", inboundMessage.Op()), + ) + if inboundMessage.Op() == message.AppResponseOp || inboundMessage.Op() == message.AppRequestFailedOp { + h.log.Info("handling app response", zap.Stringer("from", inboundMessage.NodeID())) + + // Extract the message fields + m := inboundMessage.Message() + + // Get the blockchainID from the message. + // Note: we should NOT call GetSourceBlockchainID; this is for cross-chain messages using the vm2 interface + // For normal app requests messages, the calls result in the same value, but if the relayer handles an + // inbound cross-chain app message, then we would get the incorrect chain ID. + blockchainID, err := message.GetChainID(m) + if err != nil { + h.log.Error("could not get blockchainID from message") + inboundMessage.OnFinishedHandling() + return + } + sourceBlockchainID, err := message.GetSourceChainID(m) + if err != nil { + h.log.Error("could not get sourceBlockchainID from message") + inboundMessage.OnFinishedHandling() + return + } + requestID, ok := message.GetRequestID(m) + if !ok { + h.log.Error("could not get requestID from message") + inboundMessage.OnFinishedHandling() + return + } + + reqID := ids.RequestID{ + NodeID: inboundMessage.NodeID(), + SourceChainID: sourceBlockchainID, + DestinationChainID: blockchainID, + RequestID: requestID, + Op: byte(inboundMessage.Op()), + } + h.RegisterResponse(reqID) + + // Route to the appropriate response channel. Do not block on this call, otherwise incoming message handling may be blocked + // OnFinishedHandling is called by the consumer of the response channel + go func(message.InboundMessage, ids.ID) { + h.responseChansLock.RLock() + defer h.responseChansLock.RUnlock() + + h.responseChans <- inboundMessage + }(inboundMessage, blockchainID) + } else { + inboundMessage.OnFinishedHandling() + } +} + +func (h *RelayerExternalHandler) Connected(nodeID ids.NodeID, version *version.Application, subnetID ids.ID) { + h.log.Info( + "connected", + zap.Stringer("nodeID", nodeID), + zap.Stringer("version", version), + zap.Stringer("subnetID", subnetID), + ) +} + +func (h *RelayerExternalHandler) Disconnected(nodeID ids.NodeID) { + h.log.Info( + "disconnected", + zap.Stringer("nodeID", nodeID), + ) +} + +// RegisterRequest registers an AppRequest with the timeout manager. +// If RegisterResponse is not called before the timeout, HandleInbound is called with +// an internally created AppRequestFailed message. +func (h *RelayerExternalHandler) RegisterRequest(reqID ids.RequestID) { + inMsg := message.InternalAppRequestFailed( + reqID.NodeID, + reqID.SourceChainID, + reqID.RequestID, + ) + h.timeoutManager.Put(reqID, false, func() { + h.HandleInbound(context.Background(), inMsg) + }) +} + +// RegisterResponse registers an AppResponse with the timeout manager +func (h *RelayerExternalHandler) RegisterResponse(reqID ids.RequestID) { + h.timeoutManager.Remove(reqID) +} diff --git a/relayer/chains/avalanche/warp/peer_network.go b/relayer/chains/avalanche/warp/peer_network.go new file mode 100644 index 000000000..c3e85d9d4 --- /dev/null +++ b/relayer/chains/avalanche/warp/peer_network.go @@ -0,0 +1,219 @@ +package warp + +import ( + "context" + "fmt" + "math/rand" + "sync" + "time" + + "github.com/ava-labs/avalanchego/api/info" + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/message" + "github.com/ava-labs/avalanchego/network" + "github.com/ava-labs/avalanchego/snow/validators" + "github.com/ava-labs/avalanchego/utils/constants" + "github.com/ava-labs/avalanchego/utils/ips" + "github.com/ava-labs/avalanchego/utils/logging" + "github.com/ava-labs/avalanchego/utils/set" + "github.com/prometheus/client_golang/prometheus" + "go.uber.org/zap" +) + +const ( + InboundMessageChannelSize = 1000 + DefaultAppRequestTimeout = time.Second * 2 + + numInitialTestPeers = 4 +) + +type AppRequestNetwork struct { + Network network.Network + Handler *RelayerExternalHandler + infoClient info.Client + logger logging.Logger + log *zap.Logger // TODO keep only only logger + lock *sync.Mutex +} + +// NewNetwork connects to a peers at the app request level. +func NewNetwork( + log *zap.Logger, + logger logging.Logger, + registerer prometheus.Registerer, + networkID uint32, + subnetIDs []ids.ID, + APINodeURL string, +) (*AppRequestNetwork, chan message.InboundMessage, error) { + if networkID != constants.MainnetID && + networkID != constants.FujiID && + len(APINodeURL) == 0 { + return nil, nil, fmt.Errorf("must provide an API URL for local networks") + } + + // Create the test network for AppRequests + var trackedSubnets set.Set[ids.ID] + for _, subnetID := range subnetIDs { + trackedSubnets.Add(subnetID) + } + + // Construct a response chan. Inbound messages will be routed to the proper channel in the handler + responseChan := make(chan message.InboundMessage, InboundMessageChannelSize) + responseChansLock := new(sync.RWMutex) + + handler, err := NewRelayerExternalHandler(logger, registerer, responseChan, responseChansLock) + if err != nil { + logger.Error( + "Failed to create p2p network handler", + zap.Error(err), + ) + return nil, nil, err + } + + network, err := network.NewTestNetwork(logger, networkID, validators.NewManager(), trackedSubnets, handler) + if err != nil { + logger.Error( + "Failed to create test network", + zap.Error(err), + ) + return nil, nil, err + } + + // We need to initially connect to some nodes in the network before peer + // gossip will enable connecting to all the remaining nodes in the network. + var ( + beaconIPs, beaconIDs []string + infoClient info.Client + ) + + // Create the info client + infoClient = info.NewClient(APINodeURL) + peers, err := infoClient.Peers(context.Background()) + if err != nil { + logger.Error( + "Failed to get peers", + zap.Error(err), + ) + return nil, nil, err + } + + // Randomly select peers to connect to until we have numInitialTestPeers + indices := rand.Perm(len(peers)) + for _, index := range indices { + // Do not attempt to connect to private peers + if len(peers[index].PublicIP) == 0 { + continue + } + beaconIPs = append(beaconIPs, peers[index].PublicIP) + beaconIDs = append(beaconIDs, peers[index].ID.String()) + if len(beaconIDs) == numInitialTestPeers { + break + } + } + if len(beaconIPs) == 0 { + logger.Error( + "Failed to find any peers to connect to", + zap.Error(err), + ) + return nil, nil, err + } + if len(beaconIPs) < numInitialTestPeers { + logger.Warn( + "Failed to find a full set of peers to connect to on startup", + zap.Int("connectedPeers", len(beaconIPs)), + zap.Int("expectedConnectedPeers", numInitialTestPeers), + ) + } + + for i, beaconIDStr := range beaconIDs { + beaconID, err := ids.NodeIDFromString(beaconIDStr) + if err != nil { + logger.Error( + "Failed to parse beaconID", + zap.String("beaconID", beaconIDStr), + zap.Error(err), + ) + return nil, nil, err + } + + beaconIPStr := beaconIPs[i] + ipPort, err := ips.ToIPPort(beaconIPStr) + if err != nil { + logger.Error( + "Failed to parse beaconIP", + zap.String("beaconIP", beaconIPStr), + zap.Error(err), + ) + return nil, nil, err + } + + network.ManuallyTrack(beaconID, ipPort) + } + + go network.Dispatch() + + return &AppRequestNetwork{ + Network: network, + Handler: handler, + infoClient: infoClient, + log: log, + lock: new(sync.Mutex), + }, responseChan, nil +} + +// ConnectPeers connects the network to peers with the given nodeIDs. +// On success, returns the provided set of nodeIDs and a nil error. +// On failure, returns the set of nodeIDs that successfully connected and an error. +func (n *AppRequestNetwork) ConnectPeers(nodeIDs set.Set[ids.NodeID]) (set.Set[ids.NodeID], error) { + n.lock.Lock() + defer n.lock.Unlock() + + var ( + retErr error + trackedNodes set.Set[ids.NodeID] + ) + + // First, check if we are already connected to all the peers + connectedPeers := n.Network.PeerInfo(nodeIDs.List()) + if len(connectedPeers) == nodeIDs.Len() { + return nodeIDs, nil + } + + // If we are not connected to all the peers already, then we have to iterate + // through the full list of peers obtained from the info API. Rather than iterating + // through connectedPeers for already tracked peers, just iterate through the full list, + // re-adding connections to already tracked peers. + + // Get the list of peers + peers, err := n.infoClient.Peers(context.Background()) + if err != nil { + n.logger.Error( + "failed to get peers", + zap.Error(err), + ) + return nil, err + } + + // Attempt to connect to each peer + for _, peer := range peers { + if nodeIDs.Contains(peer.ID) { + ipPort, err := ips.ToIPPort(peer.PublicIP) + if err != nil { + n.logger.Error( + "Failed to parse peer IP", + zap.String("beaconIP", peer.PublicIP), + zap.Error(err), + ) + retErr = fmt.Errorf("failed to connect to peers: %v", err) + continue + } + trackedNodes.Add(peer.ID) + n.Network.ManuallyTrack(peer.ID, ipPort) + if len(trackedNodes) == nodeIDs.Len() { + break + } + } + } + + return trackedNodes, retErr +} diff --git a/relayer/chains/avalanche/warp/relayer/canonical_validator_client.go b/relayer/chains/avalanche/warp/relayer/canonical_validator_client.go new file mode 100644 index 000000000..6232f5216 --- /dev/null +++ b/relayer/chains/avalanche/warp/relayer/canonical_validator_client.go @@ -0,0 +1,124 @@ +// Copyright (C) 2023, Ava Labs, Inc. All rights reserved. + +package relayer + +import ( + "context" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/snow/validators" + "github.com/ava-labs/avalanchego/utils/logging" + "github.com/ava-labs/avalanchego/vms/platformvm" + "go.uber.org/zap" +) + +var _ validators.State = &CanonicalValidatorClient{} + +// CanonicalValidatorClient wraps platformvm.Client and implements validators.State +type CanonicalValidatorClient struct { + client platformvm.Client + logger logging.Logger +} + +func NewCanonicalValidatorClient(logger logging.Logger, client platformvm.Client) *CanonicalValidatorClient { + return &CanonicalValidatorClient{ + client: client, + logger: logger, + } +} + +func (v *CanonicalValidatorClient) GetMinimumHeight(ctx context.Context) (uint64, error) { + return v.client.GetHeight(ctx) +} + +func (v *CanonicalValidatorClient) GetCurrentHeight(ctx context.Context) (uint64, error) { + return v.client.GetHeight(ctx) +} + +func (v *CanonicalValidatorClient) GetSubnetID(ctx context.Context, blockchainID ids.ID) (ids.ID, error) { + return v.client.ValidatedBy(ctx, blockchainID) +} + +// Gets the current validator set of the given subnet ID, including the validators' BLS public +// keys. The implementation currently makes two RPC requests, one to get the subnet validators, +// and another to get their BLS public keys. This is necessary in order to enable the use of +// the public APIs (which don't support "GetValidatorsAt") because BLS keys are currently only +// associated with primary network validation periods. If ACP-13 is implementated in the future +// (https://github.com/avalanche-foundation/ACPs/blob/main/ACPs/13-subnet-only-validators.md), it +// may become possible to reduce this to a single RPC request that returns both the subnet validators +// as well as their BLS public keys. +func (v *CanonicalValidatorClient) getCurrentValidatorSet( + ctx context.Context, + subnetID ids.ID) (map[ids.NodeID]*validators.GetValidatorOutput, error) { + // Get the current subnet validators. These validators are not expected to include + // BLS signing information given that addPermissionlessValidatorTx is only used to + // add primary network validators. + subnetVdrs, err := v.client.GetCurrentValidators(ctx, subnetID, nil) + if err != nil { + return nil, err + } + + // Look up the primary network validators of the NodeIDs validating the subnet + // in order to get their BLS keys. + res := make(map[ids.NodeID]*validators.GetValidatorOutput, len(subnetVdrs)) + subnetNodeIDs := make([]ids.NodeID, 0, len(subnetVdrs)) + for _, subnetVdr := range subnetVdrs { + subnetNodeIDs = append(subnetNodeIDs, subnetVdr.NodeID) + res[subnetVdr.NodeID] = &validators.GetValidatorOutput{ + NodeID: subnetVdr.NodeID, + Weight: subnetVdr.Weight, + } + } + primaryVdrs, err := v.client.GetCurrentValidators(ctx, ids.Empty, subnetNodeIDs) + if err != nil { + return nil, err + } + + // Set the BLS keys of the result. + for _, primaryVdr := range primaryVdrs { + // We expect all of the primary network validators to already be in `res` because + // we filtered the request to node IDs that were identified as validators of the + // specific subnet ID. + vdr, ok := res[primaryVdr.NodeID] + if !ok { + v.logger.Warn( + "Unexpected primary network validator returned by getCurrentValidators request", + zap.String("subnetID", subnetID.String()), + zap.String("nodeID", primaryVdr.NodeID.String())) + continue + } + + // Validators that do not have a BLS public key registered on the P-chain are still + // included in the result because they affect the stake weight of the subnet validators. + // Such validators will not be queried for BLS signatures of warp messages. As long as + // sufficient stake percentage of subnet validators have registered BLS public keys, + // messages can still be successfully relayed. + if primaryVdr.Signer != nil { + vdr.PublicKey = primaryVdr.Signer.Key() + } + } + + return res, nil +} + +// Gets the validator set of the given subnet at the given P-chain block height. +// Attempts to use the "getValidatorsAt" API first. If not available, falls back +// to use "getCurrentValidators", ignoring the specified P-chain block height. +func (v *CanonicalValidatorClient) GetValidatorSet( + ctx context.Context, + height uint64, + subnetID ids.ID, +) (map[ids.NodeID]*validators.GetValidatorOutput, error) { + // First, attempt to use the "getValidatorsAt" RPC method. This method may not be available on + // all API nodes, in which case we can fall back to using "getCurrentValidators" if needed. + res, err := v.client.GetValidatorsAt(ctx, subnetID, height) + if err != nil { + v.logger.Debug( + "P-chain RPC to getValidatorAt returned error. Falling back to getCurrentValidators", + zap.String("subnetID", subnetID.String()), + zap.Uint64("pChainHeight", height), + zap.Error(err)) + return v.getCurrentValidatorSet(ctx, subnetID) + } + return res, nil +} diff --git a/relayer/chains/avalanche/warp/relayer/relayer.go b/relayer/chains/avalanche/warp/relayer/relayer.go new file mode 100644 index 000000000..88aca9ff3 --- /dev/null +++ b/relayer/chains/avalanche/warp/relayer/relayer.go @@ -0,0 +1,212 @@ +// Copyright (C) 2023, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +package relayer + +import ( + "fmt" + "math/rand" + "strconv" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/message" + "github.com/ava-labs/avalanchego/utils/logging" + "github.com/ava-labs/avalanchego/utils/set" + "github.com/ava-labs/avalanchego/vms/platformvm" + "github.com/ethereum/go-ethereum/common" + "go.uber.org/zap" + + "github.com/cosmos/relayer/v2/relayer/chains/avalanche/warp" +) + +// Relayer handles all messages sent from a given source chain +type Relayer struct { + pChainClient platformvm.Client + canonicalValidatorClient *CanonicalValidatorClient + currentRequestID uint32 + network *warp.AppRequestNetwork + sourceSubnetID ids.ID + sourceBlockchainID ids.ID + responseChan chan message.InboundMessage + contractMessage vms.ContractMessage + messageManagers map[common.Hash]messages.MessageManager + logger logging.Logger + supportedDestinations set.Set[ids.ID] + apiNodeURI string +} + +func NewRelayer( + logger logging.Logger, + sourceSubnetInfo config.SourceSubnet, + pChainClient platformvm.Client, + network *warp.AppRequestNetwork, + responseChan chan message.InboundMessage, + destinationClients map[ids.ID]vms.DestinationClient, + shouldProcessMissedBlocks bool, +) (*Relayer, error) { + + subnetID, err := ids.FromString(sourceSubnetInfo.SubnetID) + if err != nil { + logger.Error( + "Invalid subnetID in configuration", + zap.Error(err), + ) + return nil, err + } + + blockchainID, err := ids.FromString(sourceSubnetInfo.BlockchainID) + if err != nil { + logger.Error( + "Failed to decode base-58 encoded source chain ID", + zap.Error(err), + ) + return nil, err + } + + var filteredDestinationClients map[ids.ID]vms.DestinationClient + supportedDestinationsBlockchainIDs := sourceSubnetInfo.GetSupportedDestinations() + if len(supportedDestinationsBlockchainIDs) > 0 { + filteredDestinationClients := make(map[ids.ID]vms.DestinationClient) + for id := range supportedDestinationsBlockchainIDs { + filteredDestinationClients[id] = destinationClients[id] + } + } else { + filteredDestinationClients = destinationClients + } + + // Create message managers for each supported message protocol + messageManagers := make(map[common.Hash]messages.MessageManager) + for address, config := range sourceSubnetInfo.MessageContracts { + addressHash := common.HexToHash(address) + messageManager, err := messages.NewMessageManager(logger, addressHash, config, filteredDestinationClients) + if err != nil { + logger.Error( + "Failed to create message manager", + zap.Error(err), + ) + return nil, err + } + messageManagers[addressHash] = messageManager + } + + logger.Info( + "Creating relayer", + zap.String("subnetID", subnetID.String()), + zap.String("subnetIDHex", subnetID.Hex()), + zap.String("blockchainID", blockchainID.String()), + zap.String("blockchainIDHex", blockchainID.Hex()), + ) + r := Relayer{ + pChainClient: pChainClient, + canonicalValidatorClient: NewCanonicalValidatorClient(logger, pChainClient), + currentRequestID: rand.Uint32(), // Initialize to a random value to mitigate requestID collision + network: network, + sourceSubnetID: subnetID, + sourceBlockchainID: blockchainID, + responseChan: responseChan, + contractMessage: vms.NewContractMessage(logger, sourceSubnetInfo), + messageManagers: messageManagers, + logger: logger, + supportedDestinations: supportedDestinationsBlockchainIDs, + } + + return &r, nil +} + +// RelayMessage relays a single warp message to the destination chain. Warp message relay requests from the same origin chain are processed serially +func (r *Relayer) RelayMessage(warpLogInfo *vmtypes.WarpLogInfo, metrics *MessageRelayerMetrics, messageCreator message.Creator) error { + r.logger.Info( + "Relaying message", + zap.String("blockchainID", r.sourceBlockchainID.String()), + ) + // Unpack the VM message bytes into a Warp message + warpMessageInfo, err := r.contractMessage.UnpackWarpMessage(warpLogInfo.UnsignedMsgBytes) + if err != nil { + r.logger.Error( + "Failed to unpack sender message", + zap.Error(err), + ) + return err + } + + r.logger.Info( + "Unpacked warp message", + zap.String("blockchainID", r.sourceBlockchainID.String()), + zap.String("warpMessageID", warpMessageInfo.WarpUnsignedMessage.ID().String()), + ) + + // Check that the warp message is from a support message protocol contract address. + messageManager, supportedMessageProtocol := r.messageManagers[warpLogInfo.SourceAddress] + if !supportedMessageProtocol { + // Do not return an error here because it is expected for there to be messages from other contracts + // than just the ones supported by a single relayer instance. + r.logger.Debug( + "Warp message from unsupported message protocol address. Not relaying.", + zap.String("protocolAddress", warpLogInfo.SourceAddress.Hex()), + ) + return nil + } + + destinationBlockchainID, err := messageManager.GetDestinationBlockchainID(warpMessageInfo) + if err != nil { + r.logger.Error( + "Failed to get destination chain ID", + zap.Error(err), + ) + return err + } + + // Check that the destination chain ID is supported + if !r.CheckSupportedDestination(destinationBlockchainID) { + r.logger.Debug( + "Message destination chain ID not supported. Not relaying.", + zap.String("blockchainID", r.sourceBlockchainID.String()), + zap.String("destinationBlockchainID", destinationBlockchainID.String()), + ) + return nil + } + + // Create and run the message relayer to attempt to deliver the message to the destination chain + messageRelayer := newMessageRelayer(r.logger, metrics, r, warpMessageInfo.WarpUnsignedMessage, destinationBlockchainID, r.responseChan, messageCreator) + if err != nil { + r.logger.Error( + "Failed to create message relayer", + zap.Error(err), + ) + return err + } + + // Relay the message to the destination. Messages from a given source chain must be processed in serial in order to + // guarantee that the previous block (n-1) is fully processed by the relayer when processing a given log from block n. + // TODO: Add a config option to use the Warp API, instead of hardcoding to the app request network here + err = messageRelayer.relayMessage(warpMessageInfo, r.currentRequestID, messageManager, true) + if err != nil { + r.logger.Error( + "Failed to run message relayer", + zap.String("blockchainID", r.sourceBlockchainID.String()), + zap.String("warpMessageID", warpMessageInfo.WarpUnsignedMessage.ID().String()), + zap.Error(err), + ) + return err + } + + // Increment the request ID for the next message relay request + r.currentRequestID++ + + // Update the database with the latest processed block height + err = r.db.Put(r.sourceBlockchainID, []byte(database.LatestProcessedBlockKey), []byte(strconv.FormatUint(warpLogInfo.BlockNumber, 10))) + if err != nil { + r.logger.Error( + fmt.Sprintf("failed to put %s into database", database.LatestProcessedBlockKey), + zap.Error(err), + ) + } + + return nil +} + +// Returns whether destinationBlockchainID is a supported destination. +// If supportedDestinations is empty, then all destination chain IDs are supported. +func (r *Relayer) CheckSupportedDestination(destinationBlockchainID ids.ID) bool { + return len(r.supportedDestinations) == 0 || r.supportedDestinations.Contains(destinationBlockchainID) +} diff --git a/relayer/chains/avalanche/warp/warp.go b/relayer/chains/avalanche/warp/warp.go new file mode 100644 index 000000000..6b023e563 --- /dev/null +++ b/relayer/chains/avalanche/warp/warp.go @@ -0,0 +1,56 @@ +package warp + +import ( + "os" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/message" + "github.com/ava-labs/avalanchego/utils/constants" + "github.com/ava-labs/avalanchego/utils/logging" + "github.com/prometheus/client_golang/prometheus" + "go.uber.org/zap" +) + +type Warp struct { + network *AppRequestNetwork + responseChan chan message.InboundMessage + messageCreator message.Creator +} + +func NewWarp(log *zap.Logger, networkID uint32, subnetID ids.ID, APINodeURL string) (*Warp, error) { + logger := logging.NewLogger( + "relayer", + logging.NewWrappedCore( + logging.Info, + os.Stdout, + logging.JSON.ConsoleEncoder(), + ), + ) + // TODO: use some mock registerer? + registerer := prometheus.NewRegistry() + + network, responseChan, err := NewNetwork(log, logger, registerer, networkID, []ids.ID{subnetID}, APINodeURL) + if err != nil { + log.Error( + "Failed to create app request network", + zap.Error(err), + ) + return nil, err + } + + // Initialize message creator passed down to relayers for creating app requests. + messageCreator, err := message.NewCreator(logger, registerer, "message_creator", constants.DefaultNetworkCompressionType, constants.DefaultNetworkMaximumInboundTimeout) + if err != nil { + log.Error( + "Failed to create message creator", + zap.Error(err), + ) + return nil, err + } + + return &Warp{ + network: network, + responseChan: responseChan, + messageCreator: messageCreator, + }, nil +} diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index 92093d8b2..f96b11edd 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -14,6 +14,8 @@ import ( conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + avalanche "github.com/cosmos/ibc-go/v8/modules/light-clients/14-avalanche" "github.com/cosmos/relayer/v2/relayer/chains" "github.com/cosmos/relayer/v2/relayer/processor" "github.com/cosmos/relayer/v2/relayer/provider" @@ -100,7 +102,7 @@ func (l latestClientState) update(ctx context.Context, clientInfo chains.ClientI trustingPeriod = existingClientInfo.TrustingPeriod } if trustingPeriod == 0 { - cs, err := ccp.chainProvider.queryTMClientState(ctx, 0, clientInfo.ClientID) + cs, err := ccp.chainProvider.QueryClientState(ctx, 0, clientInfo.ClientID) if err != nil { ccp.log.Error( "Failed to query client state to get trusting period", @@ -109,7 +111,20 @@ func (l latestClientState) update(ctx context.Context, clientInfo chains.ClientI ) return } - trustingPeriod = cs.TrustingPeriod + switch cs.(type) { + // tendermint client state + case *tmclient.ClientState: + trustingPeriod = cs.(*tmclient.ClientState).TrustingPeriod + case *avalanche.ClientState: + trustingPeriod = cs.(*avalanche.ClientState).TrustingPeriod + default: + ccp.log.Error( + fmt.Sprintf("unknown client state type, got(%T)", cs), + zap.String("client_id", clientInfo.ClientID), + zap.Error(err), + ) + return + } } clientState := clientInfo.ClientState(trustingPeriod) @@ -184,14 +199,15 @@ func (ccp *CosmosChainProcessor) clientState(ctx context.Context, clientID strin ConsensusHeight: cs.GetLatestHeight().(clienttypes.Height), } } else { - cs, err := ccp.chainProvider.queryTMClientState(ctx, int64(ccp.latestBlock.Height), clientID) + cs, err := ccp.chainProvider.QueryClientState(ctx, int64(ccp.latestBlock.Height), clientID) + //cs, err := ccp.chainProvider.queryTMClientState(ctx, int64(ccp.latestBlock.Height), clientID) if err != nil { return provider.ClientState{}, err } clientState = provider.ClientState{ ClientID: clientID, ConsensusHeight: cs.GetLatestHeight().(clienttypes.Height), - TrustingPeriod: cs.TrustingPeriod, + TrustingPeriod: 0, } } diff --git a/relayer/chains/cosmos/keys.go b/relayer/chains/cosmos/keys.go index 3f2650b19..02a46a94c 100644 --- a/relayer/chains/cosmos/keys.go +++ b/relayer/chains/cosmos/keys.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/go-bip39" + "github.com/cosmos/relayer/v2/relayer/chains/cosmos/keys/sr25519" "github.com/cosmos/relayer/v2/relayer/codecs/ethermint" "github.com/cosmos/relayer/v2/relayer/codecs/injective" diff --git a/relayer/chains/cosmos/module/app_module.go b/relayer/chains/cosmos/module/app_module.go index bdf18ae35..af539034a 100644 --- a/relayer/chains/cosmos/module/app_module.go +++ b/relayer/chains/cosmos/module/app_module.go @@ -8,8 +8,8 @@ import ( localhost "github.com/cosmos/ibc-go/v8/modules/light-clients/09-localhost" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - tmlightclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + avalanche "github.com/cosmos/ibc-go/v8/modules/light-clients/14-avalanche" ) // AppModuleBasic defines the basic application module used by the module. @@ -26,6 +26,7 @@ func (AppModuleBasic) RegisterLegacyAminoCodec(*codec.LegacyAmino) {} // RegisterInterfaces registers module concrete types into protobuf Any. func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { tmlightclient.RegisterInterfaces(registry) + avalanche.RegisterInterfaces(registry) solomachine.RegisterInterfaces(registry) localhost.RegisterInterfaces(registry) } diff --git a/relayer/chains/cosmos/msg.go b/relayer/chains/cosmos/msg.go index ddd5a770d..8d29ec9df 100644 --- a/relayer/chains/cosmos/msg.go +++ b/relayer/chains/cosmos/msg.go @@ -6,8 +6,9 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/gogoproto/proto" - "github.com/cosmos/relayer/v2/relayer/provider" "go.uber.org/zap/zapcore" + + "github.com/cosmos/relayer/v2/relayer/provider" ) type CosmosMessage struct { @@ -37,6 +38,7 @@ func CosmosMsgs(rm ...provider.RelayerMessage) []sdk.Msg { for _, rMsg := range rm { if val, ok := rMsg.(CosmosMessage); !ok { fmt.Printf("got data of type %T but wanted provider.CosmosMessage \n", rMsg) + continue return nil } else { sdkMsgs = append(sdkMsgs, val.Msg) diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index eb8d03023..fb47cb560 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -43,12 +43,15 @@ import ( ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" localhost "github.com/cosmos/ibc-go/v8/modules/light-clients/09-localhost" + avaclient "github.com/cosmos/ibc-go/v8/modules/light-clients/14-avalanche" strideicqtypes "github.com/cosmos/relayer/v2/relayer/chains/cosmos/stride" "github.com/cosmos/relayer/v2/relayer/ethermint" "github.com/cosmos/relayer/v2/relayer/provider" "go.uber.org/zap" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + + "github.com/cosmos/relayer/v2/relayer/chains/avalanche" ) // Variables used for retries @@ -533,17 +536,15 @@ func parseEventsFromTxResponse(resp *sdk.TxResponse) []provider.RelayerEvent { return events } - for _, logs := range resp.Logs { - for _, event := range logs.Events { - attributes := make(map[string]string) - for _, attribute := range event.Attributes { - attributes[attribute.Key] = attribute.Value - } - events = append(events, provider.RelayerEvent{ - EventType: event.Type, - Attributes: attributes, - }) + for _, event := range resp.Events { + attributes := make(map[string]string) + for _, attribute := range event.Attributes { + attributes[attribute.Key] = attribute.Value } + events = append(events, provider.RelayerEvent{ + EventType: event.Type, + Attributes: attributes, + }) } // After SDK v0.50, indexed events are no longer provided in the logs on @@ -1300,33 +1301,54 @@ func (cc *CosmosProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelIn func (cc *CosmosProvider) MsgUpdateClientHeader(latestHeader provider.IBCHeader, trustedHeight clienttypes.Height, trustedHeader provider.IBCHeader) (ibcexported.ClientMessage, error) { trustedCosmosHeader, ok := trustedHeader.(provider.TendermintIBCHeader) - if !ok { - return nil, fmt.Errorf("unsupported IBC trusted header type, expected: TendermintIBCHeader, actual: %T", trustedHeader) - } + if ok { + latestCosmosHeader, ok := latestHeader.(provider.TendermintIBCHeader) + if !ok { + return nil, fmt.Errorf("unsupported IBC header type, expected: TendermintIBCHeader, actual: %T", latestHeader) + } - latestCosmosHeader, ok := latestHeader.(provider.TendermintIBCHeader) - if !ok { - return nil, fmt.Errorf("unsupported IBC header type, expected: TendermintIBCHeader, actual: %T", latestHeader) - } + trustedValidatorsProto, err := trustedCosmosHeader.ValidatorSet.ToProto() + if err != nil { + return nil, fmt.Errorf("error converting trusted validators to proto object: %w", err) + } - trustedValidatorsProto, err := trustedCosmosHeader.ValidatorSet.ToProto() - if err != nil { - return nil, fmt.Errorf("error converting trusted validators to proto object: %w", err) - } + signedHeaderProto := latestCosmosHeader.SignedHeader.ToProto() - signedHeaderProto := latestCosmosHeader.SignedHeader.ToProto() + validatorSetProto, err := latestCosmosHeader.ValidatorSet.ToProto() + if err != nil { + return nil, fmt.Errorf("error converting validator set to proto object: %w", err) + } - validatorSetProto, err := latestCosmosHeader.ValidatorSet.ToProto() - if err != nil { - return nil, fmt.Errorf("error converting validator set to proto object: %w", err) + return &tmclient.Header{ + SignedHeader: signedHeaderProto, + ValidatorSet: validatorSetProto, + TrustedValidators: trustedValidatorsProto, + TrustedHeight: trustedHeight, + }, nil + } + + trustedAvalancheHeader, ok := trustedHeader.(avalanche.AvalancheIBCHeader) + if ok { + return &avaclient.Header{ + PrevSubnetHeader: nil, + SubnetHeader: &avaclient.SubnetHeader{ + Height: nil, + Timestamp: time.Unix(int64(trustedAvalancheHeader.EthHeader.Time), 0), + BlockHash: trustedAvalancheHeader.EthHeader.Hash().Bytes(), + PchainHeight: nil, + PchainVdrs: nil, + }, + PchainHeader: nil, + StorageRoot: nil, + SignedStorageRoot: nil, + //ValidatorSet: nil, + SignedValidatorSet: nil, + Vdrs: nil, + SignersInput: nil, + }, nil } - return &tmclient.Header{ - SignedHeader: signedHeaderProto, - ValidatorSet: validatorSetProto, - TrustedValidators: trustedValidatorsProto, - TrustedHeight: trustedHeight, - }, nil + return nil, fmt.Errorf("unsupported IBC trusted header type, expected: TendermintIBCHeader or AvalancheIBCHeader, actual: %T", trustedHeader) } func (cc *CosmosProvider) QueryICQWithProof(ctx context.Context, path string, request []byte, height uint64) (provider.ICQProof, error) { diff --git a/relayer/chains/penumbra/query.go b/relayer/chains/penumbra/query.go index 20c64dde5..abaff8272 100644 --- a/relayer/chains/penumbra/query.go +++ b/relayer/chains/penumbra/query.go @@ -28,9 +28,10 @@ import ( ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" "github.com/cosmos/relayer/v2/relayer/chains" - "github.com/cosmos/relayer/v2/relayer/provider" "go.uber.org/zap" "golang.org/x/sync/errgroup" + + "github.com/cosmos/relayer/v2/relayer/provider" ) var _ provider.QueryProvider = &PenumbraProvider{} diff --git a/relayer/client.go b/relayer/client.go index 0ad34b1bc..00acb8eab 100644 --- a/relayer/client.go +++ b/relayer/client.go @@ -195,10 +195,11 @@ func CreateClient( if !override { // Check if an identical light client already exists on the src chain which matches the // proposed new client state from dst. - clientID, err = findMatchingClient(ctx, src, dst, clientState) - if err != nil { - return "", fmt.Errorf("failed to find a matching client for the new client state: %w", err) - } + // TODO + //clientID, err = findMatchingClient(ctx, src, dst, clientState) + //if err != nil { + // return "", fmt.Errorf("failed to find a matching client for the new client state: %w", err) + //} } if clientID != "" && !override { diff --git a/relayer/connection.go b/relayer/connection.go index cb7aa3875..9a8f643d5 100644 --- a/relayer/connection.go +++ b/relayer/connection.go @@ -3,11 +3,10 @@ package relayer import ( "context" "time" - conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + "go.uber.org/zap" "github.com/cosmos/relayer/v2/relayer/processor" "github.com/cosmos/relayer/v2/relayer/provider" - "go.uber.org/zap" ) // CreateOpenConnections runs the connection creation messages on timeout until they pass. diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index 602c588c8..49bc6b57b 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -11,7 +11,10 @@ import ( legacyerrors "github.com/cosmos/cosmos-sdk/types/errors" chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + avaclient "github.com/cosmos/ibc-go/v8/modules/light-clients/14-avalanche" "github.com/cosmos/relayer/v2/relayer/provider" + "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -102,7 +105,9 @@ func (mp *messageProcessor) processMessages( // Localhost IBC does not permit client updates if !isLocalhostClient(src.clientState.ClientID, dst.clientState.ClientID) { var err error - needsClientUpdate, err = mp.shouldUpdateClientNow(ctx, src, dst) + needsClientUpdate = false + // TODO: uncomment next line + // needsClientUpdate, err = mp.shouldUpdateClientNow(ctx, src, dst) if err != nil { return err } @@ -136,6 +141,8 @@ func (mp *messageProcessor) shouldUpdateClientNow(ctx context.Context, src, dst if dst.clientState.ConsensusTime.IsZero() { h, err := src.chainProvider.QueryIBCHeader(ctx, int64(dst.clientState.ConsensusHeight.RevisionHeight)) if err != nil { + // TODO + //return false, nil return false, fmt.Errorf("failed to get header height: %w", err) } consensusHeightTime = time.Unix(0, int64(h.ConsensusState().GetTimestamp())) @@ -307,6 +314,19 @@ func (mp *messageProcessor) assembleMsgUpdateClient(ctx context.Context, src, ds trustedConsensusHeight, dst.clientTrustedState.IBCHeader, ) + // avalanche + if src.info.ChainID == "99999" { + avaHeader := msgUpdateClientHeader.(*avaclient.Header) + mp.log.Info("constructed MsgUpdateClientHeader from avalanche for cosmos", + zap.String("subnet_header", avaHeader.SubnetHeader.Height.String()), + ) + } + if src.info.ChainID == "ibcgo" { + tmHeader := msgUpdateClientHeader.(*tmclient.Header) + mp.log.Info("constructed MsgUpdateClientHeader from cosmos for avalanche", + zap.Int64("height", tmHeader.Header.Height), + ) + } if err != nil { return fmt.Errorf("error assembling new client header: %w", err) } diff --git a/relayer/processor/path_end_runtime.go b/relayer/processor/path_end_runtime.go index 9765aad73..14a0357e7 100644 --- a/relayer/processor/path_end_runtime.go +++ b/relayer/processor/path_end_runtime.go @@ -653,13 +653,14 @@ func (pathEnd *pathEndRuntime) shouldSendConnectionMessage(message connectionIBC if eventType != conntypes.EventTypeConnectionOpenInit { k = k.Counterparty() } - if message.info.Height >= counterparty.latestBlock.Height { - pathEnd.log.Debug("Waiting to relay connection message until counterparty height has incremented", - zap.Inline(k), - zap.String("event_type", eventType), - ) - return false - } + // TODO + //if message.info.Height >= counterparty.latestBlock.Height { + // pathEnd.log.Debug("Waiting to relay connection message until counterparty height has incremented", + // zap.Inline(k), + // zap.String("event_type", eventType), + // ) + // return false + //} msgProcessCache, ok := pathEnd.connProcessing[eventType] if !ok { // in progress cache does not exist for this eventType, so can send. diff --git a/relayer/processor/path_processor.go b/relayer/processor/path_processor.go index 3cc2668da..b492034c9 100644 --- a/relayer/processor/path_processor.go +++ b/relayer/processor/path_processor.go @@ -415,6 +415,22 @@ func (pp *PathProcessor) Run(ctx context.Context, cancel func()) { } if !pp.pathEnd1.inSync || !pp.pathEnd2.inSync { + var networkName string + var chainId string + + if !pp.pathEnd1.inSync { + chainId = pp.pathEnd1.info.ChainID + } + if !pp.pathEnd2.inSync { + chainId = pp.pathEnd2.info.ChainID + } + if chainId == "99999" { + networkName = "Avalanche" + } + if chainId == "ibcgo" { + networkName = "Cosmos" + } + pp.log.Debug(fmt.Sprintf("%s network is not synced", networkName)) continue } @@ -428,6 +444,8 @@ func (pp *PathProcessor) Run(ctx context.Context, cancel func()) { // process latest message cache state from both pathEnds if err := pp.processLatestMessages(ctx, cancel); err != nil { + pp.log.Error("Failed to process latest messages", zap.Error(err)) + // in case of IBC message send errors, schedule retry after durationErrorRetry if retryTimer != nil { retryTimer.Stop() diff --git a/relayer/processor/path_processor_internal.go b/relayer/processor/path_processor_internal.go index b78c579b1..6b2aaf70a 100644 --- a/relayer/processor/path_processor_internal.go +++ b/relayer/processor/path_processor_internal.go @@ -693,9 +693,21 @@ ClientICQLoop: // with the latest client state, which will be used for constructing MsgUpdateClient messages. func (pp *PathProcessor) updateClientTrustedState(src *pathEndRuntime, dst *pathEndRuntime) { if src.clientTrustedState.ClientState.ConsensusHeight.GTE(src.clientState.ConsensusHeight) { + pp.log.Debug("Current height already trusted", + zap.String("chain_id", src.info.ChainID), + zap.String("client_id", src.info.ClientID), + zap.Uint64("height", src.clientState.ConsensusHeight.RevisionHeight), + zap.Uint64("trusted_height", src.clientTrustedState.ClientState.ConsensusHeight.RevisionHeight), + ) // current height already trusted return } + pp.log.Debug("Current height not yet trusted", + zap.String("chain_id", src.info.ChainID), + zap.String("client_id", src.info.ClientID), + zap.Uint64("height", src.clientState.ConsensusHeight.RevisionHeight), + zap.Uint64("trusted_height", src.clientTrustedState.ClientState.ConsensusHeight.RevisionHeight), + ) // need to assemble new trusted state ibcHeader, ok := dst.ibcHeaderCache[src.clientState.ConsensusHeight.RevisionHeight+1] if !ok { diff --git a/relayer/strategies.go b/relayer/strategies.go index 274e38a2b..456e8870a 100644 --- a/relayer/strategies.go +++ b/relayer/strategies.go @@ -11,10 +11,11 @@ import ( "github.com/avast/retry-go/v4" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "go.uber.org/zap" + "github.com/cosmos/relayer/v2/relayer/chains/avalanche" "github.com/cosmos/relayer/v2/relayer/chains/cosmos" penumbraprocessor "github.com/cosmos/relayer/v2/relayer/chains/penumbra" "github.com/cosmos/relayer/v2/relayer/processor" - "go.uber.org/zap" ) // ActiveChannel represents an IBC channel and whether there is an active goroutine relaying packets against it. @@ -145,6 +146,8 @@ func (c *Chain) chainProcessor( return penumbraprocessor.NewPenumbraChainProcessor(log, p) case *cosmos.CosmosProvider: return cosmos.NewCosmosChainProcessor(log, p, metrics) + case *avalanche.AvalancheProvider: + return avalanche.NewAvalancheChainProcessor(log, p) default: panic(fmt.Errorf("unsupported chain provider type: %T", c.ChainProvider)) }